From dc07fd02553b42ac7db3f83e6fc9668e047af611 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 23 Sep 2023 19:48:14 -0400 Subject: [PATCH] Document xHCI runtime registers and interrupter registers --- src/hulk/usb/xhci.d | 60 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/src/hulk/usb/xhci.d b/src/hulk/usb/xhci.d index a367c1f..c73b7f5 100644 --- a/src/hulk/usb/xhci.d +++ b/src/hulk/usb/xhci.d @@ -255,11 +255,69 @@ struct XHCI } static assert(PortRegisters.sizeof == 0x10u); + /** + * Located at offset rts_offset from PCI base address. + */ struct RuntimeRegisters { + /** + * Microframe index. Incremented by controller each microframe. + */ uint mfindex; + uint[7] _reserved01; - uint ir; + + /** + * Interrupter register sets. + */ + InterrupterRegister[0] ir; + } + + /** + * Interrupter register set. + * + * A copy of this register set is present for each interrupter. + */ + struct InterrupterRegister + { + /** + * Interrupter Management Register. + * 0 Interrupt Pending (IP) + * 1 Interrupt Enable + * 31:2 reserved + */ + uint imr; + + /** + * Interrupter Moderation. + * 15:0 Interrupt Moderation Interval + * 31:16 Interrupt Moderation Counter + */ + uint im; + + /** + * Event Ring Segment Table Size. + * 15:0 Event Ring Segment Table Size + * 31:16 reserved + */ + uint ersts; + + uint reserved; + + /** + * Event Ring Segment Table Base Address. + * 5:0 reserved + * 63:6 Event Ring Segment Table Base Address + */ + ulong erstba; + + /** + * Event Ring Dequeue Pointer. + * 2:0 Dequeue ERST Segment Index + * 3 Event Handler Busy + * 63:4 Event Ring Dequeue Pointer + */ + ulong erdp; } struct DoorbellRegister