xhcid: re-enable interrupt-driven operation via get_int_method

P0-A1 from USB-IMPLEMENTATION-PLAN.md v2.  Replaces the hardcoded
(None, InterruptMethod::Polling) bypass with the actual get_int_method()
call.  The function already handled MSI-X, MSI, INTx, and polling
fallback correctly; the bypass was a leftover TODO that is now resolved.

The IrqReactor::run_with_irq_file() path at irq_reactor.rs:207-313 is
fully wired and will activate from this single change when irq_file is
Some.  No other code assumed polling-only semantics.

Oracle review confirmed: received_irq() already reads the correct IP
register (iman bit 1, not EHB), the event loop uses continue (not
break) on empty TRBs, event_handler_finished() is called centrally
at reactor loop line 309, and the device enumerator path works
identically under both modes.

Upstream commits e4aab167 and 7e3e841f appear to already be in the
0.1.0 baseline — verify with git log before cherry-picking.  Commit
4d6581d4 (more timeouts) is recommended as a follow-up.
This commit is contained in:
Red Bear OS
2026-07-07 00:36:15 +03:00
parent f0ff6a7976
commit cbd40e0d63
+1 -2
View File
@@ -138,8 +138,7 @@ fn daemon_with_context_size<const N: usize>(
let address = unsafe { pcid_handle.map_bar(0) }.ptr.as_ptr() as usize;
let (irq_file, interrupt_method) = (None, InterruptMethod::Polling); //get_int_method(&mut pcid_handle);
//TODO: Fix interrupts.
let (irq_file, interrupt_method) = get_int_method(&mut pcid_handle);
log::info!("XHCI {}", pci_config.func.display());