XHCI PortNumber issue
Posted: Sat Nov 29, 2025 5:08 am
==== ====== Update ============
Alright, I finally figured out it:
When calculating the PORTSC register offset, I forgot to add the CapabilityRegisterLength, which is 0x20 on VMWARE and 0x40 on QEMU.
That's why the first two or four PORTSC registers I read were always zero.
I'm such a fool.
============original post=============
Hi all,
I'm trying to develop an XHCI driver (for learning purposes) and have encountered a strange phenomenon.
The controller Info:
1. HcsParams1.NumberOfPorts is 8
2. Based on support protocol information, USB 3.0 ports range is 1-4, and for USB 2.0 ports it's 5-8.
3. HccParams.PortPowerControl is 0
When I plug in a USB 3.0 device, the PortStatusChangeEvent TRB indicates PortID is 1. However, the DWORD value of the first PORTSC register is 0 at this time, instead, it's the third PORTSC register whose CSC bit shows a change.
When I then plug in a USB 2.0 device, the PortID in the event TRB is 6, but the relevant bits in the 6th PORTSC register show no change; instead, the 8th PORTSC register correctly reflects the status change.
Finally I dumped all PORTSC registers and found that the PP (Port Power) bits in the first two PORTSC registers are zero.
(The controller capabilities show that 'port power control' is 0, and writing 1 to the port power bit has no effect.)
So the relationship seems to be: 1 + 2 = 3, and 6 + 2 = 8. That is, the actual portsc index(1-based) appears to be PortStatusChangeEventTrb->PortID + (number of ports with port power equal to 0).
However, if this is the case, when the controller resets, it also generates TRB events for PortID 7 and 8. Following the same logic, 7 + 2 = 9 and 8 + 2 = 10, which doesn't seem right(MaxPort is 8).
I'm testing this on VMWare, also tried QEMU, the phenomenon is consistent, except that in QEMU, the port power for the first 4 ports is 0, when I insert a device in QEMU, the EvenTrb->portID is 1, but it's actually the 5th PORTSC's CSC bit that changes.
Additionally, as mentioned before, after inserting the USB 3.0 device, the EventTrb->PortID = 1, but it corresponds to the third PORTSC, if I send the ADDRESS_DEVICE command and set the SlotContext->RootHubPortNumber to 1 in the input context, the command succeeds. However, if I set it to 3, the command fails. So it seems that EventTrb->PortID(1) is the correct port number.
But what is the relationship between 1 (EventTrb->PortID) and 3(PORTSC) in this case?
The temporary workaround is skip all ports with PortPower == 0, it works, but I suspect this isn't correct:
Has anyone encountered the same issue?
The log is here:
Alright, I finally figured out it:
When calculating the PORTSC register offset, I forgot to add the CapabilityRegisterLength, which is 0x20 on VMWARE and 0x40 on QEMU.
That's why the first two or four PORTSC registers I read were always zero.
I'm such a fool.
============original post=============
Hi all,
I'm trying to develop an XHCI driver (for learning purposes) and have encountered a strange phenomenon.
The controller Info:
1. HcsParams1.NumberOfPorts is 8
2. Based on support protocol information, USB 3.0 ports range is 1-4, and for USB 2.0 ports it's 5-8.
3. HccParams.PortPowerControl is 0
When I plug in a USB 3.0 device, the PortStatusChangeEvent TRB indicates PortID is 1. However, the DWORD value of the first PORTSC register is 0 at this time, instead, it's the third PORTSC register whose CSC bit shows a change.
When I then plug in a USB 2.0 device, the PortID in the event TRB is 6, but the relevant bits in the 6th PORTSC register show no change; instead, the 8th PORTSC register correctly reflects the status change.
Finally I dumped all PORTSC registers and found that the PP (Port Power) bits in the first two PORTSC registers are zero.
(The controller capabilities show that 'port power control' is 0, and writing 1 to the port power bit has no effect.)
So the relationship seems to be: 1 + 2 = 3, and 6 + 2 = 8. That is, the actual portsc index(1-based) appears to be PortStatusChangeEventTrb->PortID + (number of ports with port power equal to 0).
However, if this is the case, when the controller resets, it also generates TRB events for PortID 7 and 8. Following the same logic, 7 + 2 = 9 and 8 + 2 = 10, which doesn't seem right(MaxPort is 8).
I'm testing this on VMWare, also tried QEMU, the phenomenon is consistent, except that in QEMU, the port power for the first 4 ports is 0, when I insert a device in QEMU, the EvenTrb->portID is 1, but it's actually the 5th PORTSC's CSC bit that changes.
Additionally, as mentioned before, after inserting the USB 3.0 device, the EventTrb->PortID = 1, but it corresponds to the third PORTSC, if I send the ADDRESS_DEVICE command and set the SlotContext->RootHubPortNumber to 1 in the input context, the command succeeds. However, if I set it to 3, the command fails. So it seems that EventTrb->PortID(1) is the correct port number.
But what is the relationship between 1 (EventTrb->PortID) and 3(PORTSC) in this case?
The temporary workaround is skip all ports with PortPower == 0, it works, but I suspect this isn't correct:
Code: Select all
ULONG Xhci_PortScNumberToTrbPortNumber(XHCI* xhci, ULONG PortScNumber)
{
ULONG Ret = PortScNumber;
for ( ULONG i = 0; i < xhci->MaxPorts && i < PortScNumber; i++ ) {
PORTSC PortSc = Xhci_ReadPortSC(xhci, i);
if ( PortSc.PortPower == 0 ) {
Ret--;
}
}
return Ret;
}
ULONG Xhci_TrbPortNumberToPortScIndex(XHCI* xhci, ULONG TrbPortNumber)
{
ULONG Ret = TrbPortNumber - 1;
for ( ULONG i = 0; i < xhci->MaxPorts && i < TrbPortNumber - 1; i++ ) {
PORTSC PortSc = Xhci_ReadPortSC(xhci, i);
if ( PortSc.PortPower == 0 ) {
Ret++;
}
}
return Ret;
}
Has anyone encountered the same issue?
The log is here:
Code: Select all
//pci device info
Found target PCI device at BDF 11-0-0
HEADER:0 bdf:11-00-00 Serial Bus Controllers USB3 XHCI Controller BaseClass:0c SubClass:03 ProgIF:30 VenID:15ad DevID:0779 Rev:00 CacheLineSize:0 LatencyTime:64
IntrLine:0 IntrPin:1 MaxLatency:255 SubSys:077915ad RomBase:0000000000000000
CommandPioEnabled:0 CommandMmioEnabled:2 BusMaster:4 IntrDisabled:0 FastBack:0 Parity:0 SERR:0 SpecialCycles:0 VGACompa:0 WaitCycle:0 WriteInvalid:0
StatusImRead:0 IntrPending:0 CapList:16 66MHZ:0 UDF:0 FastBack:0 DataParityDetected:0 DevSel:0 SigedTargetAbort:0 RecvedTargetAbort:0 RecvedMasterAbort:0 SigedSysError:0 DetectParityError:0
BAR[0]:00000000FD3E0004 pio:0 64bit:1 prefetch:0
BAR[1]:0000000000000000 pio:0 64bit:0 prefetch:0
BAR[2]:0000000000000000 pio:0 64bit:0 prefetch:0
BAR[3]:0000000000000000 pio:0 64bit:0 prefetch:0
BAR[4]:0000000000000000 pio:0 64bit:0 prefetch:0
BAR[5]:0000000000000000 pio:0 64bit:0 prefetch:0
MMIO is enabled. bar:00000000FD3E0004
//controller info
Ver:1.0 CapLen:32 Use32BitAddr:0 DevCtxSizeIs32:1 NumSlots:127 NumPorts:8 NumIntrs:31 PPC:0 ScratchBuffer:0 extentReg:FFFFB001F3409E20
no bios handoff
//reset controller
xhic stopped in 0 ms
xHC successfully reset in 0 ms
xhic controller ready in 0 ms
xhic started in 0 ms
//parse support protocol
Found Protocol 3.16 , ports range:1 -> 4
Found Protocol 2.0 , ports range:5 -> 8
//dump all PORTSC
----- dump all PORTSC after controller reset
=== XHCI Port Dump - Total Ports: 8 ===
Port: 1 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 2 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 3 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 4 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 5 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 6 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 7 CCS: 1 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x7 Link State: Polling Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 1, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000202E1
Port: 8 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
=== End of Port Dump ===
----- dump all PORTSC after controller reset done
//poll all events
----- Polling All Events after controller reset -----
Port Status Change Event TRB: PortID=5 Code:1
Port Status Change Event TRB: PortID=7 Code:1
Port Status Change Event TRB: PortID=8 Code:1
----- Polling All Events Done -----
//reset all ports
reset port:1 usb3:1
reset port 1 timeout
reset port:2 usb3:1
reset port 2 timeout
reset port:3 usb3:1
Port 3 is correctly reset in 0 ms
reset port:4 usb3:1
Port 4 is correctly reset in 0 ms
reset port:5 usb3:0
Port 5 is correctly reset in 0 ms
reset port:6 usb3:0
Port 6 is correctly reset in 0 ms
reset port:7 usb3:0
Port 7 is correctly reset in 0 ms
reset port:8 usb3:0
Port 8 is correctly reset in 0 ms
----- Polling All Events after all ports reset -----
Port Status Change Event TRB: PortID=1 Code:1
Port Status Change Event TRB: PortID=2 Code:1
Port Status Change Event TRB: PortID=3 Code:1
Port Status Change Event TRB: PortID=4 Code:1
Port Status Change Event TRB: PortID=5 Code:1
Port Status Change Event TRB: PortID=6 Code:1
----- Polling All Events Done -----
//PORTSC before plugin devices
----- dump all PORTSC before plugin device
=== XHCI Port Dump - Total Ports: 8 ===
Port: 1 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 2 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 3 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 4 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 5 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 6 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 7 CCS: 1 PED: 1 OCA: 0 Speed: Full Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000603
Port: 8 CCS: 0 PED: 1 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000202
=== End of Port Dump ===
----- dump all PORTSC before plugin device done
//then I plugin usb3.0 device, the trb->portID is 1
Port Status Change Event TRB: PortID=1 Code:1
//but the first PORTSC DOWRD value is 0, the third PORTSC has CSC bit set to 1
=== XHCI Port Dump - Total Ports: 8 ===
Port: 1 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 2 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 3 CCS: 1 PED: 1 OCA: 0 Speed: SuperSpeed (Gen1.1) Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 1, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00021203
Port: 4 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 5 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 6 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 7 CCS: 1 PED: 1 OCA: 0 Speed: Full Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000603
Port: 8 CCS: 0 PED: 1 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000202
=== End of Port Dump ===
//plugin usb2.0 device, trb->portID is 6
Port Status Change Event TRB: PortID=6 Code:1
//the 6th PORTSC:CSC bit is 0, the CSC bit of 8th PORTSC is 1
=== XHCI Port Dump - Total Ports: 8 ===
Port: 1 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 2 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 3 CCS: 1 PED: 1 OCA: 0 Speed: SuperSpeed (Gen1.1) Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00001203
Port: 4 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 5 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 6 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 7 CCS: 1 PED: 1 OCA: 0 Speed: Full Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000603
Port: 8 CCS: 1 PED: 1 OCA: 0 Speed: Undefined Speed Link State: 0x7 Link State: Polling Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 1, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000202E3
=== End of Port Dump ===
//unplug usb3.0 evice, TRB shows portID =1
Port Status Change Event TRB: PortID=1 Code:1
//the first PORTSC is 0, the third PORTSC has CSC =1
=== XHCI Port Dump - Total Ports: 8 ===
Port: 1 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 2 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 3 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 1, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000202A0
Port: 4 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 5 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 6 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 7 CCS: 1 PED: 1 OCA: 0 Speed: Full Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000603
Port: 8 CCS: 1 PED: 1 OCA: 0 Speed: Undefined Speed Link State: 0x7 Link State: Polling Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002E3
=== End of Port Dump ===
//unplug usb2.0 device , PORTID = 6
Port Status Change Event TRB: PortID=6 Code:1
//the 6th PORTSC:CSC is0 , the 8th PORTSC:CSC is 1
=== XHCI Port Dump - Total Ports: 8 ===
Port: 1 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 2 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 0 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000000
Port: 3 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 4 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 5 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 6 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000002A0
Port: 7 CCS: 1 PED: 1 OCA: 0 Speed: Full Speed Link State: 0x0 Link State: U0 (Enabled) Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 0, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x00000603
Port: 8 CCS: 0 PED: 0 OCA: 0 Speed: Undefined Speed Link State: 0x5 Link State: RxDetect Warm Reset: 0 Warm Reset Change: 0 Port Reset: 0 Status Changes - CSC: 1, PRC: 0 Port Power: 1 Port Reset: 0 Port Reset Change: 0 PORTSC Register: 0x000202A0
=== End of Port Dump ===