|
@@ -1699,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
|
|
@@ -2413,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);
|
|
|
-}
|