- pre3:
[davej-history.git] / include / linux / highmem.h
bloba804348231e2c55710224b0cf0a13f03287dc60f
1 #ifndef _LINUX_HIGHMEM_H
2 #define _LINUX_HIGHMEM_H
4 #include <linux/config.h>
5 #include <asm/pgalloc.h>
7 #ifdef CONFIG_HIGHMEM
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)
40 unsigned long kaddr;
42 kaddr = kmap(page);
43 clear_user_page((void *)kaddr, vaddr);
44 kunmap(page);
47 static inline void clear_highpage(struct page *page)
49 unsigned long kaddr;
51 kaddr = kmap(page);
52 clear_page((void *)kaddr);
53 kunmap(page);
56 static inline void memclear_highpage(struct page *page, unsigned int offset, unsigned int size)
58 unsigned long kaddr;
60 if (offset + size > PAGE_SIZE)
61 BUG();
62 kaddr = kmap(page);
63 memset((void *)(kaddr + offset), 0, size);
64 kunmap(page);
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)
72 unsigned long kaddr;
74 if (offset + size > PAGE_SIZE)
75 BUG();
76 kaddr = kmap(page);
77 memset((void *)(kaddr + offset), 0, size);
78 flush_page_to_ram(page);
79 kunmap(page);
82 static inline void copy_user_highpage(struct page *to, struct page *from, unsigned long vaddr)
84 unsigned long vfrom, vto;
86 vfrom = kmap(from);
87 vto = kmap(to);
88 copy_user_page((void *)vto, (void *)vfrom, vaddr);
89 kunmap(from);
90 kunmap(to);
93 static inline void copy_highpage(struct page *to, struct page *from)
95 unsigned long vfrom, vto;
97 vfrom = kmap(from);
98 vto = kmap(to);
99 copy_page((void *)vto, (void *)vfrom);
100 kunmap(from);
101 kunmap(to);
104 #endif /* _LINUX_HIGHMEM_H */