@@ -244,6 +244,31 @@ int xendevicemodel_unmap_io_range_from_ioreq_server(
return xendevicemodel_op(dmod, domid, 1, &op, sizeof(op));
}
+int xendevicemodel_map_mem_type_to_ioreq_server(
+ xendevicemodel_handle *dmod, domid_t domid, ioservid_t id, uint16_t type,
+ uint32_t flags)
+{
+ struct xen_dm_op op;
+ struct xen_dm_op_map_mem_type_to_ioreq_server *data;
+
+ if (type != HVMMEM_ioreq_server ||
+ flags & ~XEN_DMOP_IOREQ_MEM_ACCESS_WRITE) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ memset(&op, 0, sizeof(op));
+
+ op.op = XEN_DMOP_map_mem_type_to_ioreq_server;
+ data = &op.u.map_mem_type_to_ioreq_server;
+
+ data->id = id;
+ data->type = type;
+ data->flags = flags;
+
+ return xendevicemodel_op(dmod, domid, 1, &op, sizeof(op));
+}
+
int xendevicemodel_map_pcidev_to_ioreq_server(
xendevicemodel_handle *dmod, domid_t domid, ioservid_t id,
uint16_t segment, uint8_t bus, uint8_t device, uint8_t function)
@@ -104,6 +104,24 @@ int xendevicemodel_unmap_io_range_from_ioreq_server(
uint64_t start, uint64_t end);
/**
+ * This function registers/deregisters a memory type for emulation.
+ *
+ * @parm dmod a handle to an open devicemodel interface.
+ * @parm domid the domain id to be serviced.
+ * @parm id the IOREQ Server id.
+ * @parm type the memory type to be emulated. For now, only HVMMEM_ioreq_server
+ * is supported, and in the future new types can be introduced, e.g.
+ * HVMMEM_ioreq_serverX mapped to ioreq server X.
+ * @parm flags operations to be emulated; 0 for unmap. For now, only write
+ * operations will be emulated and can be extended to emulate
+ * read ones in the future.
+ * @return 0 on success, -1 on failure.
+ */
+int xendevicemodel_map_mem_type_to_ioreq_server(
+ xendevicemodel_handle *dmod, domid_t domid, ioservid_t id, uint16_t type,
+ uint32_t flags);
+
+/**
* This function registers a PCI device for config space emulation.
*
* @parm dmod a handle to an open devicemodel interface.
@@ -5,6 +5,7 @@ VERS_1.0 {
xendevicemodel_get_ioreq_server_info;
xendevicemodel_map_io_range_to_ioreq_server;
xendevicemodel_unmap_io_range_from_ioreq_server;
+ xendevicemodel_map_mem_type_to_ioreq_server;
xendevicemodel_map_pcidev_to_ioreq_server;
xendevicemodel_unmap_pcidev_from_ioreq_server;
xendevicemodel_destroy_ioreq_server;