{{Stub}} Der RTL8169 ist neben dem [[RTL8139]] ein weiterer Netzwerkchip der Firma Realtek. Er kann Daten im Bereich von 10/100/1000 Megabits pro Sekunde übertragen. Der Chip RTL8168 ist als PCI-Express-Version nahezu identisch anzusteuern. == Initialisierung == === PCI === Die Karte unterstützt die PCI-Funktionen Fast Back-to-Back Transactions sowie Memory Write and Invalidate. Diese können im PCI-Command-Register aktiviert werden. Die RTL8168 kann Message Signaled Interrupts (MSI) unterstützen. Die entsprechenden Informationen stehen dann in der PCI-Capabilities-Liste. === IO/MMIO === RTL8168 und RTL8169 unterstützen MMIO. Die Basisadresse kann über die [[PCI]]-BARs ausgelesen werden. Sollten mehrere MMIO-BARs angegeben sein, ist die erste zu nutzen. Im Folgenden wird die Karte über IO-Ports angesteuert, für eine Ansteuerung über MMIO kann analog vorgegangen werden. === MAC-Adresse herausfinden === Die 6 Bytes lange MAC-Adresse des Geräts kann aus den ersten 6 Registern (ausgehend von der o.g. Basisadresse) ausgelesen werden: char mac_addr[6]; for(int i = 0; i < 6; ++i) { mac_addr[i] = inb(pci_port + i); // Funktion zum Einlesen eines Bytes vom angegebenen Port } === Reset === Durch das Setzen von Bit 8 im Command-Register (0x37) wird ein Reset der Karte ausgelöst. Der Abschluss des Vorgangs wird von der Karte mit dem Löschen dieses Bits quittiert. === Transfer-Deskriptoren === Sende- und Empfangsdeskriptoren sind wie folgt definiert: typedef struct { uint32_t command; // command/status dword uint32_t vlan; uint32_t low_buf; // low 32-bits of physical buffer address uint32_t high_buf; // high 32-bits of physical buffer address } __attribute__((packed)) RTL8168_Desc; Die Deskriptoren sind an 256-Bytes-Grenzen auszurichten und bilden einen Ring, dessen Ende durch das Setzen von Bit 30 des command-Felds indiziert wird. In dieses Feld werden außerdem die Länge des Puffers (Bits 0-15) so wie das OWN-Bit (Bit 31) geschrieben. Die Sende- bzw. Empfangspuffer können maximal 64 KiB groß sein, ihre physische Adresse wird in low_buf und high_buf gespeichert. Die Puffer sind an 8-Bytes-Grenzen auszurichten. Die Karte verfügt über drei Ringe von je maximal 1024 Deskriptoren, einen Empfangsring, einen Sendering mit normaler und einen Sendering mit hoher Priorität. ==Weblinks== * [http://www.iitg.ernet.in/asahu/cs421/RealTek.pdf RTL8169 Datenblatt] [[Kategorie:Netzwerkkarte]] [[en:RTL8169]]