Page MenuHomeFreeBSD

D53897.id167017.diff
No OneTemporary

D53897.id167017.diff

diff --git a/sys/dev/usb/controller/xhcireg.h b/sys/dev/usb/controller/xhcireg.h
--- a/sys/dev/usb/controller/xhcireg.h
+++ b/sys/dev/usb/controller/xhcireg.h
@@ -211,6 +211,129 @@
#define XHCI_ID_EXT_MSI 0x0011
#define XHCI_ID_USB3_TUN 0x0012
+/*
+ * XHCI Debug Capability
+ * From Section 7.6 of xHCI April 2023 Revision 1.2b.
+ */
+#define XHCI_DCID 0x0000
+
+#define XHCI_DCDB 0x0004
+#define XHCI_DCDB_GET(x) (((x) >> 8) & 0xFF)
+#define XHCI_DCDB_MASK 0x0000FF00
+#define XHCI_DCDB_OUT 0x0000
+#define XHCI_DCDB_IN 0x0100
+#define XHCI_DCDB_INVAL 0xFF00
+
+#define XHCI_DCERSTSZ 0x0008 /* Event Ring Segment Table size */
+#define XHCI_DCERSTBA_LO 0x0010
+#define XHCI_DCERSTBA_HI 0x0014
+#define XHCI_DCERDP_LO 0x0018
+#define XHCI_DCERDP_HI 0x001C
+
+#define XHCI_DCCTRL 0x0020 /* Debug Control */
+#define XHCI_DCCTRL_DCR 0x00000001
+#define XHCI_DCCTRL_DCR_GET(x) (((x) ) & 0x01)
+#define XHCI_DCCTRL_LSE 0x00000002
+#define XHCI_DCCTRL_LSE_GET(x) (((x) >> 1) & 0x01)
+#define XHCI_DCCTRL_HOT 0x00000004
+#define XHCI_DCCTRL_HOT_GET(x) (((x) >> 2) & 0x01)
+#define XHCI_DCCTRL_HIT 0x00000008
+#define XHCI_DCCTRL_HIT_GET(x) (((x) >> 3) & 0x01)
+#define XHCI_DCCTRL_DRC 0x00000010
+#define XHCI_DCCTRL_DRC_GET(x) (((x) >> 4) & 0x01)
+#define XHCI_DCCTRL_MBS_GET(x) (((x) >> 16) & 0xFF)
+#define XHCI_DCCTRL_ADDR_GET(x) (((x) >> 24) & 0x07)
+#define XHCI_DCCTRL_DCE 0x80000000
+#define XHCI_DCCTRL_DCE_GET(x) (((x) >> 31) & 0x01)
+
+#define XHCI_DCST 0x0024 /* Status */
+#define XHCI_DCST_ER 0x00000001
+#define XHCI_DCST_ER_GET(x) (((x) ) & 0x01)
+#define XHCI_DCST_SBR 0x00000004
+#define XHCI_DCST_SBR_GET(x) (((x) >> 2) & 0x01)
+#define XHCI_DCST_PORT_GET(x) (((x) >> 24) & 0xFF)
+
+#define XHCI_DCPORTSC 0x0028 /* Port Control */
+#define XHCI_DCPORTSC_CCS 0x00000001
+#define XHCI_DCPORTSC_CCS_GET(x) (((x) ) & 0x01)
+#define XHCI_DCPORTSC_PED 0x00000002
+#define XHCI_DCPORTSC_PED_GET(x) (((x) >> 1) & 0x01)
+#define XHCI_DCPORTSC_PR 0x00000010
+#define XHCI_DCPORTSC_PR_GET(x) (((x) >> 4) & 0x01)
+#define XHCI_DCPORTSC_PLS_GET(x) (((x) >> 5) & 0x0F)
+#define XHCI_DCPORTSC_PLS_U0 0x00
+#define XHCI_DCPORTSC_PLS_U1 0x01
+#define XHCI_DCPORTSC_PLS_U2 0x02
+#define XHCI_DCPORTSC_PLS_U3 0x03
+#define XHCI_DCPORTSC_PLS_DISABLED 0x04
+#define XHCI_DCPORTSC_PLS_RXDETECTED 0x05
+#define XHCI_DCPORTSC_PLS_INACTIVE 0x06
+#define XHCI_DCPORTSC_PLS_POLLING 0x07
+#define XHCI_DCPORTSC_PLS_RECOVERY 0x08
+#define XHCI_DCPORTSC_PLS_HOTRESET 0x09
+#define XHCI_DCPORTSC_SPEED_GET(x) (((x) >> 10) & 0x0F)
+#define XHCI_DCPORTSC_CSC 0x00020000
+#define XHCI_DCPORTSC_CSC_GET(x) (((x) >> 17) & 0x01)
+#define XHCI_DCPORTSC_PRC 0x00200000
+#define XHCI_DCPORTSC_PRC_GET(x) (((x) >> 21) & 0x01)
+#define XHCI_DCPORTSC_PLC 0x00400000
+#define XHCI_DCPORTSC_PLC_GET(x) (((x) >> 22) & 0x01)
+#define XHCI_DCPORTSC_CEC 0x00800000
+#define XHCI_DCPORTSC_CEC_GET(x) (((x) >> 23) & 0x01)
+#define XHCI_DCCP_LO 0x0030 /* Context Pointer */
+#define XHCI_DCCP_HI 0x0034
+#define XHCI_DCDDI1 0x0038 /* Device Descriptor Info */
+#define XHCI_DCDDI2 0x003C /* Device Descriptor Info */
+
+/* DbC CIC offset in uint32 */
+#define XHCI_DCDBCIC_STR0DESC_LO 0x0000
+#define XHCI_DCDBCIC_STR0DESC_HI 0x0001
+#define XHCI_DCDBCIC_MANUDESC_LO 0x0002
+#define XHCI_DCDBCIC_MANUDESC_HI 0x0003
+#define XHCI_DCDBCIC_PRODDESC_LO 0x0004
+#define XHCI_DCDBCIC_PRODDESC_HI 0x0005
+#define XHCI_DCDBCIC_SERIALDESC_LO 0x0006
+#define XHCI_DCDBCIC_SERIALDESC_HI 0x0007
+#define XHCI_DCDBCIC_DESCLEN 0x0008
+#define XHCI_DCDBCIC_STR0DESC_LEN_GET(x) (((x) >> 0) & 0xff)
+#define XHCI_DCDBCIC_STR0DESC_LEN_SET(x) (((x) & 0xff) << 0)
+#define XHCI_DCDBCIC_MANUDESC_LEN_GET(x) (((x) >> 8) & 0xff)
+#define XHCI_DCDBCIC_MANUDESC_LEN_SET(x) (((x) & 0xff) << 8)
+#define XHCI_DCDBCIC_PRODDESC_LEN_GET(x) (((x) >> 16) & 0xff)
+#define XHCI_DCDBCIC_PRODDESC_LEN_SET(x) (((x) & 0xff) << 16)
+#define XHCI_DCDBCIC_SERIALDESC_LEN_GET(x) (((x) >> 24) & 0xff)
+#define XHCI_DCDBCIC_SERIALDESC_LEN_SET(x) (((x) & 0xff) << 24)
+
+#define XHCI_DCSTATUS(ctrl, portsc) \
+ (XHCI_DCCTRL_DCE_GET(ctrl) << 4 | \
+ XHCI_DCPORTSC_CCS_GET(portsc) << 3 | \
+ XHCI_DCPORTSC_PED_GET(portsc) << 2 | \
+ XHCI_DCPORTSC_PR_GET(portsc) << 1 | \
+ XHCI_DCCTRL_DCR_GET(ctrl))
+#define XHCI_DCPORTSC_ACK_MASK \
+ (XHCI_DCPORTSC_PED | \
+ XHCI_DCPORTSC_CSC | XHCI_DCPORTSC_PRC | \
+ XHCI_DCPORTSC_PLC | XHCI_DCPORTSC_CEC)
+
+#define XHCI_DCPORT_ST_OFF 0x00
+#define XHCI_DCPORT_ST_DISCONNECTED 0x10 /* DCE only */
+#define XHCI_DCPORT_ST_DISCONNECTED_RUNNING 0x11 /* XXX: DCE + DCR */
+#define XHCI_DCPORT_ST_DISABLED 0x18 /* DCE + CCS */
+#define XHCI_DCPORT_ST_RESETTING 0x1a /* DCE + CCS + PR */
+#define XHCI_DCPORT_ST_ENABLED 0x1c /* DCE + CCS + PED */
+#define XHCI_DCPORT_ST_CONFIGURED 0x1d /* DCE + CCS + PED + DCR */
+
+#define XHCI_DC_MAXPACKETLEN 1024
+/*
+ * While Sec 7.6.3.2 describes Endpoint IDs should be 0 or 1,
+ * Intel chips use Device Context Index (Sec 4.5.1) instead.
+ */
+#define XHCI_DC_EPID_OUT 0
+#define XHCI_DC_EPID_IN 1
+#define XHCI_DC_EPID_OUT_INTEL 2
+#define XHCI_DC_EPID_IN_INTEL 3
+#define XHCI_DC_SLOT 1
+
/* XHCI register R/W wrappers */
#define XREAD1(sc, what, a) \
bus_space_read_1((sc)->sc_io_tag, (sc)->sc_io_hdl, \

File Metadata

Mime Type
text/plain
Expires
Tue, Nov 25, 3:09 PM (1 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26135788
Default Alt Text
D53897.id167017.diff (5 KB)

Event Timeline