]> xenbits.xensource.com Git - people/liuw/xtf.git/commitdiff
Add CONFIG_{32,64}BIT to config.h
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 3 Aug 2016 14:20:45 +0000 (15:20 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 3 Aug 2016 14:21:16 +0000 (15:21 +0100)
To allow the use of IS_DEFINED() in preference to #ifdef __x86_64__/__i386__
to reduce the likelihood of bitrot.

In turn, modify page.h and pagetable.h sufficiently to compile for unpaged
enviroments. This leaves a link error if dead-code-elimination doesn't manage
to elide the reference.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
include/arch/x86/config.h
include/arch/x86/page.h
include/arch/x86/pagetable.h

index 7ee701010b928add12fe2d7d7e55042a00c4d47c..d626df5b83e5f62f4fa82b92384a6daabc763d06 100644 (file)
@@ -16,6 +16,7 @@
 #if defined(CONFIG_ENV_pv64)
 
 #define CONFIG_PV 1
+#define CONFIG_64BIT 1
 #define CONFIG_PAGING_LEVELS 4
 #define ENVIRONMENT_DESCRIPTION "PV 64bit (Long mode 4 levels)"
 
@@ -24,6 +25,7 @@
 #elif defined(CONFIG_ENV_pv32pae)
 
 #define CONFIG_PV 1
+#define CONFIG_32BIT 1
 #define CONFIG_PAGING_LEVELS 3
 #define ENVIRONMENT_DESCRIPTION "PV 32bit (PAE 3 levels)"
 
@@ -32,6 +34,7 @@
 #elif defined(CONFIG_ENV_hvm64)
 
 #define CONFIG_HVM 1
+#define CONFIG_64BIT 1
 #define CONFIG_PAGING_LEVELS 4
 #define ENVIRONMENT_DESCRIPTION "HVM 64bit (Long mode 4 levels)"
 
@@ -40,6 +43,7 @@
 #elif defined(CONFIG_ENV_hvm32pae)
 
 #define CONFIG_HVM 1
+#define CONFIG_32BIT 1
 #define CONFIG_PAGING_LEVELS 3
 #define ENVIRONMENT_DESCRIPTION "HVM 32bit (PAE 3 levels)"
 
@@ -48,6 +52,7 @@
 #elif defined(CONFIG_ENV_hvm32pse)
 
 #define CONFIG_HVM 1
+#define CONFIG_32BIT 1
 #define CONFIG_PAGING_LEVELS 2
 #define ENVIRONMENT_DESCRIPTION "HVM 32bit (PSE 2 levels)"
 
@@ -56,6 +61,7 @@
 #elif defined(CONFIG_ENV_hvm32)
 
 #define CONFIG_HVM 1
+#define CONFIG_32BIT 1
 #define CONFIG_PAGING_LEVELS 0
 #define ENVIRONMENT_DESCRIPTION "HVM 32bit (No paging)"
 
index d8d070eb8ff88f1bb887ccdf9bc19710a5b6948c..bff5063588cbe7d3edbd5c7c5bc5e7c6420a473c 100644 (file)
@@ -96,6 +96,8 @@
 typedef uint64_t paddr_t;
 #define PRIpaddr "016"PRIx64
 
+#if CONFIG_PAGING_LEVELS > 0 /* Some form of pagetables. */
+
 #if CONFIG_PAGING_LEVELS == 2 /* PSE Paging */
 
 typedef pse_intpte_t intpte_t;
@@ -144,6 +146,14 @@ static inline unsigned int l4_table_offset(unsigned long va)
 
 #endif /* CONFIG_PAGING_LEVELS >= 4 */
 
+#else /* CONFIG_PAGING_LEVELS > 0 */
+
+/* Enough compatibility to compile in unpaged environments. */
+typedef unsigned long intpte_t;
+#define PRIpte "08lx"
+
+#endif
+
 #ifdef CONFIG_HVM
 
 extern pae_intpte_t pae_l1_identmap[PAE_L1_PT_ENTRIES];
index 24789fe7fa5623e294606748845bd295dc96bba5..aa5ab82b529e4cef5058c4cb3c88e025641bc699 100644 (file)
@@ -25,7 +25,15 @@ static inline intpte_t pte_from_virt(const void *va, uint64_t flags)
     return pte_from_paddr((paddr_t)virt_to_gfn(va) << PAGE_SHIFT, flags);
 }
 
-#endif /* CONFIG_PAGING_LEVELS > 0 */
+#else /* CONFIG_PAGING_LEVELS > 0 */
+
+/* Enough compatibility to compile in unpaged environments. */
+extern paddr_t pte_to_paddr(intpte_t pte);
+extern intpte_t pte_from_paddr(paddr_t paddr, uint64_t flags);
+extern intpte_t pte_from_gfn(unsigned long gfn, uint64_t flags);
+extern intpte_t pte_from_virt(const void *va, uint64_t flags);
+
+#endif
 
 #endif /* XTF_X86_PAGETABLE_H */