1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Page table types definitions.
4 *
5 * Copyright (C) 2014 ARM Ltd.
6 * Author: Catalin Marinas <catalin.marinas@arm.com>
7 */
8
9#ifndef __ASM_PGTABLE_TYPES_H
10#define __ASM_PGTABLE_TYPES_H
11
12#include <asm/types.h>
13
14typedef u64 pteval_t;
15typedef u64 pmdval_t;
16typedef u64 pudval_t;
17typedef u64 p4dval_t;
18typedef u64 pgdval_t;
19
20/*
21 * These are used to make use of C type-checking..
22 */
23typedef struct { pteval_t pte; } pte_t;
24#define pte_val(x)	((x).pte)
25#define __pte(x)	((pte_t) { (x) } )
26
27#if CONFIG_PGTABLE_LEVELS > 2
28typedef struct { pmdval_t pmd; } pmd_t;
29#define pmd_val(x)	((x).pmd)
30#define __pmd(x)	((pmd_t) { (x) } )
31#endif
32
33#if CONFIG_PGTABLE_LEVELS > 3
34typedef struct { pudval_t pud; } pud_t;
35#define pud_val(x)	((x).pud)
36#define __pud(x)	((pud_t) { (x) } )
37#endif
38
39#if CONFIG_PGTABLE_LEVELS > 4
40typedef struct { p4dval_t p4d; } p4d_t;
41#define p4d_val(x)	((x).p4d)
42#define __p4d(x)	((p4d_t) { (x) } )
43#endif
44
45typedef struct { pgdval_t pgd; } pgd_t;
46#define pgd_val(x)	((x).pgd)
47#define __pgd(x)	((pgd_t) { (x) } )
48
49typedef struct { pteval_t pgprot; } pgprot_t;
50#define pgprot_val(x)	((x).pgprot)
51#define __pgprot(x)	((pgprot_t) { (x) } )
52
53#if CONFIG_PGTABLE_LEVELS == 2
54#include <asm-generic/pgtable-nopmd.h>
55#elif CONFIG_PGTABLE_LEVELS == 3
56#include <asm-generic/pgtable-nopud.h>
57#elif CONFIG_PGTABLE_LEVELS == 4
58#include <asm-generic/pgtable-nop4d.h>
59#endif
60
61#endif	/* __ASM_PGTABLE_TYPES_H */
62