diff options
Diffstat (limited to 'arch/avr32/include/asm/page.h')
-rw-r--r-- | arch/avr32/include/asm/page.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/arch/avr32/include/asm/page.h b/arch/avr32/include/asm/page.h new file mode 100644 index 00000000000..f805d1cb11b --- /dev/null +++ b/arch/avr32/include/asm/page.h | |||
@@ -0,0 +1,104 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2004-2006 Atmel Corporation | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | #ifndef __ASM_AVR32_PAGE_H | ||
9 | #define __ASM_AVR32_PAGE_H | ||
10 | |||
11 | #include <linux/const.h> | ||
12 | |||
13 | /* PAGE_SHIFT determines the page size */ | ||
14 | #define PAGE_SHIFT 12 | ||
15 | #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) | ||
16 | #define PAGE_MASK (~(PAGE_SIZE-1)) | ||
17 | #define PTE_MASK PAGE_MASK | ||
18 | |||
19 | #ifndef __ASSEMBLY__ | ||
20 | |||
21 | #include <asm/addrspace.h> | ||
22 | |||
23 | extern void clear_page(void *to); | ||
24 | extern void copy_page(void *to, void *from); | ||
25 | |||
26 | #define clear_user_page(page, vaddr, pg) clear_page(page) | ||
27 | #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) | ||
28 | |||
29 | /* | ||
30 | * These are used to make use of C type-checking.. | ||
31 | */ | ||
32 | typedef struct { unsigned long pte; } pte_t; | ||
33 | typedef struct { unsigned long pgd; } pgd_t; | ||
34 | typedef struct { unsigned long pgprot; } pgprot_t; | ||
35 | typedef struct page *pgtable_t; | ||
36 | |||
37 | #define pte_val(x) ((x).pte) | ||
38 | #define pgd_val(x) ((x).pgd) | ||
39 | #define pgprot_val(x) ((x).pgprot) | ||
40 | |||
41 | #define __pte(x) ((pte_t) { (x) }) | ||
42 | #define __pgd(x) ((pgd_t) { (x) }) | ||
43 | #define __pgprot(x) ((pgprot_t) { (x) }) | ||
44 | |||
45 | /* FIXME: These should be removed soon */ | ||
46 | extern unsigned long memory_start, memory_end; | ||
47 | |||
48 | /* Pure 2^n version of get_order */ | ||
49 | static inline int get_order(unsigned long size) | ||
50 | { | ||
51 | unsigned lz; | ||
52 | |||
53 | size = (size - 1) >> PAGE_SHIFT; | ||
54 | asm("clz %0, %1" : "=r"(lz) : "r"(size)); | ||
55 | return 32 - lz; | ||
56 | } | ||
57 | |||
58 | #endif /* !__ASSEMBLY__ */ | ||
59 | |||
60 | /* | ||
61 | * The hardware maps the virtual addresses 0x80000000 -> 0x9fffffff | ||
62 | * permanently to the physical addresses 0x00000000 -> 0x1fffffff when | ||
63 | * segmentation is enabled. We want to make use of this in order to | ||
64 | * minimize TLB pressure. | ||
65 | */ | ||
66 | #define PAGE_OFFSET (0x80000000UL) | ||
67 | |||
68 | /* | ||
69 | * ALSA uses virt_to_page() on DMA pages, which I'm not entirely sure | ||
70 | * is a good idea. Anyway, we can't simply subtract PAGE_OFFSET here | ||
71 | * in that case, so we'll have to mask out the three most significant | ||
72 | * bits of the address instead... | ||
73 | * | ||
74 | * What's the difference between __pa() and virt_to_phys() anyway? | ||
75 | */ | ||
76 | #define __pa(x) PHYSADDR(x) | ||
77 | #define __va(x) ((void *)(P1SEGADDR(x))) | ||
78 | |||
79 | #define MAP_NR(addr) (((unsigned long)(addr) - PAGE_OFFSET) >> PAGE_SHIFT) | ||
80 | |||
81 | #define phys_to_page(phys) (pfn_to_page(phys >> PAGE_SHIFT)) | ||
82 | #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) | ||
83 | |||
84 | #ifndef CONFIG_NEED_MULTIPLE_NODES | ||
85 | |||
86 | #define PHYS_PFN_OFFSET (CONFIG_PHYS_OFFSET >> PAGE_SHIFT) | ||
87 | |||
88 | #define pfn_to_page(pfn) (mem_map + ((pfn) - PHYS_PFN_OFFSET)) | ||
89 | #define page_to_pfn(page) ((unsigned long)((page) - mem_map) + PHYS_PFN_OFFSET) | ||
90 | #define pfn_valid(pfn) ((pfn) >= PHYS_PFN_OFFSET && (pfn) < (PHYS_PFN_OFFSET + max_mapnr)) | ||
91 | #endif /* CONFIG_NEED_MULTIPLE_NODES */ | ||
92 | |||
93 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) | ||
94 | #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) | ||
95 | |||
96 | #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ | ||
97 | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) | ||
98 | |||
99 | /* | ||
100 | * Memory above this physical address will be considered highmem. | ||
101 | */ | ||
102 | #define HIGHMEM_START 0x20000000UL | ||
103 | |||
104 | #endif /* __ASM_AVR32_PAGE_H */ | ||