TX 경로 구성 요소
다음 다이어그램에서는 TX 경로 구성 요소를 보여 줍니다.
TX 설명자
TAL은 TTD(대상 TX 설명자)를 사용하여 대상에 프레임의 크기와 위치를 알릴 수 있습니다.
대상 WLAN 디바이스에 따라 TTD에 대한 정의가 다를 수 있습니다. 이로 인해 TTD 프로그래밍은 WDI에서 제공하는 정보를 기반으로 TAL 내에서 수행됩니다. TTD를 프로그래밍하기 위해 WDI는 프레임 ID, 확장 TID, 적용 가능한 작업 오프로드 및 암호화 예외 작업과 같은 프레임 메타데이터에 액세스할 수 있는 NBL(NET_BUFFER_LIST)을 지정합니다.
TAL은 TTD와 TX 프레임을 대상에게 전송합니다. TTD의 메타데이터 및 프레임 헤더 내의 필드에서 대상은 전송 프레임의 의도된 수신자와 전송 방법을 결정할 수 있습니다.
결국 대상은 프레임을 전송하고 전송(및 전송 가능)이 완료되면 호스트에 알린다. 대상은 전송에 성공했는지 여부를 지정하는 TX 완성 메시지와 전송이 완료된 프레임의 ID를 사용합니다.
기본 작업
데이터 프레임 전송에는 WLAN 호스트 TX 소프트웨어 내에서 다음 단계가 포함됩니다.
- WDI는 NDIS에서 NBL을 가져오고 TX 분류를 수행합니다(WDI가 PeerTID 큐 모드에서 작동하는 경우).
- NBL은 TAL을 쿼리하여 얻은 TTD에 연결됩니다. 효율성을 위해 TAL은 대기 목록에서 TTD를 미리 할당할 수 있습니다.
- TxMgr은 TargetPriorityQueueing 모드에 따라 PeerTID 또는 포트를 기반으로 전송 프레임을 큐에 넣습니다.
- TxMgr은 NBL과 연결된 TTD를 TxEngine에 제공하여 TIL에 전달하여 대상으로 전송합니다. TxEngine/TIL은 프레임을 큐에 추가하지 않습니다(예: DMA에 사용할 수 있도록 하기 전).
- TxEngine은 전송 완료를 사용하여 TxEngine/target이 소유한 프레임의 업데이트된 TX 상태를 나타냅니다(해당하는 경우 전송 완료 표시).
- 프레임이 모두 전송 완료(및 필요한 경우 TX Complete)인 경우 TxMgr은 프레임 ID를 사용하여 NBL을 조회하고 TTD를 TxEngine의 풀로 반환하고 프레임을 NDIS로 보냅니다.
호스트 - 대상 TX 흐름 제어
TIL 및 대상 리소스를 압도하지 않으려면 TX 흐름 제어가 필요합니다.
대상-크레딧 체계 및 일시 중지/다시 시작 메커니즘
TxMgr은 크레딧 기반 체계에 따라 TX 프레임을 큐에 대기하고 대상으로 전송합니다. 대상은 TX 엔진에 대상의 추가 프레임에 사용할 수 있는 리소스를 지정하는 크레딧 업데이트 표시를 제공합니다. 대상의 각 프레임에서 사용하는 크레딧 수는 TTD 프로그래밍 시 결정됩니다. 지정된 큐에서 전송 작업의 일부로 TxEngine에 전달되는 프레임 수는 사용 가능한 크레딧과 FIFO 순서대로 줄의 선두에 있는 프레임의 비용에 의해 제한됩니다.
TxMgr에 있는 크레딧은 단위가 추상적입니다. Target/TxEngine은 특정 구현에 가장 유용한 크레딧 정의를 사용해야 합니다.
TAL은 일시 중지/다시 시작 표시를 사용하여 지정된 포트에서 또는 지정된 TID를 사용하여 특정 수신기로 향하는 TX 트래픽 흐름을 중지/다시 시작합니다. 사용 가능한 크레딧이 최대 프레임 비용보다 작은 동안 TxEngine이 송신 요청을 받으면 TxEngine은 TxMgr(모든 포트에서)에서 대상의 다음 크레딧 업데이트까지 트래픽을 일시 중지합니다.
WDI가 포트 큐 모드(TargetPriorityQueueing TRUE와 같음)인 경우 일시 중지/다시 시작 표시는 피어, TID 분류 및 큐가 없어 포트 또는 어댑터 수준에서만 허용/정의됩니다.
송신 작업의 최대 프레임 수 제한
TIL(예: DMA 속도 일치 큐)에서 임시 큐가 필요하지 않도록 하기 위해 TxMgr이 전송 작업에서 TxEngine에 전달하는 프레임 수는 TxEngine에 지정된 최대 수로 제한됩니다. 이 제한은 TxMgr이 전송을 시도하는 특정 큐와 관련이 있을 수 있으며, TIL에서 더 많은 공간이 사용 가능해짐에 따라 시간이 지나면서 변경될 수 있습니다.
호스트 - 대상 TX 전송 예약
TxMgr은 단일 TX 스레드를 사용하여 TxEngine에 프레임을 제출합니다. 백로그된 큐가 있는 한 TX 스레드가 TxEngine에 프레임을 적극적으로 제출합니다.
TxMgr은 큐 모드에 따라 다음과 같은 방식으로 큐를 예약합니다.
WDI 포트 큐에서 (TargetPriorityQueueing이 TRUE로 설정된 경우) TxMgr 서비스는 백로그된 모든 포트 큐를 적자 라운드 로빈(DRR) 기법을 사용하여 처리합니다.
WDI PeerTID 큐(TargetPriorityQueueing FALSE와 같음)의 경우, TxMgr 서비스는 AC 우선 순위에 따라 모든 큐를 적절히 관리하여 어떤 큐도 우선에서 제외되지 않도록 하고, TIL 및 대상 내의 병목 상태 리소스가 RA-TID 스트림 간에 공정하게 공유되도록 합니다. 느린 스트림이 이러한 리소스를 불균형하게 소비하지 않도록 방지합니다.
일반적으로 스케줄러는 DRR을 사용하여 지정된 시간에 전송할 Peer-TID 큐를 선택합니다. 각 큐에 대해 DRR은 각 라운드의 큐에서 보낼 8진수 수를 제한하는 양자 매개 변수를 연결합니다. TxEngine은 큐와 관련된 각 송신 작업에서 이 매개 변수를 하나 또는 두 개의 전송 기회의 예상 크기와 일치하도록 업데이트합니다.
일반적으로 DRR 스케줄러는 우선 순위가 가장 높은 백로그된 AC와 연결된 RA-TID 큐만 서비스합니다. 굶주림을 방지하기 위해 스케줄러는 백로그된 모든 큐에서 주기적으로 DRR을 수행합니다.
IHV가 예약한 확장 TID의 우선 순위 매핑
IHV 예약 범위에서 확장된 TID를 사용하여 IHV에 의해 삽입된 프레임은 우선 순위 스케줄링의 목적으로 다음 확장된 AC에 매핑됩니다. 테이블은 우선 순위가 증가하는 순서입니다.
| 확장 TID | 확장 에어컨 |
|---|---|
| 17 | AC_BK |
| 18 | AC_BE |
| 19 | AC_VI |
| 20 | AC_VO |
| 21 | AC_PR0 |
| 22 | AC_PR1 |
| 23 | AC_PR2 |
| 24 | AC_PR3 |
WDI 포트 큐의 경우 모든 삽입된 프레임은 확장된 TID에 관계없이 동일하게 처리됩니다.
TxMgr-TxEngine 인터페이스
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
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 특정 컨트롤 요청
TX에 대한 특정 컨트롤 표시
- NDIS_WDI_TX_SEND_PAUSE_IND
- NDIS_WDI_TX_SEND_RESTART_IND
- NDIS_WDI_TX_RELEASE_FRAMES_IND
- NDIS_WDI_TX_INJECT_FRAME_IND