10 //---------------------------------------------------------------------------
15 #include "kmem_space.h"
16 #include "pagetable.h"
17 #include "ram_quota.h"
20 void Kern_lib_page::init()
22 extern char kern_lib_start;
24 Pte pte = Kmem_space::kdir()->walk((void*)Kmem_space::Kern_lib_base,
25 Config::PAGE_SIZE, true, Ram_quota::root);
27 if (pte.lvl() == 0) // allocation of second level faild
29 panic("FATAL: Error mapping cpu page to %p\n",
30 (void*)Kmem_space::Kern_lib_base);
33 pte.set((Address)&kern_lib_start - Mem_layout::Map_base
34 + Mem_layout::Sdram_phys_base,
35 Config::PAGE_SIZE, Mem_page_attr(Page::USER_RO | Page::CACHEABLE), true);
39 //---------------------------------------------------------------------------
40 IMPLEMENTATION [arm && !armv6plus]:
47 // r0: memory reference
56 // return: always succeeds, new value
59 // r0: memory reference
71 // return result: 1 success, 0 failure
74 //---------------------------------------------------------------------------
75 IMPLEMENTATION [arm && armv6plus]:
81 // no restart through kernel entry code
84 // r0: memory reference
91 " strex r3, r2, [r0] \n"
96 // return: always succeeds, new value
100 // r0: memory reference
107 " strexeq r3, r2, [r0] \n"
112 // return result: 1 success, 0 failure