Sourcecode Fortschritt



  • Version 0.0.3.155:

    - Speicherverbrauch der *HCI-Treiber reduziert
    - USB-Code aufgeräumt und z.T. logischer gestaltet


  • Mod

    Test-Resultat:

    3 Typen bei Test mit uhci:

    1. Corsair Flash Voyager funktioniert komplett incl. 3:/ttt (lediglich 2 * HC Halted ohne Schadwirkung)

    2. EMTEC 4GB: SET ADDRESS ok, GET DEVICE: usb error & stalled

    3. Intenso Rainbow Line: bei SET ADDRESS: No response from Device

    uhci spec:

    4.1.5 STALLED
    This event indicates that a device/endpoint returned a STALL handshake during a transaction or that the transaction ended in an error condition. This indicates that the endpoint has reached a condition where no more activity can occur without intervention from the driver. In addition to the TDs Stalled bit being set, the Active bit will be cleared. HCD will not accept any more transfers on this endpoint until the condition is cleared by driver software. Like the Babble event, reception of a STALL does not decrement the error counter. A hardware interrupt is signaled to the system.


  • Mod

    version = "0.0.3.156 - Rev: 1357"

    usb weiter optimiert. Bei ausbleibendem Erfolg von GET_DEVICE wird mit Fehlermeldung abgebrochen!

    Kleine Korrekturen in uhci (z.B. korrekte Port-Ausgaben j+1).

    TODO: Leider wurde der wesentliche Erfolgsfaktor für alle Typen von usb-Sticks bei uhci noch nicht gefunden (s.o.).


  • Mod

    version = "0.0.3.157 - Rev: 1358"

    Reihenfolge umgebaut:
    Einer der drei EMTEC pensticks, mit denen u.a. getestet wird, läuft basierend auf uhci durch die controls durch und steigt erst bei test-unit-ready (also ab bulk) aus.


  • Mod

    version = "0.0.3.158 - Rev: 1359"

    usb uhci weiter analysiert/optimiert.
    - Fehler beseitigt:
    - Ergebnisse nur in usb-structs bei transfer.success (sonst: schwere Fehler)
    - Disk entfernt beim Ziehen des Pensticks



  • Version 0.0.3.159:

    - Umbenennungen: usb2 nach usb, USB-Funktionsnamen analog Styleguide und Ausgabe
    - usbBulkTransfer_t entfernt
    - Anzahl der Retries für fehlgeschlagene Transfers bei allen HC-Typen auf 3 gesetzt


  • Mod

    version = "0.0.3.160 - Rev: 1361"

    Formale Änderungen


  • Mod

    version = "0.0.3.161 - Rev: 1362"

    e1000 via cdi-schnittstelle eingebaut (funktioniert noch nicht), vlt. noch falsche Aufruf-Funktion:

    else if (PCIdev->classID == 0x02 && PCIdev->subclassID == 0x00 && 
                                     PCIdev->deviceID == 0x100E && PCIdev->vendorID == 0x8086) // Intel Gigabit Ethernet Controller // CDI-Interface
                            {
                                // driver = &network_drivers[...]; // CDI 
                                printf("\nIntel Gigabit Ethernet Controller");
                                e1000_driver_init(); // CDI
                            }
    


  • Erhard Henkes schrieb:

    version = "0.0.3.161 - Rev: 1362"

    e1000 via cdi-schnittstelle eingebaut (funktioniert noch nicht), vlt. noch falsche Aufruf-Funktion:

    else if (PCIdev->classID == 0x02 && PCIdev->subclassID == 0x00 && 
                                     PCIdev->deviceID == 0x100E && PCIdev->vendorID == 0x8086) // Intel Gigabit Ethernet Controller // CDI-Interface
                            {
                                // driver = &network_drivers[...]; // CDI 
                                printf("\nIntel Gigabit Ethernet Controller");
                                e1000_driver_init(); // CDI
                            }
    

    Nichts mit "vielleicht". Das ist die falsche Funktion. Nächste Aufgabe ist also, herauszufinden, welche Funktion aufgerufen werden soll.


  • Mod

    taljeth in #lost: ... bei jedem Treiber das .driver_init aufrufen, und dann für jedes PCI-Gerät die .device_init, bis sich ein Treiber für zuständig erklärt

    static struct cdi_net_driver driver = {
        .drv = {
            .name           = DRIVER_NAME,
            .type           = CDI_NETWORK,
            .bus            = CDI_PCI,
            .init           = e1000_driver_init,
            .destroy        = e1000_driver_destroy,
            .init_device    = e1000_init_device,
            .remove_device  = e1000_remove_device,
        },
    
        .send_packet        = e1000_send_packet,
    };
    

    Es fehlt noch:

    e1000_init_device(/*  struct cdi_bus_data*  */); // CDI
    

    Woher bekommt man diese Daten für struct cdi_bus_data? Beim Aufruf haben wir das korrekte pci device bereits identifiziert mit allen PCI-Daten (bus:device.function).

    Bei VBox kann man mit der "Intel PRO/1000 MT Desktop" die "e1000" im PCI Scan emulieren.



  • Version 0.0.3.162:

    - CDI weitergebaut, läuft nun teilweise
    -> "Linkermagie" gefixt. Section war falsch angegeben.
    -> Geräte werden nun initialisiert
    -> CDI-List vollständig implementiert, andere Teile weiter implementiert
    - Makefile: Automatischer build aller Unterordner von /kernel
    - Bugfix: Backspace-"Zeichen" wird nicht mehr auf den Bildschirm geschrieben
    - Bugfix: PrettyOS läuft wieder auf Rechnern mit 4 GiB RAM. (Dazu musste die Speicheranordnung geändert werden, damit zugleich eine Optimierung für Rechner mit weniger Speicher möglich bleibt)



  • Version 0.0.3.163:

    - Bugfix: MAC wird bei CDI-Netzwerkkarten in network_adapter_t-Struktur kopiert


  • Mod

    Der via CDI eingebundene e1000-Treiber läuft nun.
    Test: qemu 0.14.1 browser.elf


  • Mod

    version = "0.0.3.164 - Rev: 1365"

    - Wochentag-Formel korrigiert (Alternative: http://de.wikipedia.org/wiki/Gaußsche_Wochentagsformel#4._Allgemeing.C3.BCltige_Formel)
    - Formale Änderungen

    siehe auch: http://www.c-plusplus.net/forum/294811-10


  • Mod

    version = "0.0.3.165 - Rev: 1366"

    Wochentag-Formel nochmals überarbeitet:

    static uint16_t days[12] = {  0,  31,  59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
    
    static bool isLeapyear(uint16_t year)
    {
        return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
    }
    
    static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
    {
        day += 6; // 1.1.2000 was a saturday
        day += (year-2000) * 146097.0/400.0 + days[month-1];
    
        if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
        {
            day--;
        }
    
        return ( day % 7 + 1 );
    }
    

  • Mod

    version = "0.0.3.166 - Rev: 1367"

    (in ckernel.c versehentlich eins zu hoch)

    Dank an Volkard für seine Hinweise. Damit haben wir nun auch vor 2000 den Wochentag im Griff:

    static uint16_t days[12] = {  0,  31,  59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
    
    static bool isLeapyear(uint16_t year)
    {
        return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
    }
    
    // Gregorian calender started 15th October 1582
    static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
    {
        day += 6; // 1.1.1600 was a saturday
        day += (year/*-1600*/) * 146097.0/400.0 + days[month-1];	
    
        if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
        {
            day--;
        }
    
        return ( day % 7 + 1 );
    }
    


  • Version 0.0.3.168:

    - Ordnerstruktur angepasst:
    -- Ordner tasking und util geschaffen
    - Devicemanager-Schnittstelle verbessert



  • Version 0.0.3.169:

    - Clang ins Buildsystem vollständig integriert
    - __unix__ durch Compilererkennung ersetzt (-> Damit "out-of-the-box"-Lauffähig mit GCC 4.5, 4.6 und clang)
    - Ergebnis von calculateWeekday gecacht - Nur noch bei Veränderung des Wochentags aufgerufen


  • Mod

    version = "0.0.3.170 - Rev: 1370"

    Formale Änderungen, Arrays in keyboard.c als Tabelle übersichtlich angeordnet



  • Version 0.0.3.171:

    - Maustreiber nutzt nun Event-System
    - Paging-Modul invalidiert TLB-Einträge, wenn das aktive PD verändert wird
    - setjmp "implementiert". Funktioniert leider nicht.


Anmelden zum Antworten