Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
include
asm
e820.h
Go to the documentation of this file.
1
#ifndef _ASM_X86_E820_H
2
#define _ASM_X86_E820_H
3
#define E820MAP 0x2d0
/* our map */
4
#define E820MAX 128
/* number of entries in E820MAP */
5
6
/*
7
* Legacy E820 BIOS limits us to 128 (E820MAX) nodes due to the
8
* constrained space in the zeropage. If we have more nodes than
9
* that, and if we've booted off EFI firmware, then the EFI tables
10
* passed us from the EFI firmware can list more nodes. Size our
11
* internal memory map tables to have room for these additional
12
* nodes, based on up to three entries per node for which the
13
* kernel was built: MAX_NUMNODES == (1 << CONFIG_NODES_SHIFT),
14
* plus E820MAX, allowing space for the possible duplicate E820
15
* entries that might need room in the same arrays, prior to the
16
* call to sanitize_e820_map() to remove duplicates. The allowance
17
* of three memory map entries per node is "enough" entries for
18
* the initial hardware platform motivating this mechanism to make
19
* use of additional EFI map entries. Future platforms may want
20
* to allow more than three entries per node or otherwise refine
21
* this size.
22
*/
23
24
/*
25
* Odd: 'make headers_check' complains about numa.h if I try
26
* to collapse the next two #ifdef lines to a single line:
27
* #if defined(__KERNEL__) && defined(CONFIG_EFI)
28
*/
29
#ifdef __KERNEL__
30
#ifdef CONFIG_EFI
31
#include <
linux/numa.h
>
32
#define E820_X_MAX (E820MAX + 3 * MAX_NUMNODES)
33
#else
/* ! CONFIG_EFI */
34
#define E820_X_MAX E820MAX
35
#endif
36
#else
/* ! __KERNEL__ */
37
#define E820_X_MAX E820MAX
38
#endif
39
40
#define E820NR 0x1e8
/* # entries in E820MAP */
41
42
#define E820_RAM 1
43
#define E820_RESERVED 2
44
#define E820_ACPI 3
45
#define E820_NVS 4
46
#define E820_UNUSABLE 5
47
48
/*
49
* reserved RAM used by kernel itself
50
* if CONFIG_INTEL_TXT is enabled, memory of this type will be
51
* included in the S3 integrity calculation and so should not include
52
* any memory that BIOS might alter over the S3 transition
53
*/
54
#define E820_RESERVED_KERN 128
55
56
#ifndef __ASSEMBLY__
57
#include <linux/types.h>
58
struct
e820entry
{
59
__u64
addr
;
/* start of memory segment */
60
__u64
size
;
/* size of memory segment */
61
__u32
type
;
/* type of memory segment */
62
}
__attribute__
((packed));
63
64
struct
e820map
{
65
__u32
nr_map
;
66
struct
e820entry
map
[
E820_X_MAX
];
67
};
68
69
#define ISA_START_ADDRESS 0xa0000
70
#define ISA_END_ADDRESS 0x100000
71
72
#define BIOS_BEGIN 0x000a0000
73
#define BIOS_END 0x00100000
74
75
#define BIOS_ROM_BASE 0xffe00000
76
#define BIOS_ROM_END 0xffffffff
77
78
#ifdef __KERNEL__
79
/* see comment in arch/x86/kernel/e820.c */
80
extern
struct
e820map
e820
;
81
extern
struct
e820map
e820_saved
;
82
83
extern
unsigned
long
pci_mem_start
;
84
extern
int
e820_any_mapped
(
u64
start
,
u64
end
,
unsigned
type
);
85
extern
int
e820_all_mapped
(
u64
start
,
u64
end
,
unsigned
type
);
86
extern
void
e820_add_region
(
u64
start
,
u64
size
,
int
type
);
87
extern
void
e820_print_map
(
char
*who);
88
extern
int
89
sanitize_e820_map
(
struct
e820entry
*biosmap,
int
max_nr_map,
u32
*pnr_map);
90
extern
u64
e820_update_range
(
u64
start
,
u64
size
,
unsigned
old_type,
91
unsigned
new_type);
92
extern
u64
e820_remove_range
(
u64
start
,
u64
size
,
unsigned
old_type,
93
int
checktype);
94
extern
void
update_e820
(
void
);
95
extern
void
e820_setup_gap
(
void
);
96
extern
int
e820_search_gap
(
unsigned
long
*gapstart,
unsigned
long
*gapsize,
97
unsigned
long
start_addr
,
unsigned
long
long
end_addr);
98
struct
setup_data
;
99
extern
void
parse_e820_ext
(
struct
setup_data
*
data
);
100
101
#if defined(CONFIG_X86_64) || \
102
(defined(CONFIG_X86_32) && defined(CONFIG_HIBERNATION))
103
extern
void
e820_mark_nosave_regions(
unsigned
long
limit_pfn);
104
#else
105
static
inline
void
e820_mark_nosave_regions(
unsigned
long
limit_pfn)
106
{
107
}
108
#endif
109
110
#ifdef CONFIG_MEMTEST
111
extern
void
early_memtest
(
unsigned
long
start
,
unsigned
long
end
);
112
#else
113
static
inline
void
early_memtest
(
unsigned
long
start
,
unsigned
long
end
)
114
{
115
}
116
#endif
117
118
extern
unsigned
long
e820_end_of_ram_pfn
(
void
);
119
extern
unsigned
long
e820_end_of_low_ram_pfn
(
void
);
120
extern
u64
early_reserve_e820
(
u64
sizet,
u64
align
);
121
122
void
memblock_x86_fill
(
void
);
123
void
memblock_find_dma_reserve
(
void
);
124
125
extern
void
finish_e820_parsing
(
void
);
126
extern
void
e820_reserve_resources
(
void
);
127
extern
void
e820_reserve_resources_late
(
void
);
128
extern
void
setup_memory_map
(
void
);
129
extern
char
*
default_machine_specific_memory_setup
(
void
);
130
131
/*
132
* Returns true iff the specified range [s,e) is completely contained inside
133
* the ISA region.
134
*/
135
static
inline
bool
is_ISA_range(
u64
s
,
u64
e
)
136
{
137
return
s >=
ISA_START_ADDRESS
&& e <=
ISA_END_ADDRESS
;
138
}
139
140
#endif
/* __KERNEL__ */
141
#endif
/* __ASSEMBLY__ */
142
143
#ifdef __KERNEL__
144
#include <
linux/ioport.h
>
145
146
#define HIGH_MEMORY (1024*1024)
147
#endif
/* __KERNEL__ */
148
149
#endif
/* _ASM_X86_E820_H */
Generated on Thu Jan 10 2013 13:20:01 for Linux Kernel by
1.8.2