Loading drivers/staging/vt6656/80211mgr.c +16 −12 Original line number Diff line number Diff line Loading @@ -97,8 +97,9 @@ vMgrEncodeBeacon( pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; /* Fixed Fields */ pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_TS); pFrame->pqwTimestamp = (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_TS); pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_BCN_INT); pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) Loading Loading @@ -131,8 +132,9 @@ vMgrDecodeBeacon( pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; /* Fixed Fields */ pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_TS); pFrame->pqwTimestamp = (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_TS); pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_BCN_INT); pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) Loading Loading @@ -672,8 +674,9 @@ vMgrEncodeProbeResponse( pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; /* Fixed Fields */ pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_TS); pFrame->pqwTimestamp = (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_TS); pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_BCN_INT); pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) Loading Loading @@ -707,8 +710,9 @@ vMgrDecodeProbeResponse( pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; /* Fixed Fields */ pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_TS); pFrame->pqwTimestamp = (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_TS); pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_BCN_INT); pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) Loading drivers/staging/vt6656/80211mgr.h +2 −2 Original line number Diff line number Diff line Loading @@ -526,7 +526,7 @@ typedef struct tagWLAN_FR_BEACON { PBYTE pBuf; PUWLAN_80211HDR pHdr; // fixed fields PQWORD pqwTimestamp; u64 *pqwTimestamp; PWORD pwBeaconInterval; PWORD pwCapInfo; /*-- info elements ----------*/ Loading Loading @@ -683,7 +683,7 @@ typedef struct tagWLAN_FR_PROBERESP { PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ PQWORD pqwTimestamp; u64 *pqwTimestamp; PWORD pwBeaconInterval; PWORD pwCapInfo; /*-- info elements ----------*/ Loading drivers/staging/vt6656/bssdb.c +5 −6 Original line number Diff line number Diff line Loading @@ -339,7 +339,7 @@ PKnownBSS BSSpAddrIsInBSSList(void *hDeviceContext, BOOL BSSbInsertToBSSList(void *hDeviceContext, PBYTE abyBSSIDAddr, QWORD qwTimestamp, u64 qwTimestamp, WORD wBeaconInterval, WORD wCapInfo, BYTE byCurrChannel, Loading Loading @@ -380,8 +380,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, // save the BSS info pBSSList->bActive = TRUE; memcpy( pBSSList->abyBSSID, abyBSSIDAddr, WLAN_BSSID_LEN); HIDWORD(pBSSList->qwBSSTimestamp) = cpu_to_le32(HIDWORD(qwTimestamp)); LODWORD(pBSSList->qwBSSTimestamp) = cpu_to_le32(LODWORD(qwTimestamp)); pBSSList->qwBSSTimestamp = cpu_to_le64(qwTimestamp); pBSSList->wBeaconInterval = cpu_to_le16(wBeaconInterval); pBSSList->wCapInfo = cpu_to_le16(wCapInfo); pBSSList->uClearCount = 0; Loading Loading @@ -519,7 +518,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, // TODO: input structure modify BOOL BSSbUpdateToBSSList(void *hDeviceContext, QWORD qwTimestamp, u64 qwTimestamp, WORD wBeaconInterval, WORD wCapInfo, BYTE byCurrChannel, Loading Loading @@ -548,8 +547,8 @@ BOOL BSSbUpdateToBSSList(void *hDeviceContext, return FALSE; HIDWORD(pBSSList->qwBSSTimestamp) = cpu_to_le32(HIDWORD(qwTimestamp)); LODWORD(pBSSList->qwBSSTimestamp) = cpu_to_le32(LODWORD(qwTimestamp)); pBSSList->qwBSSTimestamp = cpu_to_le64(qwTimestamp); pBSSList->wBeaconInterval = cpu_to_le16(wBeaconInterval); pBSSList->wCapInfo = cpu_to_le16(wCapInfo); pBSSList->uClearCount = 0; Loading drivers/staging/vt6656/bssdb.h +4 −4 Original line number Diff line number Diff line Loading @@ -142,8 +142,8 @@ typedef struct tagKnownBSS { unsigned int uClearCount; // BYTE abyIEs[WLAN_BEACON_FR_MAXLEN]; unsigned int uIELength; QWORD qwBSSTimestamp; QWORD qwLocalTSF; // local TSF timer u64 qwBSSTimestamp; u64 qwLocalTSF;/* local TSF timer */ CARD_PHY_TYPE eNetworkTypeInUse; Loading Loading @@ -239,7 +239,7 @@ void BSSvClearBSSList(void *hDeviceContext, BOOL bKeepCurrBSSID); BOOL BSSbInsertToBSSList(void *hDeviceContext, PBYTE abyBSSIDAddr, QWORD qwTimestamp, u64 qwTimestamp, WORD wBeaconInterval, WORD wCapInfo, BYTE byCurrChannel, Loading @@ -256,7 +256,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, void *pRxPacketContext); BOOL BSSbUpdateToBSSList(void *hDeviceContext, QWORD qwTimestamp, u64 qwTimestamp, WORD wBeaconInterval, WORD wCapInfo, BYTE byCurrChannel, Loading drivers/staging/vt6656/card.c +58 −83 Original line number Diff line number Diff line Loading @@ -654,28 +654,18 @@ BYTE CARDbyGetPktType(void *pDeviceHandler) * Return Value: TSF Offset value * */ QWORD CARDqGetTSFOffset (BYTE byRxRate, QWORD qwTSF1, QWORD qwTSF2) u64 CARDqGetTSFOffset(BYTE byRxRate, u64 qwTSF1, u64 qwTSF2) { QWORD qwTSFOffset; u64 qwTSFOffset = 0; 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); qwTSF2 += (u64)wRxBcnTSFOffst; qwTSFOffset = qwTSF1 - qwTSF2; return qwTSFOffset; } Loading @@ -696,32 +686,26 @@ QWORD CARDqGetTSFOffset (BYTE byRxRate, QWORD qwTSF1, QWORD qwTSF2) * */ void CARDvAdjustTSF(void *pDeviceHandler, BYTE byRxRate, QWORD qwBSSTimestamp, QWORD qwLocalTSF) u64 qwBSSTimestamp, u64 qwLocalTSF) { PSDevice pDevice = (PSDevice) pDeviceHandler; QWORD qwTSFOffset; DWORD dwTSFOffset1,dwTSFOffset2; u64 qwTSFOffset = 0; 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); pbyData[6] = (BYTE)(dwTSFOffset2>>16); pbyData[7] = (BYTE)(dwTSFOffset2>>24); pbyData[0] = (u8)qwTSFOffset; pbyData[1] = (u8)(qwTSFOffset >> 8); pbyData[2] = (u8)(qwTSFOffset >> 16); pbyData[3] = (u8)(qwTSFOffset >> 24); pbyData[4] = (u8)(qwTSFOffset >> 32); pbyData[5] = (u8)(qwTSFOffset >> 40); pbyData[6] = (u8)(qwTSFOffset >> 48); pbyData[7] = (u8)(qwTSFOffset >> 56); CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_SET_TSFTBTT, Loading @@ -745,12 +729,11 @@ void CARDvAdjustTSF(void *pDeviceHandler, BYTE byRxRate, * Return Value: TRUE if success; otherwise FALSE * */ BOOL CARDbGetCurrentTSF(void *pDeviceHandler, PQWORD pqwCurrTSF) BOOL CARDbGetCurrentTSF(void *pDeviceHandler, u64 *pqwCurrTSF) { PSDevice pDevice = (PSDevice) pDeviceHandler; LODWORD(*pqwCurrTSF) = LODWORD(pDevice->qwCurrTSF); HIDWORD(*pqwCurrTSF) = HIDWORD(pDevice->qwCurrTSF); *pqwCurrTSF = pDevice->qwCurrTSF; return(TRUE); } Loading @@ -773,8 +756,7 @@ BOOL CARDbClearCurrentTSF(void *pDeviceHandler) MACvRegBitsOn(pDevice,MAC_REG_TFTCTL,TFTCTL_TSFCNTRST); LODWORD(pDevice->qwCurrTSF) = 0; HIDWORD(pDevice->qwCurrTSF) = 0; pDevice->qwCurrTSF = 0; return(TRUE); } Loading @@ -793,7 +775,7 @@ BOOL CARDbClearCurrentTSF(void *pDeviceHandler) * Return Value: TSF value of next Beacon * */ QWORD CARDqGetNextTBTT (QWORD qwTSF, WORD wBeaconInterval) u64 CARDqGetNextTBTT(u64 qwTSF, WORD wBeaconInterval) { unsigned int uLowNextTBTT; Loading @@ -802,18 +784,19 @@ QWORD CARDqGetNextTBTT (QWORD qwTSF, WORD wBeaconInterval) uBeaconInterval = wBeaconInterval * 1024; // Next TBTT = ((local_current_TSF / beacon_interval) + 1 ) * beacon_interval uLowNextTBTT = (LODWORD(qwTSF) >> 10) << 10; uLowNextTBTT = ((qwTSF & 0xffffffffU) >> 10) << 10; uLowRemain = (uLowNextTBTT) % uBeaconInterval; uHighRemain = ((0x80000000 % uBeaconInterval)* 2 * HIDWORD(qwTSF)) uHighRemain = ((0x80000000 % uBeaconInterval) * 2 * (u32)(qwTSF >> 32)) % uBeaconInterval; uLowRemain = (uHighRemain + uLowRemain) % uBeaconInterval; uLowRemain = uBeaconInterval - uLowRemain; // check if carry when add one beacon interval if ((~uLowNextTBTT) < uLowRemain) HIDWORD(qwTSF) ++ ; qwTSF = ((qwTSF >> 32) + 1) << 32; LODWORD(qwTSF) = uLowNextTBTT + uLowRemain; qwTSF = (qwTSF & 0xffffffff00000000U) | (u64)(uLowNextTBTT + uLowRemain); return (qwTSF); } Loading @@ -837,28 +820,22 @@ void CARDvSetFirstNextTBTT(void *pDeviceHandler, WORD wBeaconInterval) { PSDevice pDevice = (PSDevice) pDeviceHandler; QWORD qwNextTBTT; DWORD dwLoTBTT,dwHiTBTT; u64 qwNextTBTT = 0; BYTE pbyData[8]; HIDWORD(qwNextTBTT) = 0; LODWORD(qwNextTBTT) = 0; CARDbClearCurrentTSF(pDevice); //CARDbGetCurrentTSF(pDevice, &qwNextTBTT); //Get Local TSF counter qwNextTBTT = CARDqGetNextTBTT(qwNextTBTT, wBeaconInterval); // Set NextTBTT dwLoTBTT = LODWORD(qwNextTBTT); dwHiTBTT = HIDWORD(qwNextTBTT); pbyData[0] = (BYTE)dwLoTBTT; pbyData[1] = (BYTE)(dwLoTBTT>>8); pbyData[2] = (BYTE)(dwLoTBTT>>16); pbyData[3] = (BYTE)(dwLoTBTT>>24); pbyData[4] = (BYTE)dwHiTBTT; pbyData[5] = (BYTE)(dwHiTBTT>>8); pbyData[6] = (BYTE)(dwHiTBTT>>16); pbyData[7] = (BYTE)(dwHiTBTT>>24); pbyData[0] = (u8)qwNextTBTT; pbyData[1] = (u8)(qwNextTBTT >> 8); pbyData[2] = (u8)(qwNextTBTT >> 16); pbyData[3] = (u8)(qwNextTBTT >> 24); pbyData[4] = (u8)(qwNextTBTT >> 32); pbyData[5] = (u8)(qwNextTBTT >> 40); pbyData[6] = (u8)(qwNextTBTT >> 48); pbyData[7] = (u8)(qwNextTBTT >> 56); CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_SET_TSFTBTT, Loading Loading @@ -887,27 +864,24 @@ void CARDvSetFirstNextTBTT(void *pDeviceHandler, WORD wBeaconInterval) * Return Value: none * */ void CARDvUpdateNextTBTT(void *pDeviceHandler, QWORD qwTSF, void CARDvUpdateNextTBTT(void *pDeviceHandler, u64 qwTSF, WORD wBeaconInterval) { PSDevice pDevice = (PSDevice) pDeviceHandler; DWORD dwLoTBTT,dwHiTBTT; BYTE pbyData[8]; qwTSF = CARDqGetNextTBTT(qwTSF, wBeaconInterval); // Set NextTBTT dwLoTBTT = LODWORD(qwTSF); dwHiTBTT = HIDWORD(qwTSF); pbyData[0] = (BYTE)dwLoTBTT; pbyData[1] = (BYTE)(dwLoTBTT>>8); pbyData[2] = (BYTE)(dwLoTBTT>>16); pbyData[3] = (BYTE)(dwLoTBTT>>24); pbyData[4] = (BYTE)dwHiTBTT; pbyData[5] = (BYTE)(dwHiTBTT>>8); pbyData[6] = (BYTE)(dwHiTBTT>>16); pbyData[7] = (BYTE)(dwHiTBTT>>24); pbyData[0] = (u8)qwTSF; pbyData[1] = (u8)(qwTSF >> 8); pbyData[2] = (u8)(qwTSF >> 16); pbyData[3] = (u8)(qwTSF >> 24); pbyData[4] = (u8)(qwTSF >> 32); pbyData[5] = (u8)(qwTSF >> 40); pbyData[6] = (u8)(qwTSF >> 48); pbyData[7] = (u8)(qwTSF >> 56); CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_SET_TSFTBTT, Loading @@ -918,7 +892,8 @@ void CARDvUpdateNextTBTT(void *pDeviceHandler, QWORD qwTSF, ); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Card:Update Next TBTT[%8xh:%8xh] \n",(int)HIDWORD(qwTSF), (int)LODWORD(qwTSF)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Card:Update Next TBTT[%8lx]\n", (unsigned long)qwTSF); return; } Loading Loading
drivers/staging/vt6656/80211mgr.c +16 −12 Original line number Diff line number Diff line Loading @@ -97,8 +97,9 @@ vMgrEncodeBeacon( pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; /* Fixed Fields */ pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_TS); pFrame->pqwTimestamp = (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_TS); pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_BCN_INT); pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) Loading Loading @@ -131,8 +132,9 @@ vMgrDecodeBeacon( pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; /* Fixed Fields */ pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_TS); pFrame->pqwTimestamp = (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_TS); pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_BEACON_OFF_BCN_INT); pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) Loading Loading @@ -672,8 +674,9 @@ vMgrEncodeProbeResponse( pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; /* Fixed Fields */ pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_TS); pFrame->pqwTimestamp = (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_TS); pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_BCN_INT); pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) Loading Loading @@ -707,8 +710,9 @@ vMgrDecodeProbeResponse( pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; /* Fixed Fields */ pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_TS); pFrame->pqwTimestamp = (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_TS); pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_PROBERESP_OFF_BCN_INT); pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) Loading
drivers/staging/vt6656/80211mgr.h +2 −2 Original line number Diff line number Diff line Loading @@ -526,7 +526,7 @@ typedef struct tagWLAN_FR_BEACON { PBYTE pBuf; PUWLAN_80211HDR pHdr; // fixed fields PQWORD pqwTimestamp; u64 *pqwTimestamp; PWORD pwBeaconInterval; PWORD pwCapInfo; /*-- info elements ----------*/ Loading Loading @@ -683,7 +683,7 @@ typedef struct tagWLAN_FR_PROBERESP { PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ PQWORD pqwTimestamp; u64 *pqwTimestamp; PWORD pwBeaconInterval; PWORD pwCapInfo; /*-- info elements ----------*/ Loading
drivers/staging/vt6656/bssdb.c +5 −6 Original line number Diff line number Diff line Loading @@ -339,7 +339,7 @@ PKnownBSS BSSpAddrIsInBSSList(void *hDeviceContext, BOOL BSSbInsertToBSSList(void *hDeviceContext, PBYTE abyBSSIDAddr, QWORD qwTimestamp, u64 qwTimestamp, WORD wBeaconInterval, WORD wCapInfo, BYTE byCurrChannel, Loading Loading @@ -380,8 +380,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, // save the BSS info pBSSList->bActive = TRUE; memcpy( pBSSList->abyBSSID, abyBSSIDAddr, WLAN_BSSID_LEN); HIDWORD(pBSSList->qwBSSTimestamp) = cpu_to_le32(HIDWORD(qwTimestamp)); LODWORD(pBSSList->qwBSSTimestamp) = cpu_to_le32(LODWORD(qwTimestamp)); pBSSList->qwBSSTimestamp = cpu_to_le64(qwTimestamp); pBSSList->wBeaconInterval = cpu_to_le16(wBeaconInterval); pBSSList->wCapInfo = cpu_to_le16(wCapInfo); pBSSList->uClearCount = 0; Loading Loading @@ -519,7 +518,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, // TODO: input structure modify BOOL BSSbUpdateToBSSList(void *hDeviceContext, QWORD qwTimestamp, u64 qwTimestamp, WORD wBeaconInterval, WORD wCapInfo, BYTE byCurrChannel, Loading Loading @@ -548,8 +547,8 @@ BOOL BSSbUpdateToBSSList(void *hDeviceContext, return FALSE; HIDWORD(pBSSList->qwBSSTimestamp) = cpu_to_le32(HIDWORD(qwTimestamp)); LODWORD(pBSSList->qwBSSTimestamp) = cpu_to_le32(LODWORD(qwTimestamp)); pBSSList->qwBSSTimestamp = cpu_to_le64(qwTimestamp); pBSSList->wBeaconInterval = cpu_to_le16(wBeaconInterval); pBSSList->wCapInfo = cpu_to_le16(wCapInfo); pBSSList->uClearCount = 0; Loading
drivers/staging/vt6656/bssdb.h +4 −4 Original line number Diff line number Diff line Loading @@ -142,8 +142,8 @@ typedef struct tagKnownBSS { unsigned int uClearCount; // BYTE abyIEs[WLAN_BEACON_FR_MAXLEN]; unsigned int uIELength; QWORD qwBSSTimestamp; QWORD qwLocalTSF; // local TSF timer u64 qwBSSTimestamp; u64 qwLocalTSF;/* local TSF timer */ CARD_PHY_TYPE eNetworkTypeInUse; Loading Loading @@ -239,7 +239,7 @@ void BSSvClearBSSList(void *hDeviceContext, BOOL bKeepCurrBSSID); BOOL BSSbInsertToBSSList(void *hDeviceContext, PBYTE abyBSSIDAddr, QWORD qwTimestamp, u64 qwTimestamp, WORD wBeaconInterval, WORD wCapInfo, BYTE byCurrChannel, Loading @@ -256,7 +256,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, void *pRxPacketContext); BOOL BSSbUpdateToBSSList(void *hDeviceContext, QWORD qwTimestamp, u64 qwTimestamp, WORD wBeaconInterval, WORD wCapInfo, BYTE byCurrChannel, Loading
drivers/staging/vt6656/card.c +58 −83 Original line number Diff line number Diff line Loading @@ -654,28 +654,18 @@ BYTE CARDbyGetPktType(void *pDeviceHandler) * Return Value: TSF Offset value * */ QWORD CARDqGetTSFOffset (BYTE byRxRate, QWORD qwTSF1, QWORD qwTSF2) u64 CARDqGetTSFOffset(BYTE byRxRate, u64 qwTSF1, u64 qwTSF2) { QWORD qwTSFOffset; u64 qwTSFOffset = 0; 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); qwTSF2 += (u64)wRxBcnTSFOffst; qwTSFOffset = qwTSF1 - qwTSF2; return qwTSFOffset; } Loading @@ -696,32 +686,26 @@ QWORD CARDqGetTSFOffset (BYTE byRxRate, QWORD qwTSF1, QWORD qwTSF2) * */ void CARDvAdjustTSF(void *pDeviceHandler, BYTE byRxRate, QWORD qwBSSTimestamp, QWORD qwLocalTSF) u64 qwBSSTimestamp, u64 qwLocalTSF) { PSDevice pDevice = (PSDevice) pDeviceHandler; QWORD qwTSFOffset; DWORD dwTSFOffset1,dwTSFOffset2; u64 qwTSFOffset = 0; 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); pbyData[6] = (BYTE)(dwTSFOffset2>>16); pbyData[7] = (BYTE)(dwTSFOffset2>>24); pbyData[0] = (u8)qwTSFOffset; pbyData[1] = (u8)(qwTSFOffset >> 8); pbyData[2] = (u8)(qwTSFOffset >> 16); pbyData[3] = (u8)(qwTSFOffset >> 24); pbyData[4] = (u8)(qwTSFOffset >> 32); pbyData[5] = (u8)(qwTSFOffset >> 40); pbyData[6] = (u8)(qwTSFOffset >> 48); pbyData[7] = (u8)(qwTSFOffset >> 56); CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_SET_TSFTBTT, Loading @@ -745,12 +729,11 @@ void CARDvAdjustTSF(void *pDeviceHandler, BYTE byRxRate, * Return Value: TRUE if success; otherwise FALSE * */ BOOL CARDbGetCurrentTSF(void *pDeviceHandler, PQWORD pqwCurrTSF) BOOL CARDbGetCurrentTSF(void *pDeviceHandler, u64 *pqwCurrTSF) { PSDevice pDevice = (PSDevice) pDeviceHandler; LODWORD(*pqwCurrTSF) = LODWORD(pDevice->qwCurrTSF); HIDWORD(*pqwCurrTSF) = HIDWORD(pDevice->qwCurrTSF); *pqwCurrTSF = pDevice->qwCurrTSF; return(TRUE); } Loading @@ -773,8 +756,7 @@ BOOL CARDbClearCurrentTSF(void *pDeviceHandler) MACvRegBitsOn(pDevice,MAC_REG_TFTCTL,TFTCTL_TSFCNTRST); LODWORD(pDevice->qwCurrTSF) = 0; HIDWORD(pDevice->qwCurrTSF) = 0; pDevice->qwCurrTSF = 0; return(TRUE); } Loading @@ -793,7 +775,7 @@ BOOL CARDbClearCurrentTSF(void *pDeviceHandler) * Return Value: TSF value of next Beacon * */ QWORD CARDqGetNextTBTT (QWORD qwTSF, WORD wBeaconInterval) u64 CARDqGetNextTBTT(u64 qwTSF, WORD wBeaconInterval) { unsigned int uLowNextTBTT; Loading @@ -802,18 +784,19 @@ QWORD CARDqGetNextTBTT (QWORD qwTSF, WORD wBeaconInterval) uBeaconInterval = wBeaconInterval * 1024; // Next TBTT = ((local_current_TSF / beacon_interval) + 1 ) * beacon_interval uLowNextTBTT = (LODWORD(qwTSF) >> 10) << 10; uLowNextTBTT = ((qwTSF & 0xffffffffU) >> 10) << 10; uLowRemain = (uLowNextTBTT) % uBeaconInterval; uHighRemain = ((0x80000000 % uBeaconInterval)* 2 * HIDWORD(qwTSF)) uHighRemain = ((0x80000000 % uBeaconInterval) * 2 * (u32)(qwTSF >> 32)) % uBeaconInterval; uLowRemain = (uHighRemain + uLowRemain) % uBeaconInterval; uLowRemain = uBeaconInterval - uLowRemain; // check if carry when add one beacon interval if ((~uLowNextTBTT) < uLowRemain) HIDWORD(qwTSF) ++ ; qwTSF = ((qwTSF >> 32) + 1) << 32; LODWORD(qwTSF) = uLowNextTBTT + uLowRemain; qwTSF = (qwTSF & 0xffffffff00000000U) | (u64)(uLowNextTBTT + uLowRemain); return (qwTSF); } Loading @@ -837,28 +820,22 @@ void CARDvSetFirstNextTBTT(void *pDeviceHandler, WORD wBeaconInterval) { PSDevice pDevice = (PSDevice) pDeviceHandler; QWORD qwNextTBTT; DWORD dwLoTBTT,dwHiTBTT; u64 qwNextTBTT = 0; BYTE pbyData[8]; HIDWORD(qwNextTBTT) = 0; LODWORD(qwNextTBTT) = 0; CARDbClearCurrentTSF(pDevice); //CARDbGetCurrentTSF(pDevice, &qwNextTBTT); //Get Local TSF counter qwNextTBTT = CARDqGetNextTBTT(qwNextTBTT, wBeaconInterval); // Set NextTBTT dwLoTBTT = LODWORD(qwNextTBTT); dwHiTBTT = HIDWORD(qwNextTBTT); pbyData[0] = (BYTE)dwLoTBTT; pbyData[1] = (BYTE)(dwLoTBTT>>8); pbyData[2] = (BYTE)(dwLoTBTT>>16); pbyData[3] = (BYTE)(dwLoTBTT>>24); pbyData[4] = (BYTE)dwHiTBTT; pbyData[5] = (BYTE)(dwHiTBTT>>8); pbyData[6] = (BYTE)(dwHiTBTT>>16); pbyData[7] = (BYTE)(dwHiTBTT>>24); pbyData[0] = (u8)qwNextTBTT; pbyData[1] = (u8)(qwNextTBTT >> 8); pbyData[2] = (u8)(qwNextTBTT >> 16); pbyData[3] = (u8)(qwNextTBTT >> 24); pbyData[4] = (u8)(qwNextTBTT >> 32); pbyData[5] = (u8)(qwNextTBTT >> 40); pbyData[6] = (u8)(qwNextTBTT >> 48); pbyData[7] = (u8)(qwNextTBTT >> 56); CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_SET_TSFTBTT, Loading Loading @@ -887,27 +864,24 @@ void CARDvSetFirstNextTBTT(void *pDeviceHandler, WORD wBeaconInterval) * Return Value: none * */ void CARDvUpdateNextTBTT(void *pDeviceHandler, QWORD qwTSF, void CARDvUpdateNextTBTT(void *pDeviceHandler, u64 qwTSF, WORD wBeaconInterval) { PSDevice pDevice = (PSDevice) pDeviceHandler; DWORD dwLoTBTT,dwHiTBTT; BYTE pbyData[8]; qwTSF = CARDqGetNextTBTT(qwTSF, wBeaconInterval); // Set NextTBTT dwLoTBTT = LODWORD(qwTSF); dwHiTBTT = HIDWORD(qwTSF); pbyData[0] = (BYTE)dwLoTBTT; pbyData[1] = (BYTE)(dwLoTBTT>>8); pbyData[2] = (BYTE)(dwLoTBTT>>16); pbyData[3] = (BYTE)(dwLoTBTT>>24); pbyData[4] = (BYTE)dwHiTBTT; pbyData[5] = (BYTE)(dwHiTBTT>>8); pbyData[6] = (BYTE)(dwHiTBTT>>16); pbyData[7] = (BYTE)(dwHiTBTT>>24); pbyData[0] = (u8)qwTSF; pbyData[1] = (u8)(qwTSF >> 8); pbyData[2] = (u8)(qwTSF >> 16); pbyData[3] = (u8)(qwTSF >> 24); pbyData[4] = (u8)(qwTSF >> 32); pbyData[5] = (u8)(qwTSF >> 40); pbyData[6] = (u8)(qwTSF >> 48); pbyData[7] = (u8)(qwTSF >> 56); CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_SET_TSFTBTT, Loading @@ -918,7 +892,8 @@ void CARDvUpdateNextTBTT(void *pDeviceHandler, QWORD qwTSF, ); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Card:Update Next TBTT[%8xh:%8xh] \n",(int)HIDWORD(qwTSF), (int)LODWORD(qwTSF)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Card:Update Next TBTT[%8lx]\n", (unsigned long)qwTSF); return; } Loading