From 0afc6df2a947dd544e56e62465a707eca83ff88d Mon Sep 17 00:00:00 2001 From: Florin9doi Date: Thu, 9 May 2024 23:02:56 +0300 Subject: [PATCH] USB: Disconnect the virtual device only for TRANSFER_NO_DEVICE error Resolve: #15565 --- rpcs3/Emu/Cell/lv2/sys_usbd.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp index 3bcce1bef873..7844d8901d85 100644 --- a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp @@ -587,11 +587,7 @@ void usb_handler_thread::transfer_complete(struct libusb_transfer* transfer) case LIBUSB_TRANSFER_COMPLETED: usbd_transfer->result = HC_CC_NOERR; break; case LIBUSB_TRANSFER_TIMED_OUT: usbd_transfer->result = EHCI_CC_XACT; break; case LIBUSB_TRANSFER_OVERFLOW: usbd_transfer->result = EHCI_CC_BABBLE; break; - case LIBUSB_TRANSFER_ERROR: - case LIBUSB_TRANSFER_CANCELLED: - case LIBUSB_TRANSFER_STALL: case LIBUSB_TRANSFER_NO_DEVICE: - default: usbd_transfer->result = EHCI_CC_HALTED; if (usbd_transfer->assigned_number && handled_devices.erase(usbd_transfer->assigned_number)) { @@ -600,6 +596,12 @@ void usb_handler_thread::transfer_complete(struct libusb_transfer* transfer) usbd_transfer->assigned_number = 0; } break; + case LIBUSB_TRANSFER_ERROR: + case LIBUSB_TRANSFER_CANCELLED: + case LIBUSB_TRANSFER_STALL: + default: + usbd_transfer->result = EHCI_CC_HALTED; + break; } usbd_transfer->count = transfer->actual_length;