ad4bedd46d
maybe_recover_transfer_error previously handled only the first-tier codes (UsbTransaction, Resource, Stall, BabbleDetected, DataBuffer, Trb, SplitTransaction) and silently returned Ok(false) for every other completion code via a catch-all arm. Cross-referenced Linux 7.1 drivers/usb/host/xhci-ring.c handle_tx_event() (line 2608+) and handle_transferless_tx_event() (line 2561+) to add explicit recovery for the remaining ~29 codes: - Stopped/StoppedLengthInvalid/StoppedShortPacket: restart endpoint + retry (up to MAX_SOFT_RETRY), then hard-reset - InvalidStreamType/InvalidStreamId: soft reset + retry, then hard-reset - IncompatibleDevice: disable slot (device must re-enumerate) - MissedService/NoPingResponse: log informational, surface to caller - ContextState/Parameter: hard-reset to resync driver/xHC state - Bandwidth/BandwidthOverrun/SecondaryBandwidth: log, no transfer recovery (config must change) - IsochBuffer: hard-reset endpoint - MaxExitLatencyTooLarge: log, surface - EventLost/Undefined: hard-reset (event ring may be corrupted) - SlotNotEnabled/EndpointNotEnabled/NoSlotsAvailable: log driver state mismatch - CommandRingStopped/CommandAborted: log xHC state confusion - Reserved/vendor: default arm logs explicitly Added completion_code_to_errno() mapping transfer completion codes to POSIX errnos matching Linux 7.1 semantics: Stall -> EPIPE BabbleDetected -> EOVERFLOW UsbTransaction/SplitTransaction/IncompatibleDevice -> EPROTO Trb -> EILSEQ DataBuffer -> ENOSR SlotNotEnabled/EndpointNotEnabled/NoSlotsAvailable -> ENODEV default -> EIO Rewrote handle_transfer_event_trb() to use the new errno mapping instead of always returning EIO. Added 14 unit tests covering all errno mappings and transfer event handling paths. Full suite (41 tests) passes.