#include <arch/x86/lib.h>
#include <arch/x86/processor.h>
#include <arch/x86/segment.h>
-#include <arch/x86/mm.h>
+#include <arch/x86/pagetable.h>
#include <arch/x86/symbolic-const.h>
/* Real entry points */
#include <xen/xen.h>
/*
+ * Terminology (inherited from Xen):
+ *
+ * GFN - Guest Frame Number
+ * What a guest writes into its pagetables.
+ * MFN - Machine Frame Number
+ * What Xen writes into its pagetables.
+ * PFN - Pseudophysical Frame Number
+ * A linear idea of a guests physical address space.
+ *
+ * For HVM, PFN == GFN, and MFN is strictly irrelevent.
+ * For PV, MFN == GFN != PFN.
+ *
* XTF memory layout.
*
* Wherever possible, identity layout for simplicity.
#endif /* CONFIG_PV */
+static inline void *gfn_to_virt(unsigned long gfn)
+{
+#if defined(CONFIG_PV)
+ return mfn_to_virt(gfn);
+#else
+ return pfn_to_virt(gfn);
+#endif
+}
+
+static inline unsigned long virt_to_gfn(const void *va)
+{
+#if defined(CONFIG_PV)
+ return virt_to_mfn(va);
+#else
+ return virt_to_pfn(va);
+#endif
+}
+
#endif /* XTF_X86_MM_H */
/*
#endif /* CONFIG_PAGING_LEVELS >= 4 */
-#if CONFIG_PAGING_LEVELS > 0
-
-static inline paddr_t pte_to_paddr(intpte_t pte)
-{
- return pte & PADDR_MASK & PAGE_MASK;
-}
-
-static inline intpte_t pte_from_paddr(paddr_t paddr, uint64_t flags)
-{
- return paddr | flags;
-}
-
-static inline intpte_t pte_from_gfn(unsigned long gfn, uint64_t flags)
-{
- return pte_from_paddr((paddr_t)gfn << PAGE_SHIFT, flags);
-}
-
-#endif /* CONFIG_PAGING_LEVELS > 0 */
-
#ifdef CONFIG_HVM
extern pae_intpte_t pae_l1_identmap[PAE_L1_PT_ENTRIES];
--- /dev/null
+#ifndef XTF_X86_PAGETABLE_H
+#define XTF_X86_PAGETABLE_H
+
+#include <arch/x86/mm.h>
+
+#if CONFIG_PAGING_LEVELS > 0
+
+static inline paddr_t pte_to_paddr(intpte_t pte)
+{
+ return pte & PADDR_MASK & PAGE_MASK;
+}
+
+static inline intpte_t pte_from_paddr(paddr_t paddr, uint64_t flags)
+{
+ return paddr | flags;
+}
+
+static inline intpte_t pte_from_gfn(unsigned long gfn, uint64_t flags)
+{
+ return pte_from_paddr((paddr_t)gfn << PAGE_SHIFT, flags);
+}
+
+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 */
+
+#endif /* XTF_X86_PAGETABLE_H */
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */