+ if (s->masterbus) {
+ USBPort *ports[NB_PORTS];
+ for(i = 0; i< NB_PORTS; i++) {
+ s->ports[i].port.ops =&uhci_port_ops;
+ s->ports[i].port.opaque = s;
+ s->ports[i].port.index = i;
+ s->ports[i].port.speedmask =
+ USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL;
+ usb_port_location(&s->ports[i].port, NULL, i+1);
+ ports[i] =&s->ports[i].port;
+ }
+ if (usb_bus_register_companion(s->masterbus, ports, NB_PORTS,
+ s->firstport) != 0) {
+ return -1;
+ }
+ } else {
+ usb_bus_new(&s->bus,&uhci_bus_ops,&s->dev.qdev);
+ for(i = 0; i< NB_PORTS; i++) {
+ usb_register_port(&s->bus,&s->ports[i].port, s, i,&uhci_port_ops,
+ USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
+ usb_port_location(&s->ports[i].port, NULL, i+1);
+ }