linux/arch/powerpc/include/asm/pgtable-types.h
<<
>>
Prefs
   1#ifndef _ASM_POWERPC_PGTABLE_TYPES_H
   2#define _ASM_POWERPC_PGTABLE_TYPES_H
   3
   4/* PTE level */
   5typedef struct { pte_basic_t pte; } pte_t;
   6#define __pte(x)        ((pte_t) { (x) })
   7static inline pte_basic_t pte_val(pte_t x)
   8{
   9        return x.pte;
  10}
  11
  12/* PMD level */
  13#ifdef CONFIG_PPC64
  14typedef struct { unsigned long pmd; } pmd_t;
  15#define __pmd(x)        ((pmd_t) { (x) })
  16static inline unsigned long pmd_val(pmd_t x)
  17{
  18        return x.pmd;
  19}
  20
  21/*
  22 * 64 bit hash always use 4 level table. Everybody else use 4 level
  23 * only for 4K page size.
  24 */
  25#if defined(CONFIG_PPC_BOOK3S_64) || !defined(CONFIG_PPC_64K_PAGES)
  26typedef struct { unsigned long pud; } pud_t;
  27#define __pud(x)        ((pud_t) { (x) })
  28static inline unsigned long pud_val(pud_t x)
  29{
  30        return x.pud;
  31}
  32#endif /* CONFIG_PPC_BOOK3S_64 || !CONFIG_PPC_64K_PAGES */
  33#endif /* CONFIG_PPC64 */
  34
  35/* PGD level */
  36typedef struct { unsigned long pgd; } pgd_t;
  37#define __pgd(x)        ((pgd_t) { (x) })
  38static inline unsigned long pgd_val(pgd_t x)
  39{
  40        return x.pgd;
  41}
  42
  43/* Page protection bits */
  44typedef struct { unsigned long pgprot; } pgprot_t;
  45#define pgprot_val(x)   ((x).pgprot)
  46#define __pgprot(x)     ((pgprot_t) { (x) })
  47
  48/*
  49 * With hash config 64k pages additionally define a bigger "real PTE" type that
  50 * gathers the "second half" part of the PTE for pseudo 64k pages
  51 */
  52#if defined(CONFIG_PPC_64K_PAGES) && defined(CONFIG_PPC_STD_MMU_64)
  53typedef struct { pte_t pte; unsigned long hidx; } real_pte_t;
  54#else
  55typedef struct { pte_t pte; } real_pte_t;
  56#endif
  57
  58#ifdef CONFIG_PPC_STD_MMU_64
  59#include <asm/cmpxchg.h>
  60
  61static inline bool pte_xchg(pte_t *ptep, pte_t old, pte_t new)
  62{
  63        unsigned long *p = (unsigned long *)ptep;
  64
  65        return pte_val(old) == __cmpxchg_u64(p, pte_val(old), pte_val(new));
  66}
  67#endif
  68
  69typedef struct { unsigned long pd; } hugepd_t;
  70#define __hugepd(x) ((hugepd_t) { (x) })
  71static inline unsigned long hpd_val(hugepd_t x)
  72{
  73        return x.pd;
  74}
  75
  76#endif /* _ASM_POWERPC_PGTABLE_TYPES_H */
  77