34 lines
1.4 KiB
C
34 lines
1.4 KiB
C
|
|
#ifndef _MMNGR_PHYS_H
|
|
#define _MMNGR_PHYS_H
|
|
|
|
#include <stdint.h>
|
|
#include <system.h>
|
|
|
|
|
|
#define pmmngr_load_PDBR(addr) write_cr3(addr)
|
|
#define pmmngr_get_PDBR() read_cr3()
|
|
|
|
// physical address
|
|
typedef unsigned physical_addr;
|
|
|
|
extern uint32_t read_cr0();
|
|
extern uint32_t read_cr3();
|
|
extern void write_cr0(uint32_t data);
|
|
extern void write_cr3(uint32_t data);
|
|
extern void pmmngr_free_block(void* address); // releases a memory block
|
|
extern void* pmmngr_alloc_block (); // allocates a single memory block
|
|
extern void pmmngr_init (size_t memSize, uint32_t stack); // initialize the physical memory manager
|
|
extern void pmmngr_init_region (physical_addr base, size_t size); // enables a physical memory region for use
|
|
extern void pmmngr_deinit_region (physical_addr base, size_t size); // disables a physical memory region as in use (unuseable)
|
|
extern size_t pmmngr_get_memory_size (); // returns amount of physical memory the manager is set to use
|
|
extern uint32_t pmmngr_get_use_block_count (); // returns number of blocks currently in use
|
|
extern uint32_t pmmngr_get_free_block_count (); // returns number of blocks not in use
|
|
extern uint32_t pmmngr_get_block_count (); // returns number of memory blocks
|
|
extern uint32_t pmmngr_get_block_size (); // returns default memory block size in bytes
|
|
extern void pmmngr_paging_enable (byte b); // enable or disable paging
|
|
extern byte pmmngr_is_paging (); // test if paging is enabled
|
|
|
|
extern byte pmmngr_test_block (uint32_t block);
|
|
#endif
|