Sourcecode Fortschritt


  • 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


  • Mod

    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)


  • Mod

    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


Anmelden zum Antworten