forked from PoliEcho-holding-org/kern
Added bitmap_t type and bmap_* functions & used them in PMM
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
#ifndef _BITMAP_H
|
||||
#define _BITMAP_H
|
||||
|
||||
#include <kernel.h>
|
||||
|
||||
#define BLOCK_SIZE 4096
|
||||
#define BMAP_NOT_FOUND ((size_t)-1)
|
||||
|
||||
typedef struct bitmap_t {
|
||||
void* map;
|
||||
size_t blocks; // Eqiv. to # of bits
|
||||
size_t bytes; // ceil(blocks / 8)
|
||||
size_t used; // # of bits set to 0
|
||||
int ready;
|
||||
} bitmap_t;
|
||||
|
||||
void bmap_set(bitmap_t* map, size_t bit, int val);
|
||||
int bmap_get(bitmap_t* map, size_t bit);
|
||||
void bmap_setarea(bitmap_t* map, size_t base, size_t len, int val);
|
||||
void bmap_setall(bitmap_t* map, int val);
|
||||
size_t bmap_findarea(bitmap_t* map, size_t len, int val);
|
||||
|
||||
#endif
|
||||
@@ -11,7 +11,9 @@
|
||||
#define USER_STACK 0xBF000000
|
||||
#define USER_SHARED 0xA0000000
|
||||
#define KERNEL_BASE 0xC0000000
|
||||
#define KERNEL_HEAP 0xD0000000
|
||||
#define KERNEL_SIZE 0x10000000
|
||||
#define KERNEL_MEM_BASE 0xD0000000
|
||||
#define KERNEL_MEM_SIZE 0x10000000
|
||||
#define KERNEL_SHARED 0xF0000000
|
||||
#define KERNEL_FRAMEBUF 0xC8000000
|
||||
|
||||
|
||||
@@ -1,17 +1,15 @@
|
||||
#ifndef _PMM_H
|
||||
#define _PMM_H
|
||||
|
||||
#include <multiboot.h>
|
||||
#include <bitmap.h>
|
||||
#include <kernel.h>
|
||||
|
||||
#define PMM_BS 4096 // Block Size
|
||||
#define PMM_BPB 8 // Blocks per byte
|
||||
|
||||
extern int pmm_ready;
|
||||
extern bitmap_t pmm_bitmap;
|
||||
|
||||
int pmm_init(void);
|
||||
void pmm_initRegion(size_t base, size_t len);
|
||||
void pmm_deinitRegion(size_t base, size_t len);
|
||||
void* pmm_alloc(size_t blockCount);
|
||||
void pmm_free(void* ptr, size_t blockCount);
|
||||
void* pmm_alloc(size_t len);
|
||||
void pmm_free(void* ptr, size_t len);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user