Import 2.3.28
[davej-history.git] / include / linux / highmem.h
blob4e8e9822468184c5e86103cd5cd23c19f3fc5f1f
1 #ifndef _LINUX_HIGHMEM_H
2 #define _LINUX_HIGHMEM_H
4 #include <linux/config.h>
5 #include <linux/pagemap.h>
6 #include <asm/pgtable.h>
8 #ifdef CONFIG_HIGHMEM
10 extern struct page *highmem_start_page;
12 #include <asm/highmem.h>
14 /* declarations for linux/mm/highmem.c */
15 extern unsigned long highmem_mapnr;
16 FASTCALL(unsigned int nr_free_highpages(void));
18 extern struct page * prepare_highmem_swapout(struct page *);
19 extern struct page * replace_with_highmem(struct page *);
20 extern struct buffer_head * create_bounce(int rw, struct buffer_head * bh_orig);
22 #else /* CONFIG_HIGHMEM */
24 extern inline unsigned int nr_free_highpages(void) { return 0; }
25 #define prepare_highmem_swapout(page) page
26 #define replace_with_highmem(page) page
27 #define kmap(page) page_address(page)
28 #define kunmap(page) do { } while (0)
30 #endif /* CONFIG_HIGHMEM */
32 /* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */
33 extern inline void clear_highpage(struct page *page)
35 unsigned long kaddr;
37 kaddr = kmap(page);
38 clear_page((void *)kaddr);
39 kunmap(page);
42 extern inline void memclear_highpage(struct page *page, unsigned int offset, unsigned int size)
44 unsigned long kaddr;
46 if (offset + size > PAGE_SIZE)
47 BUG();
48 kaddr = kmap(page);
49 memset((void *)(kaddr + offset), 0, size);
50 kunmap(page);
54 * Same but also flushes aliased cache contents to RAM.
56 extern inline void memclear_highpage_flush(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 flush_page_to_ram(page);
65 kunmap(page);
68 extern inline void copy_highpage(struct page *to, struct page *from)
70 unsigned long vfrom, vto;
72 vfrom = kmap(from);
73 vto = kmap(to);
74 copy_page((void *)vto, (void *)vfrom);
75 kunmap(from);
76 kunmap(to);
79 #endif /* _LINUX_HIGHMEM_H */