Rev 4140 | Rev 4223 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4140 | Rev 4220 | ||
|---|---|---|---|
| Line 60... | Line 60... | ||
| 60 | * |
60 | * |
| 61 | * @return Virtual address of the page where the device is mapped. |
61 | * @return Virtual address of the page where the device is mapped. |
| 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 | ||
| 65 | return PA2KA(physaddr); |
77 | return virtaddr; |
| 66 | } |
78 | } |
| 67 | 79 | ||
| 68 | /** @} |
80 | /** @} |
| 69 | */ |
81 | */ |