1caab277bSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
20f174025SCatalin Marinas /*
30f174025SCatalin Marinas  * Page table types definitions.
40f174025SCatalin Marinas  *
50f174025SCatalin Marinas  * Copyright (C) 2014 ARM Ltd.
60f174025SCatalin Marinas  * Author: Catalin Marinas <catalin.marinas@arm.com>
70f174025SCatalin Marinas  */
80f174025SCatalin Marinas 
90f174025SCatalin Marinas #ifndef __ASM_PGTABLE_TYPES_H
100f174025SCatalin Marinas #define __ASM_PGTABLE_TYPES_H
110f174025SCatalin Marinas 
120f174025SCatalin Marinas #include <asm/types.h>
130f174025SCatalin Marinas 
140f174025SCatalin Marinas typedef u64 pteval_t;
150f174025SCatalin Marinas typedef u64 pmdval_t;
160f174025SCatalin Marinas typedef u64 pudval_t;
17e9f63768SMike Rapoport typedef u64 p4dval_t;
180f174025SCatalin Marinas typedef u64 pgdval_t;
190f174025SCatalin Marinas 
200f174025SCatalin Marinas /*
210f174025SCatalin Marinas  * These are used to make use of C type-checking..
220f174025SCatalin Marinas  */
230f174025SCatalin Marinas typedef struct { pteval_t pte; } pte_t;
240f174025SCatalin Marinas #define pte_val(x)	((x).pte)
250f174025SCatalin Marinas #define __pte(x)	((pte_t) { (x) } )
260f174025SCatalin Marinas 
279f25e6adSKirill A. Shutemov #if CONFIG_PGTABLE_LEVELS > 2
280f174025SCatalin Marinas typedef struct { pmdval_t pmd; } pmd_t;
290f174025SCatalin Marinas #define pmd_val(x)	((x).pmd)
300f174025SCatalin Marinas #define __pmd(x)	((pmd_t) { (x) } )
310f174025SCatalin Marinas #endif
320f174025SCatalin Marinas 
339f25e6adSKirill A. Shutemov #if CONFIG_PGTABLE_LEVELS > 3
340f174025SCatalin Marinas typedef struct { pudval_t pud; } pud_t;
350f174025SCatalin Marinas #define pud_val(x)	((x).pud)
360f174025SCatalin Marinas #define __pud(x)	((pud_t) { (x) } )
370f174025SCatalin Marinas #endif
380f174025SCatalin Marinas 
390f174025SCatalin Marinas typedef struct { pgdval_t pgd; } pgd_t;
400f174025SCatalin Marinas #define pgd_val(x)	((x).pgd)
410f174025SCatalin Marinas #define __pgd(x)	((pgd_t) { (x) } )
420f174025SCatalin Marinas 
430f174025SCatalin Marinas typedef struct { pteval_t pgprot; } pgprot_t;
440f174025SCatalin Marinas #define pgprot_val(x)	((x).pgprot)
450f174025SCatalin Marinas #define __pgprot(x)	((pgprot_t) { (x) } )
460f174025SCatalin Marinas 
479f25e6adSKirill A. Shutemov #if CONFIG_PGTABLE_LEVELS == 2
480f174025SCatalin Marinas #include <asm-generic/pgtable-nopmd.h>
499f25e6adSKirill A. Shutemov #elif CONFIG_PGTABLE_LEVELS == 3
500f174025SCatalin Marinas #include <asm-generic/pgtable-nopud.h>
519849a569SKirill A. Shutemov #elif CONFIG_PGTABLE_LEVELS == 4
52e9f63768SMike Rapoport #include <asm-generic/pgtable-nop4d.h>
530f174025SCatalin Marinas #endif
540f174025SCatalin Marinas 
550f174025SCatalin Marinas #endif	/* __ASM_PGTABLE_TYPES_H */
56