Revision d47e59b8

b/hw/usb-ehci.c
1111 1111
    return 0;
1112 1112
}
1113 1113

  
1114
static void ehci_async_complete_packet(USBDevice *dev, USBPacket *packet)
1114
static void ehci_async_complete_packet(USBPort *port, USBPacket *packet)
1115 1115
{
1116 1116
    EHCIQueue *q = container_of(packet, EHCIQueue, packet);
1117 1117

  
b/hw/usb-hub.c
246 246
    }
247 247
}
248 248

  
249
static void usb_hub_wakeup(USBDevice *dev)
249
static void usb_hub_wakeup(USBPort *port1)
250 250
{
251
    USBHubState *s = dev->port->opaque;
252
    USBHubPort *port = &s->ports[dev->port->index];
251
    USBHubState *s = port1->opaque;
252
    USBHubPort *port = &s->ports[port1->index];
253 253

  
254 254
    if (port->wPortStatus & PORT_STAT_SUSPEND) {
255 255
        port->wPortChange |= PORT_STAT_C_SUSPEND;
......
257 257
    }
258 258
}
259 259

  
260
static void usb_hub_complete(USBDevice *dev, USBPacket *packet)
260
static void usb_hub_complete(USBPort *port, USBPacket *packet)
261 261
{
262
    USBHubState *s = dev->port->opaque;
262
    USBHubState *s = port->opaque;
263 263

  
264 264
    /*
265 265
     * Just pass it along upstream for now.
b/hw/usb-musb.c
261 261

  
262 262
static void musb_attach(USBPort *port);
263 263
static void musb_detach(USBPort *port);
264
static void musb_schedule_cb(USBDevice *dev, USBPacket *p);
264
static void musb_schedule_cb(USBPort *port, USBPacket *p);
265 265
static void musb_device_destroy(USBBus *bus, USBDevice *dev);
266 266

  
267 267
static USBPortOps musb_port_ops = {
......
517 517

  
518 518
#define musb_cb_tick	(dir ? musb_cb_tick1 : musb_cb_tick0)
519 519

  
520
static void musb_schedule_cb(USBDevice *dev, USBPacket *packey)
520
static void musb_schedule_cb(USBPort *port, USBPacket *packey)
521 521
{
522 522
    MUSBPacket *p = container_of(packey, MUSBPacket, p);
523 523
    MUSBEndPoint *ep = p->ep;
......
615 615
    }
616 616

  
617 617
    ep->status[dir] = ret;
618
    musb_schedule_cb(s->port.dev, &ep->packey[dir].p);
618
    musb_schedule_cb(&s->port, &ep->packey[dir].p);
619 619
}
620 620

  
621 621
static void musb_tx_packet_complete(USBPacket *packey, void *opaque)
b/hw/usb-ohci.c
367 367
        ohci_set_interrupt(s, OHCI_INTR_RHSC);
368 368
}
369 369

  
370
static void ohci_wakeup(USBDevice *dev)
370
static void ohci_wakeup(USBPort *port1)
371 371
{
372
    USBBus *bus = usb_bus_from_device(dev);
373
    OHCIState *s = container_of(bus, OHCIState, bus);
374
    int portnum = dev->port->index;
375
    OHCIPort *port = &s->rhport[portnum];
372
    OHCIState *s = port1->opaque;
373
    OHCIPort *port = &s->rhport[port1->index];
376 374
    uint32_t intr = 0;
377 375
    if (port->ctrl & OHCI_PORT_PSS) {
378
        DPRINTF("usb-ohci: port %d: wakeup\n", portnum);
376
        DPRINTF("usb-ohci: port %d: wakeup\n", port1->index);
379 377
        port->ctrl |= OHCI_PORT_PSSC;
380 378
        port->ctrl &= ~OHCI_PORT_PSS;
381 379
        intr = OHCI_INTR_RHSC;
......
602 600

  
603 601
static void ohci_process_lists(OHCIState *ohci, int completion);
604 602

  
605
static void ohci_async_complete_packet(USBDevice *dev, USBPacket *packet)
603
static void ohci_async_complete_packet(USBPort *port, USBPacket *packet)
606 604
{
607 605
    OHCIState *ohci = container_of(packet, OHCIState, usb_packet);
608 606
#ifdef DEBUG_PACKET
b/hw/usb-uhci.c
620 620
    uhci_resume(s);
621 621
}
622 622

  
623
static void uhci_wakeup(USBDevice *dev)
623
static void uhci_wakeup(USBPort *port1)
624 624
{
625
    USBBus *bus = usb_bus_from_device(dev);
626
    UHCIState *s = container_of(bus, UHCIState, bus);
627
    UHCIPort *port = s->ports + dev->port->index;
625
    UHCIState *s = port1->opaque;
626
    UHCIPort *port = &s->ports[port1->index];
628 627

  
629 628
    if (port->ctrl & UHCI_PORT_SUSPEND && !(port->ctrl & UHCI_PORT_RD)) {
630 629
        port->ctrl |= UHCI_PORT_RD;
......
657 656
    return ret;
658 657
}
659 658

  
660
static void uhci_async_complete(USBDevice *dev, USBPacket *packet);
659
static void uhci_async_complete(USBPort *port, USBPacket *packet);
661 660
static void uhci_process_frame(UHCIState *s);
662 661

  
663 662
/* return -1 if fatal error (frame must be stopped)
......
849 848
    return len;
850 849
}
851 850

  
852
static void uhci_async_complete(USBDevice *dev, USBPacket *packet)
851
static void uhci_async_complete(USBPort *port, USBPacket *packet)
853 852
{
854 853
    UHCIAsync *async = container_of(packet, UHCIAsync, packet);
855 854
    UHCIState *s = async->uhci;
b/hw/usb.c
52 52
void usb_wakeup(USBDevice *dev)
53 53
{
54 54
    if (dev->remote_wakeup && dev->port && dev->port->ops->wakeup) {
55
        dev->port->ops->wakeup(dev);
55
        dev->port->ops->wakeup(dev->port);
56 56
    }
57 57
}
58 58

  
......
335 335
{
336 336
    /* Note: p->owner != dev is possible in case dev is a hub */
337 337
    assert(p->owner != NULL);
338
    dev->port->ops->complete(dev, p);
338
    dev->port->ops->complete(dev->port, p);
339 339
    p->owner = NULL;
340 340
}
341 341

  
b/hw/usb.h
252 252
typedef struct USBPortOps {
253 253
    void (*attach)(USBPort *port);
254 254
    void (*detach)(USBPort *port);
255
    void (*wakeup)(USBDevice *dev);
256
    void (*complete)(USBDevice *dev, USBPacket *p);
255
    void (*wakeup)(USBPort *port);
256
    /*
257
     * Note that port->dev will be different then the device from which
258
     * the packet originated when a hub is involved, if you want the orginating
259
     * device use p->owner
260
     */
261
    void (*complete)(USBPort *port, USBPacket *p);
257 262
} USBPortOps;
258 263

  
259 264
/* USB port on which a device can be connected */

Also available in: Unified diff