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