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 */ |
---|
17 | #define E820MAX 128 /* number of entries in E820MAP */ |
---|
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(struct e820entry *e820, int nr_map); |
---|
49 | extern void e820_print_map(char *who); |
---|
50 | extern int e820_any_mapped(unsigned long start, unsigned long end, unsigned type); |
---|
51 | extern int e820_all_mapped(unsigned long start, unsigned long end, unsigned type); |
---|
52 | |
---|
53 | extern void e820_bootmem_free(pg_data_t *pgdat, unsigned long start,unsigned long end); |
---|
54 | extern void e820_setup_gap(struct e820entry *e820, int nr_map); |
---|
55 | extern unsigned long e820_hole_size(unsigned long start_pfn, |
---|
56 | unsigned long end_pfn); |
---|
57 | |
---|
58 | extern void __init parse_memopt(char *p, char **end); |
---|
59 | extern void __init parse_memmapopt(char *p, char **end); |
---|
60 | |
---|
61 | extern struct e820map e820; |
---|
62 | |
---|
63 | extern unsigned ebda_addr, ebda_size; |
---|
64 | #endif/*!__ASSEMBLY__*/ |
---|
65 | |
---|
66 | #endif/*__E820_HEADER*/ |
---|