📄 rtusb_init.c
字号:
/*************************************************************************** * RT2x00 SourceForge Project - http://rt2x00.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Licensed under the GNU GPL * * Original code supplied under license from RaLink Inc, 2004. * ***************************************************************************//*************************************************************************** * Module Name: rtusb_init.c * * Abstract: * * Revision History: * Who When What * -------- ---------- ------------------------------- * Name Date Modification logs * Jan Lee 2005-06-01 Release * RobinC 02-06-2005 usb_kill_urb fixes for kernels =>2.6.7 ***************************************************************************/#include "rt_config.h"#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)#include <linux/kthread.h>#define RT2570_USB_ALLOC_URB(iso) usb_alloc_urb(iso, GFP_ATOMIC); #else#define RT2570_USB_ALLOC_URB(iso) usb_alloc_urb(iso);#endifUSHORT BBPRegTable[] = { 0x0302, // R03 0x0419, // R04 0x0E1C, // R14 0x0F30, // R15 0x10ac, // R16 0x1148, // R17 0x1218, // R18 0x13ff, // R19 0x141E, // R20 0x1508, // R21 0x1608, // R22 0x1708, // R23//modified by david 0x1870, // R24 0x1880, // R24 modified by david//modified by gary 0x1940, // R25 0x1950, // R25 //modified by gary 0x1A08, // R26 0x1B23, // R27 0x1E10, // R30 0x1F2B, // R31 0x20B9, // R32 0x2212, // R34 0x2350, // R35 0x27c4, // R39 0x2802, // R40 0x2960, // R41 0x3510, // R53 0x3618, // R54 0x3808, // R56 0x3910, // R57 0x3A08, // R58 0x3D60, // R61 0x3E10, // R62 0x4BFF, // R75//by MAX};#define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(USHORT))VOID RTMPReadParametersFromFile(PRT2570ADAPTER pAd){#if 0 UCHAR src[70]; struct file *srcf; INT retval, orgfsuid, orgfsgid; mm_segment_t orgfs; CHAR buffer[MAX_INI_BUFFER_SIZE]; CHAR tmpbuf[255]; UCHAR Channel; ULONG ulInfo; RT_802_11_PREAMBLE Preamble; int KeyLen; int i; BOOLEAN bIsHex = TRUE; UCHAR keyMaterial[40]; ULONG rate_mapping[12] = {1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54}; //according to README // Save uid and gid used for filesystem access. // Set user and group to 0 (root) memset(src, 0, sizeof(src)); memcpy(src, PROFILE_PATH, sizeof(PROFILE_PATH)); DBGPRINT(RT_DEBUG_TEMP, "--> Read %s \n", src); orgfsuid = current->fsuid; DBGPRINT(RT_DEBUG_TEMP, "1. orgfsuid = %x\n",orgfsuid); orgfsgid = current->fsgid; DBGPRINT(RT_DEBUG_TEMP, "2. %x\n",orgfsgid); current->fsuid= 0; current->fsgid = 0; orgfs = get_fs(); DBGPRINT(RT_DEBUG_TEMP, "4. read_orgfs=0x%x\n",orgfs); set_fs(KERNEL_DS); if (src && *src) { DBGPRINT(RT_DEBUG_TRACE, "--> Read %s \n", src); srcf = filp_open(src, O_RDONLY , 0); if (IS_ERR(srcf)) { DBGPRINT(RT_DEBUG_TRACE, "--> Error %ld opening %s\n", -PTR_ERR(srcf),src); } else { /* The object must have a read method */ if (srcf->f_op && srcf->f_op->read) { retval=srcf->f_op->read(srcf, buffer, MAX_INI_BUFFER_SIZE, &srcf->f_pos); if (retval < 0) { DBGPRINT(RT_DEBUG_TEMP, "--> Read %s error %d\n", src, -retval); } else { //CountryRegion if (RTMPGetKeyParameter("Default", "CountryRegion", tmpbuf, 255, buffer)) { ulInfo = simple_strtol(tmpbuf, 0, 10); if ((ulInfo >= REGION_MIN) && (ulInfo <= REGION_MAX) ) { pAd->PortCfg.CountryRegion = (UCHAR) ulInfo; DBGPRINT(RT_DEBUG_TRACE, "%s::(CountryRegion=%d)\n", __FUNCTION__, pAd->PortCfg.CountryRegion); } } //SSID memset(tmpbuf, 0x00, 255); if (RTMPGetKeyParameter("Default", "SSID", pAd->PortCfg.Ssid, 32, buffer)) { pAd->PortCfg.SsidLen = strlen(pAd->PortCfg.Ssid); pAd->Mlme.CntlAux.SsidLen = pAd->PortCfg.SsidLen; memcpy(pAd->Mlme.CntlAux.Ssid, pAd->PortCfg.Ssid, pAd->Mlme.CntlAux.SsidLen); DBGPRINT(RT_DEBUG_TRACE, "%s::(SSID=%s Len=%d)\n", __FUNCTION__, pAd->PortCfg.Ssid, pAd->PortCfg.SsidLen); } //NetworkType if (RTMPGetKeyParameter("Default", "NetworkType", tmpbuf, 255, buffer)) { pAd->bConfigChanged = TRUE; if (strcmp(tmpbuf, "Adhoc") == 0) pAd->PortCfg.BssType = BSS_INDEP; else //Default Infrastructure mode pAd->PortCfg.BssType = BSS_INFRA; // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key pAd->PortCfg.WpaState = SS_NOTUSE; DBGPRINT(RT_DEBUG_TEMP, "%s::(NetworkType=%d)\n", __FUNCTION__, pAd->PortCfg.BssType); } //WirelessMode if (RTMPGetKeyParameter("Default", "WirelessMode", tmpbuf, 10, buffer)) { ulInfo = simple_strtol(tmpbuf, 0, 10); if ((ulInfo == PHY_11BG_MIXED) || (ulInfo == PHY_11B) || (ulInfo == PHY_11A) || (ulInfo == PHY_11ABG_MIXED)) { RTMPSetPhyMode(pAd, ulInfo); DBGPRINT(RT_DEBUG_TEMP, "%s::(WirelessMode=%d)\n", __FUNCTION__, ulInfo); } } //TxRate if (RTMPGetKeyParameter("Default", "TxRate", tmpbuf, 10, buffer)) { ulInfo = simple_strtol(tmpbuf, 0, 10); { if (ulInfo == 0) RT2570SetDesiredRates(pAd, -1); else if (ulInfo < 13){ RT2570SetDesiredRates(pAd, (LONG) (rate_mapping[ulInfo-1] * 1000000)); DBGPRINT(RT_DEBUG_TEMP, "1. %s::(TxRate=%d Mbps %d)\n", __FUNCTION__, rate_mapping[ulInfo-1],ulInfo); } DBGPRINT(RT_DEBUG_TEMP, "3. %s::(TxRate=%d Mbps %d)\n", __FUNCTION__, rate_mapping[ulInfo-1],ulInfo); } } //Channel if (RTMPGetKeyParameter("Default", "Channel", tmpbuf, 10, buffer)) { Channel = (UCHAR) simple_strtol(tmpbuf, 0, 10); if (ChannelSanity(pAd, Channel) == TRUE) { pAd->PortCfg.Channel = Channel; // If default profile in Registry is an ADHOC network, driver should use the specified channel // number when starting IBSS the first time, because RaConfig is passive and will not set this // via OID_802_11_CONFIGURATION upon driver bootup. pAd->PortCfg.IbssConfig.Channel = pAd->PortCfg.Channel; DBGPRINT(RT_DEBUG_TEMP, "%s::(Channel=%d)\n", __FUNCTION__, Channel); } } //BGProtection if (RTMPGetKeyParameter("Default", "BGProtection", tmpbuf, 10, buffer)) { switch (simple_strtol(tmpbuf, 0, 10)) { case 1: //Always On pAd->PortCfg.UseBGProtection = 1; break; case 2: //Always OFF pAd->PortCfg.UseBGProtection = 2; break; case 0: //AUTO default: pAd->PortCfg.UseBGProtection = 0; break; } pAd->PortCfg.UseBGProtection = 2; DBGPRINT(RT_DEBUG_TEMP, "%s::(BGProtection=%d)\n", __FUNCTION__, pAd->PortCfg.UseBGProtection); } //TxPreamble if (RTMPGetKeyParameter("Default", "TxPreamble", tmpbuf, 10, buffer)) { Preamble = simple_strtol(tmpbuf, 0, 10); switch (Preamble) { case Rt802_11PreambleShort: pAd->PortCfg.WindowsTxPreamble = Preamble; MlmeSetTxPreamble(pAd, Rt802_11PreambleShort); break; case Rt802_11PreambleLong: case Rt802_11PreambleAuto: default: // if user wants AUTO, initialize to LONG here, then change according to AP's // capability upon association. pAd->PortCfg.WindowsTxPreamble = Preamble; MlmeSetTxPreamble(pAd, Rt802_11PreambleLong); } DBGPRINT(RT_DEBUG_TEMP, "%s::(TxPreamble=%d)\n", __FUNCTION__, Preamble); } //RTSThreshold if (RTMPGetKeyParameter("Default", "RTSThreshold", tmpbuf, 10, buffer)) { ulInfo = simple_strtol(tmpbuf, 0, 10); if((ulInfo > 0) && (ulInfo <= MAX_RTS_THRESHOLD)) pAd->PortCfg.RtsThreshold = (USHORT)ulInfo; else pAd->PortCfg.RtsThreshold = MAX_RTS_THRESHOLD; DBGPRINT(RT_DEBUG_TEMP, "%s::(RTSThreshold=%d)\n", __FUNCTION__, pAd->PortCfg.RtsThreshold); } //FragThreshold if (RTMPGetKeyParameter("Default", "FragThreshold", tmpbuf, 10, buffer)) { ulInfo = simple_strtol(tmpbuf, 0, 10); if ( (ulInfo >= MIN_FRAG_THRESHOLD) && (ulInfo <= MAX_FRAG_THRESHOLD)) pAd->PortCfg.FragmentThreshold = (USHORT)ulInfo; else pAd->PortCfg.FragmentThreshold = MAX_FRAG_THRESHOLD; if (pAd->PortCfg.FragmentThreshold == MAX_FRAG_THRESHOLD) pAd->PortCfg.bFragmentZeroDisable = TRUE; else pAd->PortCfg.bFragmentZeroDisable = FALSE; DBGPRINT(RT_DEBUG_TEMP, "%s::(FragThreshold=%d)\n", __FUNCTION__, ulInfo); } //TxBurst if (RTMPGetKeyParameter("Default", "TxBurst", tmpbuf, 10, buffer)) { ulInfo = simple_strtol(tmpbuf, 0, 10); if (ulInfo == 1) pAd->PortCfg.EnableTxBurst = TRUE; else pAd->PortCfg.EnableTxBurst = FALSE; DBGPRINT(RT_DEBUG_TEMP, "%s::(TxBurst=%d)\n", __FUNCTION__, pAd->PortCfg.EnableTxBurst); } //TurboRate if (RTMPGetKeyParameter("Default", "TurboRate", tmpbuf, 10, buffer)) { ulInfo = simple_strtol(tmpbuf, 0, 10); if (ulInfo == 1) pAd->PortCfg.EnableTurboRate = TRUE; else pAd->PortCfg.EnableTurboRate = FALSE; DBGPRINT(RT_DEBUG_TEMP, "%s::(TurboRate=%d)\n", __FUNCTION__, pAd->PortCfg.EnableTurboRate); } //ShortSlot if (RTMPGetKeyParameter("Default", "ShortSlot", tmpbuf, 10, buffer)) { ulInfo = simple_strtol(tmpbuf, 0, 10); if (ulInfo == 1) pAd->PortCfg.UseShortSlotTime = TRUE; else pAd->PortCfg.UseShortSlotTime = FALSE; DBGPRINT(RT_DEBUG_TEMP, "%s::(ShortSlot=%d)\n", __FUNCTION__, pAd->PortCfg.UseShortSlotTime); } //POWER_MODE if (RTMPGetKeyParameter("Default", "PSMode", tmpbuf, 10, buffer)) { if (pAd->PortCfg.BssType == BSS_INFRA) { if ((strcmp(tmpbuf, "MAX_PSP") == 0) || (strcmp(tmpbuf, "max_psp") == 0)) { // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() // to exclude certain situations. // MlmeSetPsmBit(pAdapter, PWR_SAVE); pAd->PortCfg.WindowsPowerMode = Ndis802_11PowerModeMAX_PSP; pAd->PortCfg.RecvDtim = TRUE; // FALSE; pAd->PortCfg.DefaultListenCount = 5; } else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0) || (strcmp(tmpbuf, "FAST_PSP") == 0)) { // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() // to exclude certain situations. // MlmeSetPsmBit(pAdapter, PWR_SAVE); pAd->PortCfg.RecvDtim = TRUE; pAd->PortCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP; pAd->PortCfg.DefaultListenCount = 3; } else { //Default Ndis802_11PowerModeCAM // clear PSM bit immediately MlmeSetPsmBit(pAd, PWR_ACTIVE); pAd->PortCfg.RecvDtim = TRUE; pAd->PortCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; } DBGPRINT(RT_DEBUG_TRACE, "%s::(PSMode=%d)\n", __FUNCTION__, pAd->PortCfg.WindowsPowerMode); } } //AuthMode if (RTMPGetKeyParameter("Default", "AuthMode", tmpbuf, 10, buffer)) { if ((strcmp(tmpbuf, "SHARED") == 0) || (strcmp(tmpbuf, "shared") == 0)){ pAd->PortCfg.AuthMode = Ndis802_11AuthModeShared; DBGPRINT(RT_DEBUG_INFO, "%s::(AuthMode=shared)\n", __FUNCTION__); } else if ((strcmp(tmpbuf, "WPAPSK") == 0) || (strcmp(tmpbuf, "wpapsk") == 0)) pAd->PortCfg.AuthMode = Ndis802_11AuthModeWPAPSK; else if ((strcmp(tmpbuf, "WPANONE") == 0) || (strcmp(tmpbuf, "wpanone") == 0)) pAd->PortCfg.AuthMode = Ndis802_11AuthModeWPANone; else{ pAd->PortCfg.AuthMode = Ndis802_11AuthModeOpen; DBGPRINT(RT_DEBUG_INFO, "%s::(AuthMode=open buf = %s)\n", __FUNCTION__,tmpbuf); } pAd->PortCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; DBGPRINT(RT_DEBUG_TEMP, "%s::(AuthMode=%d)\n", __FUNCTION__, pAd->PortCfg.AuthMode); } //WPAPSK_KEY if (RTMPGetKeyParameter("Default", "WPAPSK", tmpbuf, 255, buffer)) { if ((strlen(tmpbuf) >= 8) && (strlen(tmpbuf) <= 64)) { PasswordHash((char *)tmpbuf, pAd->PortCfg.Ssid, pAd->PortCfg.SsidLen, keyMaterial); memcpy(pAd->PortCfg.PskKey.Key, keyMaterial, 32); // Use RaConfig as PSK agent. // Start STA supplicant state machine pAd->PortCfg.WpaState = SS_START; DBGPRINT(RT_DEBUG_LOUD, "%s WPAPSK Key => \n", __FUNCTION__); DBGPRINT(RT_DEBUG_LOUD, " "); for (i = 0; i < 32; i++) { DBGPRINT_RAW(RT_DEBUG_LOUD, "%02x:", pAd->PortCfg.PskKey.Key[i]); if (i%16 == 15) { DBGPRINT_RAW(RT_DEBUG_LOUD, "\n"); DBGPRINT(RT_DEBUG_LOUD, " "); } DBGPRINT_RAW(RT_DEBUG_LOUD, "\n"); } } //DefaultKeyID if (RTMPGetKeyParameter("Default", "DefaultKeyID", tmpbuf, 10, buffer)) { ulInfo = simple_strtol(tmpbuf, 0, 10); if((ulInfo >= 1 ) && (ulInfo <= 4)) pAd->PortCfg.DefaultKeyId = (UCHAR) (ulInfo - 1 ); else pAd->PortCfg.DefaultKeyId = 0; DBGPRINT(RT_DEBUG_TEMP, "%s::(DefaultKeyID=%d)\n", __FUNCTION__, pAd->PortCfg.DefaultKeyId); } //Key1Str if (RTMPGetKeyParameter("Default", "Key1Str", tmpbuf, 26, buffer)) { KeyLen = strlen(tmpbuf); switch (KeyLen) { case 0: pAd->PortCfg.SharedKey[0].KeyLen = 0; break; case 5: //wep 40 Ascii type pAd->PortCfg.SharedKey[0].KeyLen = KeyLen;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -