0001
0002 #ifndef _ASM_POWERPC_PGTABLE_BE_TYPES_H
0003 #define _ASM_POWERPC_PGTABLE_BE_TYPES_H
0004
0005 #include <asm/cmpxchg.h>
0006
0007
0008 typedef struct { __be64 pte; } pte_t;
0009 #define __pte(x) ((pte_t) { cpu_to_be64(x) })
0010 #define __pte_raw(x) ((pte_t) { (x) })
0011 static inline unsigned long pte_val(pte_t x)
0012 {
0013 return be64_to_cpu(x.pte);
0014 }
0015
0016 static inline __be64 pte_raw(pte_t x)
0017 {
0018 return x.pte;
0019 }
0020
0021
0022 #ifdef CONFIG_PPC64
0023 typedef struct { __be64 pmd; } pmd_t;
0024 #define __pmd(x) ((pmd_t) { cpu_to_be64(x) })
0025 #define __pmd_raw(x) ((pmd_t) { (x) })
0026 static inline unsigned long pmd_val(pmd_t x)
0027 {
0028 return be64_to_cpu(x.pmd);
0029 }
0030
0031 static inline __be64 pmd_raw(pmd_t x)
0032 {
0033 return x.pmd;
0034 }
0035
0036
0037 typedef struct { __be64 pud; } pud_t;
0038 #define __pud(x) ((pud_t) { cpu_to_be64(x) })
0039 #define __pud_raw(x) ((pud_t) { (x) })
0040 static inline unsigned long pud_val(pud_t x)
0041 {
0042 return be64_to_cpu(x.pud);
0043 }
0044
0045 static inline __be64 pud_raw(pud_t x)
0046 {
0047 return x.pud;
0048 }
0049
0050 #endif
0051
0052
0053 typedef struct { __be64 pgd; } pgd_t;
0054 #define __pgd(x) ((pgd_t) { cpu_to_be64(x) })
0055 #define __pgd_raw(x) ((pgd_t) { (x) })
0056 static inline unsigned long pgd_val(pgd_t x)
0057 {
0058 return be64_to_cpu(x.pgd);
0059 }
0060
0061 static inline __be64 pgd_raw(pgd_t x)
0062 {
0063 return x.pgd;
0064 }
0065
0066
0067 typedef struct { unsigned long pgprot; } pgprot_t;
0068 #define pgprot_val(x) ((x).pgprot)
0069 #define __pgprot(x) ((pgprot_t) { (x) })
0070
0071
0072
0073
0074
0075 #ifdef CONFIG_PPC_64K_PAGES
0076 typedef struct { pte_t pte; unsigned long hidx; } real_pte_t;
0077 #else
0078 typedef struct { pte_t pte; } real_pte_t;
0079 #endif
0080
0081 static inline bool pte_xchg(pte_t *ptep, pte_t old, pte_t new)
0082 {
0083 unsigned long *p = (unsigned long *)ptep;
0084 __be64 prev;
0085
0086
0087 prev = (__force __be64)__cmpxchg_u64(p, (__force unsigned long)pte_raw(old),
0088 (__force unsigned long)pte_raw(new));
0089
0090 return pte_raw(old) == prev;
0091 }
0092
0093 static inline bool pmd_xchg(pmd_t *pmdp, pmd_t old, pmd_t new)
0094 {
0095 unsigned long *p = (unsigned long *)pmdp;
0096 __be64 prev;
0097
0098 prev = (__force __be64)__cmpxchg_u64(p, (__force unsigned long)pmd_raw(old),
0099 (__force unsigned long)pmd_raw(new));
0100
0101 return pmd_raw(old) == prev;
0102 }
0103
0104 typedef struct { __be64 pdbe; } hugepd_t;
0105 #define __hugepd(x) ((hugepd_t) { cpu_to_be64(x) })
0106
0107 static inline unsigned long hpd_val(hugepd_t x)
0108 {
0109 return be64_to_cpu(x.pdbe);
0110 }
0111
0112 #endif