Sourcecode Fortschritt


  • Mod

    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.


  • Mod

    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).


  • Mod

    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)


  • Mod

    0.0.4.152 - Rev: 1539
    xhci: Verbesserungen im Debug (z.B. Zuordnung Event zu Command über die phys. Adresse)


  • Mod

    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.


  • Mod

    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:

    1. 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")

  • Mod

    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.


  • Mod

    0.0.4.156 - Rev: 1543

    xhci: Vorbereitungen für bulk transfers weiter optimiert, allerdings wurden die bulk IN/OUT EP bisher nicht enabled.


  • Mod

    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 17

    length: 18 descriptor type: 3
    string: 7365D699 serial: 7365D699

    USB: 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 0

    test-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.


  • Mod

    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.


  • Mod

    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


  • Mod

    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.


  • Mod

    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.


  • Mod

    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.


  • Mod

    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


  • Mod

    0.0.4.165 - Rev: 1551

    xhci: läuft gut, allerdings zwei erkennbare Probleme:

    1. timeout error bei issue Transfer (doorbell/event-mechanismus funktioniert noch nicht wie beabsichtigt)
    2. babble detect bei read sector 0 (Idee: TDsize vlt. richtig setzen)

  • Mod

    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.


  • Mod

    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


  • Mod

    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


Anmelden zum Antworten