7 EXTENSION class Mem_layout
12 /// Is the adapter memory in the kernel image super page?
13 Adap_in_kernel_image = FIASCO_IMAGE_PHYS_START < Config::SUPERPAGE_SIZE,
18 Utcb_addr = 0xffffffff8ff00000UL, ///< % 4kB UTCB map address
19 Kip_auto_map = 0xffffffff8fff2000UL, ///< % 4kB
20 User_max = 0x0000800000000000UL,
21 Slabs_start = 0xffffffffe0000000UL, ///< multipage slabs
22 Slabs_end = 0xffffffffea000000UL, ///< slabs_start + 160MB
24 Service_page = 0xffffffffeac00000UL, ///< % 4MB global mappings
25 Local_apic_page = Service_page + 0x0000, ///< % 4KB
26 Io_apic_page = Service_page + 0x1000, ///< % 4KB
27 Kmem_tmp_page_1 = Service_page + 0x2000, ///< % 4KB size 8KB
28 Kmem_tmp_page_2 = Service_page + 0x4000, ///< % 4KB size 8KB
29 Tbuf_status_page = Service_page + 0x6000, ///< % 4KB
30 Tbuf_ustatus_page = Tbuf_status_page,
31 Hpet_page = Service_page + 0x7000, ///< % 4KB
32 Jdb_bench_page = Service_page + 0x8000, ///< % 4KB
33 Utcb_ptr_page = Service_page + 0xfd000, ///< % 4KB
34 Utcb_ptr_offset = Utcb_ptr_page,
35 Idt = Service_page + 0xfe000, ///< % 4KB
36 Syscalls = Service_page + 0xff000, ///< % 4KB syscall page
37 Tbuf_buffer_area = Service_page + 0x200000, ///< % 2MB
38 Tbuf_ubuffer_area = Tbuf_buffer_area,
39 // 0xffffffffeb800000-0xfffffffffec000000 (8MB) free
40 ___free_1 = 0xffffffffec000000UL, ///< % 4MB
41 ___free_2 = 0xffffffffec400000UL, ///< % 4MB
42 ___free_3 = 0xffffffffec800000UL, ///< % 4MB
43 ___free_4 = 0xffffffffec880000UL, ///< % 4MB
44 Jdb_debug_start = 0xffffffffecc00000UL, ///< % 4MB JDB symbols/lines
45 Jdb_debug_end = 0xffffffffee000000UL, ///< % 4MB
46 // 0xffffffffee000000-0xffffffffef800000 (24MB) free
47 Kstatic = 0xffffffffef800000UL, ///< % 4MB Io_bitmap
48 Io_bitmap = 0xffffffffefc00000UL, ///< % 4MB
49 Vmem_end = 0xfffffffff0000000UL,
51 Kernel_image = FIASCO_IMAGE_VIRT_START,
52 Kernel_image_end = Kernel_image + Config::SUPERPAGE_SIZE,
54 Adap_image = Adap_in_kernel_image
56 : Kernel_image + Config::SUPERPAGE_SIZE,
58 Adap_vram_mda_beg = Adap_image + 0xb0000, ///< % 8KB video RAM MDA memory
59 Adap_vram_mda_end = Adap_image + 0xb8000,
60 Adap_vram_cga_beg = Adap_image + 0xb8000, ///< % 8KB video RAM CGA memory
61 Adap_vram_cga_end = Adap_image + 0xc0000,
63 Caps_start = 0xfffffffff0800000UL, ///< % 4MB
64 Caps_end = 0xfffffffffc400000UL, ///< % 4MB
65 Physmem = 0xfffffffffc400000UL, ///< % 4MB kernel memory
66 Kernel_end = 0xffffffffffffffffUL+1, ///< % end of address space
71 Kernel_image_offset = FIASCO_IMAGE_PHYS_OFFSET,
76 Kernel_image_phys = FIASCO_IMAGE_PHYS_START & Config::SUPERPAGE_MASK,
80 template < typename T > static T* boot_data (T const *addr);
82 static Address pmem_size;
84 static Address physmem_offs asm ("PHYSMEM_OFFS");
87 IMPLEMENTATION [amd64]:
92 Address Mem_layout::physmem_offs;
93 Address Mem_layout::pmem_size;
98 Mem_layout::kphys_base (Address base)
100 physmem_offs = (Address)Physmem - base;
103 PUBLIC static inline NEEDS[<cassert>]
105 Mem_layout::pmem_to_phys (Address addr)
107 assert (in_pmem(addr));
108 return addr - physmem_offs;
111 PUBLIC static inline NEEDS[<kdb_ke.h>]
113 Mem_layout::pmem_to_phys (const void *ptr)
115 Address addr = reinterpret_cast<Address>(ptr);
117 assert_kdb (in_pmem(addr));
118 return addr - physmem_offs;
123 Mem_layout::phys_to_pmem(Address addr)
125 return addr + physmem_offs;
130 Mem_layout::in_kernel_image(Address addr)
132 return addr >= Kernel_image && addr < Kernel_image_end;
137 Mem_layout::in_pmem(Address addr)
139 return addr >= Physmem;