Loading...
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | #ifndef _ASM_X86_E820_H #define _ASM_X86_E820_H #define E820MAX 128 /* number of entries in E820MAP */ #ifdef __ASSEMBLY__ #define E820_RAM 1 #define E820_RESERVED 2 #define E820_ACPI 3 #define E820_NVS 4 #define E820_UNUSABLE 5 #define E820_COUNT 6 /* Number of types */ #else #include <linux/types.h> /* Available e820 memory-region types */ enum e820_type { E820_RAM = 1, E820_RESERVED, E820_ACPI, E820_NVS, E820_UNUSABLE, E820_COUNT, }; struct e820_entry { __u64 addr; /* start of memory segment */ __u64 size; /* size of memory segment */ __u32 type; /* type of memory segment */ } __attribute__((packed)); #define ISA_START_ADDRESS 0xa0000 #define ISA_END_ADDRESS 0x100000 /** * Context to use for e820_add() * * @entries: Table being filled in * @addr: Current address we are up to * @count: Number of entries added to @entries so far * @max_entries: Maximum number of entries allowed */ struct e820_ctx { struct e820_entry *entries; u64 addr; int count; int max_entries; }; /** * e820_init() - Start setting up an e820 table * * @ctx: Context to set up * @entries: Place to put entries * @max_entries: Maximum size of @entries */ void e820_init(struct e820_ctx *ctx, struct e820_entry *entries, int max_entries); /** * e820_add() - Add an entry to the table * * @ctx: Context * @type: Type of entry * @addr: Start address of entry * @size Size of entry */ void e820_add(struct e820_ctx *ctx, enum e820_type type, u64 addr, u64 size); /** * e820_to_addr() - Add an entry that covers the space up to a given address * * @ctx: Context * @type: Type of entry * @end_addr: Address where the entry should finish */ void e820_to_addr(struct e820_ctx *ctx, enum e820_type type, u64 end_addr); /** * e820_next() - Add an entry that carries on from the last one * * @ctx: Context * @type: Type of entry * @size Size of entry */ void e820_next(struct e820_ctx *ctx, enum e820_type type, u64 size); /** * e820_finish() - Finish the table * * Checks the table is not too large, panics if so * * @ctx: Context * Returns: Number of entries */ int e820_finish(struct e820_ctx *ctx); /* Implementation-defined function to install an e820 map */ unsigned int install_e820_map(unsigned int max_entries, struct e820_entry *); /** * e820_dump() - Dump the e820 table * * @entries: Pointer to start of table * @count: Number of entries in the table */ void e820_dump(struct e820_entry *entries, uint count); /** * cb_install_e820_map() - Install e820 map provided by coreboot sysinfo * * This should be used when booting from coreboot, since in that case the * memory areas are provided by coreboot in its sysinfo. * * @max_entries: Maximum number of entries to write * @entries: Place to put entires * Return: number of entries written */ unsigned int cb_install_e820_map(unsigned int max_entries, struct e820_entry *entries); /** * e820_dump() - Dump an e820 table * * @entries: Pointer to first entry * @count: Number of entries in the table */ void e820_dump(struct e820_entry *entries, uint count); #endif /* __ASSEMBLY__ */ #endif /* _ASM_X86_E820_H */ |