blob: 3fe5be16cdc21d054ee7508a70a4c900b6cbd8c7 [file] [log] [blame]
Nicholas Flintham1e3d3112013-04-10 10:48:38 +01001/*
2 * arch/arm/include/asm/pgtable-2level.h
3 *
4 * Copyright (C) 1995-2002 Russell King
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10#ifndef _ASM_PGTABLE_2LEVEL_H
11#define _ASM_PGTABLE_2LEVEL_H
12
13#define PTRS_PER_PTE 512
14#define PTRS_PER_PMD 1
15#define PTRS_PER_PGD 2048
16
17#define PTE_HWTABLE_PTRS (PTRS_PER_PTE)
18#define PTE_HWTABLE_OFF (PTE_HWTABLE_PTRS * sizeof(pte_t))
19#define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u32))
20
21#define PMD_SHIFT 21
22#define PGDIR_SHIFT 21
23
24#define PMD_SIZE (1UL << PMD_SHIFT)
25#define PMD_MASK (~(PMD_SIZE-1))
26#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
27#define PGDIR_MASK (~(PGDIR_SIZE-1))
28
29#define SECTION_SHIFT 20
30#define SECTION_SIZE (1UL << SECTION_SHIFT)
31#define SECTION_MASK (~(SECTION_SIZE-1))
32
33#define SUPERSECTION_SHIFT 24
34#define SUPERSECTION_SIZE (1UL << SUPERSECTION_SHIFT)
35#define SUPERSECTION_MASK (~(SUPERSECTION_SIZE-1))
36
37#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE)
38
39#define L_PTE_PRESENT (_AT(pteval_t, 1) << 0)
40#define L_PTE_YOUNG (_AT(pteval_t, 1) << 1)
41#define L_PTE_FILE (_AT(pteval_t, 1) << 2)
42#define L_PTE_DIRTY (_AT(pteval_t, 1) << 6)
43#define L_PTE_RDONLY (_AT(pteval_t, 1) << 7)
44#define L_PTE_USER (_AT(pteval_t, 1) << 8)
45#define L_PTE_XN (_AT(pteval_t, 1) << 9)
46#define L_PTE_SHARED (_AT(pteval_t, 1) << 10)
47
48#define L_PTE_MT_UNCACHED (_AT(pteval_t, 0x00) << 2)
49#define L_PTE_MT_BUFFERABLE (_AT(pteval_t, 0x01) << 2)
50#define L_PTE_MT_WRITETHROUGH (_AT(pteval_t, 0x02) << 2)
51#define L_PTE_MT_WRITEBACK (_AT(pteval_t, 0x03) << 2)
52#define L_PTE_MT_MINICACHE (_AT(pteval_t, 0x06) << 2)
53#define L_PTE_MT_WRITEALLOC (_AT(pteval_t, 0x07) << 2)
54#define L_PTE_MT_DEV_SHARED (_AT(pteval_t, 0x04) << 2)
55#define L_PTE_MT_DEV_NONSHARED (_AT(pteval_t, 0x0c) << 2)
56#define L_PTE_MT_DEV_WC (_AT(pteval_t, 0x09) << 2)
57#define L_PTE_MT_DEV_CACHED (_AT(pteval_t, 0x0b) << 2)
58#define L_PTE_MT_MASK (_AT(pteval_t, 0x0f) << 2)
59
60#ifndef __ASSEMBLY__
61
62#define pud_none(pud) (0)
63#define pud_bad(pud) (0)
64#define pud_present(pud) (1)
65#define pud_clear(pudp) do { } while (0)
66#define set_pud(pud,pudp) do { } while (0)
67
68static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
69{
70 return (pmd_t *)pud;
71}
72
73#define pmd_bad(pmd) (pmd_val(pmd) & 2)
74
75#define copy_pmd(pmdpd,pmdps) \
76 do { \
77 pmdpd[0] = pmdps[0]; \
78 pmdpd[1] = pmdps[1]; \
79 flush_pmd_entry(pmdpd); \
80 } while (0)
81
82#define pmd_clear(pmdp) \
83 do { \
84 pmdp[0] = __pmd(0); \
85 pmdp[1] = __pmd(0); \
86 clean_pmd_entry(pmdp); \
87 } while (0)
88
89#define pmd_addr_end(addr,end) (end)
90
91#define set_pte_ext(ptep,pte,ext) cpu_set_pte_ext(ptep,pte,ext)
92
93#endif
94
95#endif