0001
0002
0003
0004
0005
0006
0007 #ifndef __UM_PAGE_H
0008 #define __UM_PAGE_H
0009
0010 #include <linux/const.h>
0011
0012
0013 #define PAGE_SHIFT 12
0014 #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT)
0015 #define PAGE_MASK (~(PAGE_SIZE-1))
0016
0017 #ifndef __ASSEMBLY__
0018
0019 struct page;
0020
0021 #include <linux/pfn.h>
0022 #include <linux/types.h>
0023 #include <asm/vm-flags.h>
0024
0025
0026
0027
0028
0029 #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
0030 #define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE)
0031
0032 #define clear_user_page(page, vaddr, pg) clear_page(page)
0033 #define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
0034
0035 #if defined(CONFIG_3_LEVEL_PGTABLES) && !defined(CONFIG_64BIT)
0036
0037 typedef struct { unsigned long pte; } pte_t;
0038 typedef struct { unsigned long pmd; } pmd_t;
0039 typedef struct { unsigned long pgd; } pgd_t;
0040 #define pte_val(p) ((p).pte)
0041
0042 #define pte_get_bits(p, bits) ((p).pte & (bits))
0043 #define pte_set_bits(p, bits) ((p).pte |= (bits))
0044 #define pte_clear_bits(p, bits) ((p).pte &= ~(bits))
0045 #define pte_copy(to, from) ({ (to).pte = (from).pte; })
0046 #define pte_is_zero(p) (!((p).pte & ~_PAGE_NEWPAGE))
0047 #define pte_set_val(p, phys, prot) \
0048 ({ (p).pte = (phys) | pgprot_val(prot); })
0049
0050 #define pmd_val(x) ((x).pmd)
0051 #define __pmd(x) ((pmd_t) { (x) } )
0052
0053 typedef unsigned long long phys_t;
0054
0055 #else
0056
0057 typedef struct { unsigned long pte; } pte_t;
0058 typedef struct { unsigned long pgd; } pgd_t;
0059
0060 #ifdef CONFIG_3_LEVEL_PGTABLES
0061 typedef struct { unsigned long pmd; } pmd_t;
0062 #define pmd_val(x) ((x).pmd)
0063 #define __pmd(x) ((pmd_t) { (x) } )
0064 #endif
0065
0066 #define pte_val(x) ((x).pte)
0067
0068
0069 #define pte_get_bits(p, bits) ((p).pte & (bits))
0070 #define pte_set_bits(p, bits) ((p).pte |= (bits))
0071 #define pte_clear_bits(p, bits) ((p).pte &= ~(bits))
0072 #define pte_copy(to, from) ((to).pte = (from).pte)
0073 #define pte_is_zero(p) (!((p).pte & ~_PAGE_NEWPAGE))
0074 #define pte_set_val(p, phys, prot) (p).pte = (phys | pgprot_val(prot))
0075
0076 typedef unsigned long phys_t;
0077
0078 #endif
0079
0080 typedef struct { unsigned long pgprot; } pgprot_t;
0081
0082 typedef struct page *pgtable_t;
0083
0084 #define pgd_val(x) ((x).pgd)
0085 #define pgprot_val(x) ((x).pgprot)
0086
0087 #define __pte(x) ((pte_t) { (x) } )
0088 #define __pgd(x) ((pgd_t) { (x) } )
0089 #define __pgprot(x) ((pgprot_t) { (x) } )
0090
0091 extern unsigned long uml_physmem;
0092
0093 #define PAGE_OFFSET (uml_physmem)
0094 #define KERNELBASE PAGE_OFFSET
0095
0096 #define __va_space (8*1024*1024)
0097
0098 #include <mem.h>
0099
0100
0101
0102
0103
0104
0105 #define __pa(virt) uml_to_phys((void *) (unsigned long) (virt))
0106 #define __va(phys) uml_to_virt((unsigned long) (phys))
0107
0108 #define phys_to_pfn(p) ((p) >> PAGE_SHIFT)
0109 #define pfn_to_phys(pfn) PFN_PHYS(pfn)
0110
0111 #define pfn_valid(pfn) ((pfn) < max_mapnr)
0112 #define virt_addr_valid(v) pfn_valid(phys_to_pfn(__pa(v)))
0113
0114 #include <asm-generic/memory_model.h>
0115 #include <asm-generic/getorder.h>
0116
0117 #endif
0118
0119 #ifdef CONFIG_X86_32
0120 #define __HAVE_ARCH_GATE_AREA 1
0121 #endif
0122
0123 #endif