0001
0002
0003
0004
0005 #ifndef __ASM_ARC_PAGE_H
0006 #define __ASM_ARC_PAGE_H
0007
0008 #include <uapi/asm/page.h>
0009
0010 #ifdef CONFIG_ARC_HAS_PAE40
0011
0012 #define MAX_POSSIBLE_PHYSMEM_BITS 40
0013 #define PAGE_MASK_PHYS (0xff00000000ull | PAGE_MASK)
0014
0015 #else
0016
0017 #define MAX_POSSIBLE_PHYSMEM_BITS 32
0018 #define PAGE_MASK_PHYS PAGE_MASK
0019
0020 #endif
0021
0022 #ifndef __ASSEMBLY__
0023
0024 #define clear_page(paddr) memset((paddr), 0, PAGE_SIZE)
0025 #define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
0026 #define copy_page(to, from) memcpy((to), (from), PAGE_SIZE)
0027
0028 struct vm_area_struct;
0029 struct page;
0030
0031 #define __HAVE_ARCH_COPY_USER_HIGHPAGE
0032
0033 void copy_user_highpage(struct page *to, struct page *from,
0034 unsigned long u_vaddr, struct vm_area_struct *vma);
0035 void clear_user_page(void *to, unsigned long u_vaddr, struct page *page);
0036
0037 typedef struct {
0038 unsigned long pgd;
0039 } pgd_t;
0040
0041 #define pgd_val(x) ((x).pgd)
0042 #define __pgd(x) ((pgd_t) { (x) })
0043
0044 #if CONFIG_PGTABLE_LEVELS > 3
0045
0046 typedef struct {
0047 unsigned long pud;
0048 } pud_t;
0049
0050 #define pud_val(x) ((x).pud)
0051 #define __pud(x) ((pud_t) { (x) })
0052
0053 #endif
0054
0055 #if CONFIG_PGTABLE_LEVELS > 2
0056
0057 typedef struct {
0058 unsigned long pmd;
0059 } pmd_t;
0060
0061 #define pmd_val(x) ((x).pmd)
0062 #define __pmd(x) ((pmd_t) { (x) })
0063
0064 #endif
0065
0066 typedef struct {
0067 #ifdef CONFIG_ARC_HAS_PAE40
0068 unsigned long long pte;
0069 #else
0070 unsigned long pte;
0071 #endif
0072 } pte_t;
0073
0074 #define pte_val(x) ((x).pte)
0075 #define __pte(x) ((pte_t) { (x) })
0076
0077 typedef struct {
0078 unsigned long pgprot;
0079 } pgprot_t;
0080
0081 #define pgprot_val(x) ((x).pgprot)
0082 #define __pgprot(x) ((pgprot_t) { (x) })
0083 #define pte_pgprot(x) __pgprot(pte_val(x))
0084
0085 typedef struct page *pgtable_t;
0086
0087
0088
0089
0090
0091
0092
0093
0094 #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)
0095
0096
0097
0098
0099
0100
0101 #ifdef CONFIG_HIGHMEM
0102
0103 extern unsigned long arch_pfn_offset;
0104 #define ARCH_PFN_OFFSET arch_pfn_offset
0105
0106 extern int pfn_valid(unsigned long pfn);
0107 #define pfn_valid pfn_valid
0108
0109 #else
0110
0111 #define ARCH_PFN_OFFSET virt_to_pfn(CONFIG_LINUX_RAM_BASE)
0112 #define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr)
0113
0114 #endif
0115
0116
0117
0118
0119
0120
0121
0122
0123 #define __pa(vaddr) ((unsigned long)(vaddr))
0124 #define __va(paddr) ((void *)((unsigned long)(paddr)))
0125
0126 #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr))
0127 #define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr))
0128
0129
0130 #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC
0131
0132 #define WANT_PAGE_VIRTUAL 1
0133
0134 #include <asm-generic/memory_model.h> /* page_to_pfn, pfn_to_page */
0135 #include <asm-generic/getorder.h>
0136
0137 #endif
0138
0139 #endif