Loading drivers/staging/vt6656/main_usb.c +111 −99 Original line number Diff line number Diff line Loading @@ -73,15 +73,16 @@ #include "iowpa.h" /*--------------------- Static Definitions -------------------------*/ //static int msglevel =MSG_LEVEL_DEBUG; /* static int msglevel = MSG_LEVEL_DEBUG; */ static int msglevel =MSG_LEVEL_INFO; // // Define module options // /* * define module options */ // Version Information #define DRIVER_AUTHOR "VIA Networking Technologies, Inc., <lyndonchen@vntek.com.tw>" /* version information */ #define DRIVER_AUTHOR \ "VIA Networking Technologies, Inc., <lyndonchen@vntek.com.tw>" MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION(DEVICE_FULL_DRV_NAM); Loading Loading @@ -184,16 +185,16 @@ DEVICE_PARAM(BasebandType, "baseband type"); DEVICE_PARAM(b80211hEnable, "802.11h mode"); // // Static vars definitions // /* * Static vars definitions */ static struct usb_device_id vt6656_table[] = { {USB_DEVICE(VNT_USB_VENDOR_ID, VNT_USB_PRODUCT_ID)}, {} }; // Frequency list (map channels to frequencies) /* frequency list (map channels to frequencies) */ /* static const long frequency_list[] = { 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2484, Loading Loading @@ -288,7 +289,7 @@ device_set_options(struct vnt_private *pDevice) { pDevice->wCTSDuration = 0; pDevice->byPreambleType = 0; pDevice->bExistSWNetAddr = FALSE; // pDevice->bDiversityRegCtlON = TRUE; /* pDevice->bDiversityRegCtlON = TRUE; */ pDevice->bDiversityRegCtlON = FALSE; } Loading @@ -314,9 +315,9 @@ static void device_init_diversity_timer(struct vnt_private *pDevice) } // // Initialization of MAC & BBP registers // /* * initialization of MAC & BBP registers */ static int device_init_registers(struct vnt_private *pDevice, DEVICE_INIT_TYPE InitType) Loading Loading @@ -372,7 +373,7 @@ static int device_init_registers(struct vnt_private *pDevice, sInitCmd.byShortRetryLimit = pDevice->byShortRetryLimit; sInitCmd.byLongRetryLimit = pDevice->byLongRetryLimit; //issue Card_init command to device /* issue card_init command to device */ ntStatus = CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_CARDINIT, 0, Loading @@ -395,7 +396,7 @@ static int device_init_registers(struct vnt_private *pDevice, return FALSE; } //Local ID for AES functions /* local ID for AES functions */ ntStatus = CONTROLnsRequestIn(pDevice, MESSAGE_TYPE_READ, MAC_REG_LOCALID, Loading @@ -408,10 +409,12 @@ static int device_init_registers(struct vnt_private *pDevice, return FALSE; } // Do MACbSoftwareReset in MACvInitialize // force CCK /* do MACbSoftwareReset in MACvInitialize */ /* force CCK */ pDevice->bCCK = TRUE; pDevice->bProtectMode = FALSE; //Only used in 11g type, sync with ERP IE pDevice->bProtectMode = FALSE; /* only used in 11g type, sync with ERP IE */ pDevice->bNonERPPresent = FALSE; pDevice->bBarkerPreambleMd = FALSE; if ( pDevice->bFixRate ) { Loading @@ -427,12 +430,13 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->byTopOFDMBasicRate = RATE_24M; pDevice->byTopCCKBasicRate = RATE_1M; pDevice->byRevId = 0; //Target to IF pin while programming to RF chip. pDevice->byRevId = 0; /* target to IF pin while programming to RF chip */ pDevice->byCurPwr = 0xFF; pDevice->byCCKPwr = pDevice->abyEEPROM[EEP_OFS_PWR_CCK]; pDevice->byOFDMPwrG = pDevice->abyEEPROM[EEP_OFS_PWR_OFDMG]; // Load power Table /* load power table */ for (ii = 0; ii < 14; ii++) { pDevice->abyCCKPwrTbl[ii] = pDevice->abyEEPROM[ii + EEP_OFS_CCK_PWR_TBL]; if (pDevice->abyCCKPwrTbl[ii] == 0) Loading @@ -442,8 +446,10 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->abyOFDMPwrTbl[ii] = pDevice->byOFDMPwrG; } //original zonetype is USA,but customize zonetype is europe, // then need recover 12,13 ,14 channel with 11 channel /* * original zonetype is USA, but custom zonetype is Europe, * then need to recover 12, 13, 14 channels with 11 channel */ if(((pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Japan) || (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Europe))&& (pDevice->byOriginalZonetype == ZoneType_USA)) { Loading @@ -453,15 +459,14 @@ static int device_init_registers(struct vnt_private *pDevice, } } //{{ RobertYu: 20041124 pDevice->byOFDMPwrA = 0x34; // same as RFbMA2829SelectChannel // Load OFDM A Power Table for (ii=0;ii<CB_MAX_CHANNEL_5G;ii++) { //RobertYu:20041224, bug using CB_MAX_CHANNEL pDevice->byOFDMPwrA = 0x34; /* same as RFbMA2829SelectChannel */ /* load OFDM A power table */ for (ii = 0; ii < CB_MAX_CHANNEL_5G; ii++) { pDevice->abyOFDMAPwrTbl[ii] = pDevice->abyEEPROM[ii + EEP_OFS_OFDMA_PWR_TBL]; if (pDevice->abyOFDMAPwrTbl[ii] == 0) pDevice->abyOFDMAPwrTbl[ii] = pDevice->byOFDMPwrA; } //}} RobertYu byAntenna = pDevice->abyEEPROM[EEP_OFS_ANTENNA]; if (byAntenna & EEP_ANTINV) Loading @@ -471,7 +476,7 @@ static int device_init_registers(struct vnt_private *pDevice, byAntenna &= (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); if (byAntenna == 0) // if not set default is All if (byAntenna == 0) /* if not set default is both */ byAntenna = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); if (byAntenna == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) { Loading Loading @@ -513,35 +518,34 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->byTMax2 = 4; pDevice->ulSQ3TH = 0; pDevice->byTMax3 = 64; // ----------------------------------------------------------------- //Get Auto Fall Back Type /* get Auto Fall Back type */ pDevice->byAutoFBCtrl = AUTO_FB_0; // Set SCAN Time /* set SCAN Time */ pDevice->uScanTime = WLAN_SCAN_MINITIME; // default Auto Mode //pDevice->NetworkType = Ndis802_11Automode; /* default Auto Mode */ /* pDevice->NetworkType = Ndis802_11Automode; */ pDevice->eConfigPHYMode = PHY_TYPE_AUTO; pDevice->byBBType = BB_TYPE_11G; // initialize BBP registers /* initialize BBP registers */ pDevice->ulTxPower = 25; // Get Channel range /* get channel range */ pDevice->byMinChannel = 1; pDevice->byMaxChannel = CB_MAX_CHANNEL; // Get RFType /* get RFType */ pDevice->byRFType = sInitRsp.byRFType; if ((pDevice->byRFType & RF_EMU) != 0) { // force change RevID for VT3253 emu /* force change RevID for VT3253 emu */ pDevice->byRevId = 0x80; } // Load EEPROM calibrated vt3266 parameters /* load vt3266 calibration parameters in EEPROM */ if (pDevice->byRFType == RF_VT3226D0) { if((pDevice->abyEEPROM[EEP_OFS_MAJOR_VER] == 0x1) && (pDevice->abyEEPROM[EEP_OFS_MINOR_VER] >= 0x4)) { Loading @@ -549,13 +553,32 @@ static int device_init_registers(struct vnt_private *pDevice, byCalibTXDC = pDevice->abyEEPROM[EEP_OFS_CALIB_TX_DC]; byCalibRXIQ = pDevice->abyEEPROM[EEP_OFS_CALIB_RX_IQ]; if( (byCalibTXIQ || byCalibTXDC || byCalibRXIQ) ) { ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x03); // CR255, Set BB to support TX/RX IQ and DC compensation Mode ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFB, byCalibTXIQ); // CR251, TX I/Q Imbalance Calibration ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFC, byCalibTXDC); // CR252, TX DC-Offset Calibration ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFD, byCalibRXIQ); // CR253, RX I/Q Imbalance Calibration /* CR255, enable TX/RX IQ and DC compensation mode */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x03); /* CR251, TX I/Q Imbalance Calibration */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFB, byCalibTXIQ); /* CR252, TX DC-Offset Calibration */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFC, byCalibTXDC); /* CR253, RX I/Q Imbalance Calibration */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFD, byCalibRXIQ); } else { // turn off BB Calibration compensation ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x0); // CR255 /* CR255, turn off BB Calibration compensation */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x0); } } } Loading @@ -564,20 +587,21 @@ static int device_init_registers(struct vnt_private *pDevice, pMgmt->uIBSSChannel = pDevice->uChannel; CARDbSetMediaChannel(pDevice, pMgmt->uCurrChannel); // get Permanent network address /* get permanent network address */ memcpy(pDevice->abyPermanentNetAddr,&(sInitRsp.byNetAddr[0]),6); memcpy(pDevice->abyCurrentNetAddr, pDevice->abyPermanentNetAddr, ETH_ALEN); // if exist SW network address, use SW network address. /* if exist SW network address, use it */ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Network address = %pM\n", pDevice->abyCurrentNetAddr); } // Set BB and packet type at the same time. // Set Short Slot Time, xIFS, and RSPINF. /* * set BB and packet type at the same time * set Short Slot Time, xIFS, and RSPINF */ if (pDevice->byBBType == BB_TYPE_11A) { CARDbAddBasicRate(pDevice, RATE_6M); pDevice->bShortSlotTime = TRUE; Loading Loading @@ -616,7 +640,7 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->bHWRadioOff = FALSE; } } //EEP_RADIOCTL_ENABLE } ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_TMLEN,0x38); ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_STS,LEDSTS_SLOW); Loading Loading @@ -741,7 +765,7 @@ static void device_free_tx_bufs(struct vnt_private *pDevice) for (ii = 0; ii < pDevice->cbTD; ii++) { pTxContext = pDevice->apTD[ii]; //de-allocate URBs /* deallocate URBs */ if (pTxContext->pUrb) { usb_kill_urb(pTxContext->pUrb); usb_free_urb(pTxContext->pUrb); Loading @@ -760,12 +784,12 @@ static void device_free_rx_bufs(struct vnt_private *pDevice) for (ii = 0; ii < pDevice->cbRD; ii++) { pRCB = pDevice->apRCB[ii]; //de-allocate URBs /* deallocate URBs */ if (pRCB->pUrb) { usb_kill_urb(pRCB->pUrb); usb_free_urb(pRCB->pUrb); } //de-allocate skb /* deallocate skb */ if (pRCB->skb) dev_kfree_skb(pRCB->skb); } Loading Loading @@ -807,7 +831,7 @@ static BOOL device_alloc_bufs(struct vnt_private *pDevice) } pDevice->apTD[ii] = pTxContext; pTxContext->pDevice = (void *) pDevice; //allocate URBs /* allocate URBs */ pTxContext->pUrb = usb_alloc_urb(0, GFP_ATOMIC); if (pTxContext->pUrb == NULL) { DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "alloc tx urb failed\n"); Loading @@ -816,7 +840,7 @@ static BOOL device_alloc_bufs(struct vnt_private *pDevice) pTxContext->bBoolInUse = FALSE; } // allocate rcb mem /* allocate RCB mem */ pDevice->pRCBMem = kzalloc((sizeof(RCB) * pDevice->cbRD), GFP_KERNEL); if (pDevice->pRCBMem == NULL) { DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s : alloc rx usb context failed\n", pDevice->dev->name); Loading @@ -835,7 +859,7 @@ static BOOL device_alloc_bufs(struct vnt_private *pDevice) pDevice->apRCB[ii] = pRCB; pRCB->pDevice = (void *) pDevice; //allocate URBs /* allocate URBs */ pRCB->pUrb = usb_alloc_urb(0, GFP_ATOMIC); if (pRCB->pUrb == NULL) { Loading Loading @@ -974,7 +998,7 @@ static int device_open(struct net_device *dev) MP_SET_FLAG(pDevice, fMP_POST_READS); MP_SET_FLAG(pDevice, fMP_POST_WRITES); //read config file /* read config file */ Read_config_file(pDevice); if (device_init_registers(pDevice, DEVICE_INIT_COLD) == FALSE) { Loading @@ -983,8 +1007,8 @@ static int device_open(struct net_device *dev) } device_set_multi(pDevice->dev); // Init for Key Management /* init for key management */ KeyvInitTable(pDevice,&pDevice->sKey); memcpy(pDevice->vnt_mgmt.abyMACAddr, pDevice->abyCurrentNetAddr, ETH_ALEN); Loading @@ -1003,7 +1027,7 @@ static int device_open(struct net_device *dev) tasklet_init(&pDevice->ReadWorkItem, (void *)RXvWorkItem, (unsigned long)pDevice); tasklet_init(&pDevice->EventWorkItem, (void *)INTvWorkItem, (unsigned long)pDevice); add_timer(&pDevice->vnt_mgmt.sTimerSecondCallback); pDevice->int_interval = 100; //Max 100 microframes. pDevice->int_interval = 100; /* max 100 microframes */ pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; pDevice->bIsRxWorkItemQueued = TRUE; Loading @@ -1021,7 +1045,7 @@ static int device_open(struct net_device *dev) RXvWorkItem(pDevice); INTvWorkItem(pDevice); // Patch: if WEP key already set by iwconfig but device not yet open /* if WEP key already set by iwconfig but device not yet open */ if ((pDevice->bEncryptionEnable == TRUE) && (pDevice->bTransmitKey == TRUE)) { spin_lock_irq(&pDevice->lock); KeybSetDefaultKey( pDevice, Loading Loading @@ -1221,7 +1245,7 @@ static inline u32 ether_crc(int length, unsigned char *data) return crc; } //find out the start position of str2 from str1 /* find out the start position of str2 from str1 */ static unsigned char *kstrstr(const unsigned char *str1, const unsigned char *str2) { int str1_len = strlen(str1); Loading Loading @@ -1250,12 +1274,12 @@ static int Config_FileGetParameter(unsigned char *string, strcat(buf1, "="); source+=strlen(buf1); //find target string start point /* find target string start point */ start_p = kstrstr(source,buf1); if (start_p == NULL) return FALSE; //check if current config line is marked by "#" ?? /* check if current config line is marked by "#" */ for (ii = 1; ; ii++) { if (memcmp(start_p - ii, "\n", 1) == 0) break; Loading @@ -1263,24 +1287,24 @@ static int Config_FileGetParameter(unsigned char *string, return FALSE; } //find target string end point /* find target string end point */ end_p = kstrstr(start_p,"\n"); if (end_p == NULL) { //can't find "\n",but don't care end_p=start_p+strlen(start_p); //no include "\n" if (end_p == NULL) { /* can't find "\n", but don't care */ end_p = start_p + strlen(start_p); /* no include "\n" */ } memset(buf2,0,100); memcpy(buf2,start_p,end_p-start_p); //get the target line memcpy(buf2, start_p, end_p-start_p); /* get the target line */ buf2[end_p-start_p]='\0'; //find value /* find value */ start_p = kstrstr(buf2,"="); if (start_p == NULL) return FALSE; memset(buf1,0,100); strcpy(buf1,start_p+1); //except space /* except space */ tmp_p = buf1; while(*tmp_p != 0x00) { if(*tmp_p==' ') Loading @@ -1293,26 +1317,19 @@ static int Config_FileGetParameter(unsigned char *string, return TRUE; } //if read fail,return NULL,or return data pointer; /* if read fails, return NULL, or return data pointer */ static unsigned char *Config_FileOperation(struct vnt_private *pDevice) { unsigned char *config_path = CONFIG_PATH; unsigned char *buffer = NULL; struct file *filp=NULL; mm_segment_t old_fs = get_fs(); //int oldfsuid=0,oldfsgid=0; int result = 0; set_fs (KERNEL_DS); /* Can't do this anymore, so we rely on correct filesystem permissions: //Make sure a caller can read or write power as root oldfsuid=current->fsuid; oldfsgid=current->fsgid; current->fsuid = 0; current->fsgid = 0; */ //open file /* open file */ filp = filp_open(config_path, O_RDWR, 0); if (IS_ERR(filp)) { printk("Config_FileOperation file Not exist\n"); Loading Loading @@ -1345,11 +1362,6 @@ static unsigned char *Config_FileOperation(struct vnt_private *pDevice) error2: set_fs (old_fs); /* current->fsuid=oldfsuid; current->fsgid=oldfsgid; */ if(result!=0) { kfree(buffer); buffer=NULL; Loading @@ -1357,14 +1369,14 @@ if(result!=0) { return buffer; } //return --->-1:fail; >=0:successful /* return --->-1:fail; >=0:successful */ static int Read_config_file(struct vnt_private *pDevice) { int result = 0; unsigned char tmpbuffer[100]; unsigned char *buffer = NULL; //init config setting /* init config setting */ pDevice->config_file.ZoneType = -1; pDevice->config_file.eAuthenMode = -1; pDevice->config_file.eEncryptionStatus = -1; Loading @@ -1375,7 +1387,7 @@ static int Read_config_file(struct vnt_private *pDevice) return result; } //get zonetype /* get zonetype */ { memset(tmpbuffer,0,sizeof(tmpbuffer)); if(Config_FileGetParameter("ZONETYPE",tmpbuffer,buffer) ==TRUE) { Loading @@ -1394,7 +1406,7 @@ static int Read_config_file(struct vnt_private *pDevice) } } //get other parameter /* get other parameter */ { memset(tmpbuffer,0,sizeof(tmpbuffer)); if(Config_FileGetParameter("AUTHENMODE",tmpbuffer,buffer)==TRUE) { Loading Loading @@ -1435,9 +1447,9 @@ static void device_set_multi(struct net_device *dev) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byRxMode in= %x\n", pDevice->byRxMode); if (dev->flags & IFF_PROMISC) { // Set promiscuous. if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */ DBG_PRT(MSG_LEVEL_ERR,KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name); // Unconditionally log net taps. /* unconditionally log net taps */ pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST|RCR_UNICAST); } else if ((netdev_mc_count(dev) > pDevice->multicast_limit) || Loading Loading @@ -1466,7 +1478,10 @@ static void device_set_multi(struct net_device *dev) } if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { // If AP mode, don't enable RCR_UNICAST. Since hw only compare addr1 with local mac. /* * If AP mode, don't enable RCR_UNICAST since HW only compares * addr1 with local MAC */ pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); pDevice->byRxMode &= ~(RCR_UNICAST); } Loading Loading @@ -1530,9 +1545,6 @@ static int ethtool_ioctl(struct net_device *dev, void *useraddr) return -EOPNOTSUPP; } /*------------------------------------------------------------------*/ MODULE_DEVICE_TABLE(usb, vt6656_table); static struct usb_driver vt6656_driver = { Loading Loading
drivers/staging/vt6656/main_usb.c +111 −99 Original line number Diff line number Diff line Loading @@ -73,15 +73,16 @@ #include "iowpa.h" /*--------------------- Static Definitions -------------------------*/ //static int msglevel =MSG_LEVEL_DEBUG; /* static int msglevel = MSG_LEVEL_DEBUG; */ static int msglevel =MSG_LEVEL_INFO; // // Define module options // /* * define module options */ // Version Information #define DRIVER_AUTHOR "VIA Networking Technologies, Inc., <lyndonchen@vntek.com.tw>" /* version information */ #define DRIVER_AUTHOR \ "VIA Networking Technologies, Inc., <lyndonchen@vntek.com.tw>" MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION(DEVICE_FULL_DRV_NAM); Loading Loading @@ -184,16 +185,16 @@ DEVICE_PARAM(BasebandType, "baseband type"); DEVICE_PARAM(b80211hEnable, "802.11h mode"); // // Static vars definitions // /* * Static vars definitions */ static struct usb_device_id vt6656_table[] = { {USB_DEVICE(VNT_USB_VENDOR_ID, VNT_USB_PRODUCT_ID)}, {} }; // Frequency list (map channels to frequencies) /* frequency list (map channels to frequencies) */ /* static const long frequency_list[] = { 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2484, Loading Loading @@ -288,7 +289,7 @@ device_set_options(struct vnt_private *pDevice) { pDevice->wCTSDuration = 0; pDevice->byPreambleType = 0; pDevice->bExistSWNetAddr = FALSE; // pDevice->bDiversityRegCtlON = TRUE; /* pDevice->bDiversityRegCtlON = TRUE; */ pDevice->bDiversityRegCtlON = FALSE; } Loading @@ -314,9 +315,9 @@ static void device_init_diversity_timer(struct vnt_private *pDevice) } // // Initialization of MAC & BBP registers // /* * initialization of MAC & BBP registers */ static int device_init_registers(struct vnt_private *pDevice, DEVICE_INIT_TYPE InitType) Loading Loading @@ -372,7 +373,7 @@ static int device_init_registers(struct vnt_private *pDevice, sInitCmd.byShortRetryLimit = pDevice->byShortRetryLimit; sInitCmd.byLongRetryLimit = pDevice->byLongRetryLimit; //issue Card_init command to device /* issue card_init command to device */ ntStatus = CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_CARDINIT, 0, Loading @@ -395,7 +396,7 @@ static int device_init_registers(struct vnt_private *pDevice, return FALSE; } //Local ID for AES functions /* local ID for AES functions */ ntStatus = CONTROLnsRequestIn(pDevice, MESSAGE_TYPE_READ, MAC_REG_LOCALID, Loading @@ -408,10 +409,12 @@ static int device_init_registers(struct vnt_private *pDevice, return FALSE; } // Do MACbSoftwareReset in MACvInitialize // force CCK /* do MACbSoftwareReset in MACvInitialize */ /* force CCK */ pDevice->bCCK = TRUE; pDevice->bProtectMode = FALSE; //Only used in 11g type, sync with ERP IE pDevice->bProtectMode = FALSE; /* only used in 11g type, sync with ERP IE */ pDevice->bNonERPPresent = FALSE; pDevice->bBarkerPreambleMd = FALSE; if ( pDevice->bFixRate ) { Loading @@ -427,12 +430,13 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->byTopOFDMBasicRate = RATE_24M; pDevice->byTopCCKBasicRate = RATE_1M; pDevice->byRevId = 0; //Target to IF pin while programming to RF chip. pDevice->byRevId = 0; /* target to IF pin while programming to RF chip */ pDevice->byCurPwr = 0xFF; pDevice->byCCKPwr = pDevice->abyEEPROM[EEP_OFS_PWR_CCK]; pDevice->byOFDMPwrG = pDevice->abyEEPROM[EEP_OFS_PWR_OFDMG]; // Load power Table /* load power table */ for (ii = 0; ii < 14; ii++) { pDevice->abyCCKPwrTbl[ii] = pDevice->abyEEPROM[ii + EEP_OFS_CCK_PWR_TBL]; if (pDevice->abyCCKPwrTbl[ii] == 0) Loading @@ -442,8 +446,10 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->abyOFDMPwrTbl[ii] = pDevice->byOFDMPwrG; } //original zonetype is USA,but customize zonetype is europe, // then need recover 12,13 ,14 channel with 11 channel /* * original zonetype is USA, but custom zonetype is Europe, * then need to recover 12, 13, 14 channels with 11 channel */ if(((pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Japan) || (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Europe))&& (pDevice->byOriginalZonetype == ZoneType_USA)) { Loading @@ -453,15 +459,14 @@ static int device_init_registers(struct vnt_private *pDevice, } } //{{ RobertYu: 20041124 pDevice->byOFDMPwrA = 0x34; // same as RFbMA2829SelectChannel // Load OFDM A Power Table for (ii=0;ii<CB_MAX_CHANNEL_5G;ii++) { //RobertYu:20041224, bug using CB_MAX_CHANNEL pDevice->byOFDMPwrA = 0x34; /* same as RFbMA2829SelectChannel */ /* load OFDM A power table */ for (ii = 0; ii < CB_MAX_CHANNEL_5G; ii++) { pDevice->abyOFDMAPwrTbl[ii] = pDevice->abyEEPROM[ii + EEP_OFS_OFDMA_PWR_TBL]; if (pDevice->abyOFDMAPwrTbl[ii] == 0) pDevice->abyOFDMAPwrTbl[ii] = pDevice->byOFDMPwrA; } //}} RobertYu byAntenna = pDevice->abyEEPROM[EEP_OFS_ANTENNA]; if (byAntenna & EEP_ANTINV) Loading @@ -471,7 +476,7 @@ static int device_init_registers(struct vnt_private *pDevice, byAntenna &= (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); if (byAntenna == 0) // if not set default is All if (byAntenna == 0) /* if not set default is both */ byAntenna = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); if (byAntenna == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) { Loading Loading @@ -513,35 +518,34 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->byTMax2 = 4; pDevice->ulSQ3TH = 0; pDevice->byTMax3 = 64; // ----------------------------------------------------------------- //Get Auto Fall Back Type /* get Auto Fall Back type */ pDevice->byAutoFBCtrl = AUTO_FB_0; // Set SCAN Time /* set SCAN Time */ pDevice->uScanTime = WLAN_SCAN_MINITIME; // default Auto Mode //pDevice->NetworkType = Ndis802_11Automode; /* default Auto Mode */ /* pDevice->NetworkType = Ndis802_11Automode; */ pDevice->eConfigPHYMode = PHY_TYPE_AUTO; pDevice->byBBType = BB_TYPE_11G; // initialize BBP registers /* initialize BBP registers */ pDevice->ulTxPower = 25; // Get Channel range /* get channel range */ pDevice->byMinChannel = 1; pDevice->byMaxChannel = CB_MAX_CHANNEL; // Get RFType /* get RFType */ pDevice->byRFType = sInitRsp.byRFType; if ((pDevice->byRFType & RF_EMU) != 0) { // force change RevID for VT3253 emu /* force change RevID for VT3253 emu */ pDevice->byRevId = 0x80; } // Load EEPROM calibrated vt3266 parameters /* load vt3266 calibration parameters in EEPROM */ if (pDevice->byRFType == RF_VT3226D0) { if((pDevice->abyEEPROM[EEP_OFS_MAJOR_VER] == 0x1) && (pDevice->abyEEPROM[EEP_OFS_MINOR_VER] >= 0x4)) { Loading @@ -549,13 +553,32 @@ static int device_init_registers(struct vnt_private *pDevice, byCalibTXDC = pDevice->abyEEPROM[EEP_OFS_CALIB_TX_DC]; byCalibRXIQ = pDevice->abyEEPROM[EEP_OFS_CALIB_RX_IQ]; if( (byCalibTXIQ || byCalibTXDC || byCalibRXIQ) ) { ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x03); // CR255, Set BB to support TX/RX IQ and DC compensation Mode ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFB, byCalibTXIQ); // CR251, TX I/Q Imbalance Calibration ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFC, byCalibTXDC); // CR252, TX DC-Offset Calibration ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFD, byCalibRXIQ); // CR253, RX I/Q Imbalance Calibration /* CR255, enable TX/RX IQ and DC compensation mode */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x03); /* CR251, TX I/Q Imbalance Calibration */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFB, byCalibTXIQ); /* CR252, TX DC-Offset Calibration */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFC, byCalibTXDC); /* CR253, RX I/Q Imbalance Calibration */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFD, byCalibRXIQ); } else { // turn off BB Calibration compensation ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x0); // CR255 /* CR255, turn off BB Calibration compensation */ ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x0); } } } Loading @@ -564,20 +587,21 @@ static int device_init_registers(struct vnt_private *pDevice, pMgmt->uIBSSChannel = pDevice->uChannel; CARDbSetMediaChannel(pDevice, pMgmt->uCurrChannel); // get Permanent network address /* get permanent network address */ memcpy(pDevice->abyPermanentNetAddr,&(sInitRsp.byNetAddr[0]),6); memcpy(pDevice->abyCurrentNetAddr, pDevice->abyPermanentNetAddr, ETH_ALEN); // if exist SW network address, use SW network address. /* if exist SW network address, use it */ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Network address = %pM\n", pDevice->abyCurrentNetAddr); } // Set BB and packet type at the same time. // Set Short Slot Time, xIFS, and RSPINF. /* * set BB and packet type at the same time * set Short Slot Time, xIFS, and RSPINF */ if (pDevice->byBBType == BB_TYPE_11A) { CARDbAddBasicRate(pDevice, RATE_6M); pDevice->bShortSlotTime = TRUE; Loading Loading @@ -616,7 +640,7 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->bHWRadioOff = FALSE; } } //EEP_RADIOCTL_ENABLE } ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_TMLEN,0x38); ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_STS,LEDSTS_SLOW); Loading Loading @@ -741,7 +765,7 @@ static void device_free_tx_bufs(struct vnt_private *pDevice) for (ii = 0; ii < pDevice->cbTD; ii++) { pTxContext = pDevice->apTD[ii]; //de-allocate URBs /* deallocate URBs */ if (pTxContext->pUrb) { usb_kill_urb(pTxContext->pUrb); usb_free_urb(pTxContext->pUrb); Loading @@ -760,12 +784,12 @@ static void device_free_rx_bufs(struct vnt_private *pDevice) for (ii = 0; ii < pDevice->cbRD; ii++) { pRCB = pDevice->apRCB[ii]; //de-allocate URBs /* deallocate URBs */ if (pRCB->pUrb) { usb_kill_urb(pRCB->pUrb); usb_free_urb(pRCB->pUrb); } //de-allocate skb /* deallocate skb */ if (pRCB->skb) dev_kfree_skb(pRCB->skb); } Loading Loading @@ -807,7 +831,7 @@ static BOOL device_alloc_bufs(struct vnt_private *pDevice) } pDevice->apTD[ii] = pTxContext; pTxContext->pDevice = (void *) pDevice; //allocate URBs /* allocate URBs */ pTxContext->pUrb = usb_alloc_urb(0, GFP_ATOMIC); if (pTxContext->pUrb == NULL) { DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "alloc tx urb failed\n"); Loading @@ -816,7 +840,7 @@ static BOOL device_alloc_bufs(struct vnt_private *pDevice) pTxContext->bBoolInUse = FALSE; } // allocate rcb mem /* allocate RCB mem */ pDevice->pRCBMem = kzalloc((sizeof(RCB) * pDevice->cbRD), GFP_KERNEL); if (pDevice->pRCBMem == NULL) { DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s : alloc rx usb context failed\n", pDevice->dev->name); Loading @@ -835,7 +859,7 @@ static BOOL device_alloc_bufs(struct vnt_private *pDevice) pDevice->apRCB[ii] = pRCB; pRCB->pDevice = (void *) pDevice; //allocate URBs /* allocate URBs */ pRCB->pUrb = usb_alloc_urb(0, GFP_ATOMIC); if (pRCB->pUrb == NULL) { Loading Loading @@ -974,7 +998,7 @@ static int device_open(struct net_device *dev) MP_SET_FLAG(pDevice, fMP_POST_READS); MP_SET_FLAG(pDevice, fMP_POST_WRITES); //read config file /* read config file */ Read_config_file(pDevice); if (device_init_registers(pDevice, DEVICE_INIT_COLD) == FALSE) { Loading @@ -983,8 +1007,8 @@ static int device_open(struct net_device *dev) } device_set_multi(pDevice->dev); // Init for Key Management /* init for key management */ KeyvInitTable(pDevice,&pDevice->sKey); memcpy(pDevice->vnt_mgmt.abyMACAddr, pDevice->abyCurrentNetAddr, ETH_ALEN); Loading @@ -1003,7 +1027,7 @@ static int device_open(struct net_device *dev) tasklet_init(&pDevice->ReadWorkItem, (void *)RXvWorkItem, (unsigned long)pDevice); tasklet_init(&pDevice->EventWorkItem, (void *)INTvWorkItem, (unsigned long)pDevice); add_timer(&pDevice->vnt_mgmt.sTimerSecondCallback); pDevice->int_interval = 100; //Max 100 microframes. pDevice->int_interval = 100; /* max 100 microframes */ pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; pDevice->bIsRxWorkItemQueued = TRUE; Loading @@ -1021,7 +1045,7 @@ static int device_open(struct net_device *dev) RXvWorkItem(pDevice); INTvWorkItem(pDevice); // Patch: if WEP key already set by iwconfig but device not yet open /* if WEP key already set by iwconfig but device not yet open */ if ((pDevice->bEncryptionEnable == TRUE) && (pDevice->bTransmitKey == TRUE)) { spin_lock_irq(&pDevice->lock); KeybSetDefaultKey( pDevice, Loading Loading @@ -1221,7 +1245,7 @@ static inline u32 ether_crc(int length, unsigned char *data) return crc; } //find out the start position of str2 from str1 /* find out the start position of str2 from str1 */ static unsigned char *kstrstr(const unsigned char *str1, const unsigned char *str2) { int str1_len = strlen(str1); Loading Loading @@ -1250,12 +1274,12 @@ static int Config_FileGetParameter(unsigned char *string, strcat(buf1, "="); source+=strlen(buf1); //find target string start point /* find target string start point */ start_p = kstrstr(source,buf1); if (start_p == NULL) return FALSE; //check if current config line is marked by "#" ?? /* check if current config line is marked by "#" */ for (ii = 1; ; ii++) { if (memcmp(start_p - ii, "\n", 1) == 0) break; Loading @@ -1263,24 +1287,24 @@ static int Config_FileGetParameter(unsigned char *string, return FALSE; } //find target string end point /* find target string end point */ end_p = kstrstr(start_p,"\n"); if (end_p == NULL) { //can't find "\n",but don't care end_p=start_p+strlen(start_p); //no include "\n" if (end_p == NULL) { /* can't find "\n", but don't care */ end_p = start_p + strlen(start_p); /* no include "\n" */ } memset(buf2,0,100); memcpy(buf2,start_p,end_p-start_p); //get the target line memcpy(buf2, start_p, end_p-start_p); /* get the target line */ buf2[end_p-start_p]='\0'; //find value /* find value */ start_p = kstrstr(buf2,"="); if (start_p == NULL) return FALSE; memset(buf1,0,100); strcpy(buf1,start_p+1); //except space /* except space */ tmp_p = buf1; while(*tmp_p != 0x00) { if(*tmp_p==' ') Loading @@ -1293,26 +1317,19 @@ static int Config_FileGetParameter(unsigned char *string, return TRUE; } //if read fail,return NULL,or return data pointer; /* if read fails, return NULL, or return data pointer */ static unsigned char *Config_FileOperation(struct vnt_private *pDevice) { unsigned char *config_path = CONFIG_PATH; unsigned char *buffer = NULL; struct file *filp=NULL; mm_segment_t old_fs = get_fs(); //int oldfsuid=0,oldfsgid=0; int result = 0; set_fs (KERNEL_DS); /* Can't do this anymore, so we rely on correct filesystem permissions: //Make sure a caller can read or write power as root oldfsuid=current->fsuid; oldfsgid=current->fsgid; current->fsuid = 0; current->fsgid = 0; */ //open file /* open file */ filp = filp_open(config_path, O_RDWR, 0); if (IS_ERR(filp)) { printk("Config_FileOperation file Not exist\n"); Loading Loading @@ -1345,11 +1362,6 @@ static unsigned char *Config_FileOperation(struct vnt_private *pDevice) error2: set_fs (old_fs); /* current->fsuid=oldfsuid; current->fsgid=oldfsgid; */ if(result!=0) { kfree(buffer); buffer=NULL; Loading @@ -1357,14 +1369,14 @@ if(result!=0) { return buffer; } //return --->-1:fail; >=0:successful /* return --->-1:fail; >=0:successful */ static int Read_config_file(struct vnt_private *pDevice) { int result = 0; unsigned char tmpbuffer[100]; unsigned char *buffer = NULL; //init config setting /* init config setting */ pDevice->config_file.ZoneType = -1; pDevice->config_file.eAuthenMode = -1; pDevice->config_file.eEncryptionStatus = -1; Loading @@ -1375,7 +1387,7 @@ static int Read_config_file(struct vnt_private *pDevice) return result; } //get zonetype /* get zonetype */ { memset(tmpbuffer,0,sizeof(tmpbuffer)); if(Config_FileGetParameter("ZONETYPE",tmpbuffer,buffer) ==TRUE) { Loading @@ -1394,7 +1406,7 @@ static int Read_config_file(struct vnt_private *pDevice) } } //get other parameter /* get other parameter */ { memset(tmpbuffer,0,sizeof(tmpbuffer)); if(Config_FileGetParameter("AUTHENMODE",tmpbuffer,buffer)==TRUE) { Loading Loading @@ -1435,9 +1447,9 @@ static void device_set_multi(struct net_device *dev) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byRxMode in= %x\n", pDevice->byRxMode); if (dev->flags & IFF_PROMISC) { // Set promiscuous. if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */ DBG_PRT(MSG_LEVEL_ERR,KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name); // Unconditionally log net taps. /* unconditionally log net taps */ pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST|RCR_UNICAST); } else if ((netdev_mc_count(dev) > pDevice->multicast_limit) || Loading Loading @@ -1466,7 +1478,10 @@ static void device_set_multi(struct net_device *dev) } if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { // If AP mode, don't enable RCR_UNICAST. Since hw only compare addr1 with local mac. /* * If AP mode, don't enable RCR_UNICAST since HW only compares * addr1 with local MAC */ pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); pDevice->byRxMode &= ~(RCR_UNICAST); } Loading Loading @@ -1530,9 +1545,6 @@ static int ethtool_ioctl(struct net_device *dev, void *useraddr) return -EOPNOTSUPP; } /*------------------------------------------------------------------*/ MODULE_DEVICE_TABLE(usb, vt6656_table); static struct usb_driver vt6656_driver = { Loading