5 EXTENSION class Mem_layout
11 Host_as_size = Config::Host_as_size,
14 Host_as_base = 0xc0000000, // Base for AS calculations
15 Host_as_offset = Host_as_base - Host_as_size,
18 static Address pmem_size;
21 static Address physmem_offs asm ("PHYSMEM_OFFS");
24 INTERFACE[ux-!context_4k]:
26 EXTENSION class Mem_layout
30 /** Virtual memory layout for 2KB kernel thread context. */
33 Vmem_start = 0x20000000,
34 Glibc_mmap_start = 0x40000000, ///< fixed, Linux kernel spec.
35 Glibc_mmap_end = 0x50000000, ///< hoping that is enough
36 Slabs_start = 0x50000000, ///< multipage slabs
37 Slabs_end = 0x58000000,
38 Caps_start = 0x58000000,
39 Caps_end = 0x5f000000,
41 Tbuf_status_page = 0x5f002000, ///< % 4KB for jdb_tbuf
42 Tbuf_buffer_area = 0x5f200000, ///< % 2MB tracebuffer
43 Io_bitmap = 0x5f800000, ///< % 4MB dummy
44 _Free_1 = 0x5fc00000, ///< % 4MB dummy
45 Vmem_end = 0x60000000,
46 Physmem = Vmem_end, ///< % 4MB physical memory
47 Physmem_end = 0xa0000000 - Host_as_offset,
51 INTERFACE[ux-context_4k]:
53 EXTENSION class Mem_layout
57 /** Virtual memory layout for 4KB kernel thread context. */
60 Vmem_start = 0x20000000,
61 Slabs_start = 0x20000000, ///< multipage slabs
62 Slabs_end = 0x28000000,
63 Caps_start = 0x28000000,
64 Caps_end = 0x2f000000,
66 Tbuf_status_page = 0x2f002000, ///< % 4KB for jdb_tbuf
67 Tbuf_buffer_area = 0x2f200000, ///< % 2MB tracebuffer
68 Io_bitmap = 0x2f800000, ///< % 4MB dummy
69 Glibc_mmap_start = 0x40000000, ///< fixed, Linux kernel spec.
70 Glibc_mmap_end = 0x50000000, ///< hoping that is enough
71 Vmem_end = 0x90000000,
72 Physmem = Vmem_end, ///< % 4MB physical memory
73 Physmem_end = 0xb0000000 - Host_as_offset,
79 EXTENSION class Mem_layout
83 /** Virtuel memory layout -- user address space. */
86 User_max = 0xc0000000 - Host_as_offset,
87 Tbuf_ubuffer_area = 0xbfd00000 - Host_as_offset, ///< % 1MB size 2MB
88 Utcb_addr = 0xbff00000 - Host_as_offset, ///< % 4KB UTCB map address
89 Utcb_ptr_page_user = 0xbfff0000 - Host_as_offset, ///< % 4KB
90 Trampoline_page = 0xbfff1000 - Host_as_offset, ///< % 4KB
91 Kip_auto_map = 0xbfff2000 - Host_as_offset, ///< % 4KB
92 Tbuf_ustatus_page = 0xbfff3000 - Host_as_offset, ///< % 4KB
93 Space_index = 0xc0000000, ///< % 4MB v2
94 Kip_index = 0xc0800000, ///< % 4MB
95 Syscalls = 0xeacff000, ///< % 4KB syscall page
98 /** Physical memory layout. */
101 Kernel_start_frame = 0x1000, // Frame 0 special-cased by roottask
102 Trampoline_frame = 0x2000, // Trampoline Page
103 Utcb_ptr_frame = 0x3000, // UTCB pointer page
104 Sigstack_cpu0_start_frame = 0x4000, // Kernel Signal Altstack Start
105 Multiboot_frame = 0x10000, // Multiboot info + modules
106 Sigstack_log2_size = 15, // 32kb signal stack size
107 Sigstack_size = 1 << Sigstack_log2_size,
108 Sigstack_cpu0_end_frame = Sigstack_cpu0_start_frame // Kernel Signal Altstack End
110 Kernel_end_frame = Sigstack_cpu0_end_frame,
115 Utcb_ptr_page = Physmem + Utcb_ptr_frame
118 /// reflect symbols in linker script
119 static const char task_sighandler_start asm ("_task_sighandler_start");
120 static const char task_sighandler_end asm ("_task_sighandler_end");
122 static Address const kernel_trampoline_page;
127 Address Mem_layout::physmem_offs;
128 Address Mem_layout::pmem_size;
129 Address const Mem_layout::kernel_trampoline_page =
130 phys_to_pmem (Trampoline_frame);
135 Mem_layout::kphys_base (Address base)
137 physmem_offs = (Address)Physmem - base;
142 Mem_layout::pmem_to_phys (void *addr)
144 return (unsigned long)addr - Physmem;
149 Mem_layout::pmem_to_phys (Address addr)
151 return addr - Physmem;
156 Mem_layout::phys_to_pmem (Address addr)
158 return addr + Physmem;
163 Mem_layout::in_pmem (Address addr)
165 return (addr >= Physmem) && (addr < Physmem_end);