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