RTL8169 — Änderungen 11247 → 11248

Zeile 51: Zeile 51:
 
</c>
 
</c>
  
−
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 (allerdings kann die Karte höchstens 16 KiB große Pakete empfangen), ihre physische Adresse wird in low_buf und high_buf gespeichert. Die Puffer sind an 8-Bytes-Grenzen auszurichten.
+
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 bei den Empfangsdeskriptoren 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 (allerdings kann die Karte höchstens 16 KiB große Pakete empfangen), 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.
+
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 (letzterer ist analog zum normalen Sendering anzusteuern; im Folgenden wird nur auf den normalen Sendering eingegangen).
  
 
=== Konfiguration ===
 
=== Konfiguration ===
Zeile 71: Zeile 71:
 
outb(port_base + RTL8168_CFG9346, 0x00); // Sperren der Konfigurationsregister
 
outb(port_base + RTL8168_CFG9346, 0x00); // Sperren der Konfigurationsregister
 
</c>
 
</c>
 +
 +
== Senden ==
 +
 +
Um ein Paket zu senden, sind zunächst die Parameter im command-Feld des Sendedeskriptors zu setzen. Hierbei sind das OWN-Bit, Bits 28 und 29 zu setzen und die Länge des Pakets in Bits 0-15 zu schreiben. Durch das Schreiben von Bit 6 in das Transmit-Priority-Polling-Register wird der Karte das Vorliegen eines zu sendenen Pakets mitgeteilt.
 +
 +
== Empfangen ==
 +
 +
Ist bei einem Interrupt Bit 0 des Interrupt-Statusregisters gesetzt, hat die Karte ein Paket empfangen. Es ist nun durch den Ring der Empfangsdeskriptoren zu iterieren und nach Deskriptoren zu suchen, deren OWN-Bit gelöscht ist. Die Länge des empfangenen Pakets steht in Bits 0-15 des command-Felds. Nach Nutzung der empfangenen Daten ist der Deskriptor wieder in den Ursprungszustand (OWN-Bit gesetzt, Länge des Puffers in Bits 0-15 des command-Felds) zu versetzen.
  
 
==Weblinks==
 
==Weblinks==