Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * arch/arm/include/asm/pgtable-3level-types.h
0004  *
0005  * Copyright (C) 2011 ARM Ltd.
0006  * Author: Catalin Marinas <catalin.marinas@arm.com>
0007  */
0008 #ifndef _ASM_PGTABLE_3LEVEL_TYPES_H
0009 #define _ASM_PGTABLE_3LEVEL_TYPES_H
0010 
0011 #include <asm/types.h>
0012 
0013 typedef u64 pteval_t;
0014 typedef u64 pmdval_t;
0015 typedef u64 pgdval_t;
0016 
0017 #undef STRICT_MM_TYPECHECKS
0018 
0019 #ifdef STRICT_MM_TYPECHECKS
0020 
0021 /*
0022  * These are used to make use of C type-checking..
0023  */
0024 typedef struct { pteval_t pte; } pte_t;
0025 typedef struct { pmdval_t pmd; } pmd_t;
0026 typedef struct { pgdval_t pgd; } pgd_t;
0027 typedef struct { pteval_t pgprot; } pgprot_t;
0028 
0029 #define pte_val(x)      ((x).pte)
0030 #define pmd_val(x)      ((x).pmd)
0031 #define pgd_val(x)  ((x).pgd)
0032 #define pgprot_val(x)   ((x).pgprot)
0033 
0034 #define __pte(x)        ((pte_t) { (x) } )
0035 #define __pmd(x)        ((pmd_t) { (x) } )
0036 #define __pgd(x)    ((pgd_t) { (x) } )
0037 #define __pgprot(x)     ((pgprot_t) { (x) } )
0038 
0039 #else   /* !STRICT_MM_TYPECHECKS */
0040 
0041 typedef pteval_t pte_t;
0042 typedef pmdval_t pmd_t;
0043 typedef pgdval_t pgd_t;
0044 typedef pteval_t pgprot_t;
0045 
0046 #define pte_val(x)  (x)
0047 #define pmd_val(x)  (x)
0048 #define pgd_val(x)  (x)
0049 #define pgprot_val(x)   (x)
0050 
0051 #define __pte(x)    (x)
0052 #define __pmd(x)    (x)
0053 #define __pgd(x)    (x)
0054 #define __pgprot(x) (x)
0055 
0056 #endif  /* STRICT_MM_TYPECHECKS */
0057 
0058 #endif  /* _ASM_PGTABLE_3LEVEL_TYPES_H */