Revision eb5e680a hw/usb-msd.c
b/hw/usb-msd.c | ||
---|---|---|
315 | 315 |
return ret; |
316 | 316 |
} |
317 | 317 |
|
318 |
static void usb_msd_cancel_io(USBPacket *p, void *opaque)
|
|
318 |
static void usb_msd_cancel_io(USBDevice *dev, USBPacket *p)
|
|
319 | 319 |
{ |
320 |
MSDState *s = opaque;
|
|
320 |
MSDState *s = DO_UPCAST(MSDState, dev, dev);
|
|
321 | 321 |
s->scsi_dev->info->cancel_io(s->scsi_dev, s->tag); |
322 | 322 |
s->packet = NULL; |
323 | 323 |
s->scsi_len = 0; |
... | ... | |
398 | 398 |
} |
399 | 399 |
if (s->usb_len) { |
400 | 400 |
DPRINTF("Deferring packet %p\n", p); |
401 |
usb_defer_packet(p, usb_msd_cancel_io, s); |
|
402 | 401 |
s->packet = p; |
403 | 402 |
ret = USB_RET_ASYNC; |
404 | 403 |
} else { |
... | ... | |
421 | 420 |
if (s->data_len != 0 || len < 13) |
422 | 421 |
goto fail; |
423 | 422 |
/* Waiting for SCSI write to complete. */ |
424 |
usb_defer_packet(p, usb_msd_cancel_io, s); |
|
425 | 423 |
s->packet = p; |
426 | 424 |
ret = USB_RET_ASYNC; |
427 | 425 |
break; |
... | ... | |
455 | 453 |
} |
456 | 454 |
if (s->usb_len) { |
457 | 455 |
DPRINTF("Deferring packet %p\n", p); |
458 |
usb_defer_packet(p, usb_msd_cancel_io, s); |
|
459 | 456 |
s->packet = p; |
460 | 457 |
ret = USB_RET_ASYNC; |
461 | 458 |
} else { |
... | ... | |
604 | 601 |
.usb_desc = &desc, |
605 | 602 |
.init = usb_msd_initfn, |
606 | 603 |
.handle_packet = usb_generic_handle_packet, |
604 |
.cancel_packet = usb_msd_cancel_io, |
|
607 | 605 |
.handle_attach = usb_desc_attach, |
608 | 606 |
.handle_reset = usb_msd_handle_reset, |
609 | 607 |
.handle_control = usb_msd_handle_control, |
Also available in: Unified diff