Sourcecode Fortschritt
-
Rev. 240: kernel.bin: 57.856 Bytes
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=240ehci.c: restart bei Host System Error (klappt endlich bei meinem störrischen PC!)
179 if( pOpRegs->USBSTS & STS_HOST_SYSTEM_ERROR ) 180 { 181 settextcolor(4,0); 182 printformat("\nHost System Error Interrupt"); 183 settextcolor(15,0); 184 pOpRegs->USBCMD &= ~CMD_ASYNCH_ENABLE; 185 pOpRegs->USBSTS |= STS_INTMASK; 186 printformat("\nRestart HC after fatal error"); 187 initEHCIFlag = false; 188 startHostController(); 189 enablePorts(); 190 }
-
Rev. 241:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=241sleep umgangen im restartHC aus EHCI-interrupt-handler
Allerdings klappt das jetzt bei meinem PC nicht mehr richtig mit dem Port Reset. Fazit: wir benötigen ein sleep ohne Interrupt.
-
Revision 242:
- Keyboard-Belegungsheader neu formatiert (Die waren so unübersichtlich)
- keyboard_GER.h: ³ wurde nicht angezeigt -> vorerst durch 0 ersetzt
- keyboard_US.h funktioniert nun (AltGr-Belegung fehlte)
- NASM auf 2.08 aktualisiert (Unterschied zu rc10 nur Versionsnummer)
- fs.h: Zeilenenden vereinheitlicht
-
Revision 243:
- Shift-AltGr-Keycodes freigeschaltet
- keyboard.c überarbeitet -> Wenn kein Key für z.B. Shift-AltGr vorhanden -> "Downgrade" zu AltGr u.s.w.
-
Rev. 244:
ckernel.c und ehci.c: Flags werden in ckernel.c jetzt nicht in sek-Schleife, sondern direkt bearbeitet, aber noch keine brauchbare Lösung für alle Fälle.
-
Rev. 245:
- fat12, floppy, file modular etwas besser getrennt (neu: file.h/.c)
- Speicher für file wird per malloc geholt und anschließend wieder frei gegeben. Dies bietet nun auch die Möglichkeit andere Module als executable elf-Dateien zu laden (mal mit kernel.bin oder boot2.bin Reaktion ausprobieren).
-
Revision 246:
Bugfixes:
- Fehlerhafte Dateibenennung der CDI-Implementation
- Fehler in keyboard_US.h
- Key-Downgradereihenfolge korrigiert
- US-Layout wird verwendet, wenn keines definiert ist. Standard natürlich weiterhin: Deutsch
-
Rev. 247:
ehci.c, ckernel.c und usb2.c: Versuch, den Host System Error durch mehrfachen Restart zu umgehen. Durchlauf etwas beschleunigt. Hoffentlich klappt es nun besser, damit wir mit USB 2.0 und anderen Feinheiten weiter machen können.
-
Rev. 248: ehci.c: Zwischenschritt ( zwei zusätzliche Zeitschleifen )
Bringt aber nix, eher schlechter (Test auf meinem Entw.-PC und bei Tobiking)
-
Rev. 249:
Diese Version wurde mit Basis rev. 240 bei ehci.c wieder aufgebaut, da die letzten Veränderungen keinen wirklichen Vorteil brachten. Nun fährt zumindest mein "störrischer PC" nach einigen Fehlversuchen (Host System Error) in die richtige Spur. Die Details der übertragenen Daten werden nur bei length != 0 angezeigt, um den Bildschirm nicht mit Nullen zu überladen.
Cuervo - unser Cheftester - sieht keine Fehler auf seinem Test-PC. Bei Tobiking läuft es leider noch nicht.
Hier ein Screenshot zum vergleich mit dem eigenen Ergebnis:
http://www.henkessoft.de/OS_Dev/Bilder/rev249.PNG
-
Rev. 250:
- Bessere Hi-Speed-Erkennung (vs. J-State)
- Systemfrequenz erhöht von 100 Hz auf 1000 Hz
-
Rev. 251:
ckernel.c, util.c: Testversion für rdtsc-Messung pro Millisekunde (Ziel: sleep ohne Interrupt)
http://en.wikipedia.org/wiki/Time_Stamp_Counter64-bit register present on all x86 processors since the Pentium. It counts the number of ticks since reset. Instruction RDTSC returns the TSC in EDX:EAX.
Test wird momentan in der Zeitanzeige der kernel-idle-loop durchgeführt, weil wir dort einen Messabstand von jeweils einer Sekunde haben.
while( true ) { //... OldRdtscValue = CurrentRdtscValue; if( CurrentSeconds != CurrentSecondsOld ) { // all values 64 bit CurrentRdtscValue = rdtsc(); RdtscDiffValue = CurrentRdtscValue - OldRdtscValue; uint64_t RdtscKCounts = RdtscDiffValue>>10; // divide by 1024 uint32_t RdtscKCountsHi = RdtscKCounts >> 32; uint32_t RdtscKCountsLo = RdtscKCounts & 0xFFFFFFFF; if(RdtscKCountsHi==0) { printformat("\nRdtsc/ms: %d\n",(RdtscKCountsLo/1000)<<10 ); } else { printformat("\nRdtscKCountsHi: %d RdtscKCountsLo: %d\n", RdtscKCountsHi, RdtscKCountsLo ); } //... } //... }
Funktioniert bestens!
Allerdings benötigen wir da einen Mittelwert aus mehreren Messsungen, wobei man die ersten verwerfen muss, wie man im Test sehr gut sieht. Das könnten wir im EHCI-Modul einsetzen, um unabhängig vom Timer-Interrupt Delays durchführen zu können.Anmerkung:
uint64_t RdtscKCounts = RdtscDiffValue>>10; // divide by 1024
Diese Zeile anstelle direkte Division durch 1000 ist notwendig, weil der x86 hier keine Funktionen zur Verfügung stellt für unsigned long long. Die Korrektur (RdtscKCountsLo/1000)<<10 erfolgt dann auf 32-Bit-Niveau.
-
Rev. 252:
ckernel.c: CPU Frequenz (MHz) in Statuszeile ergänzt. Ausdruck im normalen Bildschirmbereich ausgeblendet. Bitte prüfen, ob es überall stimmt. Was passiert, wenn man PCs vor Pentium verwendet?
-
Rev. 253:
Zwischenschritt zum Test von delay(...µs) anstelle sleepMilliSeconds(...ms).
Hat irgendwo noch eine Loop zuviel in ehci.c
-
Rev. 254:
in usb2.c waren auch noch sleepMilliSeconds(...), die im INT geblockt haben.
Zwar immer noch nicht rund, aber jetzt stimmt die Basis zum Experimentieren, zumindest halbwegs.
-
Rev. 255:
Zwischenlösung.
Hauptproblem: Host System Error bei Aktivieren der asychronen Liste, der bisher nicht sicher überwunden werden kann.
-
Erhard Henkes schrieb:
Zwar immer noch nicht rund, aber jetzt stimmt die Basis zum Experimentieren, zumindest halbwegs.
Sorry dass ich mich nochmal einmische.
Aber vor einigen Tagen hat jemand ein Entwicklungskit für USB empfohlen, ich glaube mit einem ARM-Prozessor. Ich vermute, dass ihr es mit sowas einfacher hättet. Wenn nicht, betrachtet dieses Posting bitte als hinfällig.
-
Rev. 256:
Eine Version, in der jede Funktion bei EHCI und USB in der Abfolge angezeigt und mit 2 sec Pausen (delay 2000000) versehen wird, um das Debuggen zu erleichtern.
Diese Version läuft OHNE "Host System Error" auf meinem Entwicklungs-PC hoch!
Tobiking und Cuervo et. al.:
Bitte testen! Bin gespannt. Tobiking hat leider immer noch unerklärlichen Host System Error.Wenn der Fehler auch bei euch verschwindet oder die Ursache gefunden wird, müssen wir gemeinsam heraus finden, was der wesentliche Punkt ist, um den Host System Error sicher zu vermeiden.
@Z: das Problem liegt eher im Bereich EHCI, evtl. sogar PCI. USB liegt im Wesentlichen noch vor uns. Wir quälen uns mit EHCI, um möglichst viele Mitstreiter mitzunehmen, aber wir sind auf dem richtigen Weg, auch wenn er etwas serpentinenreich ist.
-
Rev. 258: (Rev. 257 fehlerhaft)
pciDev_t pciDev_Array[PCIARRAYSIZE];
DeactivateLegacySupport(uint32_t num) mit Debug-Prints bereichert. Offenbar Problem beim "Wait for BIOS-Semaphore being not set". EHCI muss dem Pre-OS (BIOS) entrissen werden!
Wenn sowohl BIOS als OS dern HC beherrschen dürfen, muss es zwangsläufig krachen!
-
Rev. 259:
pci_write_byte-Fkt. korrigiert (Danke an XanClic )
BIOS ---> OS geht jetzt bei EHCI ext. cap.
Leider immer noch HostSystemError nach dem Einschalten der AsyncList bei meinem PC mit Ext.Cap.