|
@@ -10,6 +10,7 @@
|
|
|
#ifndef _ASMARM_PGTABLE_H
|
|
|
#define _ASMARM_PGTABLE_H
|
|
|
|
|
|
+#include <linux/const.h>
|
|
|
#include <asm-generic/4level-fixup.h>
|
|
|
#include <asm/proc-fns.h>
|
|
|
|
|
@@ -161,30 +162,30 @@ extern void __pgd_error(const char *file, int line, pgd_t);
|
|
|
* The PTE table pointer refers to the hardware entries; the "Linux"
|
|
|
* entries are stored 1024 bytes below.
|
|
|
*/
|
|
|
-#define L_PTE_PRESENT (1 << 0)
|
|
|
-#define L_PTE_YOUNG (1 << 1)
|
|
|
-#define L_PTE_FILE (1 << 2) /* only when !PRESENT */
|
|
|
-#define L_PTE_DIRTY (1 << 6)
|
|
|
-#define L_PTE_WRITE (1 << 7)
|
|
|
-#define L_PTE_USER (1 << 8)
|
|
|
-#define L_PTE_EXEC (1 << 9)
|
|
|
-#define L_PTE_SHARED (1 << 10) /* shared(v6), coherent(xsc3) */
|
|
|
+#define L_PTE_PRESENT (_AT(pteval_t, 1) << 0)
|
|
|
+#define L_PTE_YOUNG (_AT(pteval_t, 1) << 1)
|
|
|
+#define L_PTE_FILE (_AT(pteval_t, 1) << 2) /* only when !PRESENT */
|
|
|
+#define L_PTE_DIRTY (_AT(pteval_t, 1) << 6)
|
|
|
+#define L_PTE_WRITE (_AT(pteval_t, 1) << 7)
|
|
|
+#define L_PTE_USER (_AT(pteval_t, 1) << 8)
|
|
|
+#define L_PTE_EXEC (_AT(pteval_t, 1) << 9)
|
|
|
+#define L_PTE_SHARED (_AT(pteval_t, 1) << 10) /* shared(v6), coherent(xsc3) */
|
|
|
|
|
|
/*
|
|
|
* These are the memory types, defined to be compatible with
|
|
|
* pre-ARMv6 CPUs cacheable and bufferable bits: XXCB
|
|
|
*/
|
|
|
-#define L_PTE_MT_UNCACHED (0x00 << 2) /* 0000 */
|
|
|
-#define L_PTE_MT_BUFFERABLE (0x01 << 2) /* 0001 */
|
|
|
-#define L_PTE_MT_WRITETHROUGH (0x02 << 2) /* 0010 */
|
|
|
-#define L_PTE_MT_WRITEBACK (0x03 << 2) /* 0011 */
|
|
|
-#define L_PTE_MT_MINICACHE (0x06 << 2) /* 0110 (sa1100, xscale) */
|
|
|
-#define L_PTE_MT_WRITEALLOC (0x07 << 2) /* 0111 */
|
|
|
-#define L_PTE_MT_DEV_SHARED (0x04 << 2) /* 0100 */
|
|
|
-#define L_PTE_MT_DEV_NONSHARED (0x0c << 2) /* 1100 */
|
|
|
-#define L_PTE_MT_DEV_WC (0x09 << 2) /* 1001 */
|
|
|
-#define L_PTE_MT_DEV_CACHED (0x0b << 2) /* 1011 */
|
|
|
-#define L_PTE_MT_MASK (0x0f << 2)
|
|
|
+#define L_PTE_MT_UNCACHED (_AT(pteval_t, 0x00) << 2) /* 0000 */
|
|
|
+#define L_PTE_MT_BUFFERABLE (_AT(pteval_t, 0x01) << 2) /* 0001 */
|
|
|
+#define L_PTE_MT_WRITETHROUGH (_AT(pteval_t, 0x02) << 2) /* 0010 */
|
|
|
+#define L_PTE_MT_WRITEBACK (_AT(pteval_t, 0x03) << 2) /* 0011 */
|
|
|
+#define L_PTE_MT_MINICACHE (_AT(pteval_t, 0x06) << 2) /* 0110 (sa1100, xscale) */
|
|
|
+#define L_PTE_MT_WRITEALLOC (_AT(pteval_t, 0x07) << 2) /* 0111 */
|
|
|
+#define L_PTE_MT_DEV_SHARED (_AT(pteval_t, 0x04) << 2) /* 0100 */
|
|
|
+#define L_PTE_MT_DEV_NONSHARED (_AT(pteval_t, 0x0c) << 2) /* 1100 */
|
|
|
+#define L_PTE_MT_DEV_WC (_AT(pteval_t, 0x09) << 2) /* 1001 */
|
|
|
+#define L_PTE_MT_DEV_CACHED (_AT(pteval_t, 0x0b) << 2) /* 1011 */
|
|
|
+#define L_PTE_MT_MASK (_AT(pteval_t, 0x0f) << 2)
|
|
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
|
@@ -405,7 +406,7 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; }
|
|
|
|
|
|
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
|
|
{
|
|
|
- const unsigned long mask = L_PTE_EXEC | L_PTE_WRITE | L_PTE_USER;
|
|
|
+ const pteval_t mask = L_PTE_EXEC | L_PTE_WRITE | L_PTE_USER;
|
|
|
pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
|
|
|
return pte;
|
|
|
}
|