76 lines
2.2 KiB
C
76 lines
2.2 KiB
C
/*
|
|
* 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_ */
|