| 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== | ||