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