Home | History | Annotate | Download | only in Data_link

Lines Matching refs:pTxCtrl

73 static void   txCtrl_BuildDataPkt (txCtrl_t *pTxCtrl, TTxCtrlBlk *pPktCtrlBlk,
75 static void txCtrl_BuildMgmtPkt (txCtrl_t *pTxCtrl, TTxCtrlBlk *pPktCtrlBlk, TI_UINT32 uAc);
76 static void txCtrl_UpdateHighestAdmittedAcTable (txCtrl_t *pTxCtrl);
77 static void txCtrl_UpdateAcToTidMapping (txCtrl_t *pTxCtrl);
78 static void txCtrl_UpdateBackpressure (txCtrl_t *pTxCtrl, TI_UINT32 freedAcBitmap);
79 static void txCtrl_UpdateTxCounters (txCtrl_t *pTxCtrl,
85 static void txCtrl_SetTxDelayCounters (txCtrl_t *pTxCtrl,
132 static inline void txCtrl_TranslateTimeToFw (txCtrl_t *pTxCtrl, TTxCtrlBlk *pPktCtrlBlk, TI_UINT16 uLifeTime)
137 pPktCtrlBlk->tTxPktParams.uDriverDelay = os_timeStampMs (pTxCtrl->hOs) - uPktStartTime;
140 uPktStartTime = TWD_TranslateToFwTime (pTxCtrl->hTWD, uPktStartTime);
166 txCtrl_t *pTxCtrl;
169 pTxCtrl = os_memoryAlloc(hOs, (sizeof(txCtrl_t)));
171 if (!pTxCtrl)
175 os_memoryZero(hOs, pTxCtrl, (sizeof(txCtrl_t)));
177 pTxCtrl->TxEventDistributor = DistributorMgr_Create(hOs, MAX_TX_NOTIF_REQ_ELMENTS);
179 pTxCtrl->hOs = hOs;
181 return pTxCtrl;
192 txCtrl_t *pTxCtrl = (txCtrl_t *)(pStadHandles->hTxCtrl);
196 pTxCtrl->hOs = pStadHandles->hOs;
197 pTxCtrl->hReport = pStadHandles->hReport;
198 pTxCtrl->hCtrlData = pStadHandles->hCtrlData;
199 pTxCtrl->hTWD = pStadHandles->hTWD;
200 pTxCtrl->hTxDataQ = pStadHandles->hTxDataQ;
201 pTxCtrl->hTxMgmtQ = pStadHandles->hTxMgmtQ;
202 pTxCtrl->hEvHandler = pStadHandles->hEvHandler;
203 pTxCtrl->hHealthMonitor = pStadHandles->hHealthMonitor;
204 pTxCtrl->hTimer = pStadHandles->hTimer;
205 pTxCtrl->hStaCap = pStadHandles->hStaCap;
206 pTxCtrl->hXCCMngr = pStadHandles->hXCCMngr;
207 pTxCtrl->hQosMngr = pStadHandles->hQosMngr;
208 pTxCtrl->hRxData = pStadHandles->hRxData;
211 pTxCtrl->headerConverMode = HDR_CONVERT_NONE;
212 pTxCtrl->currentPrivacyInvokedMode = DEF_CURRENT_PRIVACY_MODE;
213 pTxCtrl->eapolEncryptionStatus = DEF_EAPOL_ENCRYPTION_STATUS;
214 pTxCtrl->encryptionFieldSize = 0;
215 pTxCtrl->currBssType = BSS_INFRASTRUCTURE;
216 pTxCtrl->busyAcBitmap = 0;
217 pTxCtrl->dbgPktSeqNum = 0;
218 pTxCtrl->bCreditCalcTimerRunning = TI_FALSE;
219 pTxCtrl->genericEthertype = ETHERTYPE_EAPOL;
223 pTxCtrl->aMsduLifeTimeTu[ac] = MGMT_PKT_LIFETIME_TU;
224 pTxCtrl->ackPolicy[ac] = ACK_POLICY_LEGACY;
225 pTxCtrl->admissionState[ac] = AC_ADMITTED;
226 pTxCtrl->admissionRequired[ac] = ADMISSION_NOT_REQUIRED;
227 pTxCtrl->useAdmissionAlgo[ac] = TI_FALSE;
228 pTxCtrl->mediumTime[ac] = 0;
229 pTxCtrl->lastCreditCalcTimeStamp[ac] = 0;
230 pTxCtrl->credit[ac] = 0;
241 TWD_RegisterCb (pTxCtrl->hTWD,
247 TWD_RegisterCb (pTxCtrl->hTWD,
252 TRACE0(pTxCtrl->hReport, REPORT_SEVERITY_INIT, ".....Tx Data configured successfully\n");
270 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
272 pTxCtrl->creditCalculationTimeout = txDataInitParams->creditCalculationTimeout;
273 pTxCtrl->bCreditCalcTimerEnabled = txDataInitParams->bCreditCalcTimerEnabled;
279 pTxCtrl->hCreditTimer = tmr_CreateTimer (pTxCtrl->hTimer);
280 if (pTxCtrl->hCreditTimer == NULL)
282 TRACE0(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, "txCtrl_SetDefaults(): Failed to create hCreditTimer!\n");
298 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
300 if (pTxCtrl == NULL)
305 DistributorMgr_Destroy (pTxCtrl->TxEventDistributor);
307 if (pTxCtrl->hCreditTimer)
309 tmr_DestroyTimer (pTxCtrl->hCreditTimer);
313 os_memoryFree (pTxCtrl->hOs, pTxCtrl, sizeof(txCtrl_t));
332 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
342 SELECT_AC_FOR_TID (pTxCtrl, pPktCtrlBlk->tTxDescriptor.tid, uAc);
345 TRACE3(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, "txCtrl_XmitData(): Pkt Tx, DescID=%d, AC=%d, Len=%d\n", pPktCtrlBlk->tTxDescriptor.descID, uAc, pPktCtrlBlk->tTxDescriptor.length );
347 pTxCtrl->dbgCounters.dbgNumPktsSent[uAc]++;
353 eHwQueStatus = TWD_txHwQueue_AllocResources (pTxCtrl->hTWD, pPktCtrlBlk);
361 pTxCtrl->dbgCounters.dbgNumPktsBackpressure[uAc]++;
362 TRACE2(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, "txCtrl_XmitData(): Backpressure = 0x%x, queue = %d\n", uBackpressure, uAc);
365 pTxCtrl->busyAcBitmap |= uBackpressure; /* Set the busy bit of the current AC. */
366 txDataQ_StopQueue (pTxCtrl->hTxDataQ, pTxCtrl->admittedAcToTidMap[uAc]);
373 pTxCtrl->dbgCounters.dbgNumPktsBusy[uAc]++;
374 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, "txCtrl_XmitData(): Queue busy - Packet dropped, queue = %d\n", uAc);
376 txDataQ_StopQueue (pTxCtrl->hTxDataQ, pTxCtrl->admittedAcToTidMap[uAc]);
384 txCtrl_BuildDataPkt(pTxCtrl, pPktCtrlBlk, uAc, uBackpressure);
391 eStatus = TWD_txXfer_SendPacket (pTxCtrl->hTWD, pPktCtrlBlk);
398 TRACE2(pTxCtrl
399 pTxCtrl->dbgCounters.dbgNumPktsError[uAc]++;
403 txCtrl_FreePacket (pTxCtrl, pPktCtrlBlk, TI_NOK);
410 pTxCtrl->dbgCounters.dbgNumPktsSuccess[uAc]++;
430 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
439 SELECT_AC_FOR_TID (pTxCtrl, pPktCtrlBlk->tTxDescriptor.tid, uAc);
442 pTxCtrl->dbgCounters.dbgNumPktsSent[uAc]++;
446 eHwQueStatus = TWD_txHwQueue_AllocResources (pTxCtrl->hTWD, pPktCtrlBlk);
452 pTxCtrl->dbgCounters.dbgNumPktsBackpressure[uAc]++;
453 TRACE2(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, "txCtrl_XmitMgmt(): Backpressure = 0x%x, queue = %d\n", uBackpressure, uAc);
456 pTxCtrl->busyAcBitmap |= uBackpressure; /* Set the busy bit of the current AC. */
457 txMgmtQ_StopQueue (pTxCtrl->hTxMgmtQ, pTxCtrl->admittedAcToTidMap[uAc]);
464 pTxCtrl->dbgCounters.dbgNumPktsBusy[uAc]++;
465 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, "txCtrl_XmitMgmt(): Queue busy - Packet dropped, queue = %d\n", uAc);
467 txMgmtQ_StopQueue (pTxCtrl->hTxMgmtQ, pTxCtrl->admittedAcToTidMap[uAc]);
472 txCtrl_BuildMgmtPkt (pTxCtrl, pPktCtrlBlk, uAc);
475 eStatus = TWD_txXfer_SendPacket (pTxCtrl->hTWD, pPktCtrlBlk);
480 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, "txCtrl_XmitMgmt(): Xfer Error, Status = %d\n", eStatus);
481 pTxCtrl->dbgCounters.dbgNumPktsError[uAc]++;
484 txCtrl_FreePacket (pTxCtrl, pPktCtrlBlk, TI_NOK);
489 pTxCtrl->dbgCounters.dbgNumPktsSuccess[uAc]++;
510 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
513 txCtrl_UpdateHighestAdmittedAcTable (pTxCtrl);
516 txCtrl_UpdateAcToTidMapping (pTxCtrl);
519 txCtrl_UpdateBackpressure (pTxCtrl, 0);
532 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
533 void *pRawBuf = os_memoryAlloc (pTxCtrl->hOs, uPacketLen);
544 TRACE2(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, "txCtrl_AllocPacketBuffer(): pRawBuf = 0x%x, uPacketLen = %d\n", pRawBuf, uPacketLen);
548 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, "txCtrl_AllocPacketBuffer(): uPacketLen = %d, returning NULL\n", uPacketLen);
562 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
564 TRACE3(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, "txCtrl_FreePacket(): RawBufFlag = 0x%x, pBuf = 0x%x, Len = %d\n", (pPktCtrlBlk->tTxPktParams.uFlags & TX_CTRL_FLAG_PKT_IN_RAW_BUF), pPktCtrlBlk->tTxPktParams.pInputPkt, pPktCtrlBlk->tTxPktParams.uInputPktLen);
569 os_memoryFree (pTxCtrl->hOs,
576 wlanDrvIf_FreeTxPacket (pTxCtrl->hOs, pPktCtrlBlk, eStatus);
580 TWD_txCtrlBlk_Free (pTxCtrl->hTWD, pPktCtrlBlk);
606 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
613 pPktCtrlBlk = TWD_txCtrlBlk_GetPointer (pTxCtrl->hTWD, pTxResultInfo->descID);
620 TRACE2(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, "txCtrl_TxCompleteCb(): Pkt already free!!, DescID=%d, AC=%d\n", pTxResultInfo->descID, ac);
624 TRACE3(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, "txCtrl_TxCompleteCb(): Pkt Tx Complete, DescID=%d, AC=%d, Status=%d\n", pTxResultInfo->descID, ac, pTxResultInfo->status);
629 TWD_SetSecuritySeqNum (pTxCtrl->hTWD, pTxResultInfo->lsbSecuritySequenceNumber);
639 XCCMngr_LinkTestRetriesUpdate (pTxCtrl->hXCCMngr, pTxResultInfo->ackFailures);
645 pTxCtrl->totalUsedTime[ac] += (TI_UINT32)ENDIAN_HANDLE_WORD(pTxResultInfo->mediumUsage);
650 txCtrl_UpdateTxCounters (pTxCtrl, pTxResultInfo, pPktCtrlBlk, ac, bIsDataPkt);
655 txCtrl_FreePacket (pTxCtrl, pPktCtrlBlk, TI_OK);
675 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
679 EHeaderConvertMode eQosMode = pTxCtrl->headerConverMode;
695 pTxCtrl->eapolEncryptionStatus)
699 pTxCtrl->currentPrivacyInvokedMode ))
702 uHdrLen += pTxCtrl->encryptionFieldSize;
703 uHdrAlignPad = pTxCtrl->encryptionFieldSize % 4;
716 if (pTxCtrl->tTxCtrlHtControl.bHtEnable == TI_TRUE)
748 if ( TI_UNLIKELY(pTxCtrl->currBssType == BSS_INDEPENDENT) )
752 MAC_COPY (pDot11Header->address3, pTxCtrl->currBssId);
763 MAC_COPY (pDot11Header->address1, pTxCtrl->currBssId);
839 static void txCtrl_BuildDataPkt (txCtrl_t *pTxCtrl, TTxCtrlBlk *pPktCtrlBlk,
845 AckPolicy_e eAckPolicy = pTxCtrl->ackPolicy[uAc];
848 uHdrAlignPad = txCtrl_BuildDataPktHdr ((TI_HANDLE)pTxCtrl, pPktCtrlBlk, eAckPolicy);
854 uTxDescAttr = pTxCtrl->dataPktDescAttrib;
856 uTxDescAttr |= pTxCtrl->dataRatePolicy[uAc] << TX_ATTR_OFST_RATE_POLICY;
865 if (TI_UNLIKELY(pTxCtrl->currBssType == BSS_INDEPENDENT) &&
870 uTxDescAttr |= pTxCtrl->mgmtRatePolicy[uAc] << TX_ATTR_OFST_RATE_POLICY;
875 txCtrl_TranslateTimeToFw (pTxCtrl, pPktCtrlBlk, pTxCtrl->aMsduLifeTimeTu[uAc]);
881 pTxCtrl->dbgPktSeqNum++;
882 pTxCtrl->dbgCounters.dbgNumPktsXfered[uAc]++; /* Count packets sent to Xfer. */
892 static void txCtrl_BuildMgmtPkt (txCtrl_t *pTxCtrl, TTxCtrlBlk *pPktCtrlBlk, TI_UINT32 uAc)
904 uHdrAlignPad = txCtrl_BuildDataPktHdr ((TI_HANDLE)pTxCtrl, pPktCtrlBlk, ACK_POLICY_LEGACY);
906 uRatePolicy = pTxCtrl->dataRatePolicy[uAc];
926 uRatePolicy = pTxCtrl->mgmtRatePolicy[uAc];
932 if (pTxCtrl->headerConverMode == HDR_CONVERT_QOS)
946 uTxDescAttr |= pTxCtrl->txSessionCount << TX_ATTR_OFST_SESSION_COUNTER;
956 txCtrl_TranslateTimeToFw (pTxCtrl, pPktCtrlBlk, MGMT_PKT_LIFETIME_TU);
962 pTxCtrl->dbgPktSeqNum++;
963 pTxCtrl->dbgCounters.dbgNumPktsXfered[uAc]++; /* Count packets sent to Xfer. */
981 static void txCtrl_UpdateHighestAdmittedAcTable (txCtrl_t *pTxCtrl)
994 if(pTxCtrl->admissionState[inputAc] == AC_ADMITTED)
995 pTxCtrl->highestAdmittedAc[inputAc] = inputAc;
1008 if(pTxCtrl->admissionRequired[outputAc] == ADMISSION_NOT_REQUIRED)
1014 pTxCtrl->highestAdmittedAc[inputAc] = outputAc;
1016 pTxCtrl->highestAdmittedAc[inputAc] = QOS_AC_BE;
1035 static void txCtrl_UpdateAcToTidMapping (txCtrl_t *pTxCtrl)
1041 os_memoryZero(pTxCtrl->hOs, (void *)&(pTxCtrl->admittedAcToTidMap[0]), sizeof(pTxCtrl->admittedAcToTidMap));
1048 admittedAc = pTxCtrl->highestAdmittedAc[inputAc]; /* The actual AC that is used for Tx. */
1051 pTxCtrl->admittedAcToTidMap[admittedAc] |= 1 << tid;
1070 static void txCtrl_UpdateBackpressure (txCtrl_t *pTxCtrl, TI_UINT32 freedAcBitmap)
1072 TI_UINT32 busyAcBitmap = pTxCtrl->busyAcBitmap;
1078 pTxCtrl->busyAcBitmap = busyAcBitmap; /* Save new bitmap before manipulating it. */
1085 busyTidBitmap |= pTxCtrl->admittedAcToTidMap[ac];
1092 TRACE6(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, "txCtrl_UpdateBackpressure(): busyTidBitmap = 0x%x, busyAcBitmap = 0x%x, HighestAdmittedAc[3,2,1,0] = %d, %d, %d, %d\n", busyTidBitmap, pTxCtrl->busyAcBitmap, pTxCtrl->highestAdmittedAc[3], pTxCtrl->highestAdmittedAc[2], pTxCtrl->highestAdmittedAc[1], pTxCtrl->highestAdmittedAc[0]);
1095 pTxCtrl->busyTidBitmap = busyTidBitmap;
1096 txDataQ_UpdateBusyMap (pTxCtrl->hTxDataQ, busyTidBitmap);
1097 txMgmtQ_UpdateBusyMap (pTxCtrl->hTxMgmtQ, busyTidBitmap);
1118 static void txCtrl_SetTxDelayCounters (txCtrl_t *pTxCtrl,
1133 pTxCtrl->txDataCounters[ac].txDelayHistogram[rangeIndex]++;
1141 if (pTxCtrl->SumTotalDelayUs[ac] < 0x7FFFFFFF) /* verify we are not close to the edge. */
1143 pTxCtrl->txDataCounters[ac].NumPackets++;
1144 pTxCtrl->SumTotalDelayUs[ac] += totalTxDelayUsec;
1145 pTxCtrl->txDataCounters[ac].SumFWDelayUs += fwDelay;
1146 pTxCtrl->txDataCounters[ac].SumMacDelayUs += mediumDelay;
1150 pTxCtrl->txDataCounters[ac].NumPackets = 1;
1151 pTxCtrl->SumTotalDelayUs[ac] = totalTxDelayUsec;
1152 pTxCtrl->txDataCounters[ac].SumFWDelayUs = fwDelay;
1153 pTxCtrl->txDataCounters[ac].SumMacDelayUs = mediumDelay;
1166 static void txCtrl_UpdateTxCounters (txCtrl_t *pTxCtrl,
1183 pTxCtrl->dbgCounters.dbgNumTxCmplt[ac]++;
1186 pTxCtrl->dbgCounters.dbgNumTxCmpltOk[ac]++;
1187 pTxCtrl->dbgCounters.dbgNumTxCmpltOkBytes[ac] += pktLen;
1191 pTxCtrl
1197 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, "txCtrl_UpdateTxCounters(): TxResult = %d !!!\n", pTxResultInfo->status);
1201 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_WARNING, "txCtrl_UpdateTxCounters(): TxResult = %d !!!\n", pTxResultInfo->status);
1216 pTxCtrl->txDataCounters[ac].RetryHistogram[retryHistogramIndex]++;
1220 txCtrl_SetTxDelayCounters (pTxCtrl,
1227 if (pTxCtrl->headerConverMode == HDR_CONVERT_QOS)
1241 pTxCtrl->txDataCounters[ac].BroadcastFramesXmit++;
1242 pTxCtrl->txDataCounters[ac].BroadcastBytesXmit += dataLen;
1249 pTxCtrl->txDataCounters[ac].MulticastFramesXmit++;
1250 pTxCtrl->txDataCounters[ac].MulticastBytesXmit += dataLen;
1259 rate_PolicyToDrv (eHwTxRate, &pTxCtrl->eCurrentTxRate);
1262 pTxCtrl->txDataCounters[ac].DirectedFramesXmit++;
1263 pTxCtrl->txDataCounters[ac].DirectedBytesXmit += dataLen;
1268 pTxCtrl->txDataCounters[ac].XmitOk++;
1272 if (pTxCtrl->currentConsecutiveRetryFail > pTxCtrl->txDataCounters[ac].MaxConsecutiveRetryFail)
1274 pTxCtrl->txDataCounters[ac].MaxConsecutiveRetryFail = pTxCtrl->currentConsecutiveRetryFail;
1276 pTxCtrl->currentConsecutiveRetryFail = 0;
1278 if(pTxCtrl->TxEventDistributor)
1280 DistributorMgr_EventCall(pTxCtrl->TxEventDistributor, EventMask, dataLen);
1291 pTxCtrl->txDataCounters[ac].RetryFailCounter++;
1292 pTxCtrl->currentConsecutiveRetryFail++;
1296 pTxCtrl->txDataCounters[ac].TxTimeoutCounter++;
1300 pTxCtrl->txDataCounters[ac].OtherFailCounter++;
1313 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
1317 pTxCtrl->busyAcBitmap = 0; /* clean busy bitmap */
1318 txCtrl_UpdateBackpressure(pTxCtrl, 0);
1323 pPktCtrlBlk = TWD_txCtrlBlk_GetPointer(pTxCtrl->hTWD, entry);
1330 txCtrl_FreePacket (pTxCtrl, pPktCtrlBlk, TI_NOK);
1348 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
1356 pPktCtrlBlk = TWD_txCtrlBlk_GetPointer(pTxCtrl->hTWD, entry);
1365 uPktAge = os_timeStampMs (pTxCtrl->hOs) - pPktCtrlBlk->tTxDescriptor.startTime;