Sourcecode Fortschritt
-
0.0.4.110 - Rev: 1499
xhci.c: erste Versuche zur Device Nummerierung
-
0.0.4.111 - Rev: 1500
xhci.h/c: Codevereinfachung
vmware: TRB error
bochs: context state error
test-PC: #PF 1197B0 (xhci.c)
-
0.0.4.112 - Rev: 1501
xhci.c: #PF beseitigt
Nun sind wir bei vmware und test-PC auf der Ebene "parameter error" im Device Context.
-
0.0.4.113 - Rev: 1502
xhci.h/c: Input Control Context und Input Context ergänzt.
-
Version 0.0.4.114:
- console_foldStack implementiert
- Springe zur ersten belegten Konsole (statt zu Nr. 0) beim Stackwechsel
- Führe EOI entweder für APIC oder für PIC durch
- Unnützes seek() auf frisch erzeugte Dateien im FAT-Treiber eliminiert
- fgets repariert (kernel), bzw. implementiert (userspace)
- atexit und at_quick_exit repariert (für mehr als 5 Funktionen)
- Speicherlecks in CDI-Allokationsfunktionen (cdi_mem_free implementiert) und behoben
- tolower/toupper durch strncicmp ersetzt (Shell, userlib)
- Umfassende Codestil-Vereinheitlichungen
-
0.0.4.115 - Rev: 1504
xhci.h/c: Alle Voraussetzungen für die vollständige Device Slot Initialization sind nun gegeben (Command-, Event-, Transferring (zumindest für EP0) und alle notwendigen Datenstrukturen).
bochs: USB transaction error (wohl weil kein Port connected u. enabled ist)
vmware: Übergang von Enabled zu Addressed klappt!
test-PC: noch Parameter Error (speed?)
-
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)