1 #ifndef _METAG_PAGE_H 2 #define _METAG_PAGE_H 3 4 #include <linux/const.h> 5 6 #include <asm/metag_mem.h> 7 8 /* PAGE_SHIFT determines the page size */ 9 #if defined(CONFIG_PAGE_SIZE_4K) 10 #define PAGE_SHIFT 12 11 #elif defined(CONFIG_PAGE_SIZE_8K) 12 #define PAGE_SHIFT 13 13 #elif defined(CONFIG_PAGE_SIZE_16K) 14 #define PAGE_SHIFT 14 15 #endif 16 17 #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) 18 #define PAGE_MASK (~(PAGE_SIZE-1)) 19 20 #if defined(CONFIG_HUGETLB_PAGE_SIZE_8K) 21 # define HPAGE_SHIFT 13 22 #elif defined(CONFIG_HUGETLB_PAGE_SIZE_16K) 23 # define HPAGE_SHIFT 14 24 #elif defined(CONFIG_HUGETLB_PAGE_SIZE_32K) 25 # define HPAGE_SHIFT 15 26 #elif defined(CONFIG_HUGETLB_PAGE_SIZE_64K) 27 # define HPAGE_SHIFT 16 28 #elif defined(CONFIG_HUGETLB_PAGE_SIZE_128K) 29 # define HPAGE_SHIFT 17 30 #elif defined(CONFIG_HUGETLB_PAGE_SIZE_256K) 31 # define HPAGE_SHIFT 18 32 #elif defined(CONFIG_HUGETLB_PAGE_SIZE_512K) 33 # define HPAGE_SHIFT 19 34 #elif defined(CONFIG_HUGETLB_PAGE_SIZE_1M) 35 # define HPAGE_SHIFT 20 36 #elif defined(CONFIG_HUGETLB_PAGE_SIZE_2M) 37 # define HPAGE_SHIFT 21 38 #elif defined(CONFIG_HUGETLB_PAGE_SIZE_4M) 39 # define HPAGE_SHIFT 22 40 #endif 41 42 #ifdef CONFIG_HUGETLB_PAGE 43 # define HPAGE_SIZE (1UL << HPAGE_SHIFT) 44 # define HPAGE_MASK (~(HPAGE_SIZE-1)) 45 # define HUGETLB_PAGE_ORDER (HPAGE_SHIFT-PAGE_SHIFT) 46 /* 47 * We define our own hugetlb_get_unmapped_area so we don't corrupt 2nd level 48 * page tables with normal pages in them. 49 */ 50 # define HUGEPT_SHIFT (22) 51 # define HUGEPT_ALIGN (1 << HUGEPT_SHIFT) 52 # define HUGEPT_MASK (HUGEPT_ALIGN - 1) 53 # define ALIGN_HUGEPT(x) ALIGN(x, HUGEPT_ALIGN) 54 # define HAVE_ARCH_HUGETLB_UNMAPPED_AREA 55 #endif 56 57 #ifndef __ASSEMBLY__ 58 59 /* On the Meta, we would like to know if the address (heap) we have is 60 * in local or global space. 61 */ 62 #define is_global_space(addr) ((addr) > 0x7fffffff) 63 #define is_local_space(addr) (!is_global_space(addr)) 64 65 extern void clear_page(void *to); 66 extern void copy_page(void *to, void *from); 67 68 #define clear_user_page(page, vaddr, pg) clear_page(page) 69 #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) 70 71 /* 72 * These are used to make use of C type-checking.. 73 */ 74 typedef struct { unsigned long pte; } pte_t; 75 typedef struct { unsigned long pgd; } pgd_t; 76 typedef struct { unsigned long pgprot; } pgprot_t; 77 typedef struct page *pgtable_t; 78 79 #define pte_val(x) ((x).pte) 80 #define pgd_val(x) ((x).pgd) 81 #define pgprot_val(x) ((x).pgprot) 82 83 #define __pte(x) ((pte_t) { (x) }) 84 #define __pgd(x) ((pgd_t) { (x) }) 85 #define __pgprot(x) ((pgprot_t) { (x) }) 86 87 /* The kernel must now ALWAYS live at either 0xC0000000 or 0x40000000 - that 88 * being either global or local space. 89 */ 90 #define PAGE_OFFSET (CONFIG_PAGE_OFFSET) 91 92 #if PAGE_OFFSET >= LINGLOBAL_BASE 93 #define META_MEMORY_BASE LINGLOBAL_BASE 94 #define META_MEMORY_LIMIT LINGLOBAL_LIMIT 95 #else 96 #define META_MEMORY_BASE LINLOCAL_BASE 97 #define META_MEMORY_LIMIT LINLOCAL_LIMIT 98 #endif 99 100 /* Offset between physical and virtual mapping of kernel memory. */ 101 extern unsigned int meta_memoffset; 102 103 #define __pa(x) ((unsigned long)(((unsigned long)(x)) - meta_memoffset)) 104 #define __va(x) ((void *)((unsigned long)(((unsigned long)(x)) + meta_memoffset))) 105 106 extern unsigned long pfn_base; 107 #define ARCH_PFN_OFFSET (pfn_base) 108 #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) 109 #define page_to_virt(page) __va(page_to_pfn(page) << PAGE_SHIFT) 110 #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) 111 #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) 112 #ifdef CONFIG_FLATMEM 113 extern unsigned long max_pfn; 114 extern unsigned long min_low_pfn; 115 #define pfn_valid(pfn) ((pfn) >= min_low_pfn && (pfn) < max_pfn) 116 #endif 117 118 #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) 119 120 #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 121 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 122 123 #include <asm-generic/memory_model.h> 124 #include <asm-generic/getorder.h> 125 126 #endif /* __ASSMEBLY__ */ 127 128 #endif /* _METAG_PAGE_H */ 129