linux/arch/arm64/include/asm/pgtable-types.h
<<
>>
Prefs
   1/*
   2 * Page table types definitions.
   3 *
   4 * Copyright (C) 2014 ARM Ltd.
   5 * Author: Catalin Marinas <catalin.marinas@arm.com>
   6 *
   7 * This program is free software: you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License version 2 as
   9 * published by the Free Software Foundation.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18 */
  19
  20#ifndef __ASM_PGTABLE_TYPES_H
  21#define __ASM_PGTABLE_TYPES_H
  22
  23#include <asm/types.h>
  24
  25typedef u64 pteval_t;
  26typedef u64 pmdval_t;
  27typedef u64 pudval_t;
  28typedef u64 pgdval_t;
  29
  30#undef STRICT_MM_TYPECHECKS
  31
  32#ifdef STRICT_MM_TYPECHECKS
  33
  34/*
  35 * These are used to make use of C type-checking..
  36 */
  37typedef struct { pteval_t pte; } pte_t;
  38#define pte_val(x)      ((x).pte)
  39#define __pte(x)        ((pte_t) { (x) } )
  40
  41#if CONFIG_PGTABLE_LEVELS > 2
  42typedef struct { pmdval_t pmd; } pmd_t;
  43#define pmd_val(x)      ((x).pmd)
  44#define __pmd(x)        ((pmd_t) { (x) } )
  45#endif
  46
  47#if CONFIG_PGTABLE_LEVELS > 3
  48typedef struct { pudval_t pud; } pud_t;
  49#define pud_val(x)      ((x).pud)
  50#define __pud(x)        ((pud_t) { (x) } )
  51#endif
  52
  53typedef struct { pgdval_t pgd; } pgd_t;
  54#define pgd_val(x)      ((x).pgd)
  55#define __pgd(x)        ((pgd_t) { (x) } )
  56
  57typedef struct { pteval_t pgprot; } pgprot_t;
  58#define pgprot_val(x)   ((x).pgprot)
  59#define __pgprot(x)     ((pgprot_t) { (x) } )
  60
  61#else   /* !STRICT_MM_TYPECHECKS */
  62
  63typedef pteval_t pte_t;
  64#define pte_val(x)      (x)
  65#define __pte(x)        (x)
  66
  67#if CONFIG_PGTABLE_LEVELS > 2
  68typedef pmdval_t pmd_t;
  69#define pmd_val(x)      (x)
  70#define __pmd(x)        (x)
  71#endif
  72
  73#if CONFIG_PGTABLE_LEVELS > 3
  74typedef pudval_t pud_t;
  75#define pud_val(x)      (x)
  76#define __pud(x)        (x)
  77#endif
  78
  79typedef pgdval_t pgd_t;
  80#define pgd_val(x)      (x)
  81#define __pgd(x)        (x)
  82
  83typedef pteval_t pgprot_t;
  84#define pgprot_val(x)   (x)
  85#define __pgprot(x)     (x)
  86
  87#endif /* STRICT_MM_TYPECHECKS */
  88
  89#if CONFIG_PGTABLE_LEVELS == 2
  90#include <asm-generic/pgtable-nopmd.h>
  91#elif CONFIG_PGTABLE_LEVELS == 3
  92#include <asm-generic/pgtable-nopud.h>
  93#endif
  94
  95#endif  /* __ASM_PGTABLE_TYPES_H */
  96