1 /*
2  * Copyright 2014, General Dynamics C4 Systems
3  *
4  * SPDX-License-Identifier: GPL-2.0-only
5  */
6 #pragma once
7 
8 /* Each architecture defines a set of constants in #defines. These
9  * constants describe the memory regions of the kernel's portion of the
10  * address space including the physical memory window, the kernel ELF
11  * region, and the device region.
12  *
13  *  - USER_TOP: The first address after the end of user memory
14  *
15  *  - PADDR_BASE: The first physical address mapped in the kernel's
16  *    physical memory window.
17  *  - PPTR_BASE: The first virtual address of the kernel's physical
18  *    memory window.
19  *  - PPTR_TOP: The first virtual address after the end of the kernel's
20  *    physical memory window.
21  *
22  *  - KERNEL_ELF_PADDR_BASE: The first physical address used to map the
23  *    initial kernel image. The kernel ELF is mapped contiguously
24  *    starting at this address.
25  *  - KERNEL_ELF_BASE: The first virtual address used to map the initial
26  *    kernel image.
27  *
28  *  - KDEV_BASE: The first virtual address used to map devices.
29  */
30 
31 /* The offset from a physical address to a virtual address in the
32  * physical memory window. */
33 #define PPTR_BASE_OFFSET (PPTR_BASE - PADDR_BASE)
34 
35 /* The last address in the physical memory region mapped into the
36  * physical memory window */
37 #define PADDR_TOP (PPTR_TOP - PPTR_BASE_OFFSET)
38 
39 /* The kernel base offset is a way to translate the kernel image segment
40  * from virtual to physical. This translation must be a single offset
41  * for for the entire segment (i.e. the kernel image must be contiguous
42  * both virtually and physically) */
43 #define KERNEL_ELF_BASE_OFFSET (KERNEL_ELF_BASE - KERNEL_ELF_PADDR_BASE)
44 
45 #ifndef __ASSEMBLER__
46 
47 /* This symbol is generated by the linker and marks the last valid
48  * address in the kernel's virtual region */
49 extern char ki_end[1];
50 #define KERNEL_ELF_TOP ((paddr_t)ki_end)
51 
52 /* This symbol is generated by the linker and marks the end of boot
53  * code/data in kernel image */
54 extern char ki_boot_end[1];
55 
56 
57 #endif /* __ASSEMBLER__ */
58 
59 #include <mode/hardware.h>
60