Commit f6e3354d authored by Russell King's avatar Russell King

ARM: pgtable: introduce pteval_t to represent a pte value

This makes everywhere dealing with pte values use the same type.
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 97092e0c
...@@ -151,13 +151,15 @@ extern void __cpu_copy_user_highpage(struct page *to, struct page *from, ...@@ -151,13 +151,15 @@ extern void __cpu_copy_user_highpage(struct page *to, struct page *from,
#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
extern void copy_page(void *to, const void *from); extern void copy_page(void *to, const void *from);
typedef unsigned long pteval_t;
#undef STRICT_MM_TYPECHECKS #undef STRICT_MM_TYPECHECKS
#ifdef STRICT_MM_TYPECHECKS #ifdef STRICT_MM_TYPECHECKS
/* /*
* These are used to make use of C type-checking.. * These are used to make use of C type-checking..
*/ */
typedef struct { unsigned long pte; } pte_t; typedef struct { pteval_t pte; } pte_t;
typedef struct { unsigned long pmd; } pmd_t; typedef struct { unsigned long pmd; } pmd_t;
typedef struct { unsigned long pgd[2]; } pgd_t; typedef struct { unsigned long pgd[2]; } pgd_t;
typedef struct { unsigned long pgprot; } pgprot_t; typedef struct { unsigned long pgprot; } pgprot_t;
...@@ -175,7 +177,7 @@ typedef struct { unsigned long pgprot; } pgprot_t; ...@@ -175,7 +177,7 @@ typedef struct { unsigned long pgprot; } pgprot_t;
/* /*
* .. while these make it easier on the compiler * .. while these make it easier on the compiler
*/ */
typedef unsigned long pte_t; typedef pteval_t pte_t;
typedef unsigned long pmd_t; typedef unsigned long pmd_t;
typedef unsigned long pgd_t[2]; typedef unsigned long pgd_t[2];
typedef unsigned long pgprot_t; typedef unsigned long pgprot_t;
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#ifndef _ASMARM_PGTABLE_H #ifndef _ASMARM_PGTABLE_H
#define _ASMARM_PGTABLE_H #define _ASMARM_PGTABLE_H
#include <linux/const.h>
#include <asm-generic/4level-fixup.h> #include <asm-generic/4level-fixup.h>
#include <asm/proc-fns.h> #include <asm/proc-fns.h>
...@@ -161,30 +162,30 @@ extern void __pgd_error(const char *file, int line, pgd_t); ...@@ -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" * The PTE table pointer refers to the hardware entries; the "Linux"
* entries are stored 1024 bytes below. * entries are stored 1024 bytes below.
*/ */
#define L_PTE_PRESENT (1 << 0) #define L_PTE_PRESENT (_AT(pteval_t, 1) << 0)
#define L_PTE_YOUNG (1 << 1) #define L_PTE_YOUNG (_AT(pteval_t, 1) << 1)
#define L_PTE_FILE (1 << 2) /* only when !PRESENT */ #define L_PTE_FILE (_AT(pteval_t, 1) << 2) /* only when !PRESENT */
#define L_PTE_DIRTY (1 << 6) #define L_PTE_DIRTY (_AT(pteval_t, 1) << 6)
#define L_PTE_WRITE (1 << 7) #define L_PTE_WRITE (_AT(pteval_t, 1) << 7)
#define L_PTE_USER (1 << 8) #define L_PTE_USER (_AT(pteval_t, 1) << 8)
#define L_PTE_EXEC (1 << 9) #define L_PTE_EXEC (_AT(pteval_t, 1) << 9)
#define L_PTE_SHARED (1 << 10) /* shared(v6), coherent(xsc3) */ #define L_PTE_SHARED (_AT(pteval_t, 1) << 10) /* shared(v6), coherent(xsc3) */
/* /*
* These are the memory types, defined to be compatible with * These are the memory types, defined to be compatible with
* pre-ARMv6 CPUs cacheable and bufferable bits: XXCB * pre-ARMv6 CPUs cacheable and bufferable bits: XXCB
*/ */
#define L_PTE_MT_UNCACHED (0x00 << 2) /* 0000 */ #define L_PTE_MT_UNCACHED (_AT(pteval_t, 0x00) << 2) /* 0000 */
#define L_PTE_MT_BUFFERABLE (0x01 << 2) /* 0001 */ #define L_PTE_MT_BUFFERABLE (_AT(pteval_t, 0x01) << 2) /* 0001 */
#define L_PTE_MT_WRITETHROUGH (0x02 << 2) /* 0010 */ #define L_PTE_MT_WRITETHROUGH (_AT(pteval_t, 0x02) << 2) /* 0010 */
#define L_PTE_MT_WRITEBACK (0x03 << 2) /* 0011 */ #define L_PTE_MT_WRITEBACK (_AT(pteval_t, 0x03) << 2) /* 0011 */
#define L_PTE_MT_MINICACHE (0x06 << 2) /* 0110 (sa1100, xscale) */ #define L_PTE_MT_MINICACHE (_AT(pteval_t, 0x06) << 2) /* 0110 (sa1100, xscale) */
#define L_PTE_MT_WRITEALLOC (0x07 << 2) /* 0111 */ #define L_PTE_MT_WRITEALLOC (_AT(pteval_t, 0x07) << 2) /* 0111 */
#define L_PTE_MT_DEV_SHARED (0x04 << 2) /* 0100 */ #define L_PTE_MT_DEV_SHARED (_AT(pteval_t, 0x04) << 2) /* 0100 */
#define L_PTE_MT_DEV_NONSHARED (0x0c << 2) /* 1100 */ #define L_PTE_MT_DEV_NONSHARED (_AT(pteval_t, 0x0c) << 2) /* 1100 */
#define L_PTE_MT_DEV_WC (0x09 << 2) /* 1001 */ #define L_PTE_MT_DEV_WC (_AT(pteval_t, 0x09) << 2) /* 1001 */
#define L_PTE_MT_DEV_CACHED (0x0b << 2) /* 1011 */ #define L_PTE_MT_DEV_CACHED (_AT(pteval_t, 0x0b) << 2) /* 1011 */
#define L_PTE_MT_MASK (0x0f << 2) #define L_PTE_MT_MASK (_AT(pteval_t, 0x0f) << 2)
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
...@@ -405,7 +406,7 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; } ...@@ -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) 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); pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
return pte; return pte;
} }
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#include "mm.h" #include "mm.h"
static unsigned long shared_pte_mask = L_PTE_MT_BUFFERABLE; static pteval_t shared_pte_mask = L_PTE_MT_BUFFERABLE;
#if __LINUX_ARM_ARCH__ < 6 #if __LINUX_ARM_ARCH__ < 6
/* /*
......
...@@ -16,7 +16,7 @@ static inline pmd_t *pmd_off_k(unsigned long virt) ...@@ -16,7 +16,7 @@ static inline pmd_t *pmd_off_k(unsigned long virt)
} }
struct mem_type { struct mem_type {
unsigned int prot_pte; pteval_t prot_pte;
unsigned int prot_l1; unsigned int prot_l1;
unsigned int prot_sect; unsigned int prot_sect;
unsigned int domain; unsigned int domain;
......
...@@ -62,7 +62,7 @@ struct cachepolicy { ...@@ -62,7 +62,7 @@ struct cachepolicy {
const char policy[16]; const char policy[16];
unsigned int cr_mask; unsigned int cr_mask;
unsigned int pmd; unsigned int pmd;
unsigned int pte; pteval_t pte;
}; };
static struct cachepolicy cache_policies[] __initdata = { static struct cachepolicy cache_policies[] __initdata = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment