RTL8169



  • Hallo,

    ich versuche seit Tagen die Netzwerkkarte RTL8169 in WinCE 5.0 zum Laufen zu bringen, schaffe es aber nicht.
    Bei der alten Karte (RTL8139) waren die 4 Descriptoren noch in den Registern untergebracht, jetzt gibt es aber lediglich einen Pointer auf den aktuellen Ex/Tx-Descriptor. Mir ist nicht ganz klar wie das jetzt funktionieren soll! Wo wird der Speicher für die Descriptoren allociert?
    Was natürlich ganz toll wäre, wenn es irgendwo einen Beispiel-Source-code geben würde der einen simples Datenpaket sendet und empfängt! Oder zumindest einer "Programming Guide" mit dem ich auch wirklich was anfangen kann!

    Vielen Dank!



  • Ein wenig Beispielcode findest Du z.B. bei PrettyOS. Allerdings läuft der Code nicht, da (zumindest ist das meine Interpretation) APIC-Unterstützung seitens des OS fehlt. Der Code basiert auf diesem osdev.org-Artikel: http://wiki.osdev.org/RTL8169. Unten auf der Seite ist auch ein Datasheet verlinkt.



  • Vielen Dank für die schnelle Antwort.

    Was ich bei diesem Code-Beispiel allerdings nicht verstehe, ist die Adressvergabe bzw. die Allocierung des Speichers für die Descriptoren. Bei diesem Beispiel wird einfach manuell eine Adresse zugewiesen, das kann ich ja so aber in einem System das mal funktionieren soll nicht machen! Also auf gut deutsch, ich verstehe nicht wo ich meine Descriptoren anlegen muss! Beim alten RTL8139 waren die 4 Desriptoren in den Register untergebracht, dies ist nicht mehr der Fall. Müssen die Descriptoren im DMA-Bereich allociert werden, oder wo sonst?



  • Die Deskriptoren kannst du hinlegen, wohin du willst (Unter gewissen Einschränkungen wie alignment). Diese Zeilen sagen der Karte, wo sie liegen (physische Adresse!):

    outportl(ioaddr + 0x20, (unsigned long)&Tx_Descriptors[0]; /* Tell the NIC where the first Tx descriptor is */
         outportl(ioaddr + 0xE4, (unsigned long)&Rx_Descriptors[0]; /* Tell the NIC where the first Rx descriptor is */
    

    Die Deskriptoren sollen dann alle hintereinander im Speicher liegen.



  • Danke jetzt funktionierts!


  • Mod

    MrX:

    Allerdings läuft der Code nicht

    12Ach67:

    Danke jetzt funktionierts!

    Interessant! Kannst Du uns deinen Code liefern?


Anmelden zum Antworten