Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 353871
b: refs/heads/master
c: 7c65fa2
h: refs/heads/master
i:
  353869: c9eca9c
  353867: 1939cb8
  353863: b3425fd
  353855: e866539
v: v3
  • Loading branch information
Malcolm Priestley authored and Greg Kroah-Hartman committed Jan 7, 2013
1 parent 46131ba commit 3b1ffb7
Show file tree
Hide file tree
Showing 18 changed files with 159 additions and 223 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1901ab629279499249dfe3a26b0a31f0af8efca5
refs/heads/master: 7c65fa2a4c176c9bfab1ef954c4cef005dd9fb8b
28 changes: 16 additions & 12 deletions trunk/drivers/staging/vt6656/80211mgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,10 @@ vMgrEncodeBeacon(
{
pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;

/* Fixed Fields */
pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
+ WLAN_BEACON_OFF_TS);
/* Fixed Fields */
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))
Expand Down Expand Up @@ -130,9 +131,10 @@ vMgrDecodeBeacon(

pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;

/* Fixed Fields */
pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
+ WLAN_BEACON_OFF_TS);
/* Fixed Fields */
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))
Expand Down Expand Up @@ -671,9 +673,10 @@ vMgrEncodeProbeResponse(
{
pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;

/* Fixed Fields */
pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
+ WLAN_PROBERESP_OFF_TS);
/* Fixed Fields */
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))
Expand Down Expand Up @@ -706,9 +709,10 @@ vMgrDecodeProbeResponse(

pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;

/* Fixed Fields */
pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
+ WLAN_PROBERESP_OFF_TS);
/* Fixed Fields */
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))
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/staging/vt6656/80211mgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 ----------*/
Expand Down Expand Up @@ -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 ----------*/
Expand Down
11 changes: 5 additions & 6 deletions trunk/drivers/staging/vt6656/bssdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ PKnownBSS BSSpAddrIsInBSSList(void *hDeviceContext,

BOOL BSSbInsertToBSSList(void *hDeviceContext,
PBYTE abyBSSIDAddr,
QWORD qwTimestamp,
u64 qwTimestamp,
WORD wBeaconInterval,
WORD wCapInfo,
BYTE byCurrChannel,
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions trunk/drivers/staging/vt6656/bssdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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,
Expand All @@ -256,7 +256,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext,
void *pRxPacketContext);

BOOL BSSbUpdateToBSSList(void *hDeviceContext,
QWORD qwTimestamp,
u64 qwTimestamp,
WORD wBeaconInterval,
WORD wCapInfo,
BYTE byCurrChannel,
Expand Down
141 changes: 58 additions & 83 deletions trunk/drivers/staging/vt6656/card.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
WORD wRxBcnTSFOffst = 0;
u64 qwTSFOffset = 0;
WORD wRxBcnTSFOffst = 0;

HIDWORD(qwTSFOffset) = 0;
LODWORD(qwTSFOffset) = 0;
wRxBcnTSFOffst = cwRXBCNTSFOff[byRxRate % MAX_RATE];

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;
}


Expand All @@ -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,
Expand All @@ -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;
PSDevice pDevice = (PSDevice) pDeviceHandler;

LODWORD(*pqwCurrTSF) = LODWORD(pDevice->qwCurrTSF);
HIDWORD(*pqwCurrTSF) = HIDWORD(pDevice->qwCurrTSF);
*pqwCurrTSF = pDevice->qwCurrTSF;

return(TRUE);
}
Expand All @@ -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);
}
Expand All @@ -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;
Expand All @@ -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;
uLowRemain = (uLowNextTBTT) % uBeaconInterval;
uHighRemain = ((0x80000000 % uBeaconInterval)* 2 * HIDWORD(qwTSF))
% uBeaconInterval;
uLowRemain = (uHighRemain + uLowRemain) % uBeaconInterval;
uLowRemain = uBeaconInterval - uLowRemain;
uLowNextTBTT = ((qwTSF & 0xffffffffU) >> 10) << 10;
uLowRemain = (uLowNextTBTT) % uBeaconInterval;
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) ++ ;
if ((~uLowNextTBTT) < uLowRemain)
qwTSF = ((qwTSF >> 32) + 1) << 32;

LODWORD(qwTSF) = uLowNextTBTT + uLowRemain;
qwTSF = (qwTSF & 0xffffffff00000000U) |
(u64)(uLowNextTBTT + uLowRemain);

return (qwTSF);
}
Expand All @@ -837,28 +820,22 @@ void CARDvSetFirstNextTBTT(void *pDeviceHandler, WORD wBeaconInterval)
{

PSDevice pDevice = (PSDevice) pDeviceHandler;
QWORD qwNextTBTT;
DWORD dwLoTBTT,dwHiTBTT;
BYTE pbyData[8];
u64 qwNextTBTT = 0;
BYTE pbyData[8];

HIDWORD(qwNextTBTT) = 0;
LODWORD(qwNextTBTT) = 0;
CARDbClearCurrentTSF(pDevice);
CARDbClearCurrentTSF(pDevice);
//CARDbGetCurrentTSF(pDevice, &qwNextTBTT); //Get Local TSF counter
qwNextTBTT = CARDqGetNextTBTT(qwNextTBTT, wBeaconInterval);
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,
Expand Down Expand Up @@ -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,
Expand All @@ -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;
}
Expand Down
10 changes: 5 additions & 5 deletions trunk/drivers/staging/vt6656/card.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,14 @@ void CARDvUpdateBasicTopRate(void *pDeviceHandler);
void CARDbAddBasicRate(void *pDeviceHandler, WORD wRateIdx);
BOOL CARDbIsOFDMinBasicRate(void *pDeviceHandler);
void CARDvAdjustTSF(void *pDeviceHandler, BYTE byRxRate,
QWORD qwBSSTimestamp, QWORD qwLocalTSF);
BOOL CARDbGetCurrentTSF(void *pDeviceHandler, PQWORD pqwCurrTSF);
u64 qwBSSTimestamp, u64 qwLocalTSF);
BOOL CARDbGetCurrentTSF(void *pDeviceHandler, u64 *pqwCurrTSF);
BOOL CARDbClearCurrentTSF(void *pDeviceHandler);
void CARDvSetFirstNextTBTT(void *pDeviceHandler, WORD wBeaconInterval);
void CARDvUpdateNextTBTT(void *pDeviceHandler, QWORD qwTSF,
void CARDvUpdateNextTBTT(void *pDeviceHandler, u64 qwTSF,
WORD wBeaconInterval);
QWORD CARDqGetNextTBTT(QWORD qwTSF, WORD wBeaconInterval);
QWORD CARDqGetTSFOffset(BYTE byRxRate, QWORD qwTSF1, QWORD qwTSF2);
u64 CARDqGetNextTBTT(u64 qwTSF, WORD wBeaconInterval);
u64 CARDqGetTSFOffset(BYTE byRxRate, u64 qwTSF1, u64 qwTSF2);
BOOL CARDbRadioPowerOff(void *pDeviceHandler);
BOOL CARDbRadioPowerOn(void *pDeviceHandler);
BYTE CARDbyGetPktType(void *pDeviceHandler);
Expand Down
Loading

0 comments on commit 3b1ffb7

Please sign in to comment.