| 1 |
|
| 2 | |
| 3 | * Copyright (C) 2000, 2001, 2002 Jeff Dike ([email protected])
|
| 4 | * Copyright 2003 PathScale, Inc.
|
| 5 | * Derived from include/asm-i386/pgtable.h
|
| 6 |
|
| 7 |
|
| 8 | #ifndef __UM_PGTABLE_2LEVEL_H
|
| 9 | #define __UM_PGTABLE_2LEVEL_H
|
| 10 |
|
| 11 | #include <asm-generic/pgtable-nopmd.h>
|
| 12 |
|
| 13 |
|
| 14 |
|
| 15 | #define PGDIR_SHIFT 22
|
| 16 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT)
|
| 17 | #define PGDIR_MASK (~(PGDIR_SIZE-1))
|
| 18 |
|
| 19 | |
| 20 | * entries per page directory level: the i386 is two-level, so
|
| 21 | * we don't really have any PMD directory physically.
|
| 22 |
|
| 23 | #define PTRS_PER_PTE 1024
|
| 24 | #define USER_PTRS_PER_PGD ((TASK_SIZE + (PGDIR_SIZE - 1)) / PGDIR_SIZE)
|
| 25 | #define PTRS_PER_PGD 1024
|
| 26 |
|
| 27 | #define pte_ERROR(e) \
|
| 28 | printk("%s:%d: bad pte %p(%08lx).\n", __FILE__, __LINE__, &(e), \
|
| 29 | pte_val(e))
|
| 30 | #define pgd_ERROR(e) \
|
| 31 | printk("%s:%d: bad pgd %p(%08lx).\n", __FILE__, __LINE__, &(e), \
|
| 32 | pgd_val(e))
|
| 33 |
|
| 34 | static inline int pgd_needsync(pgd_t pgd) { return 0; }
|
| 35 | static inline void pgd_mkuptodate(pgd_t pgd) { }
|
| 36 |
|
| 37 | #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
|
| 38 |
|
| 39 | #define pte_pfn(x) phys_to_pfn(pte_val(x))
|
| 40 | #define pfn_pmd(pfn, prot) __pmd(pfn_to_phys(pfn) | pgprot_val(prot))
|
| 41 |
|
| 42 | #endif
|