diff options
Diffstat (limited to 'drivers/staging/vt6655/baseband.c')
-rw-r--r-- | drivers/staging/vt6655/baseband.c | 343 |
1 files changed, 2 insertions, 341 deletions
diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index f8c5fc371c4c..565ba189afb2 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -27,7 +27,8 @@ * * Functions: * BBuGetFrameTime - Calculate data frame transmitting time - * BBvCaculateParameter - Caculate PhyLength, PhyService and Phy Signal parameter for baseband Tx + * 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 * BBbVT3253Init - VIA VT3253 baseband chip init code @@ -1698,46 +1699,6 @@ static const unsigned short awcFrameTime[MAX_RATE] = { 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216 }; -/*--------------------- Static Functions --------------------------*/ - -static -unsigned long -s_ulGetRatio(struct vnt_private *priv); - -static -void -s_vChangeAntenna( - struct vnt_private *priv -); - -static -void -s_vChangeAntenna( - struct vnt_private *priv -) -{ - if (priv->dwRxAntennaSel == 0) { - priv->dwRxAntennaSel = 1; - if (priv->bTxRxAntInv == true) - BBvSetRxAntennaMode(priv, ANT_A); - else - BBvSetRxAntennaMode(priv, ANT_B); - } else { - priv->dwRxAntennaSel = 0; - if (priv->bTxRxAntInv == true) - BBvSetRxAntennaMode(priv, ANT_B); - else - BBvSetRxAntennaMode(priv, ANT_A); - } - if (priv->dwTxAntennaSel == 0) { - priv->dwTxAntennaSel = 1; - BBvSetTxAntennaMode(priv, ANT_B); - } else { - priv->dwTxAntennaSel = 0; - BBvSetTxAntennaMode(priv, ANT_A); - } -} - /*--------------------- Export Variables --------------------------*/ /* * Description: Calculate data frame transmitting time @@ -2412,303 +2373,3 @@ BBvExitDeepSleep(struct vnt_private *priv, unsigned char byLocalID) BBbWriteEmbedded(priv, 0x0C, 0x00); /* CR12 */ BBbWriteEmbedded(priv, 0x0D, 0x01); /* CR13 */ } - -static -unsigned long -s_ulGetRatio(struct vnt_private *priv) -{ - unsigned long ulRatio = 0; - unsigned long ulMaxPacket; - unsigned long ulPacketNum; - - /* This is a thousand-ratio */ - 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 (priv->uNumSQ3[RATE_48M] > ulMaxPacket) { - ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M]; - ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); - ulRatio += TOP_RATE_48M; - ulMaxPacket = priv->uNumSQ3[RATE_48M]; - } - 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 = priv->uNumSQ3[RATE_36M]; - } - 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 = priv->uNumSQ3[RATE_24M]; - } - 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 = priv->uNumSQ3[RATE_18M]; - } - 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 = priv->uNumSQ3[RATE_12M]; - } - 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 = priv->uNumSQ3[RATE_11M]; - } - 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 = priv->uNumSQ3[RATE_9M]; - } - 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 = priv->uNumSQ3[RATE_6M]; - } - 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 = priv->uNumSQ3[RATE_5M]; - } - if (priv->uNumSQ3[RATE_2M] > ulMaxPacket) { - ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M]; - ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); - ulRatio += TOP_RATE_2M; - ulMaxPacket = priv->uNumSQ3[RATE_2M]; - } - if (priv->uNumSQ3[RATE_1M] > ulMaxPacket) { - ulPacketNum = priv->uDiversityCnt; - ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt); - ulRatio += TOP_RATE_1M; - } - - return ulRatio; -} - -void -BBvClearAntDivSQ3Value(struct vnt_private *priv) -{ - unsigned int ii; - - priv->uDiversityCnt = 0; - for (ii = 0; ii < MAX_RATE; ii++) - priv->uNumSQ3[ii] = 0; -} - -/* - * Description: Antenna Diversity - * - * Parameters: - * In: - * priv - Device Structure - * byRSR - RSR from received packet - * bySQ3 - SQ3 value from received packet - * Out: - * none - * - * Return Value: none - * - */ - -void BBvAntennaDiversity(struct vnt_private *priv, - unsigned char byRxRate, unsigned char bySQ3) -{ - if ((byRxRate >= MAX_RATE) || (priv->wAntDiversityMaxRate >= MAX_RATE)) - return; - - priv->uDiversityCnt++; - - priv->uNumSQ3[byRxRate]++; - - if (priv->byAntennaState == 0) { - if (priv->uDiversityCnt > priv->ulDiversityNValue) { - pr_debug("ulDiversityNValue=[%d],54M-[%d]\n", - (int)priv->ulDiversityNValue, - (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate]); - - if (priv->uNumSQ3[priv->wAntDiversityMaxRate] < priv->uDiversityCnt/2) { - priv->ulRatio_State0 = s_ulGetRatio(priv); - pr_debug("SQ3_State0, rate = [%08x]\n", - (int)priv->ulRatio_State0); - - if (priv->byTMax == 0) - return; - pr_debug("1.[%08x], uNumSQ3[%d]=%d, %d\n", - (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 { - priv->TimerSQ3Tmax3.expires = RUN_AT(priv->byTMax3 * HZ); - add_timer(&priv->TimerSQ3Tmax3); - } - BBvClearAntDivSQ3Value(priv); - - } - } else { /* byAntennaState == 1 */ - - if (priv->uDiversityCnt > priv->ulDiversityMValue) { - del_timer(&priv->TimerSQ3Tmax1); - - priv->ulRatio_State1 = s_ulGetRatio(priv); - pr_debug("RX:SQ3_State1, rate0 = %08x,rate1 = %08x\n", - (int)priv->ulRatio_State0, - (int)priv->ulRatio_State1); - - if (priv->ulRatio_State1 < priv->ulRatio_State0) { - pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n", - (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); - } - priv->byAntennaState = 0; - BBvClearAntDivSQ3Value(priv); - } - } /* byAntennaState */ -} - -/*+ - * - * Description: - * Timer for SQ3 antenna diversity - * - * Parameters: - * In: - * Out: - * none - * - * Return Value: none - * - -*/ - -void -TimerSQ3CallBack( - unsigned long data -) -{ - struct vnt_private *priv = (struct vnt_private *)data; - unsigned long flags; - - pr_debug("TimerSQ3CallBack...\n"); - - spin_lock_irqsave(&priv->lock, flags); - - pr_debug("3.[%08x][%08x], %d\n", - (int)priv->ulRatio_State0, (int)priv->ulRatio_State1, - (int)priv->uDiversityCnt); - - s_vChangeAntenna(priv); - priv->byAntennaState = 0; - BBvClearAntDivSQ3Value(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); - - spin_unlock_irqrestore(&priv->lock, flags); -} - -/*+ - * - * Description: - * Timer for SQ3 antenna diversity - * - * Parameters: - * In: - * pvSysSpec1 - * hDeviceContext - Pointer to the adapter - * pvSysSpec2 - * pvSysSpec3 - * Out: - * none - * - * Return Value: none - * - -*/ - -void -TimerState1CallBack( - unsigned long data -) -{ - struct vnt_private *priv = (struct vnt_private *)data; - unsigned long flags; - - pr_debug("TimerState1CallBack...\n"); - - 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 { - priv->ulRatio_State1 = s_ulGetRatio(priv); - pr_debug("SQ3_State1, rate0 = %08x,rate1 = %08x\n", - (int)priv->ulRatio_State0, - (int)priv->ulRatio_State1); - - if (priv->ulRatio_State1 < priv->ulRatio_State0) { - pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n", - (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); - } - } - priv->byAntennaState = 0; - BBvClearAntDivSQ3Value(priv); - - spin_unlock_irqrestore(&priv->lock, flags); -} |