WDI TX-Pfad
TX-Pfadkomponenten
Das folgende Diagramm zeigt die TX-Pfadkomponenten.
TX-Deskriptoren
Die TAL verwendet einen TX-Zieldeskriptor (TARGET TX Descriptor, TTD), um das Ziel über die Größe und Position des Frames zu informieren.
Verschiedene WLAN-Zielgeräte haben möglicherweise unterschiedliche Definitionen der TTD. Aus diesem Grund erfolgt die TTD-Programmierung innerhalb der TAL, basierend auf den Von WDI bereitgestellten Informationen. Zum Programmieren einer TTD gibt WDI einen NET_BUFFER_LIST (NBL) an, über den auf die Framemetadaten wie Frame-ID, erweiterte TID, anwendbare Aufgabenauslagerungen und Verschlüsselungsausnahmeaktionen zugegriffen werden kann.
Die TAL überträgt den TTD und den TX-Frame an das Ziel. Aus den Metadaten in der TTD und den Feldern im Header des Frames kann das Ziel den beabsichtigten Empfänger des Übertragungsframes und dessen Übertragung bestimmen.
Schließlich überträgt das Ziel den Frame und benachrichtigt den Host, wenn die Übertragung (und möglicherweise übertragung) abgeschlossen ist. Das Ziel verwendet eine TX-Abschlussmeldung, die angibt, ob die Übertragung erfolgreich war, und die IDs der Frames, deren Übertragung abgeschlossen wurde.
Grundlegender Vorgang
Die Übertragung eines Datenrahmens umfasst die folgenden Schritte innerhalb der TX-Software des WLAN-Hosts.
- WDI ruft eine NBL von NDIS ab und führt die TX-Klassifizierung durch (wenn WDI im PeerTID-Warteschlangenmodus ausgeführt wird).
- Die NBL ist mit einer TTD verknüpft, die durch Abfragen der TAL abgerufen wird. Aus Effizienzgründen kann die TAL TTDs aus einer Lookaside-Liste vorab zuteil werden.
- Der TxMgr stellt den Übertragungsframe basierend auf peerTID oder Port in die Warteschlange, abhängig vom TargetPriorityQueueing-Modus .
- Das TxMgr stellt die NBL und die angefügte TTD an die TxEngine bereit, die sie wiederum zur Übertragung an das Ziel an die TIL übergibt. Die TxEngine/TIL führt keine Frames in die Warteschlange ein (z. B. bevor sie für DMA verfügbar gemacht werden).
- Die TxEngine gibt die aktualisierte TX-status von Frames im Besitz der TxEngine bzw. des Ziels an, indem der Übertragungsabschluss (und ggf. die Übertragungsabschlussanzeige) verwendet wird.
- Wenn ein Frame sowohl transfer Complete (und falls erforderlich TX Complete) ist, sucht der TxMgr die NBL mithilfe der Frame-ID, gibt die TTD an den TxEngine-Pool zurück und sendet den Frame an NDIS.
Host: TX-Ablaufsteuerung für das Ziel
Die TX-Flusssteuerung ist erforderlich, um zu vermeiden, dass die TIL- und Zielressourcen überlastet werden.
Das Zielkreditschema und der Pausen-/Wiederaufnahmemechanismus
TxMgr stellt eine Warteschlange bereit und überträgt TX-Frames gemäß einem kreditbasierten Schema an das Ziel. Das Ziel stellt der TX-Engine Guthabenaktualisierungsanzeigen bereit, die die Ressourcen angeben, die für zusätzliche Frames auf dem Ziel verfügbar sind. Die Anzahl der Credits, die von jedem Frame auf dem Ziel verbraucht werden, wird zum Zeitpunkt der TTD-Programmierung bestimmt. Die Anzahl der Frames, die im Rahmen eines Sendevorgangs von einer bestimmten Warteschlange an die TxEngine übergeben werden, wird durch das verfügbare Guthaben und die Kosten der Frames am Anfang der Zeile in FIFO-Reihenfolge begrenzt.
Für das TxMgr haben Credits eine abstrakte Einheit. Target/TxEngine sollte jede Definition von Kredit verwenden, die für die spezifische Implementierung am nützlichsten ist.
Die TAL verwendet Anhalte-/Wiederaufnahmeanzeigen, um den TX-Datenverkehrsfluss von einem bestimmten Port oder an einen bestimmten Empfänger mit einer bestimmten TID zu beenden bzw. fortzusetzen. Wenn die TxEngine eine Sendeanforderung erhält, während das verfügbare Guthaben kleiner als die maximalen Framekosten ist, hält die TxEngine den Datenverkehr vom TxMgr (über alle Ports hinweg) bis zur nächsten Guthabenaktualisierung des Ziels an.
Wenn sich WDI im Portwarteschlangenmodus befindet (TargetPriorityQueueing gleich TRUE), sind Anhalte-/Resume-Hinweise nur auf Port- oder Adapterebene zulässig/definiert, da Peer, TID-Klassifizierung und Warteschlangen fehlen.
Einschränken der maximalen Frameanzahl für Sendevorgänge
Um die Notwendigkeit temporärer Warteschlangen in der TIL zu vermeiden (z. B. DMA-Ratenabgleichswarteschlange), wird die Anzahl der Frames, die TxMgr in einem Sendevorgang an TxEngine übergibt, durch eine durch TxEngine angegebene maximale Anzahl begrenzt. Dieser Grenzwert kann spezifisch für die Warteschlange sein, aus der TxMgr zu senden versucht, und ändert sich im Laufe der Zeit, da in der TIL mehr Speicherplatz verfügbar ist.
Host: TX-Zielübertragungsplanung
Das TxMgr verwendet einen einzelnen TX-Thread, um Frames an die TxEngine zu übermitteln. Es gibt einen TX-Thread, der Frames aktiv an die TxEngine übermittelt, solange backlogged Queues vorhanden sind.
Das TxMgr plant Warteschlangen je nach Warteschlangenmodus wie folgt.
Für WDI-Portwarteschlangen (TargetPriorityQueueing ist gleich TRUE) werden die TxMgr-Dienste mit Defizit-Roundrobin (DRR) über alle backlogged Port-Warteschlangen hinweg bereitgestellt.
Für WDI-PeerTID-Warteschlangen (TargetPriorityQueueing gleich FALSE) werden die TxMgr-Dienste gemäß AC-Priorität warteschlangen, ohne Warteschlangen auszuhungern, und stellt sicher, dass alle eng stehenden Ressourcen in TIL und Ziel auf faire Weise von RA-TID-Streams gemeinsam genutzt werden. Dadurch wird verhindert, dass langsame Datenströme einen unverhältnismäßigen Anteil solcher Ressourcen verbrauchen.
Im Allgemeinen verwendet der Planer DRR, um die Peer-TID-Warteschlange auszuwählen, von der zu einem bestimmten Zeitpunkt übertragen werden soll. Für jede Warteschlange ordnet DRR einen Quantenparameter zu, der die Anzahl der Oktette begrenzt, die in jeder Runde von der Warteschlange gesendet werden sollen. TxEngine aktualisiert diesen Parameter bei jedem Sendevorgang, der die Warteschlange umfasst, so dass er der erwarteten Größe von ein oder zwei Übertragungsmöglichkeiten entspricht.
Im Allgemeinen verwendet der DRR-Scheduler nur die RA-TID-Warteschlangen, die der zurückgemeldeten AC mit der höchsten Priorität zugeordnet sind. Um ein Aushungern zu verhindern, führt der Planer in regelmäßigen Abständen die DRR für alle zurückgemeldeten Warteschlangen durch.
Prioritätszuordnung für reservierte erweiterte IHV-TIDs
Frames, die von der IHV mit erweiterter TID im reservierten IHV-Bereich eingefügt werden, werden den folgenden erweiterten ACs für die Prioritätsplanung zugeordnet. Die Tabelle befindet sich in der Reihenfolge, in der die Priorität erhöht wird.
Erweiterte TID | Erweiterte Wechselsteuerung |
---|---|
17 | AC_BK |
18 | AC_BE |
19 | AC_VI |
20 | AC_VO |
21 | AC_PR0 |
22 | AC_PR1 |
23 | AC_PR2 |
24 | AC_PR3 |
Bei WDI-Portwarteschlangen werden alle eingefügten Frames unabhängig von der erweiterten TID gleich behandelt.
TxMgr-TxEngine-Schnittstelle
Anforderungen an TxEngine
- MINIPORT_WDI_TX_ABORT
- MINIPORT_WDI_TX_DATA_SEND
- MINIPORT_WDI_TX_TAL_QUEUE_IN_ORDER
- MINIPORT_WDI_TX_TAL_SEND
- MINIPORT_WDI_TX_TAL_SEND_COMPLETE
- MINIPORT_WDI_TX_TARGET_DESC_DEINIT
- MINIPORT_WDI_TX_TARGET_DESC_INIT
Indikationen von TxEngine
- NDIS_WDI_TX_DEQUEUE_IND
- NDIS_WDI_TX_TRANSFER_COMPLETE_IND
- NDIS_WDI_TX_SEND_COMPLETE_IND
- NDIS_WDI_TX_QUERY_RA_TID_STATE
TX-spezifische Steuerelementanforderungen
TX-spezifische Kontrollanzeigen
- NDIS_WDI_TX_SEND_PAUSE_IND
- NDIS_WDI_TX_SEND_RESTART_IND
- NDIS_WDI_TX_RELEASE_FRAMES_IND
- NDIS_WDI_TX_INJECT_FRAME_IND