Changeset d4673296 in mainline for kernel/generic/src/mm/km.c


Ignore:
Timestamp:
2012-01-27T21:12:25Z (12 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
adec5b45
Parents:
4dee0cb
Message:

Move hw_map() to km.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/mm/km.c

    r4dee0cb rd4673296  
    4646#include <debug.h>
    4747#include <arch.h>
     48#include <align.h>
     49#include <macros.h>
     50#include <bitops.h>
    4851
    4952static ra_arena_t *km_ni_arena;
     
    120123        ra_free(km_ni_arena, page, size);
    121124}
     125
     126uintptr_t hw_map(uintptr_t physaddr, size_t size)
     127{
     128        uintptr_t virtaddr;
     129        size_t asize;
     130        size_t align;
     131        pfn_t i;
     132
     133        asize = ALIGN_UP(size, PAGE_SIZE);
     134        align = ispwr2(size) ? size : (1U << (fnzb(size) + 1));
     135        virtaddr = km_page_alloc(asize, max(PAGE_SIZE, align));
     136
     137        page_table_lock(AS_KERNEL, true);
     138        for (i = 0; i < ADDR2PFN(asize); i++) {
     139                uintptr_t addr = PFN2ADDR(i);
     140                page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr,
     141                    PAGE_NOT_CACHEABLE | PAGE_WRITE);
     142        }
     143        page_table_unlock(AS_KERNEL, true);
     144       
     145        return virtaddr;
     146}
     147
    122148
    123149/** Unmap kernen non-identity page.
Note: See TracChangeset for help on using the changeset viewer.