Line data Source code
1 0 : /*
2 : * Copyright (c) 2019 Intel Corporation
3 : * SPDX-License-Identifier: Apache-2.0
4 : */
5 :
6 : #ifndef ZEPHYR_INCLUDE_ARCH_X86_MEMMAP_H_
7 : #define ZEPHYR_INCLUDE_ARCH_X86_MEMMAP_H_
8 :
9 : #ifndef _ASMLANGUAGE
10 :
11 : /*
12 : * The "source" of the memory map refers to where we got the data to fill in
13 : * the map. Order is important: if multiple sources are available, then the
14 : * numerically HIGHEST source wins, a manually-provided map being the "best".
15 : */
16 :
17 0 : enum x86_memmap_source {
18 : X86_MEMMAP_SOURCE_DEFAULT,
19 : X86_MEMMAP_SOURCE_MULTIBOOT_MEM,
20 : X86_MEMMAP_SOURCE_MULTIBOOT_MMAP,
21 : X86_MEMMAP_SOURCE_MANUAL
22 : };
23 :
24 0 : extern enum x86_memmap_source x86_memmap_source;
25 :
26 : /*
27 : * For simplicity, we maintain a fixed-sized array of memory regions.
28 : *
29 : * We don't only track available RAM -- we track unavailable regions, too:
30 : * sometimes we'll be given a map with overlapping regions. We have to be
31 : * pessimistic about what is considered "available RAM" and it's easier to
32 : * keep all the regions around than it is to correct incorrect maps. It's
33 : * also handy to have the entire map intact for diagnostic purposes.
34 : */
35 :
36 0 : enum x86_memmap_entry_type {
37 : /*
38 : * the UNUSED entry must have a numerical 0 value, so
39 : * that partially-initialized arrays behave as expected.
40 : */
41 :
42 : X86_MEMMAP_ENTRY_UNUSED, /* this entry is unused/invalid */
43 : X86_MEMMAP_ENTRY_RAM, /* available RAM */
44 : X86_MEMMAP_ENTRY_ACPI, /* reserved for ACPI */
45 : X86_MEMMAP_ENTRY_NVS, /* preserve during hibernation */
46 : X86_MEMMAP_ENTRY_DEFECTIVE, /* bad memory modules */
47 : X86_MEMMAP_ENTRY_UNKNOWN /* unknown type, do not use */
48 : };
49 :
50 0 : struct x86_memmap_entry {
51 0 : uint64_t base;
52 0 : uint64_t length;
53 0 : enum x86_memmap_entry_type type;
54 : };
55 :
56 0 : extern struct x86_memmap_entry x86_memmap[];
57 :
58 : /*
59 : * We keep track of kernel memory areas (text, data, etc.) in a table for
60 : * ease of reference. There's really no reason to export this table, or to
61 : * label the members, except for diagnostic purposes.
62 : */
63 :
64 0 : struct x86_memmap_exclusion {
65 0 : char *name;
66 0 : void *start; /* address of first byte of exclusion */
67 0 : void *end; /* one byte past end of exclusion */
68 : };
69 :
70 0 : extern struct x86_memmap_exclusion x86_memmap_exclusions[];
71 0 : extern int x86_nr_memmap_exclusions;
72 :
73 : #endif /* _ASMLANGUAGE */
74 :
75 : #endif /* ZEPHYR_INCLUDE_ARCH_X86_MEMMAP_H_ */
|