| /* |
| * Copyright (c) 2019 Intel Corporation |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_ARCH_X86_MEMMAP_H_ |
| #define ZEPHYR_INCLUDE_ARCH_X86_MEMMAP_H_ |
| |
| #ifndef _ASMLANGUAGE |
| |
| /* |
| * The "source" of the memory map refers to where we got the data to fill in |
| * the map. Order is important: if multiple sources are available, then the |
| * numerically HIGHEST source wins, a manually-provided map being the "best". |
| */ |
| |
| enum x86_memmap_source { |
| X86_MEMMAP_SOURCE_DEFAULT, |
| X86_MEMMAP_SOURCE_MULTIBOOT_MEM, |
| X86_MEMMAP_SOURCE_MULTIBOOT_MMAP, |
| X86_MEMMAP_SOURCE_MANUAL |
| }; |
| |
| extern enum x86_memmap_source x86_memmap_source; |
| |
| /* |
| * For simplicity, we maintain a fixed-sized array of memory regions. |
| * |
| * We don't only track available RAM -- we track unavailable regions, too: |
| * sometimes we'll be given a map with overlapping regions. We have to be |
| * pessimistic about what is considered "available RAM" and it's easier to |
| * keep all the regions around than it is to correct incorrect maps. It's |
| * also handy to have the entire map intact for diagnostic purposes. |
| */ |
| |
| enum x86_memmap_entry_type { |
| /* |
| * the UNUSED entry must have a numerical 0 value, so |
| * that partially-initialized arrays behave as expected. |
| */ |
| |
| X86_MEMMAP_ENTRY_UNUSED, /* this entry is unused/invalid */ |
| X86_MEMMAP_ENTRY_RAM, /* available RAM */ |
| X86_MEMMAP_ENTRY_ACPI, /* reserved for ACPI */ |
| X86_MEMMAP_ENTRY_NVS, /* preserve during hibernation */ |
| X86_MEMMAP_ENTRY_DEFECTIVE, /* bad memory modules */ |
| X86_MEMMAP_ENTRY_UNKNOWN /* unknown type, do not use */ |
| }; |
| |
| struct x86_memmap_entry { |
| uint64_t base; |
| uint64_t length; |
| enum x86_memmap_entry_type type; |
| }; |
| |
| extern struct x86_memmap_entry x86_memmap[]; |
| |
| /* |
| * We keep track of kernel memory areas (text, data, etc.) in a table for |
| * ease of reference. There's really no reason to export this table, or to |
| * label the members, except for diagnostic purposes. |
| */ |
| |
| struct x86_memmap_exclusion { |
| char *name; |
| void *start; /* address of first byte of exclusion */ |
| void *end; /* one byte past end of exclusion */ |
| }; |
| |
| extern struct x86_memmap_exclusion x86_memmap_exclusions[]; |
| extern int x86_nr_memmap_exclusions; |
| |
| #endif /* _ASMLANGUAGE */ |
| |
| #endif /* ZEPHYR_INCLUDE_ARCH_X86_MEMMAP_H_ */ |