#ifndef _LINUX_HIGHMEM_H
#define _LINUX_HIGHMEM_H
#include <sys/param.h>
#include <uvm/uvm_extern.h>
#include <linux/uaccess.h>
#include <asm/pgtable.h>
void *kmap(struct vm_page *);
void kunmap_va(void *addr);
#define kmap_to_page(ptr) (ptr)
void *kmap_atomic_prot(struct vm_page *, pgprot_t);
void kunmap_atomic(void *);
static inline void *
kmap_atomic(struct vm_page *pg)
{
return kmap_atomic_prot(pg, PAGE_KERNEL);
}
static inline void *
kmap_local_page(struct vm_page *pg)
{
return kmap_atomic(pg);
}
static inline void *
kmap_local_page_try_from_panic(struct vm_page *pg)
{
return kmap_atomic(pg);
}
static inline void
kunmap_local(void *addr)
{
kunmap_atomic(addr);
}
static inline void
memcpy_from_page(char *dst, struct vm_page *page, size_t off, size_t len)
{
void *src = kmap_atomic(page);
memcpy(dst, src + off, len);
kunmap_atomic(src);
}
static inline void
memcpy_to_page(struct vm_page *page, size_t off, const char *src, size_t len)
{
char *dst = kmap_atomic(page);
memcpy(dst + off, src, len);
kunmap_atomic(dst);
}
#endif