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

📄 card.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 3 页
字号:
                         swGetCCKControlRate(pDevice, RATE_1M),                         PK_TYPE_11B,                         &awLen[0],                         &abyServ[0],                         &abySignal[0]    );        ///RSPINF_b_2    BBvCaculateParameter(pDevice,                         14,                         swGetCCKControlRate(pDevice, RATE_2M),                         PK_TYPE_11B,                         &awLen[1],                         &abyServ[1],                         &abySignal[1]    );    //RSPINF_b_5    BBvCaculateParameter(pDevice,                         14,                         swGetCCKControlRate(pDevice, RATE_5M),                         PK_TYPE_11B,                         &awLen[2],                         &abyServ[2],                         &abySignal[2]    );        //RSPINF_b_11    BBvCaculateParameter(pDevice,                         14,                         swGetCCKControlRate(pDevice, RATE_11M),                         PK_TYPE_11B,                         &awLen[3],                         &abyServ[3],                         &abySignal[3]    );    //RSPINF_a_6    CARDvCaculateOFDMRParameter (RATE_6M,                                 byBBType,                                 &abyTxRate[0],                                 &abyRsvTime[0]);    //RSPINF_a_9    CARDvCaculateOFDMRParameter (RATE_9M,                                 byBBType,                                 &abyTxRate[1],                                 &abyRsvTime[1]);    //RSPINF_a_12    CARDvCaculateOFDMRParameter (RATE_12M,                                 byBBType,                                 &abyTxRate[2],                                 &abyRsvTime[2]);    //RSPINF_a_18    CARDvCaculateOFDMRParameter (RATE_18M,                                 byBBType,                                 &abyTxRate[3],                                 &abyRsvTime[3]);        //RSPINF_a_24    CARDvCaculateOFDMRParameter (RATE_24M,                                 byBBType,                                 &abyTxRate[4],                                 &abyRsvTime[4]);        //RSPINF_a_36    CARDvCaculateOFDMRParameter (swGetOFDMControlRate(pDevice, RATE_36M),                                 byBBType,                                 &abyTxRate[5],                                 &abyRsvTime[5]);        //RSPINF_a_48    CARDvCaculateOFDMRParameter (swGetOFDMControlRate(pDevice, RATE_48M),                                 byBBType,                                 &abyTxRate[6],                                 &abyRsvTime[6]);        //RSPINF_a_54    CARDvCaculateOFDMRParameter (swGetOFDMControlRate(pDevice, RATE_54M),                                 byBBType,                                 &abyTxRate[7],                                 &abyRsvTime[7]);    //RSPINF_a_72    CARDvCaculateOFDMRParameter (swGetOFDMControlRate(pDevice, RATE_54M),                                 byBBType,                                 &abyTxRate[8],                                 &abyRsvTime[8]);        abyData[0] = (BYTE)(awLen[0]&0xFF);    abyData[1] = (BYTE)(awLen[0]>>8);    abyData[2] = abySignal[0];    abyData[3] = abyServ[0];    abyData[4] = (BYTE)(awLen[1]&0xFF);    abyData[5] = (BYTE)(awLen[1]>>8);    abyData[6] = abySignal[1];    abyData[7] = abyServ[1];    abyData[8] = (BYTE)(awLen[2]&0xFF);    abyData[9] = (BYTE)(awLen[2]>>8);    abyData[10] = abySignal[2];    abyData[11] = abyServ[2];    abyData[12] = (BYTE)(awLen[3]&0xFF);    abyData[13] = (BYTE)(awLen[3]>>8);    abyData[14] = abySignal[3];    abyData[15] = abyServ[3];    for(i=0;i<9;i++) {        abyData[16+i*2] = abyTxRate[i];        abyData[16+i*2+1] = abyRsvTime[i];    }            CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE,                        MAC_REG_RSPINF_B_1,                        MESSAGE_REQUEST_MACREG,                        34,                        &abyData[0]);}/* * Description: Update IFS * * Parameters: *  In: *      pDevice             - The adapter to be set *  Out: *      none * * Return Value: None. * */void vUpdateIFS (PVOID pDeviceHandler){    PSDevice    pDevice = (PSDevice) pDeviceHandler;        //Set SIFS, DIFS, EIFS, SlotTime, CwMin    BYTE byMaxMin = 0;    BYTE byData[4];    if (pDevice->byPacketType==PK_TYPE_11A) {//0000 0000 0000 0000,11a        pDevice->uSlot = C_SLOT_SHORT;        pDevice->uSIFS = C_SIFS_A;        pDevice->uDIFS = C_SIFS_A + 2*C_SLOT_SHORT;        pDevice->uCwMin = C_CWMIN_A;        byMaxMin = 4;    }    else if (pDevice->byPacketType==PK_TYPE_11B) {//0000 0001 0000 0000,11b        pDevice->uSlot = C_SLOT_LONG;        pDevice->uSIFS = C_SIFS_BG;        pDevice->uDIFS = C_SIFS_BG + 2*C_SLOT_LONG;          pDevice->uCwMin = C_CWMIN_B;        byMaxMin = 5;    }    else {// PK_TYPE_11GA & PK_TYPE_11GB        BYTE byRate = 0;        BOOL bOFDMRate = FALSE;        UINT ii = 0;        PWLAN_IE_SUPP_RATES pItemRates = NULL;        pDevice->uSIFS = C_SIFS_BG;        if (pDevice->bShortSlotTime) {            pDevice->uSlot = C_SLOT_SHORT;        } else {            pDevice->uSlot = C_SLOT_LONG;        }        pDevice->uDIFS = C_SIFS_BG + 2*pDevice->uSlot;        pItemRates = (PWLAN_IE_SUPP_RATES)pDevice->sMgmtObj.abyCurrSuppRates;        for (ii = 0; ii < pItemRates->len; ii++) {            byRate = (BYTE)(pItemRates->abyRates[ii]&0x7F);            if (RATEwGetRateIdx(byRate) > RATE_11M) {                bOFDMRate = TRUE;                break;            }        }        if (bOFDMRate == FALSE) {            pItemRates = (PWLAN_IE_SUPP_RATES)pDevice->sMgmtObj.abyCurrExtSuppRates;            for (ii = 0; ii < pItemRates->len; ii++) {                byRate = (BYTE)(pItemRates->abyRates[ii]&0x7F);                if (RATEwGetRateIdx(byRate) > RATE_11M) {                    bOFDMRate = TRUE;                    break;                }            }        }        if (bOFDMRate == TRUE) {            pDevice->uCwMin = C_CWMIN_A;            byMaxMin = 4;        } else {            pDevice->uCwMin = C_CWMIN_B;            byMaxMin = 5;        }    }    pDevice->uCwMax = C_CWMAX;    pDevice->uEIFS = C_EIFS;        byData[0] = (BYTE)pDevice->uSIFS;    byData[1] = (BYTE)pDevice->uDIFS;    byData[2] = (BYTE)pDevice->uEIFS;    byData[3] = (BYTE)pDevice->uSlot;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE,                        MAC_REG_SIFS,                        MESSAGE_REQUEST_MACREG,                        4,                        &byData[0]);        byMaxMin |= 0xA0;//1010 1111,C_CWMAX = 1023    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE,                        MAC_REG_CWMAXMIN0,                        MESSAGE_REQUEST_MACREG,                        1,                        &byMaxMin);}void CARDvUpdateBasicTopRate (PVOID pDeviceHandler){PSDevice    pDevice = (PSDevice) pDeviceHandler;    BYTE byTopOFDM = RATE_24M, byTopCCK = RATE_1M;BYTE ii;     //Determines the highest basic rate.     for (ii = RATE_54M; ii >= RATE_6M; ii --) {         if ( (pDevice->wBasicRate) & ((WORD)(1<<ii)) ) {             byTopOFDM = ii;             break;         }     }     pDevice->byTopOFDMBasicRate = byTopOFDM;     for (ii = RATE_11M;; ii --) {         if ( (pDevice->wBasicRate) & ((WORD)(1<<ii)) ) {             byTopCCK = ii;             break;         }         if (ii == RATE_1M)            break;     }     pDevice->byTopCCKBasicRate = byTopCCK; }/* * Description: Set NIC Tx Basic Rate * * Parameters: *  In: *      pDevice         - The adapter to be set *      wBasicRate      - Basic Rate to be set *  Out: *      none * * Return Value: TRUE if succeeded; FALSE if failed. * */BOOL CARDbAddBasicRate (PVOID pDeviceHandler, WORD wRateIdx){PSDevice    pDevice = (PSDevice) pDeviceHandler;    WORD wRate = (WORD)(1<<wRateIdx);    pDevice->wBasicRate |= wRate;    //Determines the highest basic rate.    CARDvUpdateBasicTopRate(pDevice);    return(TRUE);}BOOL CARDbIsOFDMinBasicRate (PVOID pDeviceHandler){PSDevice    pDevice = (PSDevice) pDeviceHandler;    int ii;    for (ii = RATE_54M; ii >= RATE_6M; ii --) {        if ((pDevice->wBasicRate) & ((WORD)(1<<ii)))            return TRUE;    }    return FALSE;}BYTE CARDbyGetPktType (PVOID pDeviceHandler){    PSDevice    pDevice = (PSDevice) pDeviceHandler;            if (pDevice->byBBType == BB_TYPE_11A || pDevice->byBBType == BB_TYPE_11B) {        return (BYTE)pDevice->byBBType;    }    else if (CARDbIsOFDMinBasicRate(pDevice)) {        return PK_TYPE_11GA;    }    else {        return PK_TYPE_11GB;    }}/* * Description: Caculate TSF offset of two TSF input *              Get TSF Offset from RxBCN's TSF and local TSF * * Parameters: *  In: *      pDevice         - The adapter to be sync. *      qwTSF1          - Rx BCN's TSF *      qwTSF2          - Local TSF *  Out: *      none * * Return Value: TSF Offset value * */QWORD CARDqGetTSFOffset (BYTE byRxRate, QWORD qwTSF1, QWORD qwTSF2){    QWORD   qwTSFOffset;    WORD    wRxBcnTSFOffst = 0;    HIDWORD(qwTSFOffset) = 0;    LODWORD(qwTSFOffset) = 0;    wRxBcnTSFOffst = cwRXBCNTSFOff[byRxRate%MAX_RATE];    (qwTSF2).u.dwLowDword += (DWORD)(wRxBcnTSFOffst);    if ((qwTSF2).u.dwLowDword < (DWORD)(wRxBcnTSFOffst)) {        (qwTSF2).u.dwHighDword++;    }    LODWORD(qwTSFOffset) = LODWORD(qwTSF1) - LODWORD(qwTSF2);    if (LODWORD(qwTSF1) < LODWORD(qwTSF2)) {        // if borrow needed        HIDWORD(qwTSFOffset) = HIDWORD(qwTSF1) - HIDWORD(qwTSF2) - 1 ;    }    else {        HIDWORD(qwTSFOffset) = HIDWORD(qwTSF1) - HIDWORD(qwTSF2);    };    return (qwTSFOffset);}/* * Description: Sync. TSF counter to BSS *              Get TSF offset and write to HW * * Parameters: *  In: *      pDevice         - The adapter to be sync. *      qwBSSTimestamp  - Rx BCN's TSF *      qwLocalTSF      - Local TSF *  Out: *      none * * Return Value: none * */void CARDvAdjustTSF (PVOID pDeviceHandler, BYTE byRxRate, QWORD qwBSSTimestamp, QWORD qwLocalTSF){    PSDevice        pDevice = (PSDevice) pDeviceHandler;    QWORD           qwTSFOffset;    DWORD           dwTSFOffset1,dwTSFOffset2;    BYTE            pbyData[8];    HIDWORD(qwTSFOffset) = 0;    LODWORD(qwTSFOffset) = 0;    qwTSFOffset = CARDqGetTSFOffset(byRxRate, qwBSSTimestamp, qwLocalTSF);    // adjust TSF    // HW's TSF add TSF Offset reg    dwTSFOffset1 = LODWORD(qwTSFOffset);    dwTSFOffset2 = HIDWORD(qwTSFOffset);        pbyData[0] = (BYTE)dwTSFOffset1;    pbyData[1] = (BYTE)(dwTSFOffset1>>8);    pbyData[2] = (BYTE)(dwTSFOffset1>>16);    pbyData[3] = (BYTE)(dwTSFOffset1>>24);    pbyData[4] = (BYTE)dwTSFOffset2;    pbyData[5] = (BYTE)(dwTSFOffset2>>8);

⌨️ 快捷键说明

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