#ifndef MEMORY_H #define MEMORY_H #include "paging.h" #define SECTION_SIZE (((uint32_t) 1) << 20) #define INTERRUPT_VECTOR_TABLE_START ((uint32_t) 0x0) #define STACK_START ((uint32_t) 0x4000) #define STACK_END ((uint32_t) 0x8000) extern char __end; extern char __start; #define KERNEL_START ((uint32_t) &__start) #define KERNEL_END ((uint32_t) &__end) // first 2^14 aligned address after the kernel #define TRANSLATION_TABLE_BASE \ (((KERNEL_END - (uint32_t) 1) & ~((uint32_t) 0x3fff)) \ + (uint32_t) 0x4000) #define TRANSLATION_TABLE_END \ (TRANSLATION_TABLE_BASE + (uint32_t) (4096 * 4)) #define LIBKERNEL_SECTION_START \ (((TRANSLATION_TABLE_END - (uint32_t) 1) & ~((uint32_t) 0xfffff)) \ + SECTION_SIZE) #define LIBKERNEL_SECTION_END \ (LIBKERNEL_SECTION_START + SECTION_SIZE) // section for libkernel is flat-mapped #define LIBKERNEL_SECTION_NUMBER (LIBKERNEL_SECTION_START >> 20) #define PRIVILEGED_MEMORY_END LIBKERNEL_SECTION_END #define UNPRIVILEGED_MEMORY_START PRIVILEGED_MEMORY_END #define UNPRIVILEGED_MEMORY_END \ (UNPRIVILEGED_MEMORY_START + SECTION_SIZE) #define PL0_SECTION_NUMBER ((uint32_t) 0b101010101010) #define PL0_SECTION_NUMBER_STR "0b101010101010" #define VIRTUAL_PL0_MEMORY_START (PL0_SECTION_NUMBER << 20) #endif // MEMORY_H