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 page
* prepare_highmem_swapout(struct page
*);
17 extern struct page
* replace_with_highmem(struct page
*);
18 extern struct buffer_head
* create_bounce(int rw
, struct buffer_head
* bh_orig
);
20 #else /* CONFIG_HIGHMEM */
22 extern inline unsigned int nr_free_highpages(void) { return 0; }
23 #define prepare_highmem_swapout(page) page
24 #define replace_with_highmem(page) page
26 static __inline__
unsigned long kmap(struct page
* page
) {
27 return (unsigned long) page_address(page
);
30 #define kunmap(page) do { } while (0)
32 #define kmap_atomic(page,idx) kmap(page)
33 #define kunmap_atomic(page,idx) kunmap(page)
35 #endif /* CONFIG_HIGHMEM */
37 /* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */
38 static inline void clear_user_highpage(struct page
*page
, unsigned long vaddr
)
43 clear_user_page((void *)kaddr
, vaddr
);
47 static inline void clear_highpage(struct page
*page
)
52 clear_page((void *)kaddr
);
56 static inline void memclear_highpage(struct page
*page
, unsigned int offset
, unsigned int size
)
60 if (offset
+ size
> PAGE_SIZE
)
63 memset((void *)(kaddr
+ offset
), 0, size
);
68 * Same but also flushes aliased cache contents to RAM.
70 static inline void memclear_highpage_flush(struct page
*page
, unsigned int offset
, unsigned int size
)
74 if (offset
+ size
> PAGE_SIZE
)
77 memset((void *)(kaddr
+ offset
), 0, size
);
78 flush_page_to_ram(page
);
82 static inline void copy_user_highpage(struct page
*to
, struct page
*from
, unsigned long vaddr
)
84 unsigned long vfrom
, vto
;
88 copy_user_page((void *)vto
, (void *)vfrom
, vaddr
);
93 static inline void copy_highpage(struct page
*to
, struct page
*from
)
95 unsigned long vfrom
, vto
;
99 copy_page((void *)vto
, (void *)vfrom
);
104 #endif /* _LINUX_HIGHMEM_H */