5 //----------------------------------------------------------------------------
6 IMPLEMENTATION[arm && armv5]:
8 PRIVATE static inline NOEXPORT NEEDS["types.h"]
10 Sys_call_page::set_utcb_get_code(Mword *sys_calls)
12 *(sys_calls++) = 0xe3e00a02; // mvn r0, #8192
13 *(sys_calls++) = 0xe5100fff; // ldr r0, [r0, -#4095]
14 *(sys_calls++) = 0xe1a0f00e; // mov pc, lr
17 //----------------------------------------------------------------------------
18 IMPLEMENTATION[arm && (armv6 || armv7)]:
20 PRIVATE static inline NOEXPORT NEEDS["types.h"]
22 Sys_call_page::set_utcb_get_code(Mword *sys_calls)
24 *(sys_calls++) = 0xee1d0f70; // mrc 15, 0, r0, cr13, cr0, {3}
25 *(sys_calls++) = 0xe1a0f00e; // mov pc, lr
28 //----------------------------------------------------------------------------
32 #include "kernel_task.h"
33 #include "mem_layout.h"
34 #include "vmem_alloc.h"
41 Mword *sys_calls = (Mword*)Mem_layout::Syscalls;
42 if (!Vmem_alloc::page_alloc(sys_calls,
43 Vmem_alloc::NO_ZERO_FILL, Vmem_alloc::User))
44 panic("FIASCO: can't allocate system-call page.\n");
46 for (unsigned i = 0; i < Config::PAGE_SIZE; i += sizeof(Mword))
47 *(sys_calls++) = 0xef000000; // svc
49 set_utcb_get_code((Mword*)(Mem_layout::Syscalls + 0xf00));
51 Kernel_task::kernel_task()
52 ->set_attributes(Mem_layout::Syscalls,
53 Mem_space::Page_cacheable | Mem_space::Page_user_accessible);
55 Mem_unit::flush_cache();