arm/p2m: Add helper functions to map memory regions
authorParth Dixit <parth.dixit@linaro.org>
Wed, 30 Mar 2016 10:15:00 +0000 (12:15 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 30 Mar 2016 15:01:03 +0000 (17:01 +0200)
Create a helper function for mapping with cached attributes and
read-write range.

Signed-off-by: Parth Dixit <parth.dixit@linaro.org>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Julien Grall <julien.grall@arm.com>
xen/arch/arm/p2m.c
xen/include/asm-arm/p2m.h

index a2a9c4bf94a6938c92c0bc864250fed4b6aff9bb..7e5f5d14e2b2b9915535f7cd71dede1b263e53d7 100644 (file)
@@ -1218,6 +1218,32 @@ int p2m_populate_ram(struct domain *d,
                              d->arch.p2m.default_access);
 }
 
+int map_regions_rw_cache(struct domain *d,
+                         unsigned long start_gfn,
+                         unsigned long nr,
+                         unsigned long mfn)
+{
+    return apply_p2m_changes(d, INSERT,
+                             pfn_to_paddr(start_gfn),
+                             pfn_to_paddr(start_gfn + nr),
+                             pfn_to_paddr(mfn),
+                             MATTR_MEM, 0, p2m_mmio_direct,
+                             p2m_access_rw);
+}
+
+int unmap_regions_rw_cache(struct domain *d,
+                           unsigned long start_gfn,
+                           unsigned long nr,
+                           unsigned long mfn)
+{
+    return apply_p2m_changes(d, REMOVE,
+                             pfn_to_paddr(start_gfn),
+                             pfn_to_paddr(start_gfn + nr),
+                             pfn_to_paddr(mfn),
+                             MATTR_MEM, 0, p2m_invalid,
+                             p2m_access_rw);
+}
+
 int map_mmio_regions(struct domain *d,
                      unsigned long start_gfn,
                      unsigned long nr,
index 433952ab04972b756509b104e5c14860f7c841d9..55626b4d5c0246fd152f92aa779d330c3310c34b 100644 (file)
@@ -144,6 +144,16 @@ int p2m_cache_flush(struct domain *d, xen_pfn_t start_mfn, xen_pfn_t end_mfn);
 /* Setup p2m RAM mapping for domain d from start-end. */
 int p2m_populate_ram(struct domain *d, paddr_t start, paddr_t end);
 
+int map_regions_rw_cache(struct domain *d,
+                         unsigned long start_gfn,
+                         unsigned long nr_mfns,
+                         unsigned long mfn);
+
+int unmap_regions_rw_cache(struct domain *d,
+                           unsigned long start_gfn,
+                           unsigned long nr_mfns,
+                           unsigned long mfn);
+
 int guest_physmap_add_entry(struct domain *d,
                             unsigned long gfn,
                             unsigned long mfn,