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

📄 baseband.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 5 页
字号:
    ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x4D, &pDevice->byBBCR4d);//CR77    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x4D, 0x90);    //CR 88 = 0x02(CCK), 0x03(OFDM)    ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x88, &pDevice->byBBCR88);//CR136    if (pDevice->wCurrentRate <= RATE_11M) { //CCK        // Enable internal digital loopback: CR33 |= 0000 0001        ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x21, &byData);//CR33        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x21, (BYTE)(byData | 0x01));//CR33        // CR154 = 0x00        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9A, 0);   //CR154        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, 0x02);//CR239    }    else { //OFDM        // Enable internal digital loopback:CR154 |= 0000 0001        ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x9A, &byData);//CR154        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9A, (BYTE)(byData | 0x01));//CR154        // CR33 = 0x00        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x21, 0);   //CR33        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, 0x03);//CR239    }    //CR14 = 0x00    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0E, 0);//CR14    // Disable TX_IQUN    ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x09, &pDevice->byBBCR09);    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x09, (BYTE)(pDevice->byBBCR09 & 0xDE));}/* * Description: Turn off BaseBand Loopback mode * * Parameters: *  In: *      pDevice         - Device Structure * *  Out: *      none * * Return Value: none * */void BBvLoopbackOff (PSDevice pDevice){    BYTE      byData;    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, pDevice->byBBCRc9);//CR201    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, pDevice->byBBCR88);//CR136    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x09, pDevice->byBBCR09);//CR136    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x4D, pDevice->byBBCR4d);//CR77    if (pDevice->wCurrentRate <= RATE_11M) { // CCK        // Set the CR33 Bit2 to disable internal Loopback.        ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x21, &byData);//CR33        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x21, (BYTE)(byData & 0xFE));//CR33    }    else { // OFDM        ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x9A, &byData);//CR154        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9A, (BYTE)(byData & 0xFE));//CR154    }    ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x0E, &byData);//CR14    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0E, (BYTE)(byData | 0x80));//CR14}/* * Description: Set ShortSlotTime mode * * Parameters: *  In: *      pDevice     - Device Structure *  Out: *      none * * Return Value: none * */VOIDBBvSetShortSlotTime (PSDevice pDevice){    BYTE byBBVGA=0;        if (pDevice->bShortSlotTime) {        pDevice->byBBRxConf &= 0xDF;//1101 1111    } else {        pDevice->byBBRxConf |= 0x20;//0010 0000    }        ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);    if (byBBVGA == pDevice->abyBBVGA[0]) {        pDevice->byBBRxConf |= 0x20;//0010 0000    }        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);    }VOID BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData){        ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);    // patch for 3253B0 Baseband with Cardbus module    if (byData == pDevice->abyBBVGA[0]) {        pDevice->byBBRxConf |= 0x20;//0010 0000    } else if (pDevice->bShortSlotTime) {        pDevice->byBBRxConf &= 0xDF;//1101 1111    } else {        pDevice->byBBRxConf |= 0x20;//0010 0000    }    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10}/* * Description: Baseband SoftwareReset * * Parameters: *  In: *      dwIoBase    - I/O base address *  Out: *      none * * Return Value: none * */VOIDBBvSoftwareReset (PSDevice pDevice){    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x50, 0x40);    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x50, 0);    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9C, 0x01);    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9C, 0);}/* * Description: BBvSetDeepSleep * * Parameters: *  In: *      pDevice          - Device Structure *  Out: *      none * * Return Value: none * */VOIDBBvSetDeepSleep (PSDevice pDevice){    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13}VOIDBBvExitDeepSleep (PSDevice pDevice){    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13}staticULONGs_ulGetLowSQ3(PSDevice pDevice){int   ii;ULONG ulSQ3 = 0;ULONG ulMaxPacket;    ulMaxPacket = pDevice->aulPktNum[RATE_54M];    if ( pDevice->aulPktNum[RATE_54M] != 0 ) {        ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];    }    for ( ii=RATE_48M;ii>=RATE_6M;ii-- ) {        if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {            ulMaxPacket = pDevice->aulPktNum[ii];            ulSQ3 = pDevice->aulSQ3Val[ii] / pDevice->aulPktNum[ii];        }    }        return ulSQ3;}staticULONGs_ulGetRatio (PSDevice pDevice){int     ii,jj;ULONG   ulRatio = 0;ULONG   ulMaxPacket;ULONG   ulPacketNum;    //This is a thousand-ratio    ulMaxPacket = pDevice->aulPktNum[RATE_54M];    if ( pDevice->aulPktNum[RATE_54M] != 0 ) {        ulPacketNum = pDevice->aulPktNum[RATE_54M];        ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);        ulRatio += TOP_RATE_54M;    }    for ( ii=RATE_48M;ii>=RATE_1M;ii-- ) {        if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {            ulPacketNum = 0;            for ( jj=RATE_54M;jj>=ii;jj--)                ulPacketNum += pDevice->aulPktNum[jj];            ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);            ulRatio += TOP_RATE_48M;            ulMaxPacket = pDevice->aulPktNum[ii];        }            }        return ulRatio;}staticvoids_vClearSQ3Value (PSDevice pDevice){    int ii;    pDevice->uDiversityCnt = 0;            for ( ii=RATE_1M;ii<MAX_RATE;ii++) {        pDevice->aulPktNum[ii] = 0;        pDevice->aulSQ3Val[ii] = 0;    }}/* * Description: Antenna Diversity * * Parameters: *  In: *      pDevice          - Device Structure *      byRSR            - RSR from received packet *      bySQ3            - SQ3 value from received packet *  Out: *      none * * Return Value: none * */VOIDBBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3){    pDevice->uDiversityCnt++;    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);    if (byRxRate == 2) {        pDevice->aulPktNum[RATE_1M]++;    }    else if (byRxRate==4) {        pDevice->aulPktNum[RATE_2M]++;    }    else if (byRxRate==11) {        pDevice->aulPktNum[RATE_5M]++;    }    else if (byRxRate==22) {        pDevice->aulPktNum[RATE_11M]++;    }    else if(byRxRate==12){        pDevice->aulPktNum[RATE_6M]++;        pDevice->aulSQ3Val[RATE_6M] += bySQ3;    }    else if(byRxRate==18){        pDevice->aulPktNum[RATE_9M]++;        pDevice->aulSQ3Val[RATE_9M] += bySQ3;    }    else if(byRxRate==24){        pDevice->aulPktNum[RATE_12M]++;        pDevice->aulSQ3Val[RATE_12M] += bySQ3;    }    else if(byRxRate==36){        pDevice->aulPktNum[RATE_18M]++;        pDevice->aulSQ3Val[RATE_18M] += bySQ3;    }    else if(byRxRate==48){        pDevice->aulPktNum[RATE_24M]++;        pDevice->aulSQ3Val[RATE_24M] += bySQ3;    }    else if(byRxRate==72){        pDevice->aulPktNum[RATE_36M]++;        pDevice->aulSQ3Val[RATE_36M] += bySQ3;    }    else if(byRxRate==96){        pDevice->aulPktNum[RATE_48M]++;        pDevice->aulSQ3Val[RATE_48M] += bySQ3;    }    else if(byRxRate==108){        pDevice->aulPktNum[RATE_54M]++;        pDevice->aulSQ3Val[RATE_54M] += bySQ3;    }    if (pDevice->byAntennaState == 0) {        if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ulDiversityNValue=[%d],54M-[%d]\n",(int)pDevice->ulDiversityNValue, (int)pDevice->aulPktNum[RATE_54M]);                        pDevice->ulSQ3_State0 = s_ulGetLowSQ3(pDevice);            pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0, SQ3= [%08x] rate = [%08x]\n",(int)pDevice->ulSQ3_State0,(int)pDevice->ulRatio_State0);                        if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&                   (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||                 (pDevice->ulSQ3_State0 == 0 ) )  {                                if ( pDevice->byTMax == 0 )                    return;                            bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);                pDevice->byAntennaState = 1;                                del_timer(&pDevice->TimerSQ3Tmax3);                del_timer(&pDevice->TimerSQ3Tmax2);                pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);                add_timer(&pDevice->TimerSQ3Tmax1);            } else {                pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);                add_timer(&pDevice->TimerSQ3Tmax3);                            }            s_vClearSQ3Value(pDevice);                    }    } else { //byAntennaState == 1                if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {                        del_timer(&pDevice->TimerSQ3Tmax1);            pDevice->ulSQ3_State1 = s_ulGetLowSQ3(pDevice);            pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State1, rate0 = %08x,rate1 = %08x\n",(int)pDevice->ulRatio_State0,(int)pDevice->ulRatio_State1);                        if ( ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 != 0)) ||                 ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 == 0) && (pDevice->ulRatio_State1 < pDevice->ulRatio_State0)) ||                 ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1))               ) {                bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);                                pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);                pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);                    add_timer(&pDevice->TimerSQ3Tmax3);                add_timer(&pDevice->TimerSQ3Tmax2);                                                }            pDevice->byAntennaState = 0;            s_vClearSQ3Value(pDevice);        }    } //byAntennaState}/*+ * * Description: *  Timer for SQ3 antenna diversity * * Parameters: *  In: *      pvSysSpec1 *      hDeviceContext - Pointer to the adapter *      pvSysSpec2 *      pvSysSpec3 *  Out: *      none * * Return Value: none *-*/VOIDTimerSQ3CallBack (    IN  HANDLE      hDeviceContext    ){    PSDevice        pDevice = (PSDevice)hDeviceContext;    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");    spin_lock_irq(&pDevice->lock);        bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);    pDevice->byAntennaState = 0;

⌨️ 快捷键说明

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