Signed-off-by: Andrew Jones <drjo...@redhat.com>
---
 lib/arm/asm/page.h          | 22 +++++++++++++++
 lib/arm/asm/pgtable-hwdef.h | 65 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 87 insertions(+)
 create mode 100644 lib/arm/asm/pgtable-hwdef.h

diff --git a/lib/arm/asm/page.h b/lib/arm/asm/page.h
index 4602d735b7886..6ff849a0c0e3b 100644
--- a/lib/arm/asm/page.h
+++ b/lib/arm/asm/page.h
@@ -18,6 +18,28 @@
 
 #include <asm/setup.h>
 
+typedef u64 pteval_t;
+typedef u64 pmdval_t;
+typedef u64 pgdval_t;
+typedef struct { pteval_t pte; } pte_t;
+typedef struct { pmdval_t pmd; } pmd_t;
+typedef struct { pgdval_t pgd; } pgd_t;
+typedef struct { pteval_t pgprot; } pgprot_t;
+
+#define pte_val(x)             ((x).pte)
+#define pmd_val(x)             ((x).pmd)
+#define pgd_val(x)             ((x).pgd)
+#define pgprot_val(x)          ((x).pgprot)
+
+#define __pte(x)               ((pte_t) { (x) } )
+#define __pmd(x)               ((pmd_t) { (x) } )
+#define __pgd(x)               ((pgd_t) { (x) } )
+#define __pgprot(x)            ((pgprot_t) { (x) } )
+
+typedef struct { pgd_t pgd; } pud_t;
+#define pud_val(x)             (pgd_val((x).pgd))
+#define __pud(x)               ((pud_t) { __pgd(x) } )
+
 #ifndef __virt_to_phys
 #define __phys_to_virt(x)      ((unsigned long) (x))
 #define __virt_to_phys(x)      (x)
diff --git a/lib/arm/asm/pgtable-hwdef.h b/lib/arm/asm/pgtable-hwdef.h
new file mode 100644
index 0000000000000..a2564aaca05a3
--- /dev/null
+++ b/lib/arm/asm/pgtable-hwdef.h
@@ -0,0 +1,65 @@
+#ifndef _ASMARM_PGTABLE_HWDEF_H_
+#define _ASMARM_PGTABLE_HWDEF_H_
+/*
+ * From arch/arm/include/asm/pgtable-3level-hwdef.h
+ */
+
+/*
+ * Hardware page table definitions.
+ *
+ * + Level 1/2 descriptor
+ *   - common
+ */
+#define PMD_TYPE_MASK          (_AT(pmdval_t, 3) << 0)
+#define PMD_TYPE_FAULT         (_AT(pmdval_t, 0) << 0)
+#define PMD_TYPE_TABLE         (_AT(pmdval_t, 3) << 0)
+#define PMD_TYPE_SECT          (_AT(pmdval_t, 1) << 0)
+#define PMD_TABLE_BIT          (_AT(pmdval_t, 1) << 1)
+#define PMD_BIT4               (_AT(pmdval_t, 0))
+#define PMD_DOMAIN(x)          (_AT(pmdval_t, 0))
+#define PMD_APTABLE_SHIFT      (61)
+#define PMD_APTABLE            (_AT(pgdval_t, 3) << PGD_APTABLE_SHIFT)
+#define PMD_PXNTABLE           (_AT(pgdval_t, 1) << 59)
+
+/*
+ *   - section
+ */
+#define PMD_SECT_BUFFERABLE    (_AT(pmdval_t, 1) << 2)
+#define PMD_SECT_CACHEABLE     (_AT(pmdval_t, 1) << 3)
+#define PMD_SECT_USER          (_AT(pmdval_t, 1) << 6)         /* AP[1] */
+#define PMD_SECT_AP2           (_AT(pmdval_t, 1) << 7)         /* read only */
+#define PMD_SECT_S             (_AT(pmdval_t, 3) << 8)
+#define PMD_SECT_AF            (_AT(pmdval_t, 1) << 10)
+#define PMD_SECT_nG            (_AT(pmdval_t, 1) << 11)
+#define PMD_SECT_PXN           (_AT(pmdval_t, 1) << 53)
+#define PMD_SECT_XN            (_AT(pmdval_t, 1) << 54)
+#define PMD_SECT_AP_WRITE      (_AT(pmdval_t, 0))
+#define PMD_SECT_AP_READ       (_AT(pmdval_t, 0))
+#define PMD_SECT_AP1           (_AT(pmdval_t, 1) << 6)
+#define PMD_SECT_TEX(x)                (_AT(pmdval_t, 0))
+
+/*
+ * AttrIndx[2:0] encoding (mapping attributes defined in the MAIR* registers).
+ */
+#define PMD_SECT_UNCACHED      (_AT(pmdval_t, 0) << 2) /* strongly ordered */
+#define PMD_SECT_BUFFERED      (_AT(pmdval_t, 1) << 2) /* normal non-cacheable 
*/
+#define PMD_SECT_WT            (_AT(pmdval_t, 2) << 2) /* normal inner 
write-through */
+#define PMD_SECT_WB            (_AT(pmdval_t, 3) << 2) /* normal inner 
write-back */
+#define PMD_SECT_WBWA          (_AT(pmdval_t, 7) << 2) /* normal inner 
write-alloc */
+
+/*
+ * + Level 3 descriptor (PTE)
+ */
+#define PTE_TYPE_MASK          (_AT(pteval_t, 3) << 0)
+#define PTE_TYPE_FAULT         (_AT(pteval_t, 0) << 0)
+#define PTE_TYPE_PAGE          (_AT(pteval_t, 3) << 0)
+#define PTE_TABLE_BIT          (_AT(pteval_t, 1) << 1)
+#define PTE_BUFFERABLE         (_AT(pteval_t, 1) << 2)         /* AttrIndx[0] 
*/
+#define PTE_CACHEABLE          (_AT(pteval_t, 1) << 3)         /* AttrIndx[1] 
*/
+#define PTE_AP2                        (_AT(pteval_t, 1) << 7)         /* 
AP[2] */
+#define PTE_EXT_SHARED         (_AT(pteval_t, 3) << 8)         /* SH[1:0], 
inner shareable */
+#define PTE_EXT_AF             (_AT(pteval_t, 1) << 10)        /* Access Flag 
*/
+#define PTE_EXT_NG             (_AT(pteval_t, 1) << 11)        /* nG */
+#define PTE_EXT_XN             (_AT(pteval_t, 1) << 54)        /* XN */
+
+#endif /* _ASMARM_PGTABLE_HWDEF_H_ */
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to