You need to look in mm/vmalloc.c: Here's a quote of a comment:
>/*
> * Remap an arbitrary physical address space into the kernel virtual
> * address space. Needed when the kernel wants to access high addresses
> * directly.
> */
That sounds exactly like what you need.
The function in question is called vremap().
>void * vremap(unsigned long offset, unsigned long size)
Simply call it with the offset in question and the size of
the area. It will return an address in kernel virtual
memory that is mapped to that physical address. size will
be rounded up, if necessary, to the next page boundary,
and offset is required (if I read the code correctly) on
a page boundary, i.e. (offset % PAGE_SIZE == 0) is true.
Enjoy!
michaelkjohnson