📄 wt_nic.c
字号:
#include "wtprecomp.h" void AllocTxMgmt(IN PWT_ADAPTER Adapter, OUT PWTWLAN_TXBUF *ppWtTxBuf){ FN_ENTER; *ppWtTxBuf = NULL; spin_lock_irq(&Adapter->SendLock); if ( !list_empty(&Adapter->SendMgmtList)) { *ppWtTxBuf = (PWTWLAN_TXBUF) ((&Adapter->SendMgmtList)->next); //printk("<0> ppWtTxBuf = %08x\r\n", *ppWtTxBuf); ASSERT(*ppWtTxBuf); list_del((struct list_head *)(*ppWtTxBuf)); memset( &(*ppWtTxBuf)->TXHwBuf.pHwTxBuf->TxAUXBuf, 0, sizeof(WTWLAN_TAUXB)+Adapter->MacHwCfg.ulHwHeadLen); } spin_unlock_irq(&Adapter->SendLock); FN_EXIT(0,0); return ;} void AllocTxBuff(IN PWT_ADAPTER Adapter, OUT PWTWLAN_TXBUF *ppWtTxBuf){ *ppWtTxBuf = NULL; FN_ENTER; spin_lock_irq(&Adapter->SendLock); if ( !list_empty(&Adapter->SendBufList)) { *ppWtTxBuf = (PWTWLAN_TXBUF) ((&Adapter->SendBufList)->next); ASSERT(*ppWtTxBuf); list_del((struct list_head *)(*ppWtTxBuf)); memset( &(*ppWtTxBuf)->TXHwBuf.pHwTxBuf->TxAUXBuf, 0, sizeof(WTWLAN_TAUXB)+Adapter->MacHwCfg.ulHwHeadLen); } spin_unlock_irq(&Adapter->SendLock); FN_EXIT(0,0); return ;} void AllocRxMgmtBuff(IN PWT_ADAPTER Adapter, OUT PWTWLAN_RXBUF *ppWtRxBuf){ FN_ENTER; spin_lock_irq(&Adapter->RcvLock); *ppWtRxBuf = NULL; if ( !list_empty(&Adapter->RecvMgmtList)) { *ppWtRxBuf = (PWTWLAN_RXBUF)((&Adapter->RecvMgmtList)->next); if(*ppWtRxBuf) { list_del((struct list_head *)(*ppWtRxBuf )); (*ppWtRxBuf)->bMgmtFrm = TRUE; Adapter->nReadyRecvMgmt--; ASSERT(Adapter->nReadyRecvMgmt >= 0); memset( &(*ppWtRxBuf)->RXHwBuf.pHwRxBuf->RxStatus, 0, sizeof(WTWLAN_RSB)+Adapter->MacHwCfg.ulHwHeadLen); } } else { ASSERT(Adapter->nReadyRecvMgmt == 0); printk("<0>Fail to alloc mgmt rcv frame\r\n"); } spin_unlock_irq(&Adapter->RcvLock); FN_EXIT(0,0); return;} void AllocRxBuff(IN PWT_ADAPTER Adapter, OUT PWTWLAN_RXBUF *ppWtRxBuf){ FN_ENTER; *ppWtRxBuf = NULL; spin_lock_irq(&Adapter->RcvLock); if ( !list_empty(&Adapter->RecvList) ) { *ppWtRxBuf = (PWTWLAN_RXBUF)((&Adapter->RecvList)->next); if(*ppWtRxBuf) { (*ppWtRxBuf)->skb = dev_alloc_skb(Adapter->MacHwCfg.ulHwHeadLen + Adapter->MacHwCfg.ulHwRxCellLen + sizeof(WTWLAN_RSB)); (*ppWtRxBuf)->RXHwBuf.pRxBuffer = ( *ppWtRxBuf )->skb->data; memset( &(*ppWtRxBuf)->RXHwBuf.pHwRxBuf->RxStatus, 0, sizeof(WTWLAN_RSB)+Adapter->MacHwCfg.ulHwHeadLen); (*ppWtRxBuf)->bMgmtFrm = FALSE; Adapter->nReadyRecv--; ASSERT(Adapter->nReadyRecv >= 0); list_del((struct list_head *)(*ppWtRxBuf )); } } else { ASSERT(Adapter->nReadyRecv == 0); } spin_unlock_irq(&Adapter->RcvLock); FN_EXIT(0,0); return;}VOID NICReturnRxBuf(IN PWT_ADAPTER Adapter, IN PWTWLAN_RXBUF pWtRxBuf){ FN_ENTER; spin_lock_irq(&Adapter->RcvLock); if( pWtRxBuf ) { pWtRxBuf->Frmtype = 0; memset( &pWtRxBuf->FragStatus, 0, sizeof( WTWLAN_FRAG_ENTRY ) ); memset( &pWtRxBuf->ParseData, 0, sizeof( p80211mgmt_fr_t ) ); ///////////////////////////// //dev_kfree_skb(pWtRxBuf->skb); ///////////////////////////// pWtRxBuf->skb = NULL; list_add_tail( (struct list_head *)pWtRxBuf, &Adapter->RecvList); Adapter->nReadyRecv++; ASSERT( Adapter->nReadyRecv <= Adapter->NumRxBuf ); if( netif_queue_stopped( Adapter->ndev ) ) netif_wake_queue( Adapter->ndev ); } spin_unlock_irq(&Adapter->RcvLock); FN_EXIT(0,0); return;}VOID NICReturnRxMgmtBuf(IN PWT_ADAPTER Adapter, IN PWTWLAN_RXBUF pWtRxBuf){ FN_ENTER; spin_lock_irq(&Adapter->RcvLock); if(pWtRxBuf) { pWtRxBuf->Frmtype = 0; memset( &pWtRxBuf->FragStatus, 0, sizeof( WTWLAN_FRAG_ENTRY ) ); memset( &pWtRxBuf->ParseData, 0, sizeof( p80211mgmt_fr_t ) ); list_add_tail( (struct list_head *)pWtRxBuf, &Adapter->RecvMgmtList); Adapter->nReadyRecvMgmt++; } spin_unlock_irq(&Adapter->RcvLock); FN_EXIT(0,0); return; }__inline VOID WT_FREE_SEND_PACKET(IN PWT_ADAPTER Adapter, IN PWTWLAN_TXBUF pWtTxBuf){ struct sk_buff *Packet; FN_ENTER; spin_lock_irq(&Adapter->SendLock); Packet = pWtTxBuf->skb; if (Packet) { WT_CLEAR_FLAGS(pWtTxBuf); Adapter->nBusySend--; ASSERT(Adapter->nBusySend >= 0); ////////////////////////////// dev_kfree_skb_any(pWtTxBuf->skb); ////////////////////////////// pWtTxBuf->skb = NULL; pWtTxBuf->QosTag = 0; list_add_tail( (struct list_head *)pWtTxBuf, &Adapter->SendBufList); } spin_unlock_irq(&Adapter->SendLock); FN_EXIT(0,0); return;}__inline VOID WT_FREE_MGMT_PACKET(IN PWT_ADAPTER Adapter, IN PWTWLAN_TXBUF pWtTxBuf){ FN_ENTER; WT_CLEAR_FLAGS(pWtTxBuf); spin_lock_irq(&Adapter->SendLock); list_add_tail( (struct list_head *)pWtTxBuf, &Adapter->SendMgmtList); spin_unlock_irq(&Adapter->SendLock); FN_EXIT(0,0); return;}VOID WtFreeQueuedSendPackets(IN PWT_ADAPTER Adapter){ return; }void WtFreeBusySendPackets(IN PWT_ADAPTER Adapter){ return;}VOID NICResetRecv(IN PWT_ADAPTER Adapter){ return;}void NicConnectStatusIndicate( IN PWT_ADAPTER Adapter, IN BOOL bLink ){ return;}/* Get priority and swap to out queue num @ QosTag */__inline void WtTxQosPreProcess( IN PWTWLAN_TXBUF pWtTxBuf ) { // get Qos inf and fill Qos tag pWtTxBuf->QosTag = AC_BE; return;}/* Get priority from 802.11e head and swap to out queue num @ QosTag */__inline void WtRxQosPreProcess( IN PWTWLAN_RXBUF pWtRxBuf) { // get Qos inf and fill Qos tag //revise to add Qos tag from rcv packet. { pWtRxBuf->QosTag = AC_BE; } return;}unsigned long long mod64(unsigned long long dividend, unsigned long divisor){ unsigned long long mod; unsigned long long temp_dividend; temp_dividend = dividend; mod = do_div(temp_dividend, divisor); return mod; }unsigned long long div64(unsigned long long dividend, unsigned long divisor){ unsigned long long temp_dividend; temp_dividend = dividend; do_div(temp_dividend, divisor); return temp_dividend; }void Tx_Rx_Statsic(IN PWT_ADAPTER Adapter){#if 0 printk("<0>*****************************Tx_Rx_Statsic****************************\n\r"); printk("<0>)Tx_Msdu_Num = %d \n\r",Adapter->MainMemAddress->HwCSMem.HwStatistic.XmtMsduCounter); printk("<0>)Rx_Mpdu_Num = %d \n\r",Adapter->MainMemAddress->HwCSMem.HwStatistic.RcvMpduCounter); printk("<0>)Rx_Success_Mpdu_Num = %d \n\r",Adapter->MainMemAddress->HwCSMem.HwStatistic.RcvSuccessMpduCounter); printk("<0>)Abandon_Mpdu_Num = %d \n\r",Adapter->MainMemAddress->HwCSMem.HwStatistic.RcvMissedCounter); printk("<0>)Rx_State = %08x \n\r",Adapter->CSRAddress->RxStatus.RegRxStatus);#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -