Rev 4223 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4223 | Rev 4277 | ||
---|---|---|---|
Line 60... | Line 60... | ||
60 | * @return Virtual address of the page where the device is mapped. |
60 | * @return Virtual address of the page where the device is mapped. |
61 | * |
61 | * |
62 | */ |
62 | */ |
63 | uintptr_t hw_map(uintptr_t physaddr, size_t size) |
63 | uintptr_t hw_map(uintptr_t physaddr, size_t size) |
64 | { |
64 | { |
65 | if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) |
- | |
66 | panic("Unable to map physical memory %p (%d bytes).", physaddr, size) |
- | |
67 | - | ||
68 | uintptr_t virtaddr = PA2KA(last_frame); |
- | |
69 | pfn_t i; |
- | |
70 | for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) { |
- | |
71 | uintptr_t addr = PFN2ADDR(i); |
- | |
72 | page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr, PAGE_NOT_CACHEABLE | PAGE_WRITE); |
- | |
73 | } |
- | |
74 | - | ||
75 | last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE); |
- | |
76 | - | ||
77 | return virtaddr; |
65 | return KA2PA(physaddr); |
78 | } |
66 | } |
79 | 67 | ||
80 | /** @} |
68 | /** @} |
81 | */ |
69 | */ |