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

📄 zdinlinef.h

📁 该代码为linux下通过usb驱动实现的无线网络驱动程序,在2.6.18的内核下调试通过
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _ZD_INLINEF_H
#define _ZD_INLINEF_H
#include "zd1205.h"
#include "zdglobal.h"
#include "zddebug.h"

#define write_str(a,b)
extern zd_80211Obj_t dot11Obj;

#if defined(OFDM)
	extern u8 OfdmRateTbl_11A[12];

	extern u8 OfdmRateTbl[12];
#endif


__inline void
Cal_Us_Service(
	u8 TxRate, 
	u16 Len,	
	u16	*pLenInUs,	
	u8 *pService
)
{
	u32		Remainder;
	u32		Delta;

#if defined(OFDM)
	*(pService) = 0x00;
#endif	

	switch(TxRate){
		case RATE_1M:		/* 1M bps */
			*(pLenInUs) = Len << 3;
			break;
			
		case RATE_2M:		/* 2M bps */
			*(pLenInUs) = Len << 2;
			break;
			
		case RATE_5M:		/* 5.5M bps */
			*(pLenInUs) = (u16)(((u32)Len << 4)/11);
			Remainder = (((u32)Len << 4) % 11);
			if ( Remainder ){
				*(pLenInUs) += 1;
			}
			break;
			
		case RATE_11M:		/* 11M bps */
			*(pLenInUs) = (u16)(((u32)Len << 3)/11);
			Remainder = (((u32)Len << 3) % 11);
			Delta = 11 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta >= 8 ){
					*(pService) |= BIT_7;
				}
			}
			break;
		
#if !(defined(GCCK) && defined(OFDM))			
		case RATE_16M:		// 16.5M bps 
			*(pLenInUs) = (u16)(((u32)Len << 4)/33);
			Remainder = (((u32)Len << 4) % 33);
			Delta = 33 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta < 16 ){
				}
				else if ( (Delta >= 16) && (Delta < 32) ){
					*(pService) |= BIT_7;
				}
				else if ( Delta >= 32 ){
					*(pService) |= BIT_6;
				}
			}
			break;
				
		case RATE_22M:		// 22M bps 
			*(pLenInUs) = (u16)(((u32)Len << 2)/11);
			Remainder = (((u32)Len << 2) % 11);
			Delta = 11 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta < 4 ){
				}
				else if ( (Delta >= 4) && (Delta < 8) ){
					*(pService) |= BIT_7;
				}
				else if ( Delta >= 8 ){
					*(pService) |= BIT_6;
				}
			}
			break;
			
		
			
		case RATE_27M:		// 27.5 bps 
			*(pLenInUs) = (u16)(((u32)Len << 4)/55);
			Remainder = (((u32)Len << 4) % 55);
			Delta = 55 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta < 16 ){
				}
				else if ( (Delta >= 16) && (Delta < 32) ){
					*(pService) |= BIT_7;

				}

				else if ( (Delta >= 32) && (Delta < 48) ){
					*(pService) |= BIT_6;
				}
				else if ( Delta >= 48 ){
					*(pService) |= (BIT_6 | BIT_7);
				}
			}
			break;
			
		case RATE_33M:		// 33M bps
			*(pLenInUs) = (u16)(((u32)Len << 3)/33);
			Remainder = (((u32)Len << 3) % 33);
			Delta = 33 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta < 8 ){
				}
				else if ( (Delta >= 8) && (Delta < 16) ){
					*(pService) |= BIT_7;
				}
				else if ( (Delta >= 16) && (Delta < 24) ){
					*(pService) |= BIT_6;
				}
				else if ( (Delta >= 24) && (Delta < 32) ){
					*(pService) |= (BIT_6 | BIT_7);
				}
				else if ( Delta >= 32 ){
					*(pService) |= BIT_5;
				}
			}
			break;
			
		case RATE_38M:		// 38.5M bps
			*(pLenInUs) = (u16)(((u32)Len << 4)/77);
			Remainder = (((u32)Len << 4) % 77);
			Delta = 77 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta < 16 ){
				}
				else if ( (Delta >= 16) && (Delta < 32) ){
					*(pService) |= BIT_7;


				}
				else if ( (Delta >= 32) && (Delta < 48) ){
					*(pService) |= BIT_6;
				}
				else if ( (Delta >= 48) && (Delta < 64) ){
					*(pService) |= (BIT_6 | BIT_7);
				}
				else if ( Delta >= 64){
					*(pService) |= BIT_5;
				}
			}
			break;
			
		case RATE_44M:		// 44M bps
			*(pLenInUs) = (u16)(((u32)Len << 1)/11);
			Remainder = (((u32)Len << 1) % 11);
			Delta = 11 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta < 2 ){
				}
				else if ( (Delta >= 2) && (Delta < 4) ){
					*(pService) |= BIT_7;
				}
				else if ( (Delta >= 4) && (Delta < 6) ){
					*(pService) |= BIT_6;
				}
				else if ( (Delta >= 6) && (Delta < 8) ){
					*(pService) |= (BIT_6 | BIT_7);
				}
				else if ( (Delta >= 8) && (Delta < 10) ){
					*(pService) |= BIT_5;
				}
				else if ( Delta >= 10 ){
					*(pService) |= (BIT_5 | BIT_7);
				}
			}
			break;
			
		case RATE_49M:		// 49.5M bps
			*(pLenInUs) = (u16)(((u32)Len << 4)/99);
			Remainder = (((u32)Len << 4) % 99);
			Delta = 99 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta < 16 ){
				}
				else if ( (Delta >= 16) && (Delta < 32) ){
					*(pService) |= BIT_7;
				}
				else if ( (Delta >= 32) && (Delta < 48) ){
					*(pService) |= BIT_6;
				}
				else if ( (Delta >= 48) && (Delta < 64) ){
					*(pService) |= (BIT_6 | BIT_7);
				}


				else if ( (Delta >= 64) && (Delta < 80) ){
					*(pService) |= BIT_5;
				}
				else if ( (Delta >= 80) && (Delta < 96) ){
					*(pService) |= (BIT_5 | BIT_7);
				}
				else if ( Delta >= 96 ){
					*(pService) |= (BIT_5 | BIT_6); 
				}
			}
			break;
			
		case RATE_55M:		// 55M bps
			*(pLenInUs) = (u16)(((u32)Len << 3)/55);
			Remainder = (((u32)Len << 3) % 55);
			Delta = 55 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta < 8 ){
				}
				else if ( (Delta >= 8) && (Delta < 16) ){
					*(pService) |= BIT_7;
				}
				else if ( (Delta >= 16) && (Delta < 24) ){
					*(pService) |= BIT_6;
				}
				else if ( (Delta >= 24) && (Delta < 32) ){
					*(pService) |= (BIT_6 | BIT_7);
				}
				else if ( (Delta >= 32) && (Delta < 40) ){
					*(pService) |= BIT_5;
				}
				else if ( (Delta >= 40) && (Delta < 48) ){
					*(pService) |= (BIT_5 | BIT_7);
				}
				else if ( Delta >= 48 ){
					*(pService) |= (BIT_5 | BIT_6);
				}
			}
			break;
			
		case RATE_60M:		// 60.5M bps
			*(pLenInUs) = (u16)(((u32)Len << 4)/121);
			Remainder = (((u32)Len << 4) % 121);
			Delta = 121 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if ( Delta < 16 ){
				}
				else if ( (Delta >= 16) && (Delta < 32) ){
					*(pService) |= BIT_7;
				}
				else if ( (Delta >= 32) && (Delta < 48) ){
					*(pService) |= BIT_6;
				}
				else if ( (Delta >= 48) && (Delta < 64) ){
					*(pService) |= (BIT_6 | BIT_7);
				}
				else if ( (Delta >= 64) && (Delta < 80) ){
					*(pService) |= BIT_5;
				}
				else if ( (Delta >= 80) && (Delta < 96) ){
					*(pService) |= (BIT_5 | BIT_7);
				}
				else if ( (Delta >= 96) && (Delta < 112) ){
					*(pService) |= (BIT_5 | BIT_6);
				}
				else if ( Delta >= 112 ){
					*(pService) |= (BIT_5 | BIT_6 | BIT_7);
				}
			}
			break;			
				
		case 13:		// 8.25M bps
			*(pLenInUs) = (u16)(((u32)Len * 32)/33);
			Remainder = (((u32)Len * 32) % 33);
			Delta = 33 - Remainder;
			if ( Remainder ){
				*(pLenInUs) += 1;
				if (Delta < 32){
				}
				else {
					*(pService) |= BIT_7;
				}
			}

			break;
#else
		case RATE_6M:	// 6M
			*(pLenInUs) = (u16)(((u32)Len << 3)/6);
			break;
			
		case RATE_9M:	// 9M
			*(pLenInUs) = (u16)(((u32)Len << 3)/9);
			break;
			
		case RATE_12M:	// 12M
			*(pLenInUs) = (u16)(((u32)Len << 3)/12);
			break;
			
		case RATE_18M:	// 18M
			*(pLenInUs) = (u16)(((u32)Len << 3)/18);
			break;
			
		case RATE_24M:	// 24M
			*(pLenInUs) = (u16)(((u32)Len << 3)/24);
			break;
			
		case RATE_36M:	// 36M
			*(pLenInUs) = (u16)(((u32)Len << 3)/36);

			break;
			
		case RATE_48M:	// 48M
			*(pLenInUs) = (u16)(((u32)Len << 3)/48);
			break;
			
		case RATE_54M:	// 54M
			*(pLenInUs) = (u16)(((u32)Len << 3)/54);
			break;
#endif	
	
		default:
			printk(KERN_ERR "zd1205: Invalid RF module parameter\n");
			
	}
}

char DbgStr100[]="TKIP:";
char DbgStr101[]="CtrlSetting";
char DbgStr102[]="EncryType";
#define CTRL_SIZE	25
__inline unsigned long 
Cfg_CtrlSetting(
	struct zd1205_private *macp,
	zd1205_SwTcb_t		*pSwTcb,
	wla_Header_t	*pWlaHdr,
	ctrl_Set_parm_t *pSetParms
)
{
	zd1205_Ctrl_Set_t	*pCtrlSet = pSwTcb->pHwCtrlPtr;
	u8			tmp;
	u16			Len = 0;
	u16			NextLen = 0;
	u16			LenInUs;
	u16			NextLenInUs;
	u8			Service;
	u8			TxRate;
	u8			Rate = pSetParms->Rate;
	u8			Preamble = pSetParms->Preamble;
	u32			CurrFragLen = pSetParms->CurrFragLen;
	u32			NextFragLen = pSetParms->NextFragLen;
	u8			encryType = pSetParms->encryType;
	//u8			vapId = pSetParms->vapId;
	u8			bMgtFrame = 0;
	u8			bGroupAddr = 0;
	u8			EnCipher = ((pWlaHdr->FrameCtrl[1] & ENCRY_BIT) ? 1 : 0);
	u16			FragNum = (pWlaHdr->SeqCtrl[0] & 0x0F);
	card_Setting_t		*pCardSettting = &macp->cardSetting;
	u16			FrameType = pWlaHdr->FrameCtrl[0];
	u8			bBusrt = 0;
#ifdef ZD1211B
	u8			LengthDiff=0;
#endif

	memset(pCtrlSet,0,sizeof(zd1205_Ctrl_Set_t));

	if (Rate > macp->AdapterMaxRate)
		Rate = macp->AdapterMaxRate;
        
	if ((FrameType & 0x0c) == MANAGEMENT){
		bMgtFrame = 1;
		Rate = dot11Obj.BasicRate;
	}
        if ((FrameType & 0x0c) == DATA){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -