Subversion Repositories HelenOS

Rev

Rev 3766 | Rev 3908 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3766 Rev 3777
Line 266... Line 266...
266
    v->present.ps = PAGE_WIDTH;
266
    v->present.ps = PAGE_WIDTH;
267
    v->present.key = 0;
267
    v->present.key = 0;
268
    v->present.tag.tag_word = tag;
268
    v->present.tag.tag_word = tag;
269
}
269
}
270
 
270
 
271
extern uintptr_t last_frame;
-
 
272
 
-
 
273
uintptr_t hw_map(uintptr_t physaddr, size_t size)
271
uintptr_t hw_map(uintptr_t physaddr, size_t size __attribute__ ((unused)))
274
{
272
{
275
    if (last_frame + ALIGN_UP(size, PAGE_SIZE) >
-
 
276
        KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH))
-
 
277
        panic("Unable to map physical memory %p (%d bytes)", physaddr,
-
 
278
            size)
-
 
279
   
-
 
280
    uintptr_t virtaddr = PA2KA(last_frame);
-
 
281
    pfn_t i;
-
 
282
    for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) {
-
 
283
        uintptr_t addr = PFN2ADDR(i);
273
    /* This is a dirty hack. */
284
        page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr,
-
 
285
            PAGE_NOT_CACHEABLE | PAGE_WRITE);
-
 
286
    }
-
 
287
   
-
 
288
    last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE);
-
 
289
   
-
 
290
    return virtaddr;
274
    return PA2KA(physaddr);
291
}
275
}
292
 
276
 
293
/** @}
277
/** @}
294
 */
278
 */