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