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

📄 cmm_profile.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
						OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM);						if (pAd->StaCfg.bWindowsACCAMEnable == FALSE)							pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP;						pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeFast_PSP;						pAd->StaCfg.DefaultListenCount = 3;					}					else if ((strcmp(tmpbuf, "Legacy_PSP") == 0) || (strcmp(tmpbuf, "legacy_psp") == 0) 						|| (strcmp(tmpbuf, "LEGACY_PSP") == 0))					{						// do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange()						// to exclude certain situations.						//	   RTMP_SET_PSM_BIT(pAd, PWR_SAVE);						OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM);						if (pAd->StaCfg.bWindowsACCAMEnable == FALSE)							pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeLegacy_PSP;						pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeLegacy_PSP;						pAd->StaCfg.DefaultListenCount = 3;					}					else					{ //Default Ndis802_11PowerModeCAM						// clear PSM bit immediately						RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE);						OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM);						if (pAd->StaCfg.bWindowsACCAMEnable == FALSE)							pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM;						pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM;					}					DBGPRINT(RT_DEBUG_TRACE, ("PSMode=%ld\n", pAd->StaCfg.WindowsPowerMode));				}			}			// AutoRoaming by RSSI			if (RTMPGetKeyParameter("AutoRoaming", tmpbuf, 32, pBuffer, TRUE))			{				if (simple_strtol(tmpbuf, 0, 10) == 0)					pAd->StaCfg.bAutoRoaming = FALSE;				else					pAd->StaCfg.bAutoRoaming = TRUE;				DBGPRINT(RT_DEBUG_TRACE, ("AutoRoaming=%d\n", pAd->StaCfg.bAutoRoaming));			}			// RoamThreshold			if (RTMPGetKeyParameter("RoamThreshold", tmpbuf, 32, pBuffer, TRUE))			{				long lInfo = simple_strtol(tmpbuf, 0, 10);				if (lInfo > 90 || lInfo < 60)					pAd->StaCfg.dBmToRoam = -70;				else    					pAd->StaCfg.dBmToRoam = (CHAR)(-1)*lInfo;				DBGPRINT(RT_DEBUG_TRACE, ("RoamThreshold=%d  dBm\n", pAd->StaCfg.dBmToRoam));			}			if(RTMPGetKeyParameter("TGnWifiTest", tmpbuf, 10, pBuffer, TRUE))			{								if(simple_strtol(tmpbuf, 0, 10) == 0)					pAd->StaCfg.bTGnWifiTest = FALSE;				else					pAd->StaCfg.bTGnWifiTest = TRUE;					DBGPRINT(RT_DEBUG_TRACE, ("TGnWifiTest=%d\n", pAd->StaCfg.bTGnWifiTest));			}			// Beacon Lost Time			if (RTMPGetKeyParameter("BeaconLostTime", tmpbuf, 32, pBuffer, TRUE))			{				ULONG lInfo = (ULONG)simple_strtol(tmpbuf, 0, 10);				if ((lInfo != 0) && (lInfo <= 60))					pAd->StaCfg.BeaconLostTime = (lInfo * OS_HZ);				DBGPRINT(RT_DEBUG_TRACE, ("BeaconLostTime=%ld \n", pAd->StaCfg.BeaconLostTime));			}					}#endif // CONFIG_STA_SUPPORT //	}while(0);	kfree(tmpbuf);		return NDIS_STATUS_SUCCESS;	}#ifdef MULTIPLE_CARD_SUPPORT// record whether the card in the card list is used in the card fileUINT8  MC_CardUsed[MAX_NUM_OF_MULTIPLE_CARD];// record used card mac address in the card liststatic UINT8  MC_CardMac[MAX_NUM_OF_MULTIPLE_CARD][6];/*========================================================================Routine Description:    Get card profile path.Arguments:    pAdReturn Value:    TRUE		- Find a card profile	FALSE		- use default profileNote:========================================================================*/BOOLEAN RTMP_CardInfoRead(	IN	PRTMP_ADAPTER pAd){#define MC_SELECT_CARDID		0	/* use CARD ID (0 ~ 31) to identify different cards */#define MC_SELECT_MAC			1	/* use CARD MAC to identify different cards */#define MC_SELECT_CARDTYPE		2	/* use CARD type (abgn or bgn) to identify different cards */#define LETTER_CASE_TRANSLATE(txt_p, card_id)			\	{	UINT32 _len; char _char;						\		for(_len=0; _len<strlen(card_id); _len++) {		\			_char = *(txt_p + _len);					\			if (('A' <= _char) && (_char <= 'Z'))		\				*(txt_p+_len) = 'a'+(_char-'A');		\		} }	RTMP_OS_FD srcf;	INT retval;	PSTRING buffer, tmpbuf;	STRING card_id_buf[30], RFIC_word[30];	BOOLEAN flg_match_ok = FALSE;	INT32 card_select_method;	INT32 card_free_id, card_nouse_id, card_same_mac_id, card_match_id;	EEPROM_ANTENNA_STRUC antenna;	USHORT addr01, addr23, addr45;	UINT8 mac[6];	UINT32 data, card_index;	UCHAR *start_ptr;	RTMP_OS_FS_INFO osFSInfo;	// init	buffer = kmalloc(MAX_INI_BUFFER_SIZE, MEM_ALLOC_FLAG);	if (buffer == NULL)		return FALSE;	tmpbuf = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG);	if(tmpbuf == NULL)	{		kfree(buffer);		return NDIS_STATUS_FAILURE;	}	// get RF IC type	RTMP_IO_READ32(pAd, E2PROM_CSR, &data);	if ((data & 0x30) == 0)		pAd->EEPROMAddressNum = 6;	// 93C46	else if ((data & 0x30) == 0x10)		pAd->EEPROMAddressNum = 8;	// 93C66	else		pAd->EEPROMAddressNum = 8;	// 93C86		RT28xx_EEPROM_READ16(pAd, EEPROM_NIC1_OFFSET, antenna.word);	if ((antenna.field.RfIcType == RFIC_2850) ||		(antenna.field.RfIcType == RFIC_2750))	{		/* ABGN card */		strcpy(RFIC_word, "abgn");	}	else	{		/* BGN card */		strcpy(RFIC_word, "bgn");	}	// get MAC address	RT28xx_EEPROM_READ16(pAd, 0x04, addr01);	RT28xx_EEPROM_READ16(pAd, 0x06, addr23);	RT28xx_EEPROM_READ16(pAd, 0x08, addr45);	mac[0] = (UCHAR)(addr01 & 0xff);	mac[1] = (UCHAR)(addr01 >> 8);	mac[2] = (UCHAR)(addr23 & 0xff);	mac[3] = (UCHAR)(addr23 >> 8);	mac[4] = (UCHAR)(addr45 & 0xff);	mac[5] = (UCHAR)(addr45 >> 8);	DBGPRINT(RT_DEBUG_TRACE, ("mac addr=%02x:%02x:%02x:%02x:%02x:%02x!\n", PRINT_MAC(mac)));		RtmpOSFSInfoChange(&osFSInfo, TRUE);	// open card information file	srcf = RtmpOSFileOpen(CARD_INFO_PATH, O_RDONLY, 0);	if (IS_FILE_OPEN_ERR(srcf)) 	{		/* card information file does not exist */			DBGPRINT(RT_DEBUG_TRACE,				("--> Error opening %s\n", CARD_INFO_PATH));		goto  free_resource;	}	/* card information file exists so reading the card information */	memset(buffer, 0x00, MAX_INI_BUFFER_SIZE);	retval = RtmpOSFileRead(srcf, buffer, MAX_INI_BUFFER_SIZE);	if (retval < 0)	{		/* read fail */			DBGPRINT(RT_DEBUG_TRACE,				("--> Read %s error %d\n", CARD_INFO_PATH, -retval));	}	else	{		/* get card selection method */		memset(tmpbuf, 0x00, MAX_PARAM_BUFFER_SIZE);		card_select_method = MC_SELECT_CARDTYPE; // default		if (RTMPGetKeyParameter("SELECT", tmpbuf, 256, buffer, TRUE))		{			if (strcmp(tmpbuf, "CARDID") == 0)				card_select_method = MC_SELECT_CARDID;			else if (strcmp(tmpbuf, "MAC") == 0)				card_select_method = MC_SELECT_MAC;			else if (strcmp(tmpbuf, "CARDTYPE") == 0)				card_select_method = MC_SELECT_CARDTYPE;		}		DBGPRINT(RT_DEBUG_TRACE,				("MC> Card Selection = %d\n", card_select_method));		// init		card_free_id = -1;		card_nouse_id = -1;		card_same_mac_id = -1;		card_match_id = -1;		// search current card information records		for(card_index=0;			card_index<MAX_NUM_OF_MULTIPLE_CARD;			card_index++)		{			if ((*(UINT32 *)&MC_CardMac[card_index][0] == 0) &&				(*(UINT16 *)&MC_CardMac[card_index][4] == 0))			{				// MAC is all-0 so the entry is available				MC_CardUsed[card_index] = 0;				if (card_free_id < 0)					card_free_id = card_index; // 1st free entry			}			else			{				if (memcmp(MC_CardMac[card_index], mac, 6) == 0)				{					// we find the entry with same MAC					if (card_same_mac_id < 0)						card_same_mac_id = card_index; // 1st same entry				}				else				{					// MAC is not all-0 but used flag == 0					if ((MC_CardUsed[card_index] == 0) &&						(card_nouse_id < 0))					{						card_nouse_id = card_index; // 1st available entry					}				}			}		}		DBGPRINT(RT_DEBUG_TRACE,				("MC> Free = %d, Same = %d, NOUSE = %d\n",				card_free_id, card_same_mac_id, card_nouse_id));		if ((card_same_mac_id >= 0) &&			((card_select_method == MC_SELECT_CARDID) ||			(card_select_method == MC_SELECT_CARDTYPE)))		{			// same MAC entry is found			card_match_id = card_same_mac_id;			if (card_select_method == MC_SELECT_CARDTYPE)			{				// for CARDTYPE				sprintf(card_id_buf, "%02dCARDTYPE%s",						card_match_id, RFIC_word);				if ((start_ptr = (PUCHAR)rtstrstruncasecmp(buffer, card_id_buf)) != NULL)				{					// we found the card ID					LETTER_CASE_TRANSLATE(start_ptr, card_id_buf);				}			}		}		else		{			// the card is 1st plug-in, try to find the match card profile			switch(card_select_method)			{				case MC_SELECT_CARDID: // CARDID				default:					if (card_free_id >= 0)						card_match_id = card_free_id;					else						card_match_id = card_nouse_id;					break;				case MC_SELECT_MAC: // MAC					sprintf(card_id_buf, "MAC%02x:%02x:%02x:%02x:%02x:%02x",							mac[0], mac[1], mac[2],							mac[3], mac[4], mac[5]);					/* try to find the key word in the card file */					if ((start_ptr = (PUCHAR)rtstrstruncasecmp(buffer, card_id_buf)) != NULL)					{						LETTER_CASE_TRANSLATE(start_ptr, card_id_buf);						/* get the row ID (2 ASCII characters) */						start_ptr -= 2;						card_id_buf[0] = *(start_ptr);						card_id_buf[1] = *(start_ptr+1);						card_id_buf[2] = 0x00;						card_match_id = simple_strtol(card_id_buf, 0, 10);					}					break;				case MC_SELECT_CARDTYPE: // CARDTYPE					card_nouse_id = -1;					for(card_index=0;						card_index<MAX_NUM_OF_MULTIPLE_CARD;						card_index++)					{						sprintf(card_id_buf, "%02dCARDTYPE%s",								card_index, RFIC_word);						if ((start_ptr = (PUCHAR)rtstrstruncasecmp(buffer,													card_id_buf)) != NULL)						{							LETTER_CASE_TRANSLATE(start_ptr, card_id_buf);							if (MC_CardUsed[card_index] == 0)							{								/* current the card profile is not used */								if ((*(UINT32 *)&MC_CardMac[card_index][0] == 0) &&									(*(UINT16 *)&MC_CardMac[card_index][4] == 0))								{									// find it and no previous card use it									card_match_id = card_index;									break;								}								else								{									// ever a card use it									if (card_nouse_id < 0)										card_nouse_id = card_index;								}							}						}					}					// if not find a free one, use the available one					if (card_match_id < 0)						card_match_id = card_nouse_id;					break;			}		}		if (card_match_id >= 0)		{			// make up search keyword			switch(card_select_method)			{				case MC_SELECT_CARDID: // CARDID					sprintf(card_id_buf, "%02dCARDID", card_match_id);					break;				case MC_SELECT_MAC: // MAC					sprintf(card_id_buf,							"%02dmac%02x:%02x:%02x:%02x:%02x:%02x",							card_match_id,							mac[0], mac[1], mac[2],							mac[3], mac[4], mac[5]);					break;				case MC_SELECT_CARDTYPE: // CARDTYPE				default:					sprintf(card_id_buf, "%02dcardtype%s",							card_match_id, RFIC_word);					break;			}			DBGPRINT(RT_DEBUG_TRACE, ("Search Keyword = %s\n", card_id_buf));			// read card file path			if (RTMPGetKeyParameter(card_id_buf, tmpbuf, 256, buffer, TRUE))			{				if (strlen(tmpbuf) < sizeof(pAd->MC_FileName))				{					// backup card information					pAd->MC_RowID = card_match_id; /* base 0 */					MC_CardUsed[card_match_id] = 1;					memcpy(MC_CardMac[card_match_id], mac, sizeof(mac));					// backup card file path					NdisMoveMemory(pAd->MC_FileName, tmpbuf , strlen(tmpbuf));					pAd->MC_FileName[strlen(tmpbuf)] = '\0';					flg_match_ok = TRUE;					DBGPRINT(RT_DEBUG_TRACE,							("Card Profile Name = %s\n", pAd->MC_FileName));				}				else				{					DBGPRINT(RT_DEBUG_ERROR,							("Card Profile Name length too large!\n"));				}			}			else			{				DBGPRINT(RT_DEBUG_ERROR,						("Can not find search key word in card.dat!\n"));			}			if ((flg_match_ok != TRUE) &&				(card_match_id < MAX_NUM_OF_MULTIPLE_CARD))			{				MC_CardUsed[card_match_id] = 0;				memset(MC_CardMac[card_match_id], 0, sizeof(mac));			}		} // if (card_match_id >= 0)	}	// close file	retval = RtmpOSFileClose(srcf);free_resource:	RtmpOSFSInfoChange(&osFSInfo, FALSE);	kfree(buffer);	kfree(tmpbuf);	return flg_match_ok;}#endif // MULTIPLE_CARD_SUPPORT //

⌨️ 快捷键说明

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