/* DTS Tx packet function. * This function should be invoked by the DAL Dataservice to schedule transmit frame through DXE/SDIO. * Parameters: * pContext:Cookie that should be passed back to the caller along with the callback. * pFrame:Refernce to PAL frame. * Return Value: SUCCESS Completed successfully. * FAILURE_XXX Request was rejected due XXX Reason. * */ wpt_status WDTS_TxPacket(void *pContext, wpt_packet *pFrame) { void *pDTDriverContext = WDT_GetTransportDriverContext(pContext); WDI_DS_TxMetaInfoType *pTxMetadata; WDTS_ChannelType channel = WDTS_CHANNEL_TX_LOW_PRI; wpt_status status = eWLAN_PAL_STATUS_SUCCESS; // extract metadata from PAL packet pTxMetadata = WDI_DS_ExtractTxMetaData(pFrame); //Log the TX Stats if(gDsTrafficStats.running && pTxMetadata->staIdx < HAL_NUM_STA) { if(pTxMetadata->frmType & WDI_MAC_DATA_FRAME) { gDsTrafficStats.txStats[pTxMetadata->staIdx].txBytesPushed += pTxMetadata->fPktlen; gDsTrafficStats.txStats[pTxMetadata->staIdx].txPacketsPushed += 1; } } // assign MDPU to correct channel?? channel = (pTxMetadata->frmType & WDI_MAC_DATA_FRAME)? /* EAPOL frame uses TX_HIGH_PRIORITY DXE channel To make sure EAPOL (for second session) is pushed even if TX_LO channel already reached to low resource condition This can happen especially in MCC, high data traffic TX in first session */ #ifdef FEATURE_WLAN_TDLS /* I utilizes TDLS mgmt frame always sent at BD_RATE2. (See limProcessTdls.c) Assumption here is data frame sent by WDA_TxPacket() <- HalTxFrame/HalTxFrameWithComplete() should take managment path. As of today, only TDLS feature has special data frame which needs to be treated as mgmt. */ (((pTxMetadata->isEapol) || (pTxMetadata->txFlags & WDI_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))? WDTS_CHANNEL_TX_HIGH_PRI : WDTS_CHANNEL_TX_LOW_PRI) : WDTS_CHANNEL_TX_HIGH_PRI; #else ((pTxMetadata->isEapol) ? WDTS_CHANNEL_TX_HIGH_PRI : WDTS_CHANNEL_TX_LOW_PRI) : WDTS_CHANNEL_TX_HIGH_PRI; #endif // Send packet to Transport Driver. status = gTransportDriver.xmit(pDTDriverContext, pFrame, channel); #ifdef DEBUG_ROAM_DELAY //Hack we need to send the frame type, so we are using bufflen as frametype vos_record_roam_event(e_DXE_FIRST_XMIT_TIME, (void *)pFrame, pTxMetadata->frmType); //Should we use the below check to avoid funciton calls /* if(gRoamDelayMetaInfo.dxe_monitor_tx) { } */ #endif return status; }
/* DTS Tx packet function. * This function should be invoked by the DAL Dataservice to schedule transmit frame through DXE/SDIO. * Parameters: * pContext:Cookie that should be passed back to the caller along with the callback. * pFrame:Refernce to PAL frame. * Return Value: SUCCESS Completed successfully. * FAILURE_XXX Request was rejected due XXX Reason. * */ wpt_status WDTS_TxPacket(void *pContext, wpt_packet *pFrame) { void *pDTDriverContext = WDT_GetTransportDriverContext(pContext); WDI_DS_TxMetaInfoType *pTxMetadata; WDTS_ChannelType channel = WDTS_CHANNEL_TX_LOW_PRI; wpt_status status = eWLAN_PAL_STATUS_SUCCESS; // extract metadata from PAL packet pTxMetadata = WDI_DS_ExtractTxMetaData(pFrame); // assign MDPU to correct channel?? channel = (pTxMetadata->frmType & WDI_MAC_DATA_FRAME)? WDTS_CHANNEL_TX_LOW_PRI : WDTS_CHANNEL_TX_HIGH_PRI; // Send packet to Transport Driver. status = gTransportDriver.xmit(pDTDriverContext, pFrame, channel); return status; }