- Extended p2m_type_t with additional types: p2m_mmio_direct,
p2m_ext_storage.
- Added macros to classify memory types: P2M_RAM_TYPES.
- Introduced helper predicates: p2m_is_ram(), p2m_is_any_ram().
- Introduce arch_dt_passthrough() to tell handle_passthrough_prop()
from common code how to map device memory.
- Introduce p2m_first_external for detection for relational operations
with p2m type which is stored outside P2M's PTE bits.
Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---
Changes in V4:
- Drop underscores for argumets of p2m_is_ram() and p2m_is_any_ram().
- Add Acked-by: Jan Beulich <jbeulich@suse.com>.
---
Changes in V4:
- Drop underscode in p2m_to_mask()'s argument and for other similar helpers.
- Introduce arch_dt_passthrough_p2m_type() instead of p2m_mmio_direct.
- Drop for the moment grant tables related stuff as it isn't going to be used in the nearest future.
---
Changes in V3:
- Drop p2m_ram_ro.
- Rename p2m_mmio_direct_dev to p2m_mmio_direct_io to make it more RISC-V specicific.
- s/p2m_mmio_direct_dev/p2m_mmio_direct_io.
---
Changes in V2:
- Drop stuff connected to foreign mapping as it isn't necessary for RISC-V
right now.
---
xen/arch/riscv/include/asm/p2m.h | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/xen/arch/riscv/include/asm/p2m.h b/xen/arch/riscv/include/asm/p2m.h
index 85e67516c4..46ee0b93f2 100644
--- a/xen/arch/riscv/include/asm/p2m.h
+++ b/xen/arch/riscv/include/asm/p2m.h
@@ -64,8 +64,29 @@ struct p2m_domain {
typedef enum {
p2m_invalid = 0, /* Nothing mapped here */
p2m_ram_rw, /* Normal read/write domain RAM */
+ p2m_mmio_direct_io, /* Read/write mapping of genuine Device MMIO area,
+ PTE_PBMT_IO will be used for such mappings */
+ p2m_ext_storage, /* Following types'll be stored outsude PTE bits: */
+
+ /* Sentinel — not a real type, just a marker for comparison */
+ p2m_first_external = p2m_ext_storage,
} p2m_type_t;
+static inline p2m_type_t arch_dt_passthrough_p2m_type(void)
+{
+ return p2m_mmio_direct_io;
+}
+
+/* We use bitmaps and mask to handle groups of types */
+#define p2m_to_mask(t) BIT(t, UL)
+
+/* RAM types, which map to real machine frames */
+#define P2M_RAM_TYPES (p2m_to_mask(p2m_ram_rw))
+
+/* Useful predicates */
+#define p2m_is_ram(t) (p2m_to_mask(t) & P2M_RAM_TYPES)
+#define p2m_is_any_ram(t) (p2m_to_mask(t) & P2M_RAM_TYPES)
+
#include <xen/p2m-common.h>
static inline int get_page_and_type(struct page_info *page,
--
2.51.0