Sourcecode Fortschritt
-
0.0.4.145 - Rev: 1532
xhci.h/c: CmdRing- u. TransferRing Management aufgebaut bez. LinkTRB (in beide stellt die Software TRBs ein)
TODO:
- Auf Richtigkeit prüfen
- HACK mit Ringzeiger beseitigen (phys./virt. Address)
- EventRing Management analog aufbauen (dort stellt der xHC TRBs ein)
- Mehrere Transferringe und Eventringe ermöglichen
-
0.0.4.146 - Rev: 1533
video.c: Korrektur bez. writeInfo(...)
xhci.h/c: Ring Management weiter ausgebaut (Cmd u. Transfer klappt, Event noch nicht)
*(xhci-Fehler: delay anstelle sleep schafft Probleme in detectDevice)
*
-
0.0.4.147 - Rev: 1534
xhci.h/c: delay durch sleep ersetzt. DEBUG erweitert für event-ring
vmware klappt wieder
test-PC steigt aus (wegen showCounter in start...)
-
0.0.4.148 - Rev: 1535
xhci: Fehler im Event-Ring beseitigt
nach dem korrekten Rücksprung:
vmware: rast bis zum Ende durch (?)
test-PC: bleibt am Anfang stehen (xHC schiebt offensichtlich nichts mehr nach)
-
0.0.4.149 - Rev: 1536
xhci: weitere Versuche zur Optimierung des Eventringes
test-PC: bisher interessantes Verhalten, wenn auch noch nicht korrekt, zumindest wird der Eventring nach dem Rücksprung wieder bearbeitet.
-
0.0.4.150 - Rev: 1537
xhci: prepareEventRing geschaffen zur Verbesserung der Übersicht. showEvent so eingestellt, dass der EventRing den wrap back durchführt und cyclisch mit neuen Events startet (allerdings nach wrap back verzögert).
Zum Testen wurde Folgendes eingestellt:const uint16_t TRB_PER_SEGMENT = x->evtSegmentSize = 40; // at least 16!
test-PC und vmware: Reset/Ctrl Transfers laufen sowohl angehängt und als auch später angesteckt (beim PC).
-
0.0.4.151 - Rev: 1538
xhci: weiter entwickelt, eher experimentell.
Event-Ring läuft auf test-PC (damit sind die cmd/transfer/event-Ringe bez. xhci funktionsfähig)
-
0.0.4.152 - Rev: 1539
xhci: Verbesserungen im Debug (z.B. Zuordnung Event zu Command über die phys. Adresse)
-
0.0.4.153 - Rev: 1540
xhci:
doorbell array darf man nur als DWORD ansprechen, endlich sind die "EP not enabled" weg! <== wichtiger Fortschritt
Event-Ring wieder auf 256 TRB eingestellt, damit Störungen beim wrap back nicht andere überlagern oder auslösen.
EP states 0, 1 IN/OUT, 2 IN/OUT angezeigt für die Analyse.
-
0.0.4.154 - Rev: 1541
xhci: Vorbereitungen für den Bulk-Transfer getroffen, die EP1 OUT und EP2 IN stehen aber noch nicht auf "running" (=1).
Ideen:
- Für jeden EP einen eigenen Transferring schaffen (spec: "... There is a 1:1 mapping between Transfer Rings and USB Pipes. They are defined by an Endpoint Context data structure contained in a Device Context ...")
2)vorverlagern vor das usb SET_CONFIGURE (spec: "in conjunction")
- Für jeden EP einen eigenen Transferring schaffen (spec: "... There is a 1:1 mapping between Transfer Rings and USB Pipes. They are defined by an Endpoint Context data structure contained in a Device Context ...")
-
0.0.4.155 - Rev: 1542
xhci: Pro EP - getrennt nach IN/OUT - einen eigenen Transferring geschaffen.
ControlTransfers laufen auf vmware u. test-PC. Bei Bulk noch kein EP enabled.
-
0.0.4.156 - Rev: 1543
xhci: Vorbereitungen für bulk transfers weiter optimiert, allerdings wurden die bulk IN/OUT EP bisher nicht enabled.
-
0.0.4.157 - Rev: 1544
Geschafft. Die Bulk-IN/OUT-Endpoints nehmen nun auch in xhci ihre Arbeit auf. Wir können uns damit in die Bulk-Transfers vertiefen. Der bisher erste Gruß auf dem test-PC ist ein "Stall Error" (stickabhängig).
PrettyOS [Version 0.0.4.157 - Rev: 1544] Console 0: xhci_portCheck
--------------------------------------------------------------------------------
F7 7B FA 7D FE 4F 4F B2 EF 6E 2E 7F 5E F2 F3 17length: 18 descriptor type: 3
string: 7365D699 serial: 7365D699USB: SET_CONFIGURATION 1
xhci_setupTransfer
before Xfer:
slot: 3, states EP0: 1 EP1: 0 0 EP2: 0 0 pls: 0 slot st.: 2,
xhci_setupTransaction. req = 9 loVal = 1
prepareSlotsForBulkTransfers DCI_bulk_OUT: 2 DCI_bulk_IN: 5 mpsOUT = 64 mpsIN =
64
Configure Endpoint Command
enqueueCommand at phys: 00DD2110
setEnqueueCommandPtr
ringDoorbell_HC
slot: 3, states EP0: 1 EP1: 1 0 EP2: 0 1 pls: 0 slot st.: 3 ...
--------------------------------------------------------------------------------
usb3 Port: 3, device attached and enabled
Cmd: 18, Evt0: 29, Xfer: 22 0 0 0 0test-PC: EP1 OUT und EP2 IN sind "running" (state=1), und der xHC geht von "addressed" (state=2) nach "configured" (state=3).
Im State "configured" sind nur noch diese Commands erlaubt:
Configure Endpoint,
Reset Endpoint,
Stop Endpoint,
Set TR Dequeue Pointer,
Evaluate Context,
Reset Device,
Negotiate Bandwidth,
Disable Slot.
-
0.0.4.158 - Rev: 1545
xhci: debugs hinter schalter in os.h, Fehler (PCS) in xhci_outTransaction beseitigt.
test-PC: Bulk-transfer funktioniert noch nicht.
-
0.0.4.159 - Rev: 1546
xhci.c: erhöhtes debugging, aber leider den Fehler (keine events bei bulk, keine korrekten Transfers) noch nicht gefunden
-
0.0.4.160 - Rev: 1547
#PF beseitigt, die bei showDisklist auftraten.
xhci/usb/usb_msd: usb_endpoint_t wurde um type erweitert:
typedef enum { EP_OUT, EP_IN, EP_BIDIR} usb_endpointType_t;showEvents wurde korrigiert. TEST mit:
const uint32_t TRB_PER_SEGMENT = x->evtSegmentSize = 20; // at least 16!Die bulk-Transfers funktionieren noch nicht.
-
0.0.4.161 - Rev: 1548
xhci: Debug-Ausgaben weiter verfeinert. Bulk-Transfers laufen noch nicht korrekt. Hinweis für Verbesserung/Fehlersuche: Bulk verwendet erstmalig den Zweig xhci_outTransaction - Out transaction.
-
0.0.4.162 - Rev: 1549
xhci.c: Fehler behoben, bulk-Transfers laufen nun mit entsprechendem Event
test-PC: Erfolg nur bei einigen Sticks, beim IN-Part des read sector 0 gibt es einen "babble detected error", der den EP state auf 2 setzt. Damit ist dann Schluss.
-
0.0.4.164 - Rev: 1550 (Rev.-Nr. versehentlich im kernel zu hoch)
xhci.h/c: Own event/slot structs for feedback by events. Sleeps substituded by timeout-while-loops with check of target.
test-PC: transfers run well. Babble detect at last bulk transfer (read sector 0).
Doorbell Device at slotNr.: 4 DCI: 5 type: IN
Timeout Error: waiting for Bulk Transfer
after Xfer:
slot: 4, states EP0: 1 EP1: 1 0 EP2: 0 1 pls: 0 slot st.: 3,
Completion: Success slot:4 EP:5 ED:0 XferLen:0 c:1 type:Xfer Event
Completion: Success slot:4 EP:5 ED:0 XferLen:0 c:1 type:Xfer Event
- - - - - - - - - - - press key - - - - - - - - - - -00 78 4F FF 00 00 02 00
55 53 42 53 25 42 42 42 00 00 00 00 00
CSW signature OK CSW tag 25h OK CSW data residue OK CSW status OK
Capacity: 3840 MiB, Last LBA: 4283398144, block size: 131072
>SCSI: read sector: 0
OUT part
toggle OUT 1
before Xfer:
slot: 4, states EP0: 1 EP1: 1 0 EP2: 0 1 pls: 0 slot st.: 3,
xhci_outTransaction - Out transaction
Doorbell Device at slotNr.: 4 DCI: 2 type: OUT
Timeout Error: waiting for Bulk Transfer
after Xfer:
slot: 4, states EP0: 1 EP1: 1 0 EP2: 0 1 pls: 0 slot st.: 3,
Completion: Success slot:4 EP:2 ED:0 XferLen:0 c:1 type:Xfer Event
- - - - - - - - - - - press key - - - - - - - - - - -
IN part
before Xfer:
slot: 4, states EP0: 1 EP1: 1 0 EP2: 0 1 pls: 0 slot st.: 3,
xhci_inTransaction - In transaction
xhci_inTransaction - In transaction
Doorbell Device at slotNr.: 4 DCI: 5 type: IN
Timeout Error: waiting for Bulk Transfer
after Xfer:
slot: 4, states EP0: 1 EP1: 1 0 EP2: 0 2 pls: 0 slot st.: 3,
Completion: Babble Detected Error slot:4 EP:5 ED:0 XferLen:512 c:1 type:Xf
er Event
- - - - - - - - - - - press key - - - - - - - - - - -
--------------------------------------------------------------------------------
usb3 Port: 4, device attached and enabled
Cmd: 18, Evt0: 53, Xfer: 25 6 0 0 10
-
0.0.4.165 - Rev: 1551
xhci: läuft gut, allerdings zwei erkennbare Probleme:
- timeout error bei issue Transfer (doorbell/event-mechanismus funktioniert noch nicht wie beabsichtigt)
- babble detect bei read sector 0 (Idee: TDsize vlt. richtig setzen)