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;
210 pTxCtrl->headerConverMode = HDR_CONVERT_NONE;
211 pTxCtrl->currentPrivacyInvokedMode = DEF_CURRENT_PRIVACY_MODE;
212 pTxCtrl->eapolEncryptionStatus = DEF_EAPOL_ENCRYPTION_STATUS;
213 pTxCtrl->encryptionFieldSize = 0;
214 pTxCtrl->currBssType = BSS_INFRASTRUCTURE;
215 pTxCtrl->busyAcBitmap = 0;
216 pTxCtrl->dbgPktSeqNum = 0;
217 pTxCtrl->bCreditCalcTimerRunning = TI_FALSE;
221 pTxCtrl->aMsduLifeTimeTu[ac] = MGMT_PKT_LIFETIME_TU;
222 pTxCtrl->ackPolicy[ac] = ACK_POLICY_LEGACY;
223 pTxCtrl->admissionState[ac] = AC_ADMITTED;
224 pTxCtrl->admissionRequired[ac] = ADMISSION_NOT_REQUIRED;
225 pTxCtrl->useAdmissionAlgo[ac] = TI_FALSE;
226 pTxCtrl->mediumTime[ac] = 0;
227 pTxCtrl->lastCreditCalcTimeStamp[ac] = 0;
228 pTxCtrl->credit[ac] = 0;
239 TWD_RegisterCb (pTxCtrl->hTWD,
245 TWD_RegisterCb (pTxCtrl->hTWD,
250 TRACE0(pTxCtrl->hReport, REPORT_SEVERITY_INIT, ".....Tx Data configured successfully\n");
268 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
270 pTxCtrl->creditCalculationTimeout = txDataInitParams->creditCalculationTimeout;
271 pTxCtrl->bCreditCalcTimerEnabled = txDataInitParams->bCreditCalcTimerEnabled;
277 pTxCtrl->hCreditTimer = tmr_CreateTimer (pTxCtrl->hTimer);
278 if (pTxCtrl->hCreditTimer == NULL)
280 TRACE0(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, "txCtrl_SetDefaults(): Failed to create hCreditTimer!\n");
296 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
298 if (pTxCtrl == NULL)
303 DistributorMgr_Destroy (pTxCtrl->TxEventDistributor);
305 if (pTxCtrl->hCreditTimer)
307 tmr_DestroyTimer (pTxCtrl->hCreditTimer);
311 os_memoryFree (pTxCtrl->hOs, pTxCtrl, sizeof(txCtrl_t));
330 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
340 SELECT_AC_FOR_TID (pTxCtrl, pPktCtrlBlk->tTxDescriptor.tid, uAc);
343 TRACE3(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, ": Pkt Tx, DescID=%d, AC=%d, Len=%d\n", pPktCtrlBlk->tTxDescriptor.descID, uAc, pPktCtrlBlk->tTxDescriptor.length );
345 pTxCtrl->dbgCounters.dbgNumPktsSent[uAc]++;
351 eHwQueStatus = TWD_txHwQueue_AllocResources (pTxCtrl->hTWD, pPktCtrlBlk);
359 pTxCtrl->dbgCounters.dbgNumPktsBackpressure[uAc]++;
360 TRACE2(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, ": Backpressure = 0x%x, queue = %d\n", uBackpressure, uAc);
363 pTxCtrl->busyAcBitmap |= uBackpressure; /* Set the busy bit of the current AC. */
364 txDataQ_StopQueue (pTxCtrl->hTxDataQ, pTxCtrl->admittedAcToTidMap[uAc]);
371 pTxCtrl->dbgCounters.dbgNumPktsBusy[uAc]++;
372 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, ": Queue busy - Packet dropped, queue = %d\n", uAc);
374 txDataQ_StopQueue (pTxCtrl->hTxDataQ, pTxCtrl->admittedAcToTidMap[uAc]);
382 txCtrl_BuildDataPkt(pTxCtrl, pPktCtrlBlk, uAc, uBackpressure);
389 eStatus = TWD_txXfer_SendPacket (pTxCtrl->hTWD, pPktCtrlBlk);
396 TRACE2(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, ": Xfer Error, queue = %d, Status = %d\n", uAc, eStatus);
397 pTxCtrl->dbgCounters.dbgNumPktsError[uAc]++;
401 txCtrl_FreePacket (pTxCtrl, pPktCtrlBlk, TI_NOK);
408 pTxCtrl->dbgCounters.dbgNumPktsSuccess[uAc]++;
428 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
437 SELECT_AC_FOR_TID (pTxCtrl, pPktCtrlBlk->tTxDescriptor.tid, uAc);
440 pTxCtrl->dbgCounters.dbgNumPktsSent[uAc]++;
444 eHwQueStatus = TWD_txHwQueue_AllocResources (pTxCtrl->hTWD, pPktCtrlBlk);
450 pTxCtrl->dbgCounters.dbgNumPktsBackpressure[uAc]++;
451 TRACE2(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, ": Backpressure = 0x%x, queue = %d\n", uBackpressure, uAc);
454 pTxCtrl->busyAcBitmap |= uBackpressure; /* Set the busy bit of the current AC. */
455 txMgmtQ_StopQueue (pTxCtrl->hTxMgmtQ, pTxCtrl->admittedAcToTidMap[uAc]);
462 pTxCtrl->dbgCounters.dbgNumPktsBusy[uAc]++;
463 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, ": Queue busy - Packet dropped, queue = %d\n", uAc);
465 txMgmtQ_StopQueue (pTxCtrl->hTxMgmtQ, pTxCtrl->admittedAcToTidMap[uAc]);
470 txCtrl_BuildMgmtPkt (pTxCtrl, pPktCtrlBlk, uAc);
473 eStatus = TWD_txXfer_SendPacket (pTxCtrl->hTWD, pPktCtrlBlk);
478 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, ": Xfer Error, Status = %d\n", eStatus);
479 pTxCtrl->dbgCounters.dbgNumPktsError[uAc]++;
482 txCtrl_FreePacket (pTxCtrl, pPktCtrlBlk, TI_NOK);
487 pTxCtrl->dbgCounters.dbgNumPktsSuccess[uAc]++;
508 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
511 txCtrl_UpdateHighestAdmittedAcTable (pTxCtrl);
514 txCtrl_UpdateAcToTidMapping (pTxCtrl);
517 txCtrl_UpdateBackpressure (pTxCtrl, 0);
530 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
531 void *pRawBuf = os_memoryAlloc (pTxCtrl->hOs, uPacketLen);
540 TRACE2(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, ": pRawBuf = 0x%x, uPacketLen = %d\n", pRawBuf, uPacketLen);
553 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
555 TRACE3(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, ": 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);
560 os_memoryFree (pTxCtrl->hOs,
567 wlanDrvIf_FreeTxPacket (pTxCtrl->hOs, pPktCtrlBlk, eStatus);
571 TWD_txCtrlBlk_Free (pTxCtrl->hTWD, pPktCtrlBlk);
597 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
604 pPktCtrlBlk = TWD_txCtrlBlk_GetPointer (pTxCtrl->hTWD, pTxResultInfo->descID);
611 TRACE2(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, ": Pkt already free!!, DescID=%d, AC=%d\n", pTxResultInfo->descID, ac);
615 TRACE3(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, ": Pkt Tx Complete, DescID=%d, AC=%d, Status=%d\n", pTxResultInfo->descID, ac, pTxResultInfo->status);
620 TWD_SetSecuritySeqNum (pTxCtrl->hTWD, pTxResultInfo->lsbSecuritySequenceNumber);
630 XCCMngr_LinkTestRetriesUpdate (pTxCtrl->hXCCMngr, pTxResultInfo->ackFailures);
636 pTxCtrl->totalUsedTime[ac] += (TI_UINT32)ENDIAN_HANDLE_WORD(pTxResultInfo->mediumUsage);
641 txCtrl_UpdateTxCounters (pTxCtrl, pTxResultInfo, pPktCtrlBlk, ac, bIsDataPkt);
646 txCtrl_FreePacket (pTxCtrl, pPktCtrlBlk, TI_OK);
666 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
670 EHeaderConvertMode eQosMode = pTxCtrl->headerConverMode;
687 if (pTxCtrl->tTxCtrlHtControl.bHtEnable == TI_TRUE)
719 if ( TI_UNLIKELY(pTxCtrl->currBssType == BSS_INDEPENDENT) )
723 MAC_COPY (pDot11Header->address3, pTxCtrl->currBssId);
734 MAC_COPY (pDot11Header->address1, pTxCtrl->currBssId);
751 if (pTxCtrl->eapolEncryptionStatus)
754 uHdrLen += pTxCtrl->encryptionFieldSize;
757 else if (pTxCtrl->currentPrivacyInvokedMode)
760 uHdrLen += pTxCtrl->encryptionFieldSize;
829 static void txCtrl_BuildDataPkt (txCtrl_t *pTxCtrl, TTxCtrlBlk *pPktCtrlBlk,
835 AckPolicy_e eAckPolicy = pTxCtrl->ackPolicy[uAc];
838 uHdrAlignPad = txCtrl_BuildDataPktHdr ((TI_HANDLE)pTxCtrl, pPktCtrlBlk, eAckPolicy);
844 uTxDescAttr = pTxCtrl->dataPktDescAttrib;
846 uTxDescAttr |= pTxCtrl->dataRatePolicy[uAc] << TX_ATTR_OFST_RATE_POLICY;
851 if (TI_UNLIKELY(pTxCtrl->currBssType == BSS_INDEPENDENT) &&
856 uTxDescAttr |= pTxCtrl->mgmtRatePolicy[uAc] << TX_ATTR_OFST_RATE_POLICY;
861 txCtrl_TranslateTimeToFw (pTxCtrl, pPktCtrlBlk, pTxCtrl->aMsduLifeTimeTu[uAc]);
867 pTxCtrl->dbgPktSeqNum++;
868 pTxCtrl->dbgCounters.dbgNumPktsXfered[uAc]++; /* Count packets sent to Xfer. */
878 static void txCtrl_BuildMgmtPkt (txCtrl_t *pTxCtrl, TTxCtrlBlk *pPktCtrlBlk, TI_UINT32 uAc)
890 uHdrAlignPad = txCtrl_BuildDataPktHdr ((TI_HANDLE)pTxCtrl, pPktCtrlBlk, ACK_POLICY_LEGACY);
892 uRatePolicy = pTxCtrl->dataRatePolicy[uAc];
912 uRatePolicy = pTxCtrl->mgmtRatePolicy[uAc];
918 if (pTxCtrl->headerConverMode == HDR_CONVERT_QOS)
932 uTxDescAttr |= pTxCtrl->txSessionCount << TX_ATTR_OFST_SESSION_COUNTER;
942 txCtrl_TranslateTimeToFw (pTxCtrl, pPktCtrlBlk, MGMT_PKT_LIFETIME_TU);
948 pTxCtrl->dbgPktSeqNum++;
949 pTxCtrl->dbgCounters.dbgNumPktsXfered[uAc]++; /* Count packets sent to Xfer. */
967 static void txCtrl_UpdateHighestAdmittedAcTable (txCtrl_t *pTxCtrl)
980 if(pTxCtrl->admissionState[inputAc] == AC_ADMITTED)
981 pTxCtrl->highestAdmittedAc[inputAc] = inputAc;
994 if(pTxCtrl->admissionRequired[outputAc] == ADMISSION_NOT_REQUIRED)
1000 pTxCtrl->highestAdmittedAc[inputAc] = outputAc;
1002 pTxCtrl->highestAdmittedAc[inputAc] = QOS_AC_BE;
1021 static void txCtrl_UpdateAcToTidMapping (txCtrl_t *pTxCtrl)
1027 os_memoryZero(pTxCtrl->hOs, (void *)&(pTxCtrl->admittedAcToTidMap[0]), sizeof(pTxCtrl->admittedAcToTidMap));
1034 admittedAc = pTxCtrl->highestAdmittedAc[inputAc]; /* The actual AC that is used for Tx. */
1037 pTxCtrl->admittedAcToTidMap[admittedAc] |= 1 << tid;
1056 static void txCtrl_UpdateBackpressure (txCtrl_t *pTxCtrl, TI_UINT32 freedAcBitmap)
1058 TI_UINT32 busyAcBitmap = pTxCtrl->busyAcBitmap;
1064 pTxCtrl->busyAcBitmap = busyAcBitmap; /* Save new bitmap before manipulating it. */
1071 busyTidBitmap |= pTxCtrl->admittedAcToTidMap[ac];
1078 TRACE6(pTxCtrl->hReport, REPORT_SEVERITY_INFORMATION, ": 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]);
1081 pTxCtrl->busyTidBitmap = busyTidBitmap;
1082 txDataQ_UpdateBusyMap (pTxCtrl->hTxDataQ, busyTidBitmap);
1083 txMgmtQ_UpdateBusyMap (pTxCtrl->hTxMgmtQ, busyTidBitmap);
1104 static void txCtrl_SetTxDelayCounters (txCtrl_t *pTxCtrl,
1119 pTxCtrl->txDataCounters[ac].txDelayHistogram[rangeIndex]++;
1127 if (pTxCtrl->SumTotalDelayUs[ac] < 0x7FFFFFFF) /* verify we are not close to the edge. */
1129 pTxCtrl->txDataCounters[ac].NumPackets++;
1130 pTxCtrl->SumTotalDelayUs[ac] += totalTxDelayUsec;
1131 pTxCtrl->txDataCounters[ac].SumFWDelayUs += fwDelay;
1132 pTxCtrl->txDataCounters[ac].SumMacDelayUs += mediumDelay;
1136 pTxCtrl->txDataCounters[ac].NumPackets = 1;
1137 pTxCtrl->SumTotalDelayUs[ac] = totalTxDelayUsec;
1138 pTxCtrl->txDataCounters[ac].SumFWDelayUs = fwDelay;
1139 pTxCtrl->txDataCounters[ac].SumMacDelayUs = mediumDelay;
1152 static void txCtrl_UpdateTxCounters (txCtrl_t *pTxCtrl,
1169 pTxCtrl->dbgCounters.dbgNumTxCmplt[ac]++;
1172 pTxCtrl->dbgCounters.dbgNumTxCmpltOk[ac]++;
1173 pTxCtrl->dbgCounters.dbgNumTxCmpltOkBytes[ac] += pktLen;
1177 pTxCtrl->dbgCounters.dbgNumTxCmpltError[ac]++;
1183 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_ERROR, ": TxResult = %d !!!\n", pTxResultInfo->status);
1187 TRACE1(pTxCtrl->hReport, REPORT_SEVERITY_WARNING, ": TxResult = %d !!!\n", pTxResultInfo->status);
1202 pTxCtrl->txDataCounters[ac].RetryHistogram[retryHistogramIndex]++;
1206 txCtrl_SetTxDelayCounters (pTxCtrl,
1213 if (pTxCtrl->headerConverMode == HDR_CONVERT_QOS)
1227 pTxCtrl->txDataCounters[ac].BroadcastFramesXmit++;
1228 pTxCtrl->txDataCounters[ac].BroadcastBytesXmit += dataLen;
1235 pTxCtrl->txDataCounters[ac].MulticastFramesXmit++;
1236 pTxCtrl->txDataCounters[ac].MulticastBytesXmit += dataLen;
1245 rate_PolicyToDrv ((TI_UINT32)eHwTxRate, &pTxCtrl->eCurrentTxRate);
1248 pTxCtrl->txDataCounters[ac].DirectedFramesXmit++;
1249 pTxCtrl->txDataCounters[ac].DirectedBytesXmit += dataLen;
1254 pTxCtrl->txDataCounters[ac].XmitOk++;
1258 if (pTxCtrl->currentConsecutiveRetryFail > pTxCtrl->txDataCounters[ac].MaxConsecutiveRetryFail)
1260 pTxCtrl->txDataCounters[ac].MaxConsecutiveRetryFail = pTxCtrl->currentConsecutiveRetryFail;
1262 pTxCtrl->currentConsecutiveRetryFail = 0;
1264 if(pTxCtrl->TxEventDistributor)
1266 DistributorMgr_EventCall(pTxCtrl->TxEventDistributor, EventMask, dataLen);
1277 pTxCtrl->txDataCounters[ac].RetryFailCounter++;
1278 pTxCtrl->currentConsecutiveRetryFail++;
1282 pTxCtrl->txDataCounters[ac].TxTimeoutCounter++;
1286 pTxCtrl->txDataCounters[ac].OtherFailCounter++;
1299 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
1303 pTxCtrl->busyAcBitmap = 0; /* clean busy bitmap */
1304 txCtrl_UpdateBackpressure(pTxCtrl, 0);
1309 pPktCtrlBlk = TWD_txCtrlBlk_GetPointer(pTxCtrl->hTWD, entry);
1316 txCtrl_FreePacket (pTxCtrl, pPktCtrlBlk, TI_NOK);
1334 txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl;
1342 pPktCtrlBlk = TWD_txCtrlBlk_GetPointer(pTxCtrl->hTWD, entry);
1351 uPktAge = os_timeStampMs (pTxCtrl->hOs) - pPktCtrlBlk->tTxDescriptor.startTime;