| 1 | #ifndef meminit_h |
|---|
| 2 | #define meminit_h |
|---|
| 3 | |
|---|
| 4 | /* |
|---|
| 5 | * This file is subject to the terms and conditions of the GNU General Public |
|---|
| 6 | * License. See the file "COPYING" in the main directory of this archive |
|---|
| 7 | * for more details. |
|---|
| 8 | */ |
|---|
| 9 | |
|---|
| 10 | |
|---|
| 11 | /* |
|---|
| 12 | * Entries defined so far: |
|---|
| 13 | * - boot param structure itself |
|---|
| 14 | * - memory map |
|---|
| 15 | * - initrd (optional) |
|---|
| 16 | * - command line string |
|---|
| 17 | * - kernel code & data |
|---|
| 18 | * - Kernel memory map built from EFI memory map |
|---|
| 19 | * - xen start info |
|---|
| 20 | * |
|---|
| 21 | * More could be added if necessary |
|---|
| 22 | */ |
|---|
| 23 | #ifndef CONFIG_XEN |
|---|
| 24 | #define IA64_MAX_RSVD_REGIONS 6 |
|---|
| 25 | #else |
|---|
| 26 | #define IA64_MAX_RSVD_REGIONS 7 |
|---|
| 27 | #endif |
|---|
| 28 | |
|---|
| 29 | struct rsvd_region { |
|---|
| 30 | unsigned long start; /* virtual address of beginning of element */ |
|---|
| 31 | unsigned long end; /* virtual address of end of element + 1 */ |
|---|
| 32 | }; |
|---|
| 33 | |
|---|
| 34 | extern struct rsvd_region rsvd_region[IA64_MAX_RSVD_REGIONS + 1]; |
|---|
| 35 | extern int num_rsvd_regions; |
|---|
| 36 | |
|---|
| 37 | extern void find_memory (void); |
|---|
| 38 | extern void reserve_memory (void); |
|---|
| 39 | extern void find_initrd (void); |
|---|
| 40 | extern int filter_rsvd_memory (unsigned long start, unsigned long end, void *arg); |
|---|
| 41 | extern void efi_memmap_init(unsigned long *, unsigned long *); |
|---|
| 42 | |
|---|
| 43 | /* |
|---|
| 44 | * For rounding an address to the next IA64_GRANULE_SIZE or order |
|---|
| 45 | */ |
|---|
| 46 | #define GRANULEROUNDDOWN(n) ((n) & ~(IA64_GRANULE_SIZE-1)) |
|---|
| 47 | #define GRANULEROUNDUP(n) (((n)+IA64_GRANULE_SIZE-1) & ~(IA64_GRANULE_SIZE-1)) |
|---|
| 48 | #define ORDERROUNDDOWN(n) ((n) & ~((PAGE_SIZE<<MAX_ORDER)-1)) |
|---|
| 49 | |
|---|
| 50 | #ifdef CONFIG_NUMA |
|---|
| 51 | extern void call_pernode_memory (unsigned long start, unsigned long len, void *func); |
|---|
| 52 | #else |
|---|
| 53 | # define call_pernode_memory(start, len, func) (*func)(start, len, 0) |
|---|
| 54 | #endif |
|---|
| 55 | |
|---|
| 56 | #define IGNORE_PFN0 1 /* XXX fix me: ignore pfn 0 until TLB miss handler is updated... */ |
|---|
| 57 | |
|---|
| 58 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
|---|
| 59 | # define LARGE_GAP 0x40000000 /* Use virtual mem map if hole is > than this */ |
|---|
| 60 | extern unsigned long vmalloc_end; |
|---|
| 61 | extern struct page *vmem_map; |
|---|
| 62 | extern int find_largest_hole (u64 start, u64 end, void *arg); |
|---|
| 63 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); |
|---|
| 64 | extern int vmemmap_find_next_valid_pfn(int, int); |
|---|
| 65 | #else |
|---|
| 66 | static inline int vmemmap_find_next_valid_pfn(int node, int i) |
|---|
| 67 | { |
|---|
| 68 | return i + 1; |
|---|
| 69 | } |
|---|
| 70 | #endif |
|---|
| 71 | #endif /* meminit_h */ |
|---|