mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemuBuildUSBControllerDevStr: Split out validation of USB controller
Move the validation code into a separate function. For now the validation is still kept in the commandline format step as simply just moving it to the validator causes failures in the test suite, which will need to be investigated deeper. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
d8f04f1575
commit
3e8d38237d
@ -2779,6 +2779,38 @@ qemuControllerModelUSBToCaps(int model)
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
qemuValidateDomainDeviceDefControllerUSB(const virDomainControllerDef *def,
|
||||
virQEMUCaps *qemuCaps)
|
||||
{
|
||||
if (def->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("no model provided for USB controller"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!virQEMUCapsGet(qemuCaps, qemuControllerModelUSBToCaps(def->model))) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("USB controller model '%s' not supported in this QEMU binary"),
|
||||
virDomainControllerModelUSBTypeToString(def->model));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (def->opts.usbopts.ports != -1) {
|
||||
if ((def->model != VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI ||
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI_PORTS)) &&
|
||||
def->model != VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("usb controller type '%s' doesn't support 'ports' with this QEMU binary"),
|
||||
virDomainControllerModelUSBTypeToString(def->model));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
qemuBuildUSBControllerFindMasterAlias(const virDomainDef *domainDef,
|
||||
const virDomainControllerDef *def)
|
||||
@ -2810,38 +2842,12 @@ qemuBuildUSBControllerDevStr(const virDomainDef *domainDef,
|
||||
virQEMUCaps *qemuCaps,
|
||||
virBuffer *buf)
|
||||
{
|
||||
const char *smodel;
|
||||
int model, flags;
|
||||
|
||||
model = def->model;
|
||||
|
||||
if (model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
"%s", _("no model provided for USB controller"));
|
||||
if (qemuValidateDomainDeviceDefControllerUSB(def, qemuCaps) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
smodel = qemuControllerModelUSBTypeToString(model);
|
||||
flags = qemuControllerModelUSBToCaps(model);
|
||||
|
||||
if (flags == -1 || !virQEMUCapsGet(qemuCaps, flags)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("%s not supported in this QEMU binary"), smodel);
|
||||
return -1;
|
||||
}
|
||||
|
||||
virBufferAsprintf(buf, "%s", smodel);
|
||||
virBufferAsprintf(buf, "%s", qemuControllerModelUSBTypeToString(def->model));
|
||||
|
||||
if (def->opts.usbopts.ports != -1) {
|
||||
if ((model != VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI ||
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI_PORTS)) &&
|
||||
model != VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("usb controller type %s doesn't support 'ports' "
|
||||
"with this QEMU binary"), smodel);
|
||||
return -1;
|
||||
}
|
||||
|
||||
virBufferAsprintf(buf, ",p2=%d,p3=%d",
|
||||
def->opts.usbopts.ports, def->opts.usbopts.ports);
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
unsupported configuration: nec-usb-xhci not supported in this QEMU binary
|
||||
unsupported configuration: USB controller model 'nec-xhci' not supported in this QEMU binary
|
||||
|
@ -1 +1 @@
|
||||
unsupported configuration: qemu-xhci not supported in this QEMU binary
|
||||
unsupported configuration: USB controller model 'qemu-xhci' not supported in this QEMU binary
|
||||
|
Loading…
x
Reference in New Issue
Block a user