diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 967283aaa9..2adc2ff968 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -3590,6 +3590,11 @@ A directory on the host that can be accessed directly from the guest.
+
+
+
+
+
...
...
@@ -3702,6 +3707,8 @@ A directory on the host that can be accessed directly from the guest.
can also be set. ( :since:`Since 3.5.0` )
- For ``virtiofs``, the ``queue`` attribute can be used to specify the queue
size (i.e. how many requests can the queue fit). ( :since:`Since 6.2.0` )
+ - QEMU supports ``mtp`` which exposes a virtual USB MTP device to the
+ guest. ( :since:`Since 10.2.0` )
``binary``
The optional ``binary`` element can tune the options for virtiofsd. All of
diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
index d05b01ae5d..bc287307c8 100644
--- a/src/bhyve/bhyve_command.c
+++ b/src/bhyve/bhyve_command.c
@@ -611,6 +611,7 @@ bhyveBuildFSArgStr(const virDomainDef *def G_GNUC_UNUSED,
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
+ case VIR_DOMAIN_FS_DRIVER_TYPE_MTP:
case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unsupported filesystem driver '%1$s'"),
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 2a64a4a1ad..770b5fbbff 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -517,6 +517,7 @@ VIR_ENUM_IMPL(virDomainFSDriver,
"nbd",
"ploop",
"virtiofs",
+ "mtp",
);
VIR_ENUM_IMPL(virDomainFSAccessMode,
@@ -28724,6 +28725,15 @@ virDomainUSBDeviceDefForeach(virDomainDef *def,
}
}
+ /* usb-mtp */
+ for (i = 0; i < def->nfss; i++) {
+ virDomainFSDef *fsdev = def->fss[i];
+ if (fsdev->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_MTP) {
+ if (iter(&fsdev->info, opaque) < 0)
+ return -1;
+ }
+ }
+
return 0;
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index c7e5005b3b..76251938b8 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -804,6 +804,7 @@ typedef enum {
VIR_DOMAIN_FS_DRIVER_TYPE_NBD,
VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP,
VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS,
+ VIR_DOMAIN_FS_DRIVER_TYPE_MTP,
VIR_DOMAIN_FS_DRIVER_TYPE_LAST
} virDomainFSDriverType;
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index df44cd9857..c992956280 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -3253,6 +3253,11 @@
+
+
+ mtp
+
+
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index b163322191..7fab86d47f 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -861,6 +861,7 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDef *device,
*baseName = "vhost-user-fs";
break;
+ case VIR_DOMAIN_FS_DRIVER_TYPE_MTP:
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
@@ -2496,6 +2497,7 @@ qemuBuildFilesystemCommandLine(virCommand *cmd,
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
+ case VIR_DOMAIN_FS_DRIVER_TYPE_MTP:
case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
break;
}
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index af486aea97..cc3bc76971 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -642,6 +642,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev,
/* vhost-user-fs-pci */
return virtioFlags;
+ case VIR_DOMAIN_FS_DRIVER_TYPE_MTP:
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
@@ -2074,8 +2075,10 @@ qemuDomainAssignDevicePCISlots(virDomainDef *def,
if (!virDeviceInfoPCIAddressIsWanted(&def->fss[i]->info))
continue;
- /* Only support VirtIO-9p-pci so far. If that changes,
- * we might need to skip devices here */
+ /* Skip MTP device */
+ if (def->fss[i]->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_MTP)
+ continue;
+
if (qemuDomainPCIAddressReserveNextAddr(addrs, &def->fss[i]->info) < 0)
return -1;
}
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 73afd094a9..6a73d02050 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -4469,6 +4469,19 @@ qemuValidateDomainDeviceDefFS(virDomainFSDef *fs,
}
break;
+ case VIR_DOMAIN_FS_DRIVER_TYPE_MTP:
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_MTP)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("mtp is not supported with this QEMU binary"));
+ return -1;
+ }
+ if (fs->accessmode != VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("mtp only supports passthrough accessmode"));
+ return -1;
+ }
+ break;
+
case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
default:
virReportEnumRangeError(virDomainFSDriverType, fs->fsdriver);