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 65extern void clear_page(void *to); 66extern 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 */ 74typedef struct { unsigned long pte; } pte_t; 75typedef struct { unsigned long pgd; } pgd_t; 76typedef struct { unsigned long pgprot; } pgprot_t; 77typedef 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. */ 101extern 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 106extern 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 113extern unsigned long max_pfn; 114extern 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