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

📄 bssdb.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 4 页
字号:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)                pDevice->skb->mac_header = pDevice->skb->data;#else                pDevice->skb->mac.raw = pDevice->skb->data;#endif                          pDevice->skb->pkt_type = PACKET_HOST;             pDevice->skb->protocol = htons(ETH_P_802_2);             memset(pDevice->skb->cb, 0, sizeof(pDevice->skb->cb));             netif_rx(pDevice->skb);            pDevice->skb = dev_alloc_skb((int)pDevice->rx_buf_sz);//         }              }      else if ((pDevice->bRoaming == FALSE)&&(pDevice->bIsRoaming == TRUE)) {                            pDevice->uIsroamingTime++;       if (pDevice->uIsroamingTime >= 20)            pDevice->bIsRoaming = FALSE;         }   }else {            if (pDevice->uAutoReConnectTime < 10) {                 pDevice->uAutoReConnectTime++;               #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT                //network manager support need not do Roaming scan???                if(pDevice->bWPASuppWextEnabled ==TRUE)		 pDevice->uAutoReConnectTime = 0;	     #endif            }            else {	    //mike use old encryption status for wpa reauthen	      if(pDevice->bWPADevEnable)	          pDevice->eEncryptionStatus = pDevice->eOldEncryptionStatus;		                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Roaming ...\n");                BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass);                bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID);                bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID);                pDevice->uAutoReConnectTime = 0;            }        }    }          }            if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) {        // if adhoc started which essid is NULL string, rescaning.        if ((pMgmt->eCurrState == WMAC_STATE_STARTED) && (pCurrSSID->len == 0)) {            if (pDevice->uAutoReConnectTime < 10) {                pDevice->uAutoReConnectTime++;            }            else {                    DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Adhoc re-scaning ...\n");                bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL);                bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL);                pDevice->uAutoReConnectTime = 0;            };        }         if (pMgmt->eCurrState == WMAC_STATE_JOINTED) {                        if (pDevice->bUpdateBBVGA) {               //s_vCheckSensitivity((HANDLE) pDevice);               s_vCheckPreEDThreshold((HANDLE)pDevice);            }                    	if (pMgmt->sNodeDBTable[0].uInActiveCount >=ADHOC_LOST_BEACON_COUNT) {        	    DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Lost other STA beacon [%d] sec, started !\n", pMgmt->sNodeDBTable[0].uInActiveCount);                pMgmt->sNodeDBTable[0].uInActiveCount = 0;                pMgmt->eCurrState = WMAC_STATE_STARTED;                netif_stop_queue(pDevice->dev);                pDevice->bLinkPass = FALSE;                ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_STS,LEDSTS_SLOW);            }         }                   }         if (pDevice->bLinkPass == TRUE) {        if (netif_queue_stopped(pDevice->dev))            netif_wake_queue(pDevice->dev);    }                       spin_unlock_irq(&pDevice->lock);        pMgmt->sTimerSecondCallback.expires = RUN_AT(HZ);    add_timer(&pMgmt->sTimerSecondCallback);    return;}    /*+ *  * Routine Description: * * *  Update Tx attemps, Tx failure counter in Node DB *  * * Return Value: *    none. *-*/VOIDBSSvUpdateNodeTxCounter(    IN HANDLE      hDeviceContext,    IN PSStatCounter    pStatistic,    IN BYTE             byTSR,    IN BYTE             byPktNO        ){    PSDevice        pDevice = (PSDevice)hDeviceContext;    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);    UINT            uNodeIndex = 0;    BYTE            byTxRetry;    WORD            wRate;    WORD            wFallBackRate = RATE_1M;    BYTE            byFallBack;    UINT            ii;    PBYTE           pbyDestAddr;    BYTE            byPktNum;    WORD            wFIFOCtl;    byPktNum = (byPktNO & 0x0F) >> 4;    byTxRetry = (byTSR & 0xF0) >> 4;    wRate = (WORD) (byPktNO & 0xF0) >> 4;    wFIFOCtl = pStatistic->abyTxPktInfo[byPktNum].wFIFOCtl;    pbyDestAddr = (PBYTE) &( pStatistic->abyTxPktInfo[byPktNum].abyDestAddr[0]);    if (wFIFOCtl & FIFOCTL_AUTO_FB_0) {        byFallBack = AUTO_FB_0;    } else if (wFIFOCtl & FIFOCTL_AUTO_FB_1) {        byFallBack = AUTO_FB_1;    } else {        byFallBack = AUTO_FB_NONE;    }        // Only Unicast using support rates    if (wFIFOCtl & FIFOCTL_NEEDACK) {        //DBG_PRN_GRP21(("Device %08X, wRate %04X, byTSR %02X\n", hDeviceContext, wRate, byTSR));        if (pMgmt->eCurrMode == WMAC_MODE_ESS_STA) {            pMgmt->sNodeDBTable[0].uTxAttempts += 1;            if (BITbIsAllBitsOff(byTSR, (TSR_TMO | TSR_RETRYTMO))) {                // transmit success, TxAttempts at least plus one                pMgmt->sNodeDBTable[0].uTxOk[MAX_RATE]++;                if ( (byFallBack == AUTO_FB_NONE) ||                     (wRate < RATE_18M) ) {                    wFallBackRate = wRate;                } else if (byFallBack == AUTO_FB_0) {                    if (byTxRetry < 5)                        wFallBackRate = awHWRetry0[wRate-RATE_18M][byTxRetry];                    else                        wFallBackRate = awHWRetry0[wRate-RATE_18M][4];                } else if (byFallBack == AUTO_FB_1) {                    if (byTxRetry < 5)                        wFallBackRate = awHWRetry1[wRate-RATE_18M][byTxRetry];                    else                        wFallBackRate = awHWRetry1[wRate-RATE_18M][4];                }                pMgmt->sNodeDBTable[0].uTxOk[wFallBackRate]++;            } else {                pMgmt->sNodeDBTable[0].uTxFailures ++;            }            pMgmt->sNodeDBTable[0].uTxRetry += byTxRetry;            if (byTxRetry != 0) {                pMgmt->sNodeDBTable[0].uTxFail[MAX_RATE]+=byTxRetry;                if ( (byFallBack == AUTO_FB_NONE) ||                     (wRate < RATE_18M) ) {                    pMgmt->sNodeDBTable[0].uTxFail[wRate]+=byTxRetry;                } else if (byFallBack == AUTO_FB_0) {                    for(ii=0;ii<byTxRetry;ii++) {                        if (ii < 5)                            wFallBackRate = awHWRetry0[wRate-RATE_18M][ii];                        else                            wFallBackRate = awHWRetry0[wRate-RATE_18M][4];                        pMgmt->sNodeDBTable[0].uTxFail[wFallBackRate]++;                    }                } else if (byFallBack == AUTO_FB_1) {                    for(ii=0;ii<byTxRetry;ii++) {                        if (ii < 5)                            wFallBackRate = awHWRetry1[wRate-RATE_18M][ii];                        else                            wFallBackRate = awHWRetry1[wRate-RATE_18M][4];                        pMgmt->sNodeDBTable[0].uTxFail[wFallBackRate]++;                    }                }            }        };        if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) ||            (pMgmt->eCurrMode == WMAC_MODE_ESS_AP)) {            if (BSSbIsSTAInNodeDB((HANDLE)pDevice, pbyDestAddr, &uNodeIndex)){                                pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts += 1;                if (BITbIsAllBitsOff(byTSR, (TSR_TMO | TSR_RETRYTMO))) {                    // transmit success, TxAttempts at least plus one                    pMgmt->sNodeDBTable[uNodeIndex].uTxOk[MAX_RATE]++;                    if ( (byFallBack == AUTO_FB_NONE) ||                         (wRate < RATE_18M) ) {                        wFallBackRate = wRate;                    } else if (byFallBack == AUTO_FB_0) {                        if (byTxRetry < 5)                            wFallBackRate = awHWRetry0[wRate-RATE_18M][byTxRetry];                        else                            wFallBackRate = awHWRetry0[wRate-RATE_18M][4];                    } else if (byFallBack == AUTO_FB_1) {                        if (byTxRetry < 5)                            wFallBackRate = awHWRetry1[wRate-RATE_18M][byTxRetry];                        else                            wFallBackRate = awHWRetry1[wRate-RATE_18M][4];                    }                    pMgmt->sNodeDBTable[uNodeIndex].uTxOk[wFallBackRate]++;                } else {                    pMgmt->sNodeDBTable[uNodeIndex].uTxFailures ++;                }                pMgmt->sNodeDBTable[uNodeIndex].uTxRetry += byTxRetry;                if (byTxRetry != 0) {                    pMgmt->sNodeDBTable[uNodeIndex].uTxFail[MAX_RATE]+=byTxRetry;                    if ( (byFallBack == AUTO_FB_NONE) ||                         (wRate < RATE_18M) ) {                        pMgmt->sNodeDBTable[uNodeIndex].uTxFail[wRate]+=byTxRetry;                    } else if (byFallBack == AUTO_FB_0) {                        for(ii=0;ii<byTxRetry;ii++) {                            if (ii < 5)                                wFallBackRate = awHWRetry0[wRate-RATE_18M][ii];                            else                                wFallBackRate = awHWRetry0[wRate-RATE_18M][4];                            pMgmt->sNodeDBTable[uNodeIndex].uTxFail[wFallBackRate]++;                        }                    } else if (byFallBack == AUTO_FB_1) {                        for(ii=0;ii<byTxRetry;ii++) {                            if (ii < 5)                                wFallBackRate = awHWRetry1[wRate-RATE_18M][ii];                            else                                wFallBackRate = awHWRetry1[wRate-RATE_18M][4];                            pMgmt->sNodeDBTable[uNodeIndex].uTxFail[wFallBackRate]++;                        }                    }                }            };        }    };    return;}    /*+ *  * Routine Description: *    Clear Nodes & skb in DB Table * * * Parameters: *  In: *      hDeviceContext        - The adapter context. *      uStartIndex           - starting index *  Out: *      none *   * Return Value: *    None. *-*/VOIDBSSvClearNodeDBTable(    IN HANDLE hDeviceContext,    IN UINT uStartIndex    ){    PSDevice     pDevice = (PSDevice)hDeviceContext;    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);    struct sk_buff  *skb;    UINT            ii;        for (ii = uStartIndex; ii < (MAX_NODE_NUM + 1); ii++) {        if (pMgmt->sNodeDBTable[ii].bActive) {            // check if sTxPSQueue has been initial            if (pMgmt->sNodeDBTable[ii].sTxPSQueue.next != NULL) {                while ((skb = skb_dequeue(&pMgmt->sNodeDBTable[ii].sTxPSQueue)) != NULL){                        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "PS skb != NULL %d\n", ii);                        dev_kfree_skb(skb);                }            }            memset(&pMgmt->sNodeDBTable[ii], 0, sizeof(KnownNodeDB));        }        }        return;};VOID s_vCheckSensitivity(    IN HANDLE hDeviceContext    ){    PSDevice        pDevice = (PSDevice)hDeviceContext;    PKnownBSS       pBSSList = NULL;    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);    int             ii;    if ((pMgmt->eCurrState == WMAC_STATE_ASSOC) ||        ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && (pMgmt->eCurrState == WMAC_STATE_JOINTED))) {        pBSSList = BSSpAddrIsInBSSList(pDevice, pMgmt->abyCurrBSSID, (PWLAN_IE_SSID)pMgmt->abyCurrSSID);        if (pBSSList != NULL) {            // Updata BB Reg if RSSI is too strong.            LONG    LocalldBmAverage = 0;            LONG    uNumofdBm = 0;            for (ii = 0; ii < RSSI_STAT_COUNT; ii++) {                if (pBSSList->ldBmAverage[ii] != 0) {                    uNumofdBm ++;                    LocalldBmAverage += pBSSList->ldBmAverage[ii];                }            }            if (uNumofdBm > 0) {                LocalldBmAverage = LocalldBmAverage/uNumofdBm;                for (ii=0;ii<BB_VGA_LEVEL;ii++) {                    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"LocalldBmAverage:%ld, %ld %02x\n", LocalldBmAverage, pDevice->ldBmThreshold[ii], pDevice->abyBBVGA[ii]);                    if (LocalldBmAverage < pDevice->ldBmThreshold[ii]) {                	    pDevice->byBBVGANew = pDevice->abyBBVGA[ii];                        break;                    }                }                if (pDevice->byBBVGANew != pDevice->byBBVGACurrent) {                    pDevice->uBBVGADiffCount++;                    if (pDevice->uBBVGADiffCount >= BB_VGA_CHANGE_THRESHOLD)                        bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_BBSENSITIVITY, NULL);                } else {                    pDevice->uBBVGADiffCount = 0;                }            }        }    }}#ifdef Calcu_LinkQualVOID s_uCalculateLinkQual(    IN HANDLE hDeviceContext    ){   PSDevice        pDevice = (PSDevice)hDeviceContext;   ULONG TxOkRatio, TxCnt;   ULONG RxOkRatio,RxCnt;   ULONG RssiRatio;   long ldBm;TxCnt = pDevice->scStatistic.TxNoRetryOkCount + 	      pDevice->scStatistic.TxRetryOkCount + 	      pDevice->scStatistic.TxFailCount;RxCnt = pDevice->scStatistic.RxFcsErrCnt +	      pDevice->scStatistic.RxOkCnt;TxOkRatio = (TxCnt < 6) ? 4000:((pDevice->scStatistic.TxNoRetryOkCount * 4000) / TxCnt);RxOkRatio = (RxCnt < 6) ? 2000:((pDevice->scStatistic.RxOkCnt * 2000) / RxCnt);	//decide link quality if(pDevice->bLinkPass !=TRUE){ //  printk("s_uCalculateLinkQual-->Link disconnect and Poor quality**\n");   pDevice->scStatistic.LinkQuality = 0;   pDevice->scStatistic.SignalStren = 0;}else{   RFvRSSITodBm(pDevice, (BYTE)(pDevice->uCurrRSSI), &ldBm);   if(-ldBm < 50)  {   	RssiRatio = 4000;     }   else if(-ldBm > 90) {   	RssiRatio = 0;     }   else {   	RssiRatio = (40-(-ldBm-50))*4000/40;     }   pDevice->scStatistic.SignalStren = RssiRatio/40;   pDevice->scStatistic.LinkQuality = (RssiRatio+TxOkRatio+RxOkRatio)/100;}   pDevice->scStatistic.RxFcsErrCnt = 0;   pDevice->scStatistic.RxOkCnt = 0;   pDevice->scStatistic.TxFailCount = 0;   pDevice->scStatistic.TxNoRetryOkCount = 0;   pDevice->scStatistic.TxRetryOkCount = 0;   return;}#endifVOIDBSSvClearAnyBSSJoinRecord (    IN HANDLE hDeviceContext    ){    PSDevice        pDevice = (PSDevice)hDeviceContext;    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);    UINT            ii;    for (ii = 0; ii < MAX_BSS_NUM; ii++) {        pMgmt->sBSSList[ii].bSelected = FALSE;    }    return;}VOID s_vCheckPreEDThreshold(    IN HANDLE hDeviceContext    ){    PSDevice        pDevice = (PSDevice)hDeviceContext;    PKnownBSS       pBSSList = NULL;    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);            if ((pMgmt->eCurrState == WMAC_STATE_ASSOC) ||        ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && (pMgmt->eCurrState == WMAC_STATE_JOINTED))) {        pBSSList = BSSpAddrIsInBSSList(pDevice, pMgmt->abyCurrBSSID, (PWLAN_IE_SSID)pMgmt->abyCurrSSID);        if (pBSSList != NULL) {               pDevice->byBBPreEDRSSI = (BYTE) (~(pBSSList->ldBmAverRange) + 1);              BBvUpdatePreEDThreshold(pDevice, FALSE);        }    }    return;}            

⌨️ 快捷键说明

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