Sourcecode Fortschritt
-
Version 0.0.4.261:
- Neuer Containertyp: array (dynamisches Array)
- Disk- und Portarrays nun von dynamischer Größe, Portnummerierung größer 'Z' möglich ('AA', 'AB', ...)
- EHCI: ehci_addToAsyncScheduler auf Prüfung des Statusbytes zurückumgestellt (-> Keine Timeouts mehr)
- xHCI: Nutzt nun Interrupt-Vektor 3 (via MSI)
- Wechsel zur Kernelkonsole in panic_assert()
- Bugfix: Pufferüberlauf in usb_createDevice() behoben
- Bugfix: pci_configWrite_word hat falsches Register beschrieben (MSI funktionieren nun!)Anmerkung (29.01.2015): xhci: nur noch attach wird erkannt, detach nicht.
-
0.0.4.262 - Rev: 1648
Format für FAT32 ansatzweise korrigiert. Volume-Name kommt nun an der richtigen Stelle und Verzeichnisse sind leer. Beim Einkopieren von Dateien erfolgen aber noch Fehler.
-
Version 0.0.4.263:
- FAT: Formattierungscode überarbeitet - Medientyp korrigiert, Parameter an Spezifikation angepasst, schreibe nur soviele Sektoren, wie nötig
- xHCI: Scratchpad-Allokation korrigiert
- Diverse Treiber: PCI-Command-Register als WORD geschrieben
- GUI: Nutze array-Typ
- Bugfix: Strg+d-Ausgabe korrigiert
- VM86-Code aufgeräumt
- Variablendeklarationen etwas aufgeräumt
-
0.0.4.264 - Rev: 1650
xhci.c:
- xhci_enqueueTransfer repariert (if/else bei linkTRB)
- Toggle Cycle gesetzt beim linkTRB im TransferRing
- TransferringBase auf Pagegrenze gesetztTransferring läuft nun sauber im Kreis
-
Version 0.0.4.265:
- xHCI: Abläufe verbessert, Code aufgeräumt, Setzen/Lesen des Interruptstatus korrigiert
- OHCI, UHCI: Treiber grundlegend überarbeitet: Unsinn beseitigt, korrektes Warten auf Transferabschluss, Speicherverwaltung begradigt
- USB: Einige Ausgaben und waitForKeyStroke() entfernt bzw. hinter Diagnoseflags versteckt
- Bugfix: Timeout-Schleife im EHCI-Async-Scheduler korrigiert
- Bugfix: Disk-Nummer in Portliste korrigiert
-
0.0.4.266 - Rev: 1652
xhci.h: APICIRQ wieder auf 0 gesetzt, damit alle interrupts ankommen (detach klappt mit 3 nicht!!!). Der Interruptmechanismus via APIC/MSI liefert offenbar noch nicht zuverlässig sämtliche interrupts beim xhci-handler ab (Tests klappen am besten mit APICIRQ 12, da man dann durch Mausbewegung die fehlenden Interrupts hervorlocken kann).
fat.c: String-Korrektur
-
0.0.4.267 - Rev: 1653
xhci.h: APICIRQ 3
xhci.c: analog uhci eine poll-Funktion bezüglich Portstatus bei xhci
devicemanager.c: xhci-poll-Funktion wird nun beim regelmäßigen Drivecheck auch bei xhci aufgerufen
-
0.0.4.268 - Rev: 1654
xhci: anstecken/abziehen geht nur einmal sauber (experimenteller Stand)
-
0.0.4.269 - Rev: 1655
xhci.h/c: Reset des Slots und der Transferringe der Endpoints des Slots beim Abziehen/Anstecken gelöst! Nun geht mehrfaches Abziehen/Anstecken am gleichen (!) Port.
TODO: Zuordnungsproblem zwischen device und durch ENABLE_SLOT zugeteilter xHC-slotNr (Array schaffen), damit beliebig abgezogen/angesteckt werden kann.(Noch experimenteller Stand wegen des TODO)
-
0.0.4.270 - Rev: 1656
xhci.h/c: Struktur und Erfassung (in parseEvent) für die Links zwischen den Ports und den internen Device Slots des xHC implementiert.
TODO: Bei Verweis auf den Device Context nicht die Port-Nr. verwenden, sondern den Port-Slot-Link verwenden.
-
~Sorry, könnt ein wenig ot sein, weiß aber auch nicht, wo es besser aufgehoben wäre && ich finde es gehört endlich mal gesagt:~
Ich finde es extrem geil, daß ihr (vorallem Du Erhard und Mr. es geschafft habt, seit 2009 ein so ambitioniertes Projekt durchzuziehen und damit mit Sicherheit vielen OSdev-Interessierten einen exzellenten Weg zum Einstieg zeigt!
-
Vielen Dank für das positive Feedback! Manchmal bin ich selbst erstaunt, dass uns nicht die Puste ausgegangen ist. Mein Dank gilt allen Unterstützern dieses Projektes und den engagierten Entwicklern. Mein Schwerpunkt ist momentan das Thema usb, das ich von Anfang an für wichtig hielt. Daher bietet PrettyOS inzwischen e/o/u/xHCI. Ich finde es auch immer wieder spannend, das Thema Netzwerk durch die Protokollebenen hindurch "von innen" beobachten zu können. Das basiert immer noch alles auf dem Design der 80er Jahre mit den damals eingebauten Schwachstellen.
-
rev. 1657
xhci.h/c: Adressierung auf slot bezogen. Neu erworbene Adresse wird durchgereicht nach usb.
Leider klappt das noch nicht wie gewünscht. Test: Zwei Sticks an Port 3 u. 4 anschließen. Dann beide abziehen. Stick an Port 4 anschließen. Dieser erhält dann den ersten freien Slot mit der Nr. 3 (Unterschied zwischen Port- u. Slot-Nr.).
-
0.0.4.272 - Rev: 1658
xhci/usb:
Trennung/Zuordnung von port/slot/device-number weiter betrieben.
Problem ist momentan bei usb_getDeviceDescriptor (usb), wenn portNr != slotNr.
Dann kommt die Device-Information nicht an. Bei portNr == slotNr ist alle i.O.
-
0.0.4.273 - Rev: 1659
xhci: port != slot Problematik in den xhci-Transfer/transaction-Fkt. verbessert!
Nun kann man nach Abziehen der Sticks an Port 3 und 4, einen wieder an Port 4 andocken, der dann Slot 3 erhält (port != slot).
Wichtig:
uint8_t portNr = (uint8_t) (size_t) ((hc_port_t*) transfer->device->port->data)->data; uint8_t slotNr = x->portSlotLink[portNr-1].slotNr;
TODO: Neuer Test: 1) ports 3 u. 4 anstecken 2) beide abziehen 3) port 4 anstecken (=>slot3) 4) port 3 anstecken (sollte slot 4 erhalten)
Bei 4) erhält der port 3 nochmals den slot 3!
-
0.0.4.274 - Rev: 1660
xhci: port-slot-Link beim device detach entkoppelt durch setzen auf 0xFF.
Nun klappt der Test:
- Jeweils einen Stick an port 3 u. 4 anstecken
- Beide Sticks abziehen
- Stick an port 4 anstecken (=>slot 3)
- Stick an port 3 anstecken (=>slot 4)
- Beide Sticks abziehen
- Stick an port 3 anstecken (=>slot 3)
- Stick an port 4 anstecken (=>slot 4)
Also die Port/Slot-Zuordnung erscheint nun prinzipiell gelöst.
Enthält noch einige Analysen und Haltepunkte für weitere Tests.
-
Version 0.0.4.275:
- xHCI: Unnütze Allokationen beseitigt, xhci_enqueueTransfer/xhci_enqueueCommand korrigiert (überschrieb Link-TRB), Arrays auf passende Größe reduziert, ...
- Kleine Aufräumarbeiten bei U/O/EHCI
- devmgr: Behandlung von Fehleingaben verbessert
- Compilerfehler bei eingeschalteten Debug-Flags behoben
-
0.0.4.276 - Rev: 1662
fat.c: FAT32 korrigiert part->fat war nicht definiert.
FAT32 Format-Test mit Diskette(!) sieht gut aus.
Hinweis: Floppywechsel wird nicht erkannt!
-
0.0.4.277 - Rev: 1663
xhci.c: Haltepunkte entfernt
-
Version 0.0.4.278:
- FAT: Beachte part->start bei Formattierung
- Devicemanager: Cachegröße ist nun geknickte lineare Funktion des vorhandenen Speichers, Caches unterstützen beliebige Sektorgrößen
- EHCI: Einsparung von Allokationen, nutze qTD::buffer1 für nicht ausgerichtete Puffer
- Floppytreiber: Bessere Unterstützung mehrerer Laufwerke, Zugriff mit Mutex geschützt
- Bugfix: #PF beim Beenden eines Tasks beseitigt, wenn Dateien geöffnet waren
- Bugfix: Besserer Umgang mit im Betrieb gezogenen USB-Sticks und Lesefehlern bei USB
- Alle disk_t-Member initialisiert, optAccSecCount in Vorbereitung für Lesen größerer Blöcke ergänztSeit 0.0.4.277 (r1663) funktioniert xHCI bei mir nicht mehr.