Sourcecode Fortschritt
-
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)
-
0.0.4.166 - Rev: 1552
xhci: Doppelten Code etwas aufgeräumt, Commands in Funktionen gepackt. Keine Verbesserung, aber auch keine Verschlechterung. Aufgaben wie oben bestehen noch.
-
0.0.4.167 - Rev: 1553
xhci: weiteres debugging eingebaut (experimentelle Version), Auslesen der Adress-Pointer beim event-thread (bei ED = 0 ist das der auslösende TRB)
-
Version 0.0.4.168:
- Verbesserungen am xHCI-Treiber:
-- Funktion calculateDCI() zur berechnung der DCI aus der EP-Nummer
-- Mechanismus zur Nutzung von TDsize in in- und out-Transactions
-- 256 statt 20 Event-TRBs
-- Warte erst auf Abschluss des Transfers, kopiere dann die Daten
- paging_getVirtAddr repariert
- fehlendes irq_resetCounter() im Floppytreiber ergänzt
-
0.0.4.169 - Rev: 1555
xhci.c:
- doorbell aus den commands genommen
- Zahl der slots auf MAX_HC_SLOTS erhöht (für Hubs)Test auf vmware erfolgreich, beim Test-PC kommen z.Z. außer dem ersten keine weiteren Event-Interrupts
-
0.0.4.170 - Rev: 1556
xhci: Fehler bez. fehlendes cycle-bit in transaction korrigiert
vmware läuft gut, bei test-PC nur ein event-interrupt
-
Version 0.0.4.171:
- Typen der Parameter von USB-Control-Transfers korrigiert
- DataStage von Control-Transfers (TRT) korrekt gesetzt
- IOC=1 für letzte Transaction eines Transfers (aber derzeit auch noch für alle anderen Transactions)
-
0.0.4.172 - Rev: 1558
xhci: event debugging für commands verbessert
Das Event liefert die phys. Adresse des Commands. Via paging_getVirtAddr greifen wir auf den TRB-Typ des Commands zu. Damit lässt sich Event und Command besser zuordnen und auswerten.
Damit paging_getVirtAddr funktioniert, wurde lookForVirtAddr korrigiert: i >= start