linux-bk/include/linux/highmem.h
<<
>>
Prefs
   1#ifndef _LINUX_HIGHMEM_H
   2#define _LINUX_HIGHMEM_H
   3
   4#include <linux/config.h>
   5#include <linux/fs.h>
   6#include <linux/mm.h>
   7
   8#include <asm/cacheflush.h>
   9
  10#ifdef CONFIG_HIGHMEM
  11
  12extern struct page *highmem_start_page;
  13
  14#include <asm/highmem.h>
  15
  16/* declarations for linux/mm/highmem.c */
  17unsigned int nr_free_highpages(void);
  18
  19#else /* CONFIG_HIGHMEM */
  20
  21static inline unsigned int nr_free_highpages(void) { return 0; }
  22
  23static inline void *kmap(struct page *page)
  24{
  25        might_sleep();
  26        return page_address(page);
  27}
  28
  29#define kunmap(page) do { (void) (page); } while (0)
  30
  31#define kmap_atomic(page, idx)          page_address(page)
  32#define kunmap_atomic(addr, idx)        do { } while (0)
  33#define kmap_atomic_to_page(ptr)        virt_to_page(ptr)
  34
  35#endif /* CONFIG_HIGHMEM */
  36
  37/* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */
  38static inline void clear_user_highpage(struct page *page, unsigned long vaddr)
  39{
  40        void *addr = kmap_atomic(page, KM_USER0);
  41        clear_user_page(addr, vaddr, page);
  42        kunmap_atomic(addr, KM_USER0);
  43}
  44
  45static inline void clear_highpage(struct page *page)
  46{
  47        void *kaddr = kmap_atomic(page, KM_USER0);
  48        clear_page(kaddr);
  49        kunmap_atomic(kaddr, KM_USER0);
  50}
  51
  52/*
  53 * Same but also flushes aliased cache contents to RAM.
  54 */
  55static inline void memclear_highpage_flush(struct page *page, unsigned int offset, unsigned int size)
  56{
  57        void *kaddr;
  58
  59        BUG_ON(offset + size > PAGE_SIZE);
  60
  61        kaddr = kmap_atomic(page, KM_USER0);
  62        memset((char *)kaddr + offset, 0, size);
  63        flush_dcache_page(page);
  64        kunmap_atomic(kaddr, KM_USER0);
  65}
  66
  67static inline void copy_user_highpage(struct page *to, struct page *from, unsigned long vaddr)
  68{
  69        char *vfrom, *vto;
  70
  71        vfrom = kmap_atomic(from, KM_USER0);
  72        vto = kmap_atomic(to, KM_USER1);
  73        copy_user_page(vto, vfrom, vaddr, to);
  74        kunmap_atomic(vfrom, KM_USER0);
  75        kunmap_atomic(vto, KM_USER1);
  76}
  77
  78static inline void copy_highpage(struct page *to, struct page *from)
  79{
  80        char *vfrom, *vto;
  81
  82        vfrom = kmap_atomic(from, KM_USER0);
  83        vto = kmap_atomic(to, KM_USER1);
  84        copy_page(vto, vfrom);
  85        kunmap_atomic(vfrom, KM_USER0);
  86        kunmap_atomic(vto, KM_USER1);
  87}
  88
  89#endif /* _LINUX_HIGHMEM_H */
  90
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.