-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuddy.h
executable file
·48 lines (42 loc) · 1.52 KB
/
buddy.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#pragma once
#include"list.h"
#define LENGTH 1024*1024*128
#define MAX_ORDER 11
#define NULL 0
extern struct page *pages;
/*********************************************************/
typedef unsigned int uint_t;
typedef unsigned char uchar_t;
typedef unsigned long ulong_t;
typedef unsigned char * upchar_t;
/**************************************************/
struct free_area{
ListHead free_list;
ulong_t nr_free;
};
struct zone{
struct free_area free_area[MAX_ORDER];
ulong_t total_free;
ulong_t total;
uchar_t *map[MAX_ORDER];
};
struct page {
ListHead list;
};
#define PAGE_INDEX(page_addr) ((((ulong_t)page_addr) - (ulong_t)(pages))/sizeof(struct page))
#define PAGE_INDEX_ADDR(idx) ((idx)* (PAGE_SIZE))
#define ADDR_PAGE_INDEX(idx) ((idx)/ (PAGE_SIZE))
#define PAGE_SIZE (4096)
#define PAGEOFFSET (0xc0000000)
/***********************************************************/
void init_free_area(struct zone* p, ulong_t size);
void init_zone(struct zone* p, ulong_t size);
uchar_t *init_memory(ulong_t size);
void * kmalloc(struct zone* p, ulong_t size);
void set_bit(struct zone *p, ulong_t page_index, uint_t order);
void reset_bit(struct zone *p, ulong_t page_index, uint_t order);
uint_t get_bit(struct zone *p, ulong_t page_index, uint_t order);
void kfree(struct zone* p, ulong_t vm_addr, uint_t order);
bool has_buddy(struct zone * p, ulong_t buddy, uint_t order);
ulong_t find_buddy(ulong_t vm_addr, uint_t order);
struct page* find_page(struct zone * p, ulong_t buddy, uint_t order);