mirror of
https://git.stationery.faith/corn/corn.git
synced 2024-11-14 04:22:07 +00:00
108 lines
2.4 KiB
C
108 lines
2.4 KiB
C
|
#pragma once
|
||
|
|
||
|
#include <stddef.h>
|
||
|
#include <stdint.h>
|
||
|
|
||
|
struct memory_segment {
|
||
|
uint64_t addr;
|
||
|
uint64_t len;
|
||
|
uint32_t type;
|
||
|
uint32_t reserved;
|
||
|
} __attribute__((packed));
|
||
|
|
||
|
struct memory_map {
|
||
|
uint32_t size;
|
||
|
uint32_t version;
|
||
|
struct memory_segment entries[];
|
||
|
} __attribute__((packed));
|
||
|
|
||
|
/**
|
||
|
* Initalize system memory allocator
|
||
|
*/
|
||
|
extern void memory_init(struct memory_map *map);
|
||
|
|
||
|
/**
|
||
|
* Disabled cpu interupts to not interfere with
|
||
|
* current memory allocations.
|
||
|
*/
|
||
|
extern void memory_lock(void);
|
||
|
|
||
|
/**
|
||
|
* Reenabled cpu interupts
|
||
|
*/
|
||
|
extern void memory_unlock(void);
|
||
|
|
||
|
/**
|
||
|
* @returns how much memory the system has
|
||
|
*/
|
||
|
extern uint64_t memory_total(void);
|
||
|
|
||
|
/**
|
||
|
* @returns how much memory is free
|
||
|
*/
|
||
|
extern uint64_t memory_free(void);
|
||
|
|
||
|
/**
|
||
|
* @returns how much memory is used
|
||
|
*/
|
||
|
extern uint64_t memory_used(void);
|
||
|
|
||
|
/**
|
||
|
* Allocates a single page in memory.
|
||
|
* @returns the page if allocated or NULL on failure
|
||
|
*/
|
||
|
extern void *alloc_page(void);
|
||
|
|
||
|
/**
|
||
|
* Allocats count pages in memory
|
||
|
* @param count - the number of continious pages to allocate
|
||
|
* @returns the pages if allocated or NULL on failure
|
||
|
*/
|
||
|
extern void *alloc_pages(int count);
|
||
|
|
||
|
/**
|
||
|
* Frees a single page in memory
|
||
|
* @param page - the pointer to the page
|
||
|
*/
|
||
|
extern void free_page(void *page);
|
||
|
|
||
|
/**
|
||
|
* Allocates at least len bytes of memory starting at
|
||
|
* physical address addr. Returned address can be
|
||
|
* any virtural address.
|
||
|
* @param addr - the physical address to map
|
||
|
* @param len - the minimum length to map
|
||
|
* @param writable - if this memory should be writable
|
||
|
* @param user - if this memory should be user writable
|
||
|
*/
|
||
|
extern void *mmap(void *addr, size_t len);
|
||
|
|
||
|
/**
|
||
|
* Unmaps mapped address from the mmap function
|
||
|
* @param addr - the address returned from mmap
|
||
|
* @param len - the length allocated
|
||
|
*/
|
||
|
extern void unmap(void *addr);
|
||
|
|
||
|
/**
|
||
|
* Allocates size_t bytes in memory
|
||
|
* @param size - the amount of bytes to allocate
|
||
|
* @retruns the address allocated or NULL on failure
|
||
|
*/
|
||
|
extern void *malloc(size_t size);
|
||
|
|
||
|
/**
|
||
|
* Reallocates a given allocated ptr to a new size of bytes in memory.
|
||
|
* If ptr is NULL it will allocate new memory.
|
||
|
* @param ptr - the pointer to reallocate
|
||
|
* @param size - the amount of bytes to set the pointer to
|
||
|
* @returns the address allocated or NULL on failure
|
||
|
*/
|
||
|
extern void *realloc(void *ptr, size_t size);
|
||
|
|
||
|
/**
|
||
|
* Frees a allocated pointer in memory
|
||
|
* @param ptr - the pointer to free
|
||
|
*/
|
||
|
extern void free(void *ptr);
|