Sourcecode Fortschritt


  • Mod

    0.0.4.129 - Rev: 1516 (Rev-Nr. 1515 in ckernel.c: eins zu tief)

    xhci.c: zwei Fehler behoben
    Nun klappt es in vmware, auch der test-PC zeigt endlich Transfer Events.

    Test-PC (an slot 3 u. 4: jeweils ein usb3-Stick):

    Events:

    Completion: Parameter Error CmdPtrLo:00DB4040 c:1 slot:1 Cmd Complete
    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: Parameter Error CmdPtrLo:00DB4050 c:1 slot:2 Cmd Complete
    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: Success CmdPtrLo:00DB4060 c:1 slot:3 Cmd Complete
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:3 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success CmdPtrLo:00DB4070 c:1 slot:4 Cmd Complete
    Completion: EP Not Enabled c:1 type:xHC Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    Completion: Success slot:4 EP:1 ED:0 XferLen:0 c:1 type:Xfer Event
    - - - - - - - - - - - press key - - - - - - - - - - -
    slot: 1 state: 0 addr: 0 speed (context): 0 PLS: 5 usb: 0210 len: 18 type: 1
    slot: 2 state: 0 addr: 0 speed (context): 0 PLS: 5 usb: 0210 len: 18 type: 1
    slot: 3 state: 2 addr: 3 speed (context): 3 PLS: 0 usb: 0210 len: 18 type: 1
    slot: 4 state: 2 addr: 4 speed (context): 3 PLS: 0 usb: 0210 len: 18 type: 1

    Sehr gut ist, dass wir nun Events vom Typ "Xfer Event" erhalten. Länge und Typ stimmen auch beim usb-Device-Descriptor. Damit kann man nun bezüglich Control-Transfers experimentieren.

    Lässt man sich xHC/EP state (letzteres im Device Context) und max Packet size (im usb device descriptor) ausgeben, so erhält man:

    slot: 3 state: 2/1 addr: 3 speed: 3 PLS: 0 usb: 0210 maxPack: 64

    EP state 1 bedeutet: "Running" (operational, either waiting for a doorbell ring or processing TDs)

    Yep! 👍


  • Mod

    0.0.4.130 - Rev: 1517

    xhci-Transfer in unseren komplexen usb-Transfer/Transactions-Frame eingehängt (experimentelle Version, da usb3-Transfer noch nicht klappt. Liegt noch an Schnittstelle usb zu xhci).

    Klappt bisher nur mit frischem Attach, beim bereits angesteckten Stick erscheint noch Unknown Port Type.


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


Anmelden zum Antworten