diff options
Diffstat (limited to 'drivers/staging/vt6655/baseband.c')
-rw-r--r-- | drivers/staging/vt6655/baseband.c | 777 |
1 files changed, 311 insertions, 466 deletions
diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index de54923e8861..86c72ba0a0cd 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -30,12 +30,7 @@ * BBvCaculateParameter - Caculate PhyLength, PhyService and Phy Signal parameter for baseband Tx * BBbReadEmbedded - Embedded read baseband register via MAC * BBbWriteEmbedded - Embedded write baseband register via MAC - * BBbIsRegBitsOn - Test if baseband register bits on - * BBbIsRegBitsOff - Test if baseband register bits off * BBbVT3253Init - VIA VT3253 baseband chip init code - * BBvReadAllRegs - Read All Baseband Registers - * BBvLoopbackOn - Turn on BaseBand Loopback mode - * BBvLoopbackOff - Turn off BaseBand Loopback mode * * Revision History: * 06-10-2003 Bryan YC Fan: Re-write codes to support VT3253 spec. @@ -50,7 +45,6 @@ */ #include "tmacro.h" -#include "tether.h" #include "mac.h" #include "baseband.h" #include "srom.h" @@ -1708,39 +1702,39 @@ static const unsigned short awcFrameTime[MAX_RATE] = { static unsigned long -s_ulGetRatio(struct vnt_private *pDevice); +s_ulGetRatio(struct vnt_private *priv); static void s_vChangeAntenna( - struct vnt_private *pDevice + struct vnt_private *priv ); static void s_vChangeAntenna( - struct vnt_private *pDevice + struct vnt_private *priv ) { - if (pDevice->dwRxAntennaSel == 0) { - pDevice->dwRxAntennaSel = 1; - if (pDevice->bTxRxAntInv == true) - BBvSetRxAntennaMode(pDevice->PortOffset, ANT_A); + if (priv->dwRxAntennaSel == 0) { + priv->dwRxAntennaSel = 1; + if (priv->bTxRxAntInv == true) + BBvSetRxAntennaMode(priv, ANT_A); else - BBvSetRxAntennaMode(pDevice->PortOffset, ANT_B); + BBvSetRxAntennaMode(priv, ANT_B); } else { - pDevice->dwRxAntennaSel = 0; - if (pDevice->bTxRxAntInv == true) - BBvSetRxAntennaMode(pDevice->PortOffset, ANT_B); + priv->dwRxAntennaSel = 0; + if (priv->bTxRxAntInv == true) + BBvSetRxAntennaMode(priv, ANT_B); else - BBvSetRxAntennaMode(pDevice->PortOffset, ANT_A); + BBvSetRxAntennaMode(priv, ANT_A); } - if (pDevice->dwTxAntennaSel == 0) { - pDevice->dwTxAntennaSel = 1; - BBvSetTxAntennaMode(pDevice->PortOffset, ANT_B); + if (priv->dwTxAntennaSel == 0) { + priv->dwTxAntennaSel = 1; + BBvSetTxAntennaMode(priv, ANT_B); } else { - pDevice->dwTxAntennaSel = 0; - BBvSetTxAntennaMode(pDevice->PortOffset, ANT_A); + priv->dwTxAntennaSel = 0; + BBvSetTxAntennaMode(priv, ANT_A); } } @@ -1792,18 +1786,17 @@ BBuGetFrameTime( uFrameTime++; return uPreamble + uFrameTime; - } else { - uFrameTime = (cbFrameLength * 8 + 22) / uRate; /* ???????? */ - uTmp = ((uFrameTime * uRate) - 22) / 8; - if (cbFrameLength != uTmp) - uFrameTime++; + } + uFrameTime = (cbFrameLength * 8 + 22) / uRate; /* ???????? */ + uTmp = ((uFrameTime * uRate) - 22) / 8; + if (cbFrameLength != uTmp) + uFrameTime++; - uFrameTime = uFrameTime * 4; /* ??????? */ - if (byPktType != PK_TYPE_11A) - uFrameTime += 6; /* ?????? */ + uFrameTime = uFrameTime * 4; /* ??????? */ + if (byPktType != PK_TYPE_11A) + uFrameTime += 6; /* ?????? */ - return 20 + uFrameTime; /* ?????? */ - } + return 20 + uFrameTime; /* ?????? */ } /* @@ -1968,8 +1961,10 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length, * Return Value: true if succeeded; false if failed. * */ -bool BBbReadEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char *pbyData) +bool BBbReadEmbedded(struct vnt_private *priv, + unsigned char byBBAddr, unsigned char *pbyData) { + void __iomem *dwIoBase = priv->PortOffset; unsigned short ww; unsigned char byValue; @@ -2010,8 +2005,10 @@ bool BBbReadEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned ch * Return Value: true if succeeded; false if failed. * */ -bool BBbWriteEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byData) +bool BBbWriteEmbedded(struct vnt_private *priv, + unsigned char byBBAddr, unsigned char byData) { + void __iomem *dwIoBase = priv->PortOffset; unsigned short ww; unsigned char byValue; @@ -2038,50 +2035,6 @@ bool BBbWriteEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned c } /* - * Description: Test if all bits are set for the Baseband register - * - * Parameters: - * In: - * dwIoBase - I/O base address - * byBBAddr - address of register in Baseband - * byTestBits - TestBits - * Out: - * none - * - * Return Value: true if all TestBits are set; false otherwise. - * - */ -bool BBbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits) -{ - unsigned char byOrgData; - - BBbReadEmbedded(dwIoBase, byBBAddr, &byOrgData); - return (byOrgData & byTestBits) == byTestBits; -} - -/* - * Description: Test if all bits are clear for the Baseband register - * - * Parameters: - * In: - * dwIoBase - I/O base address - * byBBAddr - address of register in Baseband - * byTestBits - TestBits - * Out: - * none - * - * Return Value: true if all TestBits are clear; false otherwise. - * - */ -bool BBbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits) -{ - unsigned char byOrgData; - - BBbReadEmbedded(dwIoBase, byBBAddr, &byOrgData); - return (byOrgData & byTestBits) == 0; -} - -/* * Description: VIA VT3253 Baseband chip init function * * Parameters: @@ -2096,126 +2049,126 @@ bool BBbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned ch * */ -bool BBbVT3253Init(struct vnt_private *pDevice) +bool BBbVT3253Init(struct vnt_private *priv) { bool bResult = true; int ii; - void __iomem *dwIoBase = pDevice->PortOffset; - unsigned char byRFType = pDevice->byRFType; - unsigned char byLocalID = pDevice->byLocalID; + void __iomem *dwIoBase = priv->PortOffset; + unsigned char byRFType = priv->byRFType; + unsigned char byLocalID = priv->byLocalID; if (byRFType == RF_RFMD2959) { if (byLocalID <= REV_ID_VT3253_A1) { for (ii = 0; ii < CB_VT3253_INIT_FOR_RFMD; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253InitTab_RFMD[ii][0], byVT3253InitTab_RFMD[ii][1]); + bResult &= BBbWriteEmbedded(priv, byVT3253InitTab_RFMD[ii][0], byVT3253InitTab_RFMD[ii][1]); } else { for (ii = 0; ii < CB_VT3253B0_INIT_FOR_RFMD; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_RFMD[ii][0], byVT3253B0_RFMD[ii][1]); + bResult &= BBbWriteEmbedded(priv, byVT3253B0_RFMD[ii][0], byVT3253B0_RFMD[ii][1]); for (ii = 0; ii < CB_VT3253B0_AGC_FOR_RFMD2959; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC4_RFMD2959[ii][0], byVT3253B0_AGC4_RFMD2959[ii][1]); + bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC4_RFMD2959[ii][0], byVT3253B0_AGC4_RFMD2959[ii][1]); VNSvOutPortD(dwIoBase + MAC_REG_ITRTMSET, 0x23); - MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT0); + MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT(0)); } - pDevice->abyBBVGA[0] = 0x18; - pDevice->abyBBVGA[1] = 0x0A; - pDevice->abyBBVGA[2] = 0x0; - pDevice->abyBBVGA[3] = 0x0; - pDevice->ldBmThreshold[0] = -70; - pDevice->ldBmThreshold[1] = -50; - pDevice->ldBmThreshold[2] = 0; - pDevice->ldBmThreshold[3] = 0; + priv->abyBBVGA[0] = 0x18; + priv->abyBBVGA[1] = 0x0A; + priv->abyBBVGA[2] = 0x0; + priv->abyBBVGA[3] = 0x0; + priv->ldBmThreshold[0] = -70; + priv->ldBmThreshold[1] = -50; + priv->ldBmThreshold[2] = 0; + priv->ldBmThreshold[3] = 0; } else if ((byRFType == RF_AIROHA) || (byRFType == RF_AL2230S)) { for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]); + bResult &= BBbWriteEmbedded(priv, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]); for (ii = 0; ii < CB_VT3253B0_AGC; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); - - pDevice->abyBBVGA[0] = 0x1C; - pDevice->abyBBVGA[1] = 0x10; - pDevice->abyBBVGA[2] = 0x0; - pDevice->abyBBVGA[3] = 0x0; - pDevice->ldBmThreshold[0] = -70; - pDevice->ldBmThreshold[1] = -48; - pDevice->ldBmThreshold[2] = 0; - pDevice->ldBmThreshold[3] = 0; + bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); + + priv->abyBBVGA[0] = 0x1C; + priv->abyBBVGA[1] = 0x10; + priv->abyBBVGA[2] = 0x0; + priv->abyBBVGA[3] = 0x0; + priv->ldBmThreshold[0] = -70; + priv->ldBmThreshold[1] = -48; + priv->ldBmThreshold[2] = 0; + priv->ldBmThreshold[3] = 0; } else if (byRFType == RF_UW2451) { for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]); + bResult &= BBbWriteEmbedded(priv, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]); for (ii = 0; ii < CB_VT3253B0_AGC; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); + bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); VNSvOutPortB(dwIoBase + MAC_REG_ITRTMSET, 0x23); - MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT0); - - pDevice->abyBBVGA[0] = 0x14; - pDevice->abyBBVGA[1] = 0x0A; - pDevice->abyBBVGA[2] = 0x0; - pDevice->abyBBVGA[3] = 0x0; - pDevice->ldBmThreshold[0] = -60; - pDevice->ldBmThreshold[1] = -50; - pDevice->ldBmThreshold[2] = 0; - pDevice->ldBmThreshold[3] = 0; + MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT(0)); + + priv->abyBBVGA[0] = 0x14; + priv->abyBBVGA[1] = 0x0A; + priv->abyBBVGA[2] = 0x0; + priv->abyBBVGA[3] = 0x0; + priv->ldBmThreshold[0] = -60; + priv->ldBmThreshold[1] = -50; + priv->ldBmThreshold[2] = 0; + priv->ldBmThreshold[3] = 0; } else if (byRFType == RF_UW2452) { for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]); + bResult &= BBbWriteEmbedded(priv, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]); /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */ /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/ /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */ /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/ /* Select VC1/VC2, CR215 = 0x02->0x06 */ - bResult &= BBbWriteEmbedded(dwIoBase, 0xd7, 0x06); + bResult &= BBbWriteEmbedded(priv, 0xd7, 0x06); /* {{RobertYu:20050125, request by Jack */ - bResult &= BBbWriteEmbedded(dwIoBase, 0x90, 0x20); - bResult &= BBbWriteEmbedded(dwIoBase, 0x97, 0xeb); + bResult &= BBbWriteEmbedded(priv, 0x90, 0x20); + bResult &= BBbWriteEmbedded(priv, 0x97, 0xeb); /* }} */ /* {{RobertYu:20050221, request by Jack */ - bResult &= BBbWriteEmbedded(dwIoBase, 0xa6, 0x00); - bResult &= BBbWriteEmbedded(dwIoBase, 0xa8, 0x30); + bResult &= BBbWriteEmbedded(priv, 0xa6, 0x00); + bResult &= BBbWriteEmbedded(priv, 0xa8, 0x30); /* }} */ - bResult &= BBbWriteEmbedded(dwIoBase, 0xb0, 0x58); + bResult &= BBbWriteEmbedded(priv, 0xb0, 0x58); for (ii = 0; ii < CB_VT3253B0_AGC; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); - - pDevice->abyBBVGA[0] = 0x14; - pDevice->abyBBVGA[1] = 0x0A; - pDevice->abyBBVGA[2] = 0x0; - pDevice->abyBBVGA[3] = 0x0; - pDevice->ldBmThreshold[0] = -60; - pDevice->ldBmThreshold[1] = -50; - pDevice->ldBmThreshold[2] = 0; - pDevice->ldBmThreshold[3] = 0; + bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); + + priv->abyBBVGA[0] = 0x14; + priv->abyBBVGA[1] = 0x0A; + priv->abyBBVGA[2] = 0x0; + priv->abyBBVGA[3] = 0x0; + priv->ldBmThreshold[0] = -60; + priv->ldBmThreshold[1] = -50; + priv->ldBmThreshold[2] = 0; + priv->ldBmThreshold[3] = 0; /* }} RobertYu */ } else if (byRFType == RF_VT3226) { for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]); + bResult &= BBbWriteEmbedded(priv, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]); for (ii = 0; ii < CB_VT3253B0_AGC; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); - - pDevice->abyBBVGA[0] = 0x1C; - pDevice->abyBBVGA[1] = 0x10; - pDevice->abyBBVGA[2] = 0x0; - pDevice->abyBBVGA[3] = 0x0; - pDevice->ldBmThreshold[0] = -70; - pDevice->ldBmThreshold[1] = -48; - pDevice->ldBmThreshold[2] = 0; - pDevice->ldBmThreshold[3] = 0; + bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); + + priv->abyBBVGA[0] = 0x1C; + priv->abyBBVGA[1] = 0x10; + priv->abyBBVGA[2] = 0x0; + priv->abyBBVGA[3] = 0x0; + priv->ldBmThreshold[0] = -70; + priv->ldBmThreshold[1] = -48; + priv->ldBmThreshold[2] = 0; + priv->ldBmThreshold[3] = 0; /* Fix VT3226 DFC system timing issue */ MACvSetRFLE_LatchBase(dwIoBase); /* {{ RobertYu: 20050104 */ } else if (byRFType == RF_AIROHA7230) { for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]); + bResult &= BBbWriteEmbedded(priv, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]); /* {{ RobertYu:20050223, request by JerryChung */ @@ -2228,150 +2181,37 @@ bool BBbVT3253Init(struct vnt_private *pDevice) /* }} */ for (ii = 0; ii < CB_VT3253B0_AGC; ii++) - bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); - - pDevice->abyBBVGA[0] = 0x1C; - pDevice->abyBBVGA[1] = 0x10; - pDevice->abyBBVGA[2] = 0x0; - pDevice->abyBBVGA[3] = 0x0; - pDevice->ldBmThreshold[0] = -70; - pDevice->ldBmThreshold[1] = -48; - pDevice->ldBmThreshold[2] = 0; - pDevice->ldBmThreshold[3] = 0; + bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); + + priv->abyBBVGA[0] = 0x1C; + priv->abyBBVGA[1] = 0x10; + priv->abyBBVGA[2] = 0x0; + priv->abyBBVGA[3] = 0x0; + priv->ldBmThreshold[0] = -70; + priv->ldBmThreshold[1] = -48; + priv->ldBmThreshold[2] = 0; + priv->ldBmThreshold[3] = 0; /* }} RobertYu */ } else { /* No VGA Table now */ - pDevice->bUpdateBBVGA = false; - pDevice->abyBBVGA[0] = 0x1C; + priv->bUpdateBBVGA = false; + priv->abyBBVGA[0] = 0x1C; } if (byLocalID > REV_ID_VT3253_A1) { - BBbWriteEmbedded(dwIoBase, 0x04, 0x7F); - BBbWriteEmbedded(dwIoBase, 0x0D, 0x01); + BBbWriteEmbedded(priv, 0x04, 0x7F); + BBbWriteEmbedded(priv, 0x0D, 0x01); } return bResult; } /* - * Description: Read All Baseband Registers - * - * Parameters: - * In: - * dwIoBase - I/O base address - * pbyBBRegs - Point to struct that stores Baseband Registers - * Out: - * none - * - * Return Value: none - * - */ -void BBvReadAllRegs(void __iomem *dwIoBase, unsigned char *pbyBBRegs) -{ - int ii; - unsigned char byBase = 1; - - for (ii = 0; ii < BB_MAX_CONTEXT_SIZE; ii++) { - BBbReadEmbedded(dwIoBase, (unsigned char)(ii*byBase), pbyBBRegs); - pbyBBRegs += byBase; - } -} - -/* - * Description: Turn on BaseBand Loopback mode - * - * Parameters: - * In: - * dwIoBase - I/O base address - * bCCK - If CCK is set - * Out: - * none - * - * Return Value: none - * - */ - -void BBvLoopbackOn(struct vnt_private *pDevice) -{ - unsigned char byData; - void __iomem *dwIoBase = pDevice->PortOffset; - - /* CR C9 = 0x00 */ - BBbReadEmbedded(dwIoBase, 0xC9, &pDevice->byBBCRc9); /* CR201 */ - BBbWriteEmbedded(dwIoBase, 0xC9, 0); - BBbReadEmbedded(dwIoBase, 0x4D, &pDevice->byBBCR4d); /* CR77 */ - BBbWriteEmbedded(dwIoBase, 0x4D, 0x90); - - /* CR 88 = 0x02(CCK), 0x03(OFDM) */ - BBbReadEmbedded(dwIoBase, 0x88, &pDevice->byBBCR88); /* CR136 */ - - if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */ - /* Enable internal digital loopback: CR33 |= 0000 0001 */ - BBbReadEmbedded(dwIoBase, 0x21, &byData); /* CR33 */ - BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData | 0x01)); /* CR33 */ - /* CR154 = 0x00 */ - BBbWriteEmbedded(dwIoBase, 0x9A, 0); /* CR154 */ - - BBbWriteEmbedded(dwIoBase, 0x88, 0x02); /* CR239 */ - } else { /* OFDM */ - /* Enable internal digital loopback:CR154 |= 0000 0001 */ - BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */ - BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData | 0x01)); /* CR154 */ - /* CR33 = 0x00 */ - BBbWriteEmbedded(dwIoBase, 0x21, 0); /* CR33 */ - - BBbWriteEmbedded(dwIoBase, 0x88, 0x03); /* CR239 */ - } - - /* CR14 = 0x00 */ - BBbWriteEmbedded(dwIoBase, 0x0E, 0); /* CR14 */ - - /* Disable TX_IQUN */ - BBbReadEmbedded(pDevice->PortOffset, 0x09, &pDevice->byBBCR09); - BBbWriteEmbedded(pDevice->PortOffset, 0x09, (unsigned char)(pDevice->byBBCR09 & 0xDE)); -} - -/* - * Description: Turn off BaseBand Loopback mode - * - * Parameters: - * In: - * pDevice - Device Structure - * - * Out: - * none - * - * Return Value: none - * - */ -void BBvLoopbackOff(struct vnt_private *pDevice) -{ - unsigned char byData; - void __iomem *dwIoBase = pDevice->PortOffset; - - BBbWriteEmbedded(dwIoBase, 0xC9, pDevice->byBBCRc9); /* CR201 */ - BBbWriteEmbedded(dwIoBase, 0x88, pDevice->byBBCR88); /* CR136 */ - BBbWriteEmbedded(dwIoBase, 0x09, pDevice->byBBCR09); /* CR136 */ - BBbWriteEmbedded(dwIoBase, 0x4D, pDevice->byBBCR4d); /* CR77 */ - - if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */ - /* Set the CR33 Bit2 to disable internal Loopback. */ - BBbReadEmbedded(dwIoBase, 0x21, &byData);/* CR33 */ - BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData & 0xFE)); /* CR33 */ - } else { /* OFDM */ - BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */ - BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData & 0xFE)); /* CR154 */ - } - BBbReadEmbedded(dwIoBase, 0x0E, &byData); /* CR14 */ - BBbWriteEmbedded(dwIoBase, 0x0E, (unsigned char)(byData | 0x80)); /* CR14 */ -} - -/* * Description: Set ShortSlotTime mode * * Parameters: * In: - * pDevice - Device Structure + * priv - Device Structure * Out: * none * @@ -2379,42 +2219,42 @@ void BBvLoopbackOff(struct vnt_private *pDevice) * */ void -BBvSetShortSlotTime(struct vnt_private *pDevice) +BBvSetShortSlotTime(struct vnt_private *priv) { unsigned char byBBRxConf = 0; unsigned char byBBVGA = 0; - BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */ + BBbReadEmbedded(priv, 0x0A, &byBBRxConf); /* CR10 */ - if (pDevice->bShortSlotTime) + if (priv->bShortSlotTime) byBBRxConf &= 0xDF; /* 1101 1111 */ else byBBRxConf |= 0x20; /* 0010 0000 */ /* patch for 3253B0 Baseband with Cardbus module */ - BBbReadEmbedded(pDevice->PortOffset, 0xE7, &byBBVGA); - if (byBBVGA == pDevice->abyBBVGA[0]) + BBbReadEmbedded(priv, 0xE7, &byBBVGA); + if (byBBVGA == priv->abyBBVGA[0]) byBBRxConf |= 0x20; /* 0010 0000 */ - BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */ + BBbWriteEmbedded(priv, 0x0A, byBBRxConf); /* CR10 */ } -void BBvSetVGAGainOffset(struct vnt_private *pDevice, unsigned char byData) +void BBvSetVGAGainOffset(struct vnt_private *priv, unsigned char byData) { unsigned char byBBRxConf = 0; - BBbWriteEmbedded(pDevice->PortOffset, 0xE7, byData); + BBbWriteEmbedded(priv, 0xE7, byData); - BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */ + BBbReadEmbedded(priv, 0x0A, &byBBRxConf); /* CR10 */ /* patch for 3253B0 Baseband with Cardbus module */ - if (byData == pDevice->abyBBVGA[0]) + if (byData == priv->abyBBVGA[0]) byBBRxConf |= 0x20; /* 0010 0000 */ - else if (pDevice->bShortSlotTime) + else if (priv->bShortSlotTime) byBBRxConf &= 0xDF; /* 1101 1111 */ else byBBRxConf |= 0x20; /* 0010 0000 */ - pDevice->byBBVGACurrent = byData; - BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */ + priv->byBBVGACurrent = byData; + BBbWriteEmbedded(priv, 0x0A, byBBRxConf); /* CR10 */ } /* @@ -2430,12 +2270,12 @@ void BBvSetVGAGainOffset(struct vnt_private *pDevice, unsigned char byData) * */ void -BBvSoftwareReset(void __iomem *dwIoBase) +BBvSoftwareReset(struct vnt_private *priv) { - BBbWriteEmbedded(dwIoBase, 0x50, 0x40); - BBbWriteEmbedded(dwIoBase, 0x50, 0); - BBbWriteEmbedded(dwIoBase, 0x9C, 0x01); - BBbWriteEmbedded(dwIoBase, 0x9C, 0); + BBbWriteEmbedded(priv, 0x50, 0x40); + BBbWriteEmbedded(priv, 0x50, 0); + BBbWriteEmbedded(priv, 0x9C, 0x01); + BBbWriteEmbedded(priv, 0x9C, 0); } /* @@ -2451,13 +2291,13 @@ BBvSoftwareReset(void __iomem *dwIoBase) * */ void -BBvPowerSaveModeON(void __iomem *dwIoBase) +BBvPowerSaveModeON(struct vnt_private *priv) { unsigned char byOrgData; - BBbReadEmbedded(dwIoBase, 0x0D, &byOrgData); - byOrgData |= BIT0; - BBbWriteEmbedded(dwIoBase, 0x0D, byOrgData); + BBbReadEmbedded(priv, 0x0D, &byOrgData); + byOrgData |= BIT(0); + BBbWriteEmbedded(priv, 0x0D, byOrgData); } /* @@ -2473,13 +2313,13 @@ BBvPowerSaveModeON(void __iomem *dwIoBase) * */ void -BBvPowerSaveModeOFF(void __iomem *dwIoBase) +BBvPowerSaveModeOFF(struct vnt_private *priv) { unsigned char byOrgData; - BBbReadEmbedded(dwIoBase, 0x0D, &byOrgData); - byOrgData &= ~(BIT0); - BBbWriteEmbedded(dwIoBase, 0x0D, byOrgData); + BBbReadEmbedded(priv, 0x0D, &byOrgData); + byOrgData &= ~(BIT(0)); + BBbWriteEmbedded(priv, 0x0D, byOrgData); } /* @@ -2487,7 +2327,7 @@ BBvPowerSaveModeOFF(void __iomem *dwIoBase) * * Parameters: * In: - * pDevice - Device Structure + * priv - Device Structure * byAntennaMode - Antenna Mode * Out: * none @@ -2497,11 +2337,11 @@ BBvPowerSaveModeOFF(void __iomem *dwIoBase) */ void -BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) +BBvSetTxAntennaMode(struct vnt_private *priv, unsigned char byAntennaMode) { unsigned char byBBTxConf; - BBbReadEmbedded(dwIoBase, 0x09, &byBBTxConf); /* CR09 */ + BBbReadEmbedded(priv, 0x09, &byBBTxConf); /* CR09 */ if (byAntennaMode == ANT_DIVERSITY) { /* bit 1 is diversity */ byBBTxConf |= 0x02; @@ -2512,7 +2352,7 @@ BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) byBBTxConf &= 0xFD; /* 1111 1101 */ byBBTxConf |= 0x04; } - BBbWriteEmbedded(dwIoBase, 0x09, byBBTxConf); /* CR09 */ + BBbWriteEmbedded(priv, 0x09, byBBTxConf); /* CR09 */ } /* @@ -2520,7 +2360,7 @@ BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) * * Parameters: * In: - * pDevice - Device Structure + * priv - Device Structure * byAntennaMode - Antenna Mode * Out: * none @@ -2530,11 +2370,11 @@ BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) */ void -BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) +BBvSetRxAntennaMode(struct vnt_private *priv, unsigned char byAntennaMode) { unsigned char byBBRxConf; - BBbReadEmbedded(dwIoBase, 0x0A, &byBBRxConf); /* CR10 */ + BBbReadEmbedded(priv, 0x0A, &byBBRxConf); /* CR10 */ if (byAntennaMode == ANT_DIVERSITY) { byBBRxConf |= 0x01; @@ -2544,7 +2384,7 @@ BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) byBBRxConf &= 0xFE; /* 1111 1110 */ byBBRxConf |= 0x02; } - BBbWriteEmbedded(dwIoBase, 0x0A, byBBRxConf); /* CR10 */ + BBbWriteEmbedded(priv, 0x0A, byBBRxConf); /* CR10 */ } /* @@ -2552,7 +2392,7 @@ BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) * * Parameters: * In: - * pDevice - Device Structure + * priv - Device Structure * Out: * none * @@ -2560,109 +2400,109 @@ BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) * */ void -BBvSetDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID) +BBvSetDeepSleep(struct vnt_private *priv, unsigned char byLocalID) { - BBbWriteEmbedded(dwIoBase, 0x0C, 0x17); /* CR12 */ - BBbWriteEmbedded(dwIoBase, 0x0D, 0xB9); /* CR13 */ + BBbWriteEmbedded(priv, 0x0C, 0x17); /* CR12 */ + BBbWriteEmbedded(priv, 0x0D, 0xB9); /* CR13 */ } void -BBvExitDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID) +BBvExitDeepSleep(struct vnt_private *priv, unsigned char byLocalID) { - BBbWriteEmbedded(dwIoBase, 0x0C, 0x00); /* CR12 */ - BBbWriteEmbedded(dwIoBase, 0x0D, 0x01); /* CR13 */ + BBbWriteEmbedded(priv, 0x0C, 0x00); /* CR12 */ + BBbWriteEmbedded(priv, 0x0D, 0x01); /* CR13 */ } static unsigned long -s_ulGetRatio(struct vnt_private *pDevice) +s_ulGetRatio(struct vnt_private *priv) { unsigned long ulRatio = 0; unsigned long ulMaxPacket; unsigned long ulPacketNum; /* This is a thousand-ratio */ - ulMaxPacket = pDevice->uNumSQ3[RATE_54M]; - if (pDevice->uNumSQ3[RATE_54M] != 0) { - ulPacketNum = pDevice->uNumSQ3[RATE_54M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + ulMaxPacket = priv->uNumSQ3[RATE_54M]; + if (priv->uNumSQ3[RATE_54M] != 0) { + ulPacketNum = priv->uNumSQ3[RATE_54M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_54M; } - if (pDevice->uNumSQ3[RATE_48M] > ulMaxPacket) { - ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_48M] > ulMaxPacket) { + ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_48M; - ulMaxPacket = pDevice->uNumSQ3[RATE_48M]; + ulMaxPacket = priv->uNumSQ3[RATE_48M]; } - if (pDevice->uNumSQ3[RATE_36M] > ulMaxPacket) { - ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] + - pDevice->uNumSQ3[RATE_36M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_36M] > ulMaxPacket) { + ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] + + priv->uNumSQ3[RATE_36M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_36M; - ulMaxPacket = pDevice->uNumSQ3[RATE_36M]; + ulMaxPacket = priv->uNumSQ3[RATE_36M]; } - if (pDevice->uNumSQ3[RATE_24M] > ulMaxPacket) { - ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] + - pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_24M] > ulMaxPacket) { + ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] + + priv->uNumSQ3[RATE_36M] + priv->uNumSQ3[RATE_24M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_24M; - ulMaxPacket = pDevice->uNumSQ3[RATE_24M]; + ulMaxPacket = priv->uNumSQ3[RATE_24M]; } - if (pDevice->uNumSQ3[RATE_18M] > ulMaxPacket) { - ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] + - pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M] + - pDevice->uNumSQ3[RATE_18M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_18M] > ulMaxPacket) { + ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] + + priv->uNumSQ3[RATE_36M] + priv->uNumSQ3[RATE_24M] + + priv->uNumSQ3[RATE_18M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_18M; - ulMaxPacket = pDevice->uNumSQ3[RATE_18M]; + ulMaxPacket = priv->uNumSQ3[RATE_18M]; } - if (pDevice->uNumSQ3[RATE_12M] > ulMaxPacket) { - ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] + - pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M] + - pDevice->uNumSQ3[RATE_18M] + pDevice->uNumSQ3[RATE_12M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_12M] > ulMaxPacket) { + ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] + + priv->uNumSQ3[RATE_36M] + priv->uNumSQ3[RATE_24M] + + priv->uNumSQ3[RATE_18M] + priv->uNumSQ3[RATE_12M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_12M; - ulMaxPacket = pDevice->uNumSQ3[RATE_12M]; + ulMaxPacket = priv->uNumSQ3[RATE_12M]; } - if (pDevice->uNumSQ3[RATE_11M] > ulMaxPacket) { - ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] - - pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M] - - pDevice->uNumSQ3[RATE_6M] - pDevice->uNumSQ3[RATE_9M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_11M] > ulMaxPacket) { + ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] - + priv->uNumSQ3[RATE_2M] - priv->uNumSQ3[RATE_5M] - + priv->uNumSQ3[RATE_6M] - priv->uNumSQ3[RATE_9M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_11M; - ulMaxPacket = pDevice->uNumSQ3[RATE_11M]; + ulMaxPacket = priv->uNumSQ3[RATE_11M]; } - if (pDevice->uNumSQ3[RATE_9M] > ulMaxPacket) { - ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] - - pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M] - - pDevice->uNumSQ3[RATE_6M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_9M] > ulMaxPacket) { + ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] - + priv->uNumSQ3[RATE_2M] - priv->uNumSQ3[RATE_5M] - + priv->uNumSQ3[RATE_6M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_9M; - ulMaxPacket = pDevice->uNumSQ3[RATE_9M]; + ulMaxPacket = priv->uNumSQ3[RATE_9M]; } - if (pDevice->uNumSQ3[RATE_6M] > ulMaxPacket) { - ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] - - pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_6M] > ulMaxPacket) { + ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] - + priv->uNumSQ3[RATE_2M] - priv->uNumSQ3[RATE_5M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_6M; - ulMaxPacket = pDevice->uNumSQ3[RATE_6M]; + ulMaxPacket = priv->uNumSQ3[RATE_6M]; } - if (pDevice->uNumSQ3[RATE_5M] > ulMaxPacket) { - ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] - - pDevice->uNumSQ3[RATE_2M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_5M] > ulMaxPacket) { + ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] - + priv->uNumSQ3[RATE_2M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_55M; - ulMaxPacket = pDevice->uNumSQ3[RATE_5M]; + ulMaxPacket = priv->uNumSQ3[RATE_5M]; } - if (pDevice->uNumSQ3[RATE_2M] > ulMaxPacket) { - ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M]; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_2M] > ulMaxPacket) { + ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M]; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_2M; - ulMaxPacket = pDevice->uNumSQ3[RATE_2M]; + ulMaxPacket = priv->uNumSQ3[RATE_2M]; } - if (pDevice->uNumSQ3[RATE_1M] > ulMaxPacket) { - ulPacketNum = pDevice->uDiversityCnt; - ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt); + if (priv->uNumSQ3[RATE_1M] > ulMaxPacket) { + ulPacketNum = priv->uDiversityCnt; + ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); ulRatio += TOP_RATE_1M; } @@ -2670,13 +2510,13 @@ s_ulGetRatio(struct vnt_private *pDevice) } void -BBvClearAntDivSQ3Value(struct vnt_private *pDevice) +BBvClearAntDivSQ3Value(struct vnt_private *priv) { unsigned int ii; - pDevice->uDiversityCnt = 0; + priv->uDiversityCnt = 0; for (ii = 0; ii < MAX_RATE; ii++) - pDevice->uNumSQ3[ii] = 0; + priv->uNumSQ3[ii] = 0; } /* @@ -2684,7 +2524,7 @@ BBvClearAntDivSQ3Value(struct vnt_private *pDevice) * * Parameters: * In: - * pDevice - Device Structure + * priv - Device Structure * byRSR - RSR from received packet * bySQ3 - SQ3 value from received packet * Out: @@ -2694,75 +2534,75 @@ BBvClearAntDivSQ3Value(struct vnt_private *pDevice) * */ -void BBvAntennaDiversity(struct vnt_private *pDevice, +void BBvAntennaDiversity(struct vnt_private *priv, unsigned char byRxRate, unsigned char bySQ3) { - if ((byRxRate >= MAX_RATE) || (pDevice->wAntDiversityMaxRate >= MAX_RATE)) + if ((byRxRate >= MAX_RATE) || (priv->wAntDiversityMaxRate >= MAX_RATE)) return; - pDevice->uDiversityCnt++; + priv->uDiversityCnt++; - pDevice->uNumSQ3[byRxRate]++; + priv->uNumSQ3[byRxRate]++; - if (pDevice->byAntennaState == 0) { - if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) { + if (priv->byAntennaState == 0) { + if (priv->uDiversityCnt > priv->ulDiversityNValue) { pr_debug("ulDiversityNValue=[%d],54M-[%d]\n", - (int)pDevice->ulDiversityNValue, - (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate]); + (int)priv->ulDiversityNValue, + (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate]); - if (pDevice->uNumSQ3[pDevice->wAntDiversityMaxRate] < pDevice->uDiversityCnt/2) { - pDevice->ulRatio_State0 = s_ulGetRatio(pDevice); + if (priv->uNumSQ3[priv->wAntDiversityMaxRate] < priv->uDiversityCnt/2) { + priv->ulRatio_State0 = s_ulGetRatio(priv); pr_debug("SQ3_State0, rate = [%08x]\n", - (int)pDevice->ulRatio_State0); + (int)priv->ulRatio_State0); - if (pDevice->byTMax == 0) + if (priv->byTMax == 0) return; pr_debug("1.[%08x], uNumSQ3[%d]=%d, %d\n", - (int)pDevice->ulRatio_State0, - (int)pDevice->wAntDiversityMaxRate, - (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate], - (int)pDevice->uDiversityCnt); - - s_vChangeAntenna(pDevice); - pDevice->byAntennaState = 1; - del_timer(&pDevice->TimerSQ3Tmax3); - del_timer(&pDevice->TimerSQ3Tmax2); - pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ); - add_timer(&pDevice->TimerSQ3Tmax1); + (int)priv->ulRatio_State0, + (int)priv->wAntDiversityMaxRate, + (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate], + (int)priv->uDiversityCnt); + + s_vChangeAntenna(priv); + priv->byAntennaState = 1; + del_timer(&priv->TimerSQ3Tmax3); + del_timer(&priv->TimerSQ3Tmax2); + priv->TimerSQ3Tmax1.expires = RUN_AT(priv->byTMax * HZ); + add_timer(&priv->TimerSQ3Tmax1); } else { - pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ); - add_timer(&pDevice->TimerSQ3Tmax3); + priv->TimerSQ3Tmax3.expires = RUN_AT(priv->byTMax3 * HZ); + add_timer(&priv->TimerSQ3Tmax3); } - BBvClearAntDivSQ3Value(pDevice); + BBvClearAntDivSQ3Value(priv); } } else { /* byAntennaState == 1 */ - if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) { - del_timer(&pDevice->TimerSQ3Tmax1); + if (priv->uDiversityCnt > priv->ulDiversityMValue) { + del_timer(&priv->TimerSQ3Tmax1); - pDevice->ulRatio_State1 = s_ulGetRatio(pDevice); + priv->ulRatio_State1 = s_ulGetRatio(priv); pr_debug("RX:SQ3_State1, rate0 = %08x,rate1 = %08x\n", - (int)pDevice->ulRatio_State0, - (int)pDevice->ulRatio_State1); + (int)priv->ulRatio_State0, + (int)priv->ulRatio_State1); - if (pDevice->ulRatio_State1 < pDevice->ulRatio_State0) { + if (priv->ulRatio_State1 < priv->ulRatio_State0) { pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n", - (int)pDevice->ulRatio_State0, - (int)pDevice->ulRatio_State1, - (int)pDevice->wAntDiversityMaxRate, - (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate], - (int)pDevice->uDiversityCnt); - - s_vChangeAntenna(pDevice); - pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ); - pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ); - add_timer(&pDevice->TimerSQ3Tmax3); - add_timer(&pDevice->TimerSQ3Tmax2); + (int)priv->ulRatio_State0, + (int)priv->ulRatio_State1, + (int)priv->wAntDiversityMaxRate, + (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate], + (int)priv->uDiversityCnt); + + s_vChangeAntenna(priv); + priv->TimerSQ3Tmax3.expires = RUN_AT(priv->byTMax3 * HZ); + priv->TimerSQ3Tmax2.expires = RUN_AT(priv->byTMax2 * HZ); + add_timer(&priv->TimerSQ3Tmax3); + add_timer(&priv->TimerSQ3Tmax2); } - pDevice->byAntennaState = 0; - BBvClearAntDivSQ3Value(pDevice); + priv->byAntennaState = 0; + BBvClearAntDivSQ3Value(priv); } } /* byAntennaState */ } @@ -2783,28 +2623,30 @@ void BBvAntennaDiversity(struct vnt_private *pDevice, void TimerSQ3CallBack( - void *hDeviceContext + unsigned long data ) { - struct vnt_private *pDevice = hDeviceContext; + struct vnt_private *priv = (struct vnt_private *)data; + unsigned long flags; pr_debug("TimerSQ3CallBack...\n"); - spin_lock_irq(&pDevice->lock); + + spin_lock_irqsave(&priv->lock, flags); pr_debug("3.[%08x][%08x], %d\n", - (int)pDevice->ulRatio_State0, (int)pDevice->ulRatio_State1, - (int)pDevice->uDiversityCnt); + (int)priv->ulRatio_State0, (int)priv->ulRatio_State1, + (int)priv->uDiversityCnt); - s_vChangeAntenna(pDevice); - pDevice->byAntennaState = 0; - BBvClearAntDivSQ3Value(pDevice); + s_vChangeAntenna(priv); + priv->byAntennaState = 0; + BBvClearAntDivSQ3Value(priv); - pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ); - pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ); - add_timer(&pDevice->TimerSQ3Tmax3); - add_timer(&pDevice->TimerSQ3Tmax2); + priv->TimerSQ3Tmax3.expires = RUN_AT(priv->byTMax3 * HZ); + priv->TimerSQ3Tmax2.expires = RUN_AT(priv->byTMax2 * HZ); + add_timer(&priv->TimerSQ3Tmax3); + add_timer(&priv->TimerSQ3Tmax2); - spin_unlock_irq(&pDevice->lock); + spin_unlock_irqrestore(&priv->lock, flags); } /*+ @@ -2827,43 +2669,46 @@ TimerSQ3CallBack( void TimerState1CallBack( - void *hDeviceContext + unsigned long data ) { - struct vnt_private *pDevice = hDeviceContext; + struct vnt_private *priv = (struct vnt_private *)data; + unsigned long flags; pr_debug("TimerState1CallBack...\n"); - spin_lock_irq(&pDevice->lock); - if (pDevice->uDiversityCnt < pDevice->ulDiversityMValue/100) { - s_vChangeAntenna(pDevice); - pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ); - pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ); - add_timer(&pDevice->TimerSQ3Tmax3); - add_timer(&pDevice->TimerSQ3Tmax2); + spin_lock_irqsave(&priv->lock, flags); + + if (priv->uDiversityCnt < priv->ulDiversityMValue/100) { + s_vChangeAntenna(priv); + priv->TimerSQ3Tmax3.expires = RUN_AT(priv->byTMax3 * HZ); + priv->TimerSQ3Tmax2.expires = RUN_AT(priv->byTMax2 * HZ); + add_timer(&priv->TimerSQ3Tmax3); + add_timer(&priv->TimerSQ3Tmax2); } else { - pDevice->ulRatio_State1 = s_ulGetRatio(pDevice); + priv->ulRatio_State1 = s_ulGetRatio(priv); pr_debug("SQ3_State1, rate0 = %08x,rate1 = %08x\n", - (int)pDevice->ulRatio_State0, - (int)pDevice->ulRatio_State1); + (int)priv->ulRatio_State0, + (int)priv->ulRatio_State1); - if (pDevice->ulRatio_State1 < pDevice->ulRatio_State0) { + if (priv->ulRatio_State1 < priv->ulRatio_State0) { pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n", - (int)pDevice->ulRatio_State0, - (int)pDevice->ulRatio_State1, - (int)pDevice->wAntDiversityMaxRate, - (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate], - (int)pDevice->uDiversityCnt); - - s_vChangeAntenna(pDevice); - - pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ); - pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ); - add_timer(&pDevice->TimerSQ3Tmax3); - add_timer(&pDevice->TimerSQ3Tmax2); + (int)priv->ulRatio_State0, + (int)priv->ulRatio_State1, + (int)priv->wAntDiversityMaxRate, + (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate], + (int)priv->uDiversityCnt); + + s_vChangeAntenna(priv); + + priv->TimerSQ3Tmax3.expires = RUN_AT(priv->byTMax3 * HZ); + priv->TimerSQ3Tmax2.expires = RUN_AT(priv->byTMax2 * HZ); + add_timer(&priv->TimerSQ3Tmax3); + add_timer(&priv->TimerSQ3Tmax2); } } - pDevice->byAntennaState = 0; - BBvClearAntDivSQ3Value(pDevice); - spin_unlock_irq(&pDevice->lock); + priv->byAntennaState = 0; + BBvClearAntDivSQ3Value(priv); + + spin_unlock_irqrestore(&priv->lock, flags); } |