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 <asm/cacheflush.h>
   7
   8#ifdef CONFIG_HIGHMEM
   9
  10extern struct page *highmem_start_page;
  11
  12#include <asm/highmem.h>
  13
  14/* declarations for linux/mm/highmem.c */
  15unsigned int nr_free_highpages(void);
  16
  17extern void check_highmem_ptes(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) { return page_address(page); }
  24
  25#define kunmap(page) do { } while (0)
  26
  27#define kmap_atomic(page,idx)           kmap(page)
  28#define kunmap_atomic(page,idx)         kunmap(page)
  29
  30#endif /* CONFIG_HIGHMEM */
  31
  32/* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */
  33static inline void clear_user_highpage(struct page *page, unsigned long vaddr)
  34{
  35        void *addr = kmap_atomic(page, KM_USER0);
  36        clear_user_page(addr, vaddr, page);
  37        kunmap_atomic(addr, KM_USER0);
  38}
  39
  40static inline void clear_highpage(struct page *page)
  41{
  42        void *kaddr = kmap_atomic(page, KM_USER0);
  43        clear_page(kaddr);
  44        kunmap_atomic(kaddr, KM_USER0);
  45}
  46
  47/*
  48 * Same but also flushes aliased cache contents to RAM.
  49 */
  50static inline void memclear_highpage_flush(struct page *page, unsigned int offset, unsigned int size)
  51{
  52        void *kaddr;
  53
  54        if (offset + size > PAGE_SIZE)
  55                BUG();
  56
  57        kaddr = kmap_atomic(page, KM_USER0);
  58        memset((char *)kaddr + offset, 0, size);
  59        flush_dcache_page(page);
  60        flush_page_to_ram(page);
  61        kunmap_atomic(kaddr, KM_USER0);
  62}
  63
  64static inline void copy_user_highpage(struct page *to, struct page *from, unsigned long vaddr)
  65{
  66        char *vfrom, *vto;
  67
  68        vfrom = kmap_atomic(from, KM_USER0);
  69        vto = kmap_atomic(to, KM_USER1);
  70        copy_user_page(vto, vfrom, vaddr, to);
  71        kunmap_atomic(vfrom, KM_USER0);
  72        kunmap_atomic(vto, KM_USER1);
  73}
  74
  75#endif /* _LINUX_HIGHMEM_H */
  76
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.