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 // in-r0: memory reference
85 // return: always succeeds, old value
88 //---------------------------------------------------------------------------
89 IMPLEMENTATION [arm && armv6plus]:
95 // no restart through kernel entry code
98 // r0: memory reference
105 " strex r3, r2, [r0] \n"
110 // return: always succeeds, new value
114 // r0: memory reference
121 " strexeq r3, r2, [r0] \n"
126 // return result: 1 success, 0 failure
130 // in-r0: memory reference
136 " strex r3, r1, [r0] \n"
141 // return: always succeeds, old value