Rev 3386 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3386 | Rev 4153 | ||
---|---|---|---|
Line 49... | Line 49... | ||
49 | * 1:1 virtual-physical mapping is created in kernel address space. Mapping |
49 | * 1:1 virtual-physical mapping is created in kernel address space. Mapping |
50 | * for table with exception vectors is also created. |
50 | * for table with exception vectors is also created. |
51 | */ |
51 | */ |
52 | void page_arch_init(void) |
52 | void page_arch_init(void) |
53 | { |
53 | { |
54 | uintptr_t cur; |
- | |
55 | int flags; |
54 | int flags = PAGE_CACHEABLE; |
56 | - | ||
57 | page_mapping_operations = &pt_mapping_operations; |
55 | page_mapping_operations = &pt_mapping_operations; |
58 | 56 | ||
59 | flags = PAGE_CACHEABLE; |
57 | uintptr_t cur; |
60 | - | ||
61 | /* PA2KA(identity) mapping for all frames until last_frame */ |
58 | /* Kernel identity mapping */ |
62 | for (cur = 0; cur < last_frame; cur += FRAME_SIZE) { |
59 | for (cur = 0; cur < last_frame; cur += FRAME_SIZE) |
63 | page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags); |
60 | page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags); |
64 | } |
- | |
65 | 61 | ||
66 | /* create mapping for exception table at high offset */ |
62 | /* Create mapping for exception table at high offset */ |
67 | #ifdef HIGH_EXCEPTION_VECTORS |
63 | #ifdef HIGH_EXCEPTION_VECTORS |
68 | void *virtaddr = frame_alloc(ONE_FRAME, FRAME_KA); |
64 | void *virtaddr = frame_alloc(ONE_FRAME, FRAME_KA); |
69 | page_mapping_insert(AS_KERNEL, EXC_BASE_ADDRESS, KA2PA(virtaddr), flags); |
65 | page_mapping_insert(AS_KERNEL, EXC_BASE_ADDRESS, KA2PA(virtaddr), flags); |
70 | #else |
66 | #else |
71 | #error "Only high exception vector supported now" |
67 | #error "Only high exception vector supported now" |
Line 88... | Line 84... | ||
88 | */ |
84 | */ |
89 | uintptr_t hw_map(uintptr_t physaddr, size_t size) |
85 | uintptr_t hw_map(uintptr_t physaddr, size_t size) |
90 | { |
86 | { |
91 | if (last_frame + ALIGN_UP(size, PAGE_SIZE) > |
87 | if (last_frame + ALIGN_UP(size, PAGE_SIZE) > |
92 | KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) { |
88 | KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) { |
93 | panic("Unable to map physical memory %p (%d bytes)", |
89 | panic("Unable to map physical memory %p (%d bytes).", |
94 | physaddr, size) |
90 | physaddr, size) |
95 | } |
91 | } |
96 | 92 | ||
97 | uintptr_t virtaddr = PA2KA(last_frame); |
93 | uintptr_t virtaddr = PA2KA(last_frame); |
98 | pfn_t i; |
94 | pfn_t i; |