Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * structures and definitions for the int 15, ax=e820 memory map | |
3 | * scheme. | |
4 | * | |
5 | * In a nutshell, setup.S populates a scratch table in the | |
6 | * empty_zero_block that contains a list of usable address/size | |
7 | * duples. setup.c, this information is transferred into the e820map, | |
8 | * and in init.c/numa.c, that new information is used to mark pages | |
9 | * reserved or not. | |
10 | */ | |
11 | #ifndef __E820_HEADER | |
12 | #define __E820_HEADER | |
13 | ||
14 | #include <linux/mmzone.h> | |
15 | ||
16 | #define E820MAP 0x2d0 /* our map */ | |
f9ba7053 | 17 | #define E820MAX 128 /* number of entries in E820MAP */ |
1da177e4 LT |
18 | #define E820NR 0x1e8 /* # entries in E820MAP */ |
19 | ||
20 | #define E820_RAM 1 | |
21 | #define E820_RESERVED 2 | |
22 | #define E820_ACPI 3 /* usable as RAM once ACPI tables have been read */ | |
23 | #define E820_NVS 4 | |
24 | ||
25 | #define HIGH_MEMORY (1024*1024) | |
26 | ||
27 | #define LOWMEMSIZE() (0x9f000) | |
28 | ||
29 | #ifndef __ASSEMBLY__ | |
30 | struct e820entry { | |
31 | u64 addr; /* start of memory segment */ | |
32 | u64 size; /* size of memory segment */ | |
33 | u32 type; /* type of memory segment */ | |
34 | } __attribute__((packed)); | |
35 | ||
36 | struct e820map { | |
37 | int nr_map; | |
38 | struct e820entry map[E820MAX]; | |
39 | }; | |
40 | ||
41 | extern unsigned long find_e820_area(unsigned long start, unsigned long end, | |
42 | unsigned size); | |
43 | extern void add_memory_region(unsigned long start, unsigned long size, | |
44 | int type); | |
45 | extern void setup_memory_region(void); | |
46 | extern void contig_e820_setup(void); | |
47 | extern unsigned long e820_end_of_ram(void); | |
48 | extern void e820_reserve_resources(void); | |
49 | extern void e820_print_map(char *who); | |
eee5a9fa | 50 | extern int e820_any_mapped(unsigned long start, unsigned long end, unsigned type); |
95222368 | 51 | extern int e820_all_mapped(unsigned long start, unsigned long end, unsigned type); |
1da177e4 LT |
52 | |
53 | extern void e820_bootmem_free(pg_data_t *pgdat, unsigned long start,unsigned long end); | |
a1e97782 | 54 | extern void e820_setup_gap(void); |
485761bd AK |
55 | extern unsigned long e820_hole_size(unsigned long start_pfn, |
56 | unsigned long end_pfn); | |
1da177e4 LT |
57 | |
58 | extern void __init parse_memopt(char *p, char **end); | |
69cda7b1 | 59 | extern void __init parse_memmapopt(char *p, char **end); |
1da177e4 LT |
60 | |
61 | extern struct e820map e820; | |
ac71d12c AK |
62 | |
63 | extern unsigned ebda_addr, ebda_size; | |
1da177e4 LT |
64 | #endif/*!__ASSEMBLY__*/ |
65 | ||
66 | #endif/*__E820_HEADER*/ |