hw/usb/msd: Add status to usb_msd_packet_complete() function

This is a convenience change that accepts a status when completing a
packet.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20241110034000.379463-2-npiggin@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
Nicholas Piggin 2024-11-10 13:39:59 +10:00 committed by Philippe Mathieu-Daudé
parent b7bd67fb31
commit bd8760dcfd

View file

@ -177,7 +177,7 @@ static const USBDesc desc = {
.str = desc_strings, .str = desc_strings,
}; };
static void usb_msd_packet_complete(MSDState *s) static void usb_msd_packet_complete(MSDState *s, int status)
{ {
USBPacket *p = s->packet; USBPacket *p = s->packet;
@ -187,6 +187,7 @@ static void usb_msd_packet_complete(MSDState *s)
* usb_packet_complete returns. * usb_packet_complete returns.
*/ */
trace_usb_msd_packet_complete(); trace_usb_msd_packet_complete();
p->status = status;
s->packet = NULL; s->packet = NULL;
usb_packet_complete(&s->dev, p); usb_packet_complete(&s->dev, p);
} }
@ -196,8 +197,7 @@ static void usb_msd_fatal_error(MSDState *s)
trace_usb_msd_fatal_error(); trace_usb_msd_fatal_error();
if (s->packet) { if (s->packet) {
s->packet->status = USB_RET_STALL; usb_msd_packet_complete(s, USB_RET_STALL);
usb_msd_packet_complete(s);
} }
/* /*
@ -255,8 +255,8 @@ void usb_msd_transfer_data(SCSIRequest *req, uint32_t len)
usb_msd_copy_data(s, p); usb_msd_copy_data(s, p);
p = s->packet; p = s->packet;
if (p && p->actual_length == p->iov.size) { if (p && p->actual_length == p->iov.size) {
p->status = USB_RET_SUCCESS; /* Clear previous ASYNC status */ /* USB_RET_SUCCESS status clears previous ASYNC status */
usb_msd_packet_complete(s); usb_msd_packet_complete(s, USB_RET_SUCCESS);
} }
} }
} }
@ -295,8 +295,8 @@ void usb_msd_command_complete(SCSIRequest *req, size_t resid)
s->mode = USB_MSDM_CSW; s->mode = USB_MSDM_CSW;
} }
} }
p->status = USB_RET_SUCCESS; /* Clear previous ASYNC status */ /* USB_RET_SUCCESS status clears previous ASYNC status */
usb_msd_packet_complete(s); usb_msd_packet_complete(s, USB_RET_SUCCESS);
} else if (s->data_len == 0) { } else if (s->data_len == 0) {
s->mode = USB_MSDM_CSW; s->mode = USB_MSDM_CSW;
} }
@ -332,8 +332,7 @@ void usb_msd_handle_reset(USBDevice *dev)
assert(s->req == NULL); assert(s->req == NULL);
if (s->packet) { if (s->packet) {
s->packet->status = USB_RET_STALL; usb_msd_packet_complete(s, USB_RET_STALL);
usb_msd_packet_complete(s);
} }
memset(&s->csw, 0, sizeof(s->csw)); memset(&s->csw, 0, sizeof(s->csw));