⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wt_nic.c

📁 mini-PCI driver for LHWT chipsets
💻 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 + -