Sourcecode Fortschritt


  • Mod

    0.0.4.131 - Rev: 1518

    usb/xhci: experimentelle Version

    Probleme:
    - Start mit angestecktem Stick: unknown port type (Verzögerung nach Interrupt brachte keine Verbesserung)
    - Anstecken eines Sticks: EP not enabled

    Ein Fehler wurde noch behoben:
    Ports laufen intern von 0 ... n, Device Slots von 1 ... n+1

    uint8_t slotNr = ((uint8_t)(size_t)((hc_port_t*)transfer->device->port->data)->data)+1;
    xhci_ringDoorbell_Device(x, slotNr, 1); //TODO: calculate target with transfer->endpoint; 1 = EP0
    

    Nach dem Commit wurde noch ein Fehler gefunden:
    DIR = 0 bedeutet OUT (in der OUT transaction steht noch 1)


  • Mod

    0.0.4.132 - Rev: 1519
    xhci/usb: usb 2.10 (findet sich erstaunlicherweise bei "usb3"-Sticks) wurde als valide Version hinzugefügt. Auswertung der Device-Daten ergibt auf den ersten Blick Werte bei usb-version und maxPacket, die i.O. erscheinen. Damit sollte der erste Transfer - trotz "EP not enabled" im Event TRB - geklappt haben.

    in os.h: usb-Transfer-Diagnose eingeschaltet.

    Beispiel: Stick angesteckt

    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    USB 02.10
    endpoint 0 mps: 64 byte.
    vendor: 0930h
    product: 6545h release number: 1.16 (Ausgabe in hexcode umwandeln!)

    manufacturer: 0001h product: 0002h
    serial number: 0003h number of config.: 1

    numInterfaceMSD: 255

    - - - - - - - - - - - press key - - - - - - - - - - -

    USB: SET_ADDRESS
    xhci_setupTransfer
    xhci_setupTransaction
    xhci_inTransaction
    xhci_issueTransfer
    Doorbell at slotNr.: 3
    Broken free: 00000210h
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: TRB Error slot:3 EP:1 ED:0 XferLen:8 c:1 type:Xfer Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    new address: 3
    - - - - - - - - - - - press key - - - - - - - - - - -
    usb-Device address: 3

    USB: GET_DESCRIPTOR Config
    xhci_setupTransfer
    xhci_setupTransaction
    xhci_inTransaction
    xhci_outTransaction
    xhci_issueTransfer
    Doorbell at slotNr.: 3
    Broken free: 00000033h
    Broken free: FF010001h
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    --------------------------------------------------------------------------------
    usb3 Port: 3, device attached and enabled

    Vergleich des angesteckten Sticks "Toshiba 16 GB usb3" mit der Freeware usbview:

    Device Descriptor:
    bcdUSB: 0x0210
    bDeviceClass: 0x00
    bDeviceSubClass: 0x00
    bDeviceProtocol: 0x00
    bMaxPacketSize0: 0x40 (64)
    idVendor: 0x0930
    idProduct: 0x6545

    bcdDevice: 0x0110
    iManufacturer: 0x01
    iProduct: 0x02
    iSerialNumber: 0x03
    bNumConfigurations: 0x01

    ConnectionStatus: DeviceConnected
    Current Config Value: 0x01
    Device Bus Speed: Full
    Device Address: 0x03
    Open Pipes: 2

    Endpoint Descriptor:
    bEndpointAddress: 0x81
    Transfer Type: Bulk
    wMaxPacketSize: 0x0200 (512)
    bInterval: 0x00

    Endpoint Descriptor:
    bEndpointAddress: 0x02
    Transfer Type: Bulk
    wMaxPacketSize: 0x0200 (512)
    bInterval: 0x00

    Passt! 👍

    Liste usb vendor ID / product ID: http://www.linux-usb.org/usb.ids
    0930 Toshiba Corp.
    6545 Kingston DataTraveler 102 Flash Drive / HEMA Flash Drive 2 GB / PNY Attache 4GB Stick <== ist aber 16 GB

    Man bekommt auf diese Art die Wahrheit heraus über seine Devices.

    http://online.osr.com/ShowThread.cfm?link=249588
    Es gibt 2.00, 2.01, 2.10 usb devices, aber bisher nur eine 2.0 spec.


  • Mod

    0.0.4.133 - Rev: 1520

    usb:

    if (usbDev->usbSpec == 0x0100 || usbDev->usbSpec == 0x0110 || usbDev->usbSpec == 0x0200 || usbDev->usbSpec == 0x0201 || usbDev->usbSpec == 0x0210 || usbDev->usbSpec == 0x0213 ||usbDev->usbSpec == 0x0300)
    

    eine Menge gültiger deviceBCDs



  • Version 0.0.4.134:

    - Changelog und TODO für nächstes Release hinzugefügt
    - xHCI:
    -- Status-Transactions für In und Out
    -- Überflüssiges delay in xhci_portCheck() entfernt
    -- inBuffer/inLength auf 0 gesetzt in xhci_outTransaction()
    - Codeformatierung korrigiert


  • Mod

    0.0.4.135 - Rev: 1522

    xhci: Sonderfall SET_ADDRESS - xhci sendet hier einen Command - in die xhci-Transactions verlagert. Anstecken eines Sticks und Auslesen weiterer Daten klappt nun. Noch stark experimentell.


  • Mod

    0.0.4.136 - Rev: 1523

    xhci: Ablauf weiter verbessert, DEBUGs für die Funktionen eingebaut zur besseren Übersicht.


  • Mod

    0.0.4.137 - Rev: 1524

    xhci: wir verwenden für den pEP-Index DCI-1!
    Also pEP[0] für EP1

    Eingesteckt hochfahren => EP0 state = 0!
    Später anstecken => EP0 state = 1!

    Nun muss man nur noch herausfinden, wo der EP0 state von 0 auf 1 umspringt bzw. nicht. 😉

    Eingesteckt hochfahren => EP0 state = 0!

    portCheck
    detectDevice

    USB: GET_DESCRIPTOR Device
    xhci_setupTransfer
    before Xfer: slot: 4, EP0 state: 0,
    xhci_setupTransaction. req = 6 loVal = 0
    setEnqueueXfer
    xhci_inTransaction
    setEnqueueXfer
    xhci_outTransaction
    setEnqueueXfer
    xhci_issueTransfer
    Doorbell at slotNr.: 4
    setEnqueueXferPtr
    ringDoorbellDevice slot: 4 target: 1
    Broken free (file: kernel/storage/xhci.c, line: 1298, addr: 0000000Ah)
    after Xfer: slot: 4, EP0 state: 0,
    Completion: Success Port:4 c:1 type:Port Status Change
    - - - - - - - - - - - press key - - - - - - - - - - -
    Invalid USB version 00.20!
    - - - - - - - - - - - press key - - - - - - - - - - -

    Später anstecken => EP0 state = 1!

    portCheck
    detectDevice

    USB: GET_DESCRIPTOR Device
    xhci_setupTransfer
    before Xfer: slot: 4, EP0 state: 1,
    xhci_setupTransaction. req = 6 loVal = 0
    setEnqueueXfer
    xhci_inTransaction
    setEnqueueXfer
    xhci_outTransaction
    setEnqueueXfer
    xhci_issueTransfer
    Doorbell at slotNr.: 4
    setEnqueueXferPtr
    ringDoorbellDevice slot: 4 target: 1
    Broken free (file: kernel/storage/xhci.c, line: 1298, addr: FFFFFFFFh)
    after Xfer: slot: 4, EP0 state: 1,
    Completion: Success Port:4 c:1 type:Port Status Change
    Completion: Success Port:4 c:1 type:Port Status Change
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    USB 02.10
    endpoint 0 mps: 64 byte.vendor: 0BDAh
    product: 0301h release number: 01.29
    manufacturer: 0001h product: 0002h
    serial number: 0003h number of config.: 1
    numInterfaceMSD: 255

    - - - - - - - - - - - press key - - - - - - - - - - -


  • Mod

    0.0.4.138 - Rev: 1525

    xhci: portsEnabled flag eingebaut für den reset-Vorgang in detectDevice.

    vmware reagiert nun endlich mit den bereits angesteckten usb-devices.
    Beim test-PC gibt es mit bereits beim Hochfahren angesteckte usb-devices noch Probleme (attached, but not enabled).


  • Mod

    0.0.4.139 - Rev: 1526

    xhci.c: experimentelle Version


  • Mod

    0.0.4.140 - Rev: 1527

    xhci: enablePorts in prepareSlots umbenannt. Resetvorgang zur Verbesserung der Transparenz nur noch in detectDevice, in prepareSlots gestrichen.

    Der eigentliche EnablePort/Device-Vorgang erfolgt durch Reset des Ports.

    vmware: klappt
    test-PC: Port Power (PP), aber kein PED (Port Enabled Detect)


  • Mod

    0.0.4.141 - Rev: 1528

    xhci.h/c: Modul mit Erfahrungen der letzten Versionen verbessert.
    Aktuell: vmware und test-PC starten usb-Transfer mit angehängtem Stick, beim test-PC klappt der nachträgliche Attach nicht (PP, aber kein PED nach Reset)


  • Mod

    0.0.4.142 - Rev: 1529

    xhci: neue Funktion showStates(...)

    vmware: klappt
    test-PC: angehängt Hochfahren klappt prinzipiell.
    test-PC: späteres Einstecken: PLS 7 -> 9 (hot reset) ??? PED klappt nicht.



  • Version 0.0.4.143:

    - Ineffizientes byteweises Lesen und Schreiben im FAT-Treiber eliminiert; Unnötige Schreib-/Lesevorgänge entfernt
    - Fehlende Initialisierungen von TDBuffer in xHCI ergänzt
    - Fehlerkorrektur im Floppytreiber: Floppy läuft nun auch in Bochs 2.6.2
    - Fehlerkorrektur im Devicemanager: Motor nach Schreibvorgängen abgeschaltet
    - Kleine Codestil-Korrekturen
    - NextRelease.txt ergänzt


  • Mod

    0.0.4.144 - Rev: 1531
    xhci: Ablauf verbessert. Address Cmd mit BSR=1 in detectDevice ermöglicht beim test-PC den Port Link State - Übergang von 7 nach 0 (ohne: 7 nach 9). Damit ist nun ein Setzen des PED im PORTSC beim späteren Anstecken eines Sticks möglich.

    vmware: reset und usb Ablauf ok
    test-PC:
    angesteckt hochfahren: reset OK, usb-Ablauf OK bzw. nicht OK (device abhängig)
    später anstecken: reset OK, usb-Ablauf OK


  • Mod

    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


  • Mod

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


  • Mod

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


  • Mod

    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)


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


Anmelden zum Antworten