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_PGTABLE_2LEVEL_H 9 #define __ASM_AVR32_PGTABLE_2LEVEL_H 10 11 #include <asm-generic/pgtable-nopmd.h> 12 13 /* 14 * Traditional 2-level paging structure 15 */ 16 #define PGDIR_SHIFT 22 17 #define PTRS_PER_PGD 1024 18 19 #define PTRS_PER_PTE 1024 20 21 #ifndef __ASSEMBLY__ 22 #define pte_ERROR(e) \ 23 printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) 24 #define pgd_ERROR(e) \ 25 printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) 26 27 /* 28 * Certain architectures need to do special things when PTEs 29 * within a page table are directly modified. Thus, the following 30 * hook is made available. 31 */ 32 #define set_pte(pteptr, pteval) (*(pteptr) = pteval) 33 #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep, pteval) 34 35 /* 36 * (pmds are folded into pgds so this doesn't get actually called, 37 * but the define is needed for a generic inline function.) 38 */ 39 #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) 40 41 #define pte_pfn(x) ((unsigned long)(((x).pte >> PAGE_SHIFT))) 42 #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) 43 #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) 44 45 #endif /* !__ASSEMBLY__ */ 46 47 #endif /* __ASM_AVR32_PGTABLE_2LEVEL_H */ 48