USB: increase max usb devices to 14 for newer machine version and ostype

for machine versions >= 7.1 and ostype linux or windows > 7, we use the
qemu-xhci controller where we have up to 14 usable ports, so make them
available to the user

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2022-11-10 15:35:57 +01:00 committed by Thomas Lamprecht
parent 4862922a2b
commit 0c3d18ef13
2 changed files with 16 additions and 2 deletions

View File

@ -823,7 +823,7 @@ while (my ($k, $v) = each %$confdesc) {
PVE::JSONSchema::register_standard_option("pve-qm-$k", $v);
}
my $MAX_USB_DEVICES = 5;
my $MAX_USB_DEVICES = 14;
my $MAX_NETS = 32;
my $MAX_SERIAL_PORTS = 4;
my $MAX_PARALLEL_PORTS = 3;
@ -1102,7 +1102,8 @@ EODESCR
my $usbdesc = {
optional => 1,
type => 'string', format => $usb_fmt,
description => "Configure an USB device (n is 0 to 4).",
description => "Configure an USB device (n is 0 to 4, for machine version >= 7.1 and ostype"
." l26 or windows > 7, n can be up to 14).",
};
PVE::JSONSchema::register_standard_option("pve-qm-usb", $usbdesc);

View File

@ -14,6 +14,8 @@ get_usb_controllers
get_usb_devices
);
my $OLD_MAX_USB = 5;
sub parse_usb_device {
my ($value) = @_;
@ -35,6 +37,15 @@ sub parse_usb_device {
return $res;
}
my sub check_usb_index {
my ($index, $use_qemu_xhci) = @_;
die "using usb$index is only possible with machine type >= 7.1 and ostype l26 or windows > 7\n"
if $index >= $OLD_MAX_USB && !$use_qemu_xhci;
return undef;
}
sub get_usb_controllers {
my ($conf, $bridges, $arch, $machine, $format, $max_usb_devices, $machine_version) = @_;
@ -72,6 +83,7 @@ sub get_usb_controllers {
my $use_usb = 0;
for (my $i = 0; $i < $max_usb_devices; $i++) {
next if !$conf->{"usb$i"};
check_usb_index($i, $use_qemu_xhci);
my $d = eval { PVE::JSONSchema::parse_property_string($format,$conf->{"usb$i"}) };
next if !$d;
$use_usb = 1;
@ -100,6 +112,7 @@ sub get_usb_devices {
for (my $i = 0; $i < $max_usb_devices; $i++) {
my $devname = "usb$i";
next if !$conf->{$devname};
check_usb_index($i, $use_qemu_xhci);
my $d = eval { PVE::JSONSchema::parse_property_string($format,$conf->{$devname}) };
next if !$d;