diff options
| -rw-r--r-- | include/asm-parisc/page.h | 56 |
1 files changed, 40 insertions, 16 deletions
diff --git a/include/asm-parisc/page.h b/include/asm-parisc/page.h index c6c9d5793070..45e02aa5bf4b 100644 --- a/include/asm-parisc/page.h +++ b/include/asm-parisc/page.h | |||
| @@ -40,14 +40,19 @@ clear_user_page(void *page, unsigned long vaddr, struct page *pg) | |||
| 40 | /* | 40 | /* |
| 41 | * These are used to make use of C type-checking.. | 41 | * These are used to make use of C type-checking.. |
| 42 | */ | 42 | */ |
| 43 | #ifdef __LP64__ | 43 | #define STRICT_MM_TYPECHECKS |
| 44 | typedef struct { unsigned long pte; } pte_t; | 44 | #ifdef STRICT_MM_TYPECHECKS |
| 45 | #else | 45 | typedef struct { unsigned long pte; |
| 46 | typedef struct { | 46 | #if !defined(CONFIG_64BIT) |
| 47 | unsigned long pte; | 47 | unsigned long future_flags; |
| 48 | unsigned long flags; | 48 | /* XXX: it's possible to remove future_flags and change BITS_PER_PTE_ENTRY |
| 49 | } pte_t; | 49 | to 2, but then strangely the identical 32bit kernel boots on a |
| 50 | c3000(pa20), but not any longer on a 715(pa11). | ||
| 51 | Still investigating... HelgeD. | ||
| 52 | */ | ||
| 50 | #endif | 53 | #endif |
| 54 | } pte_t; /* either 32 or 64bit */ | ||
| 55 | |||
| 51 | /* NOTE: even on 64 bits, these entries are __u32 because we allocate | 56 | /* NOTE: even on 64 bits, these entries are __u32 because we allocate |
| 52 | * the pmd and pgd in ZONE_DMA (i.e. under 4GB) */ | 57 | * the pmd and pgd in ZONE_DMA (i.e. under 4GB) */ |
| 53 | typedef struct { __u32 pmd; } pmd_t; | 58 | typedef struct { __u32 pmd; } pmd_t; |
| @@ -55,25 +60,44 @@ typedef struct { __u32 pgd; } pgd_t; | |||
| 55 | typedef struct { unsigned long pgprot; } pgprot_t; | 60 | typedef struct { unsigned long pgprot; } pgprot_t; |
| 56 | 61 | ||
| 57 | #define pte_val(x) ((x).pte) | 62 | #define pte_val(x) ((x).pte) |
| 58 | #ifdef __LP64__ | ||
| 59 | #define pte_flags(x) (*(__u32 *)&((x).pte)) | ||
| 60 | #else | ||
| 61 | #define pte_flags(x) ((x).flags) | ||
| 62 | #endif | ||
| 63 | |||
| 64 | /* These do not work lvalues, so make sure we don't use them as such. */ | 63 | /* These do not work lvalues, so make sure we don't use them as such. */ |
| 65 | #define pmd_val(x) ((x).pmd + 0) | 64 | #define pmd_val(x) ((x).pmd + 0) |
| 66 | #define pgd_val(x) ((x).pgd + 0) | 65 | #define pgd_val(x) ((x).pgd + 0) |
| 67 | #define pgprot_val(x) ((x).pgprot) | 66 | #define pgprot_val(x) ((x).pgprot) |
| 68 | 67 | ||
| 69 | #define __pmd_val_set(x,n) (x).pmd = (n) | ||
| 70 | #define __pgd_val_set(x,n) (x).pgd = (n) | ||
| 71 | |||
| 72 | #define __pte(x) ((pte_t) { (x) } ) | 68 | #define __pte(x) ((pte_t) { (x) } ) |
| 73 | #define __pmd(x) ((pmd_t) { (x) } ) | 69 | #define __pmd(x) ((pmd_t) { (x) } ) |
| 74 | #define __pgd(x) ((pgd_t) { (x) } ) | 70 | #define __pgd(x) ((pgd_t) { (x) } ) |
| 75 | #define __pgprot(x) ((pgprot_t) { (x) } ) | 71 | #define __pgprot(x) ((pgprot_t) { (x) } ) |
| 76 | 72 | ||
| 73 | #define __pmd_val_set(x,n) (x).pmd = (n) | ||
| 74 | #define __pgd_val_set(x,n) (x).pgd = (n) | ||
| 75 | |||
| 76 | #else | ||
| 77 | /* | ||
| 78 | * .. while these make it easier on the compiler | ||
| 79 | */ | ||
| 80 | typedef unsigned long pte_t; | ||
| 81 | typedef __u32 pmd_t; | ||
| 82 | typedef __u32 pgd_t; | ||
| 83 | typedef unsigned long pgprot_t; | ||
| 84 | |||
| 85 | #define pte_val(x) (x) | ||
| 86 | #define pmd_val(x) (x) | ||
| 87 | #define pgd_val(x) (x) | ||
| 88 | #define pgprot_val(x) (x) | ||
| 89 | |||
| 90 | #define __pte(x) (x) | ||
| 91 | #define __pmd(x) (x) | ||
| 92 | #define __pgd(x) (x) | ||
| 93 | #define __pgprot(x) (x) | ||
| 94 | |||
| 95 | #define __pmd_val_set(x,n) (x) = (n) | ||
| 96 | #define __pgd_val_set(x,n) (x) = (n) | ||
| 97 | |||
| 98 | #endif /* STRICT_MM_TYPECHECKS */ | ||
| 99 | |||
| 100 | |||
| 77 | typedef struct __physmem_range { | 101 | typedef struct __physmem_range { |
| 78 | unsigned long start_pfn; | 102 | unsigned long start_pfn; |
| 79 | unsigned long pages; /* PAGE_SIZE pages */ | 103 | unsigned long pages; /* PAGE_SIZE pages */ |
