Revision 806b6024 hw/usb-hub.c
b/hw/usb-hub.c | ||
---|---|---|
486 | 486 |
port = &s->ports[i]; |
487 | 487 |
dev = port->port.dev; |
488 | 488 |
if (dev && (port->wPortStatus & PORT_STAT_ENABLE)) { |
489 |
ret = dev->handle_packet(dev, p); |
|
489 |
ret = dev->info->handle_packet(dev, p);
|
|
490 | 490 |
if (ret != USB_RET_NODEV) { |
491 | 491 |
return ret; |
492 | 492 |
} |
... | ... | |
521 | 521 |
qemu_free(s); |
522 | 522 |
} |
523 | 523 |
|
524 |
USBDevice *usb_hub_init(int nb_ports)
|
|
524 |
static int usb_hub_initfn(USBDevice *dev)
|
|
525 | 525 |
{ |
526 |
USBHubState *s; |
|
526 |
USBHubState *s = DO_UPCAST(USBHubState, dev, dev);
|
|
527 | 527 |
USBHubPort *port; |
528 | 528 |
int i; |
529 | 529 |
|
530 |
if (nb_ports > MAX_PORTS) |
|
531 |
return NULL; |
|
532 |
s = qemu_mallocz(sizeof(USBHubState)); |
|
533 |
s->dev.speed = USB_SPEED_FULL; |
|
534 |
s->dev.handle_packet = usb_hub_handle_packet; |
|
535 |
|
|
536 |
/* generic USB device init */ |
|
537 |
s->dev.handle_reset = usb_hub_handle_reset; |
|
538 |
s->dev.handle_control = usb_hub_handle_control; |
|
539 |
s->dev.handle_data = usb_hub_handle_data; |
|
540 |
s->dev.handle_destroy = usb_hub_handle_destroy; |
|
541 |
|
|
542 |
pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Hub"); |
|
543 |
|
|
544 |
s->nb_ports = nb_ports; |
|
545 |
for(i = 0; i < s->nb_ports; i++) { |
|
530 |
s->dev.speed = USB_SPEED_FULL, |
|
531 |
s->nb_ports = MAX_PORTS; /* FIXME: make configurable */ |
|
532 |
for (i = 0; i < s->nb_ports; i++) { |
|
546 | 533 |
port = &s->ports[i]; |
547 | 534 |
qemu_register_usb_port(&port->port, s, i, usb_hub_attach); |
548 | 535 |
port->wPortStatus = PORT_STAT_POWER; |
549 | 536 |
port->wPortChange = 0; |
550 | 537 |
} |
551 |
return (USBDevice *)s; |
|
538 |
return 0; |
|
539 |
} |
|
540 |
|
|
541 |
USBDevice *usb_hub_init(int nb_ports) |
|
542 |
{ |
|
543 |
return usb_create_simple(NULL /* FIXME */, "QEMU USB Hub"); |
|
544 |
} |
|
545 |
|
|
546 |
static struct USBDeviceInfo hub_info = { |
|
547 |
.qdev.name = "QEMU USB Hub", |
|
548 |
.qdev.size = sizeof(USBHubState), |
|
549 |
.init = usb_hub_initfn, |
|
550 |
.handle_packet = usb_hub_handle_packet, |
|
551 |
.handle_reset = usb_hub_handle_reset, |
|
552 |
.handle_control = usb_hub_handle_control, |
|
553 |
.handle_data = usb_hub_handle_data, |
|
554 |
.handle_destroy = usb_hub_handle_destroy, |
|
555 |
}; |
|
556 |
|
|
557 |
static void usb_hub_register_devices(void) |
|
558 |
{ |
|
559 |
usb_qdev_register(&hub_info); |
|
552 | 560 |
} |
561 |
device_init(usb_hub_register_devices) |
Also available in: Unified diff