``backendVersion``
Options for the ``version`` attribute of the ``<tpm><backend/>`` element.
+USB redirect device
+^^^^^^^^^^^^^^^^^^^
+
+USB redirdev device capabilities are exposed under the ``redirdev`` element. For instance:
+
+::
+
+ <domainCapabilities>
+ ...
+ <devices>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
+ ...
+ </devices>
+ </domainCapabilities>
+
+``bus``
+ Options for the ``bus`` attribute of the ``<redirdev/>`` element.
+
Features
~~~~~~~~
}
+static void
+virDomainCapsDeviceRedirdevFormat(virBuffer *buf,
+ const virDomainCapsDeviceRedirdev *redirdev)
+{
+ FORMAT_PROLOGUE(redirdev);
+
+ ENUM_PROCESS(redirdev, bus, virDomainRedirdevBusTypeToString);
+
+ FORMAT_EPILOGUE(redirdev);
+}
+
+
/**
* virDomainCapsFeatureGICFormat:
* @buf: target buffer
virDomainCapsDeviceRNGFormat(&buf, &caps->rng);
virDomainCapsDeviceFilesystemFormat(&buf, &caps->filesystem);
virDomainCapsDeviceTPMFormat(&buf, &caps->tpm);
+ virDomainCapsDeviceRedirdevFormat(&buf, &caps->redirdev);
virBufferAdjustIndent(&buf, -2);
virBufferAddLit(&buf, "</devices>\n");
virDomainCapsEnum backendVersion; /* virDomainTPMVersion */
};
+STATIC_ASSERT_ENUM(VIR_DOMAIN_REDIRDEV_BUS_LAST);
+typedef struct _virDomainCapsDeviceRedirdev virDomainCapsDeviceRedirdev;
+struct _virDomainCapsDeviceRedirdev {
+ virTristateBool supported;
+ virDomainCapsEnum bus; /* virDomainRedirdevBus */
+};
+
STATIC_ASSERT_ENUM(VIR_DOMAIN_FS_DRIVER_TYPE_LAST);
typedef struct _virDomainCapsDeviceFilesystem virDomainCapsDeviceFilesystem;
struct _virDomainCapsDeviceFilesystem {
virDomainCapsDeviceRNG rng;
virDomainCapsDeviceFilesystem filesystem;
virDomainCapsDeviceTPM tpm;
+ virDomainCapsDeviceRedirdev redirdev;
/* add new domain devices here */
virDomainCapsFeatureGIC gic;
<optional>
<ref name="tpm"/>
</optional>
+ <optional>
+ <ref name="redirdev"/>
+ </optional>
</element>
</define>
</element>
</define>
+ <define name="redirdev">
+ <element name="redirdev">
+ <ref name="supported"/>
+ <ref name="enum"/>
+ </element>
+ </define>
+
<define name="features">
<element name="features">
<optional>
}
+void
+virQEMUCapsFillDomainDeviceRedirdevCaps(virQEMUCaps *qemuCaps,
+ virDomainCapsDeviceRedirdev *redirdev)
+{
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_USB_REDIR)) {
+ redirdev->supported = VIR_TRISTATE_BOOL_YES;
+ redirdev->bus.report = true;
+ VIR_DOMAIN_CAPS_ENUM_SET(redirdev->bus, VIR_DOMAIN_REDIRDEV_BUS_USB);
+ } else {
+ redirdev->supported = VIR_TRISTATE_BOOL_NO;
+ }
+}
+
+
+
/**
* virQEMUCapsSupportsGICVersion:
* @qemuCaps: QEMU capabilities
virDomainCapsDeviceRNG *rng = &domCaps->rng;
virDomainCapsDeviceFilesystem *filesystem = &domCaps->filesystem;
virDomainCapsDeviceTPM *tpm = &domCaps->tpm;
+ virDomainCapsDeviceRedirdev *redirdev = &domCaps->redirdev;
virDomainCapsMemoryBacking *memoryBacking = &domCaps->memoryBacking;
virQEMUCapsFillDomainFeaturesFromQEMUCaps(qemuCaps, domCaps);
virQEMUCapsFillDomainDeviceRNGCaps(qemuCaps, rng);
virQEMUCapsFillDomainDeviceFSCaps(qemuCaps, filesystem);
virQEMUCapsFillDomainDeviceTPMCaps(qemuCaps, tpm);
+ virQEMUCapsFillDomainDeviceRedirdevCaps(qemuCaps, redirdev);
virQEMUCapsFillDomainFeatureGICCaps(qemuCaps, domCaps);
virQEMUCapsFillDomainFeatureSEVCaps(qemuCaps, domCaps);
virQEMUCapsFillDomainFeatureS390PVCaps(qemuCaps, domCaps);
void virQEMUCapsFillDomainDeviceTPMCaps(virQEMUCaps *qemuCaps,
virDomainCapsDeviceTPM *tpm);
+void virQEMUCapsFillDomainDeviceRedirdevCaps(virQEMUCaps *qemuCaps,
+ virDomainCapsDeviceRedirdev *redirdev);
+
bool virQEMUCapsGuestIsNative(virArch host,
virArch guest);
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
</enum>
</filesystem>
<tpm supported='no'/>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='yes'>
</enum>
</filesystem>
<tpm supported='no'/>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>
</enum>
</filesystem>
<tpm supported='no'/>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='yes'>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
</enum>
</filesystem>
<tpm supported='no'/>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='yes'>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>
</enum>
</filesystem>
<tpm supported='no'/>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>1.2</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='yes'>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>
</enum>
</filesystem>
<tpm supported='no'/>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='yes'>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='yes'>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>
<value>2.0</value>
</enum>
</tpm>
+ <redirdev supported='yes'>
+ <enum name='bus'>
+ <value>usb</value>
+ </enum>
+ </redirdev>
</devices>
<features>
<gic supported='no'/>