#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)"
#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)"
#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)"
#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)"
#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)"
#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)"
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;
#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];
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 */