1 #ifndef _LINUX_HIGHMEM_H
2 #define _LINUX_HIGHMEM_H
4 #include <linux/config.h>
5 #include <asm/pgalloc.h>
9 extern struct page
*highmem_start_page
;
11 #include <asm/highmem.h>
13 /* declarations for linux/mm/highmem.c */
14 FASTCALL(unsigned int nr_free_highpages(void));
16 extern struct buffer_head
* create_bounce(int rw
, struct buffer_head
* bh_orig
);
19 static inline char *bh_kmap(struct buffer_head
*bh
)
21 return kmap(bh
->b_page
) + bh_offset(bh
);
24 static inline void bh_kunmap(struct buffer_head
*bh
)
29 #else /* CONFIG_HIGHMEM */
31 static inline unsigned int nr_free_highpages(void) { return 0; }
33 static inline void *kmap(struct page
*page
) { return page_address(page
); }
35 #define kunmap(page) do { } while (0)
37 #define kmap_atomic(page,idx) kmap(page)
38 #define kunmap_atomic(page,idx) kunmap(page)
40 #define bh_kmap(bh) ((bh)->b_data)
41 #define bh_kunmap(bh) do { } while (0);
43 #endif /* CONFIG_HIGHMEM */
45 /* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */
46 static inline void clear_user_highpage(struct page
*page
, unsigned long vaddr
)
48 clear_user_page(kmap(page
), vaddr
);
52 static inline void clear_highpage(struct page
*page
)
54 clear_page(kmap(page
));
58 static inline void memclear_highpage(struct page
*page
, unsigned int offset
, unsigned int size
)
62 if (offset
+ size
> PAGE_SIZE
)
65 memset(kaddr
+ offset
, 0, size
);
70 * Same but also flushes aliased cache contents to RAM.
72 static inline void memclear_highpage_flush(struct page
*page
, unsigned int offset
, unsigned int size
)
76 if (offset
+ size
> PAGE_SIZE
)
79 memset(kaddr
+ offset
, 0, size
);
80 flush_page_to_ram(page
);
84 static inline void copy_user_highpage(struct page
*to
, struct page
*from
, unsigned long vaddr
)
90 copy_user_page(vto
, vfrom
, vaddr
);
95 static inline void copy_highpage(struct page
*to
, struct page
*from
)
101 copy_page(vto
, vfrom
);
106 #endif /* _LINUX_HIGHMEM_H */