The PS3 USB stack routes both bulk and interrupt requests through usb_device_passthrough::interrupt_transfer. The old code unconditionally called libusb_fill_interrupt_transfer regardless of the endpoint type, which on Linux's usbfs backend is rejected with EINVAL whenever the URB type doesn't match the endpoint's bmAttributes. Reads against bulk IN endpoints therefore never completed and the worker thread stalled. Look up the endpoint descriptor and dispatch to libusb_fill_bulk_transfer when bmAttributes indicates bulk. A new usb_device::find_endpoint helper walks the descriptor tree once per submission. Confirmed broken on Linux and working on Windows pre-fix; macOS untested. WinUSB silently accepts the type mismatch, which is why this went unnoticed. Reproduces with any passthrough device that has a bulk IN endpoint, e.g. a Bandai Namco USIO (0b9a:0910) under Taiko no Tatsujin S111 [SCEEXE000]: the game's boot-time the I/O board check runs and then hangs. Two related defensive fixes uncovered while debugging the above: - Zero-length bulk/interrupt IN URBs hang in libusb until the device sends a ZLP. The emulated path fake-completes them immediately; mirror that here so drain-polls between transfers don't stall the worker. - An unexpected libusb_submit_transfer error used to leave UsbTransfer::busy = true forever. Mark it as a fake completion with EHCI_CC_HALTED so the USB manager processes the failure cleanly instead of deadlocking the request. |
||
|---|---|---|
| .ci | ||
| .github | ||
| 3rdparty | ||
| bin | ||
| buildfiles | ||
| darwin/util | ||
| rpcs3 | ||
| Utilities | ||
| .clang-format | ||
| .editorconfig | ||
| .gdbinit | ||
| .gitignore | ||
| .gitmodules | ||
| BUILDING.md | ||
| CMakeLists.txt | ||
| CMakePresets.json | ||
| git-clang-format | ||
| LICENSE | ||
| objdump.cpp | ||
| pre-commit.readme | ||
| README.md | ||
| rpcs3.sln | ||
| usertype.dat | ||
RPCS3
The world's first free and open-source PlayStation 3 emulator/debugger, written in C++ for Windows, Linux, macOS and FreeBSD.
You can find some basic information on our website. Game info is being populated on the Wiki. For discussion about this emulator, PS3 emulation, and game compatibility reports, please visit our forums and our Discord server.
Support Lead Developers Nekotekina and kd-11 on Patreon
Contributing
If you want to help the project but do not code, the best way to help out is to test games and make bug reports. See:
If you want to contribute as a developer, please take a look at the following pages:
You should also contact any of the developers in the forums or in the Discord server to learn more about the current state of the emulator.
Building
See BUILDING.md for more information about how to setup an environment to build RPCS3.
Running
Check our friendly quickstart guide to make sure your computer meets the minimum system requirements to run RPCS3.
Don't forget to have your graphics driver up to date and to install the Visual C++ Redistributable Packages for Visual Studio 2022 if you are a Windows user.
License
Most files are licensed under the terms of GNU GPL-2.0-only License; see LICENSE file for details. Some files may be licensed differently; check appropriate file headers for details.