Sourcecode Fortschritt
-
0.0.4.116 - Rev: 1505
Werte im input context bei xhci.c weiter korrigiert.
test-PC zeigt leider immer noch "parameter error".
Auf vmware funktioniert es bestens.
-
0.0.4.117 - Rev: 1506
xhci.c: Nun spielt auch der test-PC beim Adressieren der Devices mit.
Man erkennt hieraus, dass die Entwicklung solcher Treiber nur durch Testen auf Hardware eine gewisse Reife entwicklen kann. Emulatoren können da bei usb keinesfalls mithalten.
-
0.0.4.118 - Rev: 1507
xhci.c: weitere Verbesserungen - vor allem für Hardware (delay zwischen command und event-abfrage notwendig)(nr. versehentlich eins zu hoch in ckernel.c)
-
Version 0.0.4.120:
- Screenshots können nun auch außerhalb der Kernelkonsole gespeichert werden
- SHELL.ELF wird nun mit fopen/fread/fclose aus der Ramdisk geladen
- Codevereinfachungen in BL1 und BL2
- FAT_fopen vereinfacht
- Überreste von make_initrd entferntVersions- und Revisionsnummern wieder synchron.
-
Version 0.0.4.121:
- IO-Cache-Größe hängt von verfügbarem RAM ab (10 bis 3000 Sektoren, statt vorher stets 20)
- Syscalls für Maus implementiert
- IPC überspringt voranstehenden Separator in Pfaden
- Kompatibilität mit aktuellster Clang-Version hergestellt
- ScreenCache nach Benutzung wieder freigegeben
-
Nachdem ehenkes und ich den halben Tag gesucht haben, können wir nun sogar drei statt einem Fehler beheben:
Version 0.0.4.122:
- Drei Fehler im Zusammenspiel von BL2 und paging.c behoben
- Debugausgaben der MemoryMap verbessert
-
0.0.4.123 - Revision 1511
- MADT-Parser ausgebaut (@ehenkes: Interrut Source Overrides koennten vielleicht bei deinem xHCI-Problem helfen)
- Parser-Format geaendert: Pfade jetzt lowercase; Nullbasierte Nummerierung von lokalen APICs, IO-APICS, NMIs etc. (ID in einem extra Feld) erster IO-APIC hat garantiert den Pfad
/PrettyOS/acpi/ioapic/0/
- Copyright in
ata.c
ergaenzt
-
Version 0.0.4.124:
- Fehlerkorrektur im ACPI-Treiber: Suche EBDA-Zeiger in BDA; BIOS-Bereich beginnt bei 0xE0000 (damit läuft auch VBox); Suche an 16-byte Grenzen
- Prüfe Verfügbarkeit von ACPI (anhand RDSP-Zeiger); Zeige Bootlog-Meldung nur bei Verfügbarkeit
- fopen() funktioniert nun für beliebige Dateien aus Ramdisk; ipc_fopen() implementiert
- Nutze Option -mtune=generic (Optimierung für übliche (moderne) CPUs, aber Befehlssatz weiterhin durch -march=i486 limitiert) in makefiles
- Aufrufkonvention im BL2: Aufrufer sichert Register (ReadSectors)
-
0.0.4.125 - Rev: 1513
xhci.c: Kleine Verbesserungen, damit auch usb2-Sticks via xhci sicher adressiert werden.
-
0.0.4.126 - Rev: 1514
Als Experimentierbasis für Transfers.
xhci: Test mit control-Transfer GET_DEVICEDESCRIPTOR
Hardware: EP not enabled, xHC error (obwohl die Adressierung klappt)
vmware: scheinbar in Ordnung
bochs: EP not enabled, Transfer error (Adressierung klappt nicht)Screenshot vom test-PC (zwei usb3-Sticks angeschlossen an Port 3 u. 4):
PrettyOS [Version 0.0.4.126 - Rev: 1514] Console 6: -------------------------------------------------------------------------------- Events: Completion: Success Port:1 c:1 type:Port Status Change Completion: Success Port:2 c:1 type:Port Status Change Completion: Success Port:3 c:1 type:Port Status Change Completion: Success Port:4 c:1 type:Port Status Change Completion: Success CmdPtrLo:00DB4000 c:1 slot:1 Cmd Complete Completion: Success CmdPtrLo:00DB4010 c:1 slot:2 Cmd Complete Completion: Success CmdPtrLo:00DB4020 c:1 slot:3 Cmd Complete Completion: Success CmdPtrLo:00DB4030 c:1 slot:4 Cmd Complete - - - - - - - - - - - press key - - - - - - - - - - - insert setup-data-status in transfer ring insert setup-data-status in transfer ring insert setup-data-status in transfer ring insert setup-data-status in transfer ring Events: 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: 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: 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: 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: 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: EP Not Enabled c:1 type:xHC Event Completion: Parameter Error CmdPtrLo:00DB4040 c:1 slot:1 Cmd Complete Completion: Parameter Error CmdPtrLo:00DB4050 c:1 slot:2 Cmd Complete Completion: Success CmdPtrLo:00DB4060 c:1 slot:3 Cmd Complete Completion: Success CmdPtrLo:00DB4070 c:1 slot:4 Cmd Complete - - - - - - - - - - - press key - - - - - - - - - - - slot: 1 state: 0 addr: 0 speed (context): 0 PLS: 5 usb: 0F23 len: 32 type: 15 slot: 2 state: 0 addr: 0 speed (context): 0 PLS: 5 usb: 0F23 len: 35 type: 15 slot: 3 state: 2 addr: 3 speed (context): 3 PLS: 0 usb: 0820 len: 35 type: 8 slot: 4 state: 2 addr: 4 speed (context): 3 PLS: 0 usb: 0823 len: 35 type: 15 >>> Press key to close this console. <<<
-
0.0.4.128 - Rev: 1515 *(Nr. im kernel versehentlich zu hoch)
*
xhci: Transfer-Ablauf weiter verbessert, TRT ergänzt im Setup Stage, Zeitablauf geordnet. Hardware spielt leider immer noch nicht mit.(Fehlerhaft in xhci.c)
-
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 - - - - - - - - - - -