Sourcecode Fortschritt
-
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: 1Sehr 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!
-
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.
-
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 enabledEin Fehler wurde noch behoben:
Ports laufen intern von 0 ... n, Device Slots von 1 ... n+1uint8_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)
-
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: 3USB: 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 enabledVergleich 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: 0x01ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 2Endpoint Descriptor:
bEndpointAddress: 0x81
Transfer Type: Bulk
wMaxPacketSize: 0x0200 (512)
bInterval: 0x00Endpoint Descriptor:
bEndpointAddress: 0x02
Transfer Type: Bulk
wMaxPacketSize: 0x0200 (512)
bInterval: 0x00Passt!
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 GBMan 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.
-
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
-
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.
-
0.0.4.136 - Rev: 1523
xhci: Ablauf weiter verbessert, DEBUGs für die Funktionen eingebaut zur besseren Übersicht.
-
0.0.4.137 - Rev: 1524
xhci: wir verwenden für den pEP-Index DCI-1!
Also pEP[0] für EP1Eingesteckt 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
detectDeviceUSB: 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
detectDeviceUSB: 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 - - - - - - - - - - -
-
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).
-
0.0.4.139 - Rev: 1526
xhci.c: experimentelle Version
-
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)
-
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)
-
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
-
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
-
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
-
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)
*
-
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...)
-
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)