mirror of https://gitee.com/openkylin/qemu.git
usb: move ehci_create_ich9_with_companions to hw/i386
This function is only needed when Q35 is in use. Moving it to the same file that uses it lets you disable the entire USB subsystem in x86_64-softmmu.mak; of course doing that will cause -usb to break horribly, but one thing at a time. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 1545064358-4601-1-git-send-email-pbonzini@redhat.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
114529f79e
commit
efce3175fd
|
@ -58,6 +58,59 @@
|
||||||
/* ICH9 AHCI has 6 ports */
|
/* ICH9 AHCI has 6 ports */
|
||||||
#define MAX_SATA_PORTS 6
|
#define MAX_SATA_PORTS 6
|
||||||
|
|
||||||
|
struct ehci_companions {
|
||||||
|
const char *name;
|
||||||
|
int func;
|
||||||
|
int port;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ehci_companions ich9_1d[] = {
|
||||||
|
{ .name = "ich9-usb-uhci1", .func = 0, .port = 0 },
|
||||||
|
{ .name = "ich9-usb-uhci2", .func = 1, .port = 2 },
|
||||||
|
{ .name = "ich9-usb-uhci3", .func = 2, .port = 4 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ehci_companions ich9_1a[] = {
|
||||||
|
{ .name = "ich9-usb-uhci4", .func = 0, .port = 0 },
|
||||||
|
{ .name = "ich9-usb-uhci5", .func = 1, .port = 2 },
|
||||||
|
{ .name = "ich9-usb-uhci6", .func = 2, .port = 4 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static int ehci_create_ich9_with_companions(PCIBus *bus, int slot)
|
||||||
|
{
|
||||||
|
const struct ehci_companions *comp;
|
||||||
|
PCIDevice *ehci, *uhci;
|
||||||
|
BusState *usbbus;
|
||||||
|
const char *name;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
switch (slot) {
|
||||||
|
case 0x1d:
|
||||||
|
name = "ich9-usb-ehci1";
|
||||||
|
comp = ich9_1d;
|
||||||
|
break;
|
||||||
|
case 0x1a:
|
||||||
|
name = "ich9-usb-ehci2";
|
||||||
|
comp = ich9_1a;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ehci = pci_create_multifunction(bus, PCI_DEVFN(slot, 7), true, name);
|
||||||
|
qdev_init_nofail(&ehci->qdev);
|
||||||
|
usbbus = QLIST_FIRST(&ehci->qdev.child_bus);
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
uhci = pci_create_multifunction(bus, PCI_DEVFN(slot, comp[i].func),
|
||||||
|
true, comp[i].name);
|
||||||
|
qdev_prop_set_string(&uhci->qdev, "masterbus", usbbus->name);
|
||||||
|
qdev_prop_set_uint32(&uhci->qdev, "firstport", comp[i].port);
|
||||||
|
qdev_init_nofail(&uhci->qdev);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* PC hardware initialisation */
|
/* PC hardware initialisation */
|
||||||
static void pc_q35_init(MachineState *machine)
|
static void pc_q35_init(MachineState *machine)
|
||||||
{
|
{
|
||||||
|
|
|
@ -230,56 +230,3 @@ static void ehci_pci_register_types(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
type_init(ehci_pci_register_types)
|
type_init(ehci_pci_register_types)
|
||||||
|
|
||||||
struct ehci_companions {
|
|
||||||
const char *name;
|
|
||||||
int func;
|
|
||||||
int port;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct ehci_companions ich9_1d[] = {
|
|
||||||
{ .name = "ich9-usb-uhci1", .func = 0, .port = 0 },
|
|
||||||
{ .name = "ich9-usb-uhci2", .func = 1, .port = 2 },
|
|
||||||
{ .name = "ich9-usb-uhci3", .func = 2, .port = 4 },
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct ehci_companions ich9_1a[] = {
|
|
||||||
{ .name = "ich9-usb-uhci4", .func = 0, .port = 0 },
|
|
||||||
{ .name = "ich9-usb-uhci5", .func = 1, .port = 2 },
|
|
||||||
{ .name = "ich9-usb-uhci6", .func = 2, .port = 4 },
|
|
||||||
};
|
|
||||||
|
|
||||||
int ehci_create_ich9_with_companions(PCIBus *bus, int slot)
|
|
||||||
{
|
|
||||||
const struct ehci_companions *comp;
|
|
||||||
PCIDevice *ehci, *uhci;
|
|
||||||
BusState *usbbus;
|
|
||||||
const char *name;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
switch (slot) {
|
|
||||||
case 0x1d:
|
|
||||||
name = "ich9-usb-ehci1";
|
|
||||||
comp = ich9_1d;
|
|
||||||
break;
|
|
||||||
case 0x1a:
|
|
||||||
name = "ich9-usb-ehci2";
|
|
||||||
comp = ich9_1a;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ehci = pci_create_multifunction(bus, PCI_DEVFN(slot, 7), true, name);
|
|
||||||
qdev_init_nofail(&ehci->qdev);
|
|
||||||
usbbus = QLIST_FIRST(&ehci->qdev.child_bus);
|
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
|
||||||
uhci = pci_create_multifunction(bus, PCI_DEVFN(slot, comp[i].func),
|
|
||||||
true, comp[i].name);
|
|
||||||
qdev_prop_set_string(&uhci->qdev, "masterbus", usbbus->name);
|
|
||||||
qdev_prop_set_uint32(&uhci->qdev, "firstport", comp[i].port);
|
|
||||||
qdev_init_nofail(&uhci->qdev);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
|
@ -593,8 +593,6 @@ const char *usb_device_get_product_desc(USBDevice *dev);
|
||||||
|
|
||||||
const USBDesc *usb_device_get_usb_desc(USBDevice *dev);
|
const USBDesc *usb_device_get_usb_desc(USBDevice *dev);
|
||||||
|
|
||||||
int ehci_create_ich9_with_companions(PCIBus *bus, int slot);
|
|
||||||
|
|
||||||
/* quirks.c */
|
/* quirks.c */
|
||||||
|
|
||||||
/* In bulk endpoints are streaming data sources (iow behave like isoc eps) */
|
/* In bulk endpoints are streaming data sources (iow behave like isoc eps) */
|
||||||
|
|
Loading…
Reference in New Issue