First commit, Vystem v0.1
This commit is contained in:
34
shelter/lib/include/memory/heap.h
Normal file
34
shelter/lib/include/memory/heap.h
Normal file
@@ -0,0 +1,34 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
#ifndef SH_LIB_HEAP_H
|
||||
#define SH_LIB_HEAP_H
|
||||
#include "memory/page.h"
|
||||
#include "memory/pba.h"
|
||||
#include "memory/pez/pez.h"
|
||||
#include "memory/pez/radix.h"
|
||||
#include "memory/slabs/slab_generic.h"
|
||||
#include "std/status.h"
|
||||
#include "std/type.h"
|
||||
// Heap structure
|
||||
typedef struct {
|
||||
sh_pez_PHYSICAL_PLANE *phys_plane;
|
||||
sh_pez_VIRTUAL_PLANE *virt_plane;
|
||||
sh_page_PAGE_TABLE_POOL *kernel_ptp;
|
||||
struct sh_slab_generic_SLAB_ALLOCATOR slabs_allocator[8];
|
||||
sh_pba_PAGE_BLOCK_ALLOCATOR pba[8];
|
||||
sh_radix_TREE alloc_size_tree;
|
||||
} sh_heap_KERNEL_HEAP;
|
||||
// Return default kernel heap
|
||||
sh_heap_KERNEL_HEAP *sh_heap_get_default_heap();
|
||||
// Load default kernel heap
|
||||
void sh_heap_load_default_heap(sh_heap_KERNEL_HEAP *heap);
|
||||
// Initialize heap structure, calling entity need to input manually all slabs allocator.
|
||||
SH_STATUS sh_heap_init_heap(sh_pez_PHYSICAL_PLANE *phys_plane,sh_pez_VIRTUAL_PLANE *virt_plane,sh_page_PAGE_TABLE_POOL *kernel_ptp,sh_heap_KERNEL_HEAP *kernel_heap);
|
||||
// Allocate a certain amount of pages from Pez physical backend
|
||||
SH_STATUS sh_heap_allocate_pages(sh_uint32 pages_count,sh_page_VIRTUAL_ADDRESS *address);
|
||||
// Free a allocated region of pages from the heap
|
||||
SH_STATUS sh_heap_free_pages(sh_page_VIRTUAL_ADDRESS va);
|
||||
// Allocate a certain object based on his size
|
||||
SH_STATUS sh_heap_allocate_object(sh_uint32 size_bytes,sh_page_VIRTUAL_ADDRESS *address);
|
||||
// Free a certain object based on his size
|
||||
SH_STATUS sh_heap_free_object(sh_page_VIRTUAL_ADDRESS va);
|
||||
#endif
|
||||
Reference in New Issue
Block a user