diff options
-rw-r--r-- | drivers/staging/rtl8187se/r8180_dm.c | 307 |
1 files changed, 21 insertions, 286 deletions
diff --git a/drivers/staging/rtl8187se/r8180_dm.c b/drivers/staging/rtl8187se/r8180_dm.c index 54b676ffb6f3..4d7a5951486e 100644 --- a/drivers/staging/rtl8187se/r8180_dm.c +++ b/drivers/staging/rtl8187se/r8180_dm.c | |||
@@ -1,15 +1,8 @@ | |||
1 | /*#include "r8180.h" */ | ||
2 | #include "r8180_dm.h" | 1 | #include "r8180_dm.h" |
3 | #include "r8180_hw.h" | 2 | #include "r8180_hw.h" |
4 | #include "r8180_93cx6.h" | 3 | #include "r8180_93cx6.h" |
5 | /*{by amy 080312 */ | ||
6 | 4 | ||
7 | /* | 5 | /* Return TRUE if we shall perform High Power Mecahnism, FALSE otherwise. */ |
8 | * Description: | ||
9 | * Return TRUE if we shall perform High Power Mecahnism, FALSE otherwise. | ||
10 | * | ||
11 | *+by amy 080312 | ||
12 | */ | ||
13 | #define RATE_ADAPTIVE_TIMER_PERIOD 300 | 6 | #define RATE_ADAPTIVE_TIMER_PERIOD 300 |
14 | 7 | ||
15 | bool CheckHighPower(struct net_device *dev) | 8 | bool CheckHighPower(struct net_device *dev) |
@@ -47,8 +40,6 @@ void DoTxHighPower(struct net_device *dev) | |||
47 | u8 u1bTmp; | 40 | u8 u1bTmp; |
48 | char OfdmTxPwrIdx, CckTxPwrIdx; | 41 | char OfdmTxPwrIdx, CckTxPwrIdx; |
49 | 42 | ||
50 | /* printk("----> DoTxHighPower()\n"); */ | ||
51 | |||
52 | HiPwrUpperTh = priv->RegHiPwrUpperTh; | 43 | HiPwrUpperTh = priv->RegHiPwrUpperTh; |
53 | HiPwrLowerTh = priv->RegHiPwrLowerTh; | 44 | HiPwrLowerTh = priv->RegHiPwrLowerTh; |
54 | 45 | ||
@@ -61,16 +52,10 @@ void DoTxHighPower(struct net_device *dev) | |||
61 | OfdmTxPwrIdx = priv->chtxpwr_ofdm[priv->ieee80211->current_network.channel]; | 52 | OfdmTxPwrIdx = priv->chtxpwr_ofdm[priv->ieee80211->current_network.channel]; |
62 | CckTxPwrIdx = priv->chtxpwr[priv->ieee80211->current_network.channel]; | 53 | CckTxPwrIdx = priv->chtxpwr[priv->ieee80211->current_network.channel]; |
63 | 54 | ||
64 | /* | ||
65 | * printk("DoTxHighPower() - UndecoratedSmoothedSS:%d, CurCCKRSSI = %d , bCurCCKPkt= %d \n", | ||
66 | * priv->UndecoratedSmoothedSS, priv->CurCCKRSSI, priv->bCurCCKPkt ); | ||
67 | */ | ||
68 | |||
69 | if ((priv->UndecoratedSmoothedSS > HiPwrUpperTh) || | 55 | if ((priv->UndecoratedSmoothedSS > HiPwrUpperTh) || |
70 | (priv->bCurCCKPkt && (priv->CurCCKRSSI > RSSIHiPwrUpperTh))) { | 56 | (priv->bCurCCKPkt && (priv->CurCCKRSSI > RSSIHiPwrUpperTh))) { |
71 | /* Stevenl suggested that degrade 8dbm in high power sate. 2007-12-04 Isaiah */ | 57 | /* Stevenl suggested that degrade 8dbm in high power sate. 2007-12-04 Isaiah */ |
72 | 58 | ||
73 | /* printk("=====>DoTxHighPower() - High Power - UndecoratedSmoothedSS:%d, HiPwrUpperTh = %d \n", priv->UndecoratedSmoothedSS, HiPwrUpperTh ); */ | ||
74 | priv->bToUpdateTxPwr = true; | 59 | priv->bToUpdateTxPwr = true; |
75 | u1bTmp= read_nic_byte(dev, CCK_TXAGC); | 60 | u1bTmp= read_nic_byte(dev, CCK_TXAGC); |
76 | 61 | ||
@@ -86,27 +71,20 @@ void DoTxHighPower(struct net_device *dev) | |||
86 | 71 | ||
87 | } else if ((priv->UndecoratedSmoothedSS < HiPwrLowerTh) && | 72 | } else if ((priv->UndecoratedSmoothedSS < HiPwrLowerTh) && |
88 | (!priv->bCurCCKPkt || priv->CurCCKRSSI < RSSIHiPwrLowerTh)) { | 73 | (!priv->bCurCCKPkt || priv->CurCCKRSSI < RSSIHiPwrLowerTh)) { |
89 | /* printk("DoTxHighPower() - lower Power - UndecoratedSmoothedSS:%d, HiPwrUpperTh = %d \n", priv->UndecoratedSmoothedSS, HiPwrLowerTh ); */ | ||
90 | if (priv->bToUpdateTxPwr) { | 74 | if (priv->bToUpdateTxPwr) { |
91 | priv->bToUpdateTxPwr = false; | 75 | priv->bToUpdateTxPwr = false; |
92 | /* SD3 required. */ | 76 | /* SD3 required. */ |
93 | u1bTmp= read_nic_byte(dev, CCK_TXAGC); | 77 | u1bTmp= read_nic_byte(dev, CCK_TXAGC); |
94 | if (u1bTmp < CckTxPwrIdx) { | 78 | if (u1bTmp < CckTxPwrIdx) { |
95 | /* u1bTmp = ((u1bTmp+16) > 35) ? 35: (u1bTmp+16); 8dbm */ | ||
96 | /* write_nic_byte(dev, CCK_TXAGC, u1bTmp); */ | ||
97 | write_nic_byte(dev, CCK_TXAGC, CckTxPwrIdx); | 79 | write_nic_byte(dev, CCK_TXAGC, CckTxPwrIdx); |
98 | } | 80 | } |
99 | 81 | ||
100 | u1bTmp= read_nic_byte(dev, OFDM_TXAGC); | 82 | u1bTmp= read_nic_byte(dev, OFDM_TXAGC); |
101 | if (u1bTmp < OfdmTxPwrIdx) { | 83 | if (u1bTmp < OfdmTxPwrIdx) { |
102 | /* u1bTmp = ((u1bTmp+16) > 35) ? 35: (u1bTmp+16); 8dbm */ | ||
103 | /* write_nic_byte(dev, OFDM_TXAGC, u1bTmp); */ | ||
104 | write_nic_byte(dev, OFDM_TXAGC, OfdmTxPwrIdx); | 84 | write_nic_byte(dev, OFDM_TXAGC, OfdmTxPwrIdx); |
105 | } | 85 | } |
106 | } | 86 | } |
107 | } | 87 | } |
108 | |||
109 | /* printk("<---- DoTxHighPower()\n"); */ | ||
110 | } | 88 | } |
111 | 89 | ||
112 | 90 | ||
@@ -118,25 +96,16 @@ void DoTxHighPower(struct net_device *dev) | |||
118 | */ | 96 | */ |
119 | void rtl8180_tx_pw_wq(struct work_struct *work) | 97 | void rtl8180_tx_pw_wq(struct work_struct *work) |
120 | { | 98 | { |
121 | /* struct r8180_priv *priv = container_of(work, struct r8180_priv, watch_dog_wq); | ||
122 | * struct ieee80211_device * ieee = (struct ieee80211_device*) | ||
123 | * container_of(work, struct ieee80211_device, watch_dog_wq); | ||
124 | */ | ||
125 | struct delayed_work *dwork = to_delayed_work(work); | 99 | struct delayed_work *dwork = to_delayed_work(work); |
126 | struct ieee80211_device *ieee = container_of(dwork,struct ieee80211_device,tx_pw_wq); | 100 | struct ieee80211_device *ieee = container_of(dwork,struct ieee80211_device,tx_pw_wq); |
127 | struct net_device *dev = ieee->dev; | 101 | struct net_device *dev = ieee->dev; |
128 | 102 | ||
129 | /* printk("----> UpdateTxPowerWorkItemCallback()\n"); */ | ||
130 | |||
131 | DoTxHighPower(dev); | 103 | DoTxHighPower(dev); |
132 | |||
133 | /* printk("<---- UpdateTxPowerWorkItemCallback()\n"); */ | ||
134 | } | 104 | } |
135 | 105 | ||
136 | 106 | ||
137 | /* | 107 | /* |
138 | * Description: | 108 | * Return TRUE if we shall perform DIG Mecahnism, FALSE otherwise. |
139 | * Return TRUE if we shall perform DIG Mecahnism, FALSE otherwise. | ||
140 | */ | 109 | */ |
141 | bool CheckDig(struct net_device *dev) | 110 | bool CheckDig(struct net_device *dev) |
142 | { | 111 | { |
@@ -149,14 +118,12 @@ bool CheckDig(struct net_device *dev) | |||
149 | if (ieee->state != IEEE80211_LINKED) | 118 | if (ieee->state != IEEE80211_LINKED) |
150 | return false; | 119 | return false; |
151 | 120 | ||
152 | /* if(priv->CurrentOperaRate < 36) // Schedule Dig under all OFDM rates. By Bruce, 2007-06-01. */ | ||
153 | if ((priv->ieee80211->rate / 5) < 36) /* Schedule Dig under all OFDM rates. By Bruce, 2007-06-01. */ | 121 | if ((priv->ieee80211->rate / 5) < 36) /* Schedule Dig under all OFDM rates. By Bruce, 2007-06-01. */ |
154 | return false; | 122 | return false; |
155 | return true; | 123 | return true; |
156 | } | 124 | } |
157 | /* | 125 | /* |
158 | * Description: | 126 | * Implementation of DIG for Zebra and Zebra2. |
159 | * Implementation of DIG for Zebra and Zebra2. | ||
160 | */ | 127 | */ |
161 | void DIG_Zebra(struct net_device *dev) | 128 | void DIG_Zebra(struct net_device *dev) |
162 | { | 129 | { |
@@ -167,16 +134,11 @@ void DIG_Zebra(struct net_device *dev) | |||
167 | int LowestGainStage = 4; /* The capable lowest stage of performing dig workitem. */ | 134 | int LowestGainStage = 4; /* The capable lowest stage of performing dig workitem. */ |
168 | u32 AwakePeriodIn2Sec = 0; | 135 | u32 AwakePeriodIn2Sec = 0; |
169 | 136 | ||
170 | /* printk("---------> DIG_Zebra()\n"); */ | ||
171 | |||
172 | CCKFalseAlarm = (u16)(priv->FalseAlarmRegValue & 0x0000ffff); | 137 | CCKFalseAlarm = (u16)(priv->FalseAlarmRegValue & 0x0000ffff); |
173 | OFDMFalseAlarm = (u16)((priv->FalseAlarmRegValue >> 16) & 0x0000ffff); | 138 | OFDMFalseAlarm = (u16)((priv->FalseAlarmRegValue >> 16) & 0x0000ffff); |
174 | OfdmFA1 = 0x15; | 139 | OfdmFA1 = 0x15; |
175 | OfdmFA2 = ((u16)(priv->RegDigOfdmFaUpTh)) << 8; | 140 | OfdmFA2 = ((u16)(priv->RegDigOfdmFaUpTh)) << 8; |
176 | 141 | ||
177 | /* printk("DIG**********CCK False Alarm: %#X \n",CCKFalseAlarm); */ | ||
178 | /* printk("DIG**********OFDM False Alarm: %#X \n",OFDMFalseAlarm); */ | ||
179 | |||
180 | /* The number of initial gain steps is different, by Bruce, 2007-04-13. */ | 142 | /* The number of initial gain steps is different, by Bruce, 2007-04-13. */ |
181 | if (priv->InitialGain == 0) { /* autoDIG */ | 143 | if (priv->InitialGain == 0) { /* autoDIG */ |
182 | /* Advised from SD3 DZ */ | 144 | /* Advised from SD3 DZ */ |
@@ -187,17 +149,13 @@ void DIG_Zebra(struct net_device *dev) | |||
187 | 149 | ||
188 | #if 1 /* lzm reserved 080826 */ | 150 | #if 1 /* lzm reserved 080826 */ |
189 | AwakePeriodIn2Sec = (2000 - priv->DozePeriodInPast2Sec); | 151 | AwakePeriodIn2Sec = (2000 - priv->DozePeriodInPast2Sec); |
190 | /* printk("&&& DozePeriod=%d AwakePeriod=%d\n", priv->DozePeriodInPast2Sec, AwakePeriodIn2Sec); */ | ||
191 | priv ->DozePeriodInPast2Sec = 0; | 152 | priv ->DozePeriodInPast2Sec = 0; |
192 | 153 | ||
193 | if (AwakePeriodIn2Sec) { | 154 | if (AwakePeriodIn2Sec) { |
194 | /* RT_TRACE(COMP_DIG, DBG_TRACE, ("DIG: AwakePeriodIn2Sec(%d) - FATh(0x%X , 0x%X) ->",AwakePeriodIn2Sec, OfdmFA1, OfdmFA2)); */ | ||
195 | /* adjuest DIG threshold. */ | ||
196 | OfdmFA1 = (u16)((OfdmFA1 * AwakePeriodIn2Sec) / 2000) ; | 155 | OfdmFA1 = (u16)((OfdmFA1 * AwakePeriodIn2Sec) / 2000) ; |
197 | OfdmFA2 = (u16)((OfdmFA2 * AwakePeriodIn2Sec) / 2000) ; | 156 | OfdmFA2 = (u16)((OfdmFA2 * AwakePeriodIn2Sec) / 2000) ; |
198 | /* RT_TRACE(COMP_DIG, DBG_TRACE, ("( 0x%X , 0x%X)\n", OfdmFA1, OfdmFA2)); */ | ||
199 | } else { | 157 | } else { |
200 | ;/* RT_TRACE(COMP_DIG, DBG_WARNING, ("ERROR!! AwakePeriodIn2Sec should not be ZERO!!\n")); */ | 158 | ; |
201 | } | 159 | } |
202 | #endif | 160 | #endif |
203 | 161 | ||
@@ -213,8 +171,6 @@ void DIG_Zebra(struct net_device *dev) | |||
213 | priv->InitialGainBackUp = priv->InitialGain; | 171 | priv->InitialGainBackUp = priv->InitialGain; |
214 | 172 | ||
215 | priv->InitialGain = (priv->InitialGain + 1); | 173 | priv->InitialGain = (priv->InitialGain + 1); |
216 | /* printk("DIG**********OFDM False Alarm: %#X, OfdmFA1: %#X, OfdmFA2: %#X\n", OFDMFalseAlarm, OfdmFA1, OfdmFA2); */ | ||
217 | /* printk("DIG+++++++ fallback OFDM:%d \n", priv->InitialGain); */ | ||
218 | UpdateInitialGain(dev); | 174 | UpdateInitialGain(dev); |
219 | } | 175 | } |
220 | priv->DIG_NumberFallbackVote = 0; | 176 | priv->DIG_NumberFallbackVote = 0; |
@@ -235,22 +191,16 @@ void DIG_Zebra(struct net_device *dev) | |||
235 | priv->InitialGainBackUp = priv->InitialGain; | 191 | priv->InitialGainBackUp = priv->InitialGain; |
236 | 192 | ||
237 | priv->InitialGain = (priv->InitialGain - 1); | 193 | priv->InitialGain = (priv->InitialGain - 1); |
238 | /* printk("DIG**********OFDM False Alarm: %#X, OfdmFA1: %#X, OfdmFA2: %#X\n", OFDMFalseAlarm, OfdmFA1, OfdmFA2); */ | ||
239 | /* printk("DIG--------- Upgrade OFDM:%d \n", priv->InitialGain); */ | ||
240 | UpdateInitialGain(dev); | 194 | UpdateInitialGain(dev); |
241 | } | 195 | } |
242 | priv->DIG_NumberFallbackVote = 0; | 196 | priv->DIG_NumberFallbackVote = 0; |
243 | priv->DIG_NumberUpgradeVote = 0; | 197 | priv->DIG_NumberUpgradeVote = 0; |
244 | } | 198 | } |
245 | } | 199 | } |
246 | |||
247 | /* printk("DIG+++++++ OFDM:%d\n", priv->InitialGain); */ | ||
248 | /* printk("<--------- DIG_Zebra()\n"); */ | ||
249 | } | 200 | } |
250 | 201 | ||
251 | /* | 202 | /* |
252 | * Description: | 203 | * Dispatch DIG implementation according to RF. |
253 | * Dispatch DIG implementation according to RF. | ||
254 | */ | 204 | */ |
255 | void DynamicInitGain(struct net_device *dev) | 205 | void DynamicInitGain(struct net_device *dev) |
256 | { | 206 | { |
@@ -302,10 +252,8 @@ int IncludedInSupportedRates(struct r8180_priv *priv, u8 TxRate) | |||
302 | } | 252 | } |
303 | 253 | ||
304 | /* | 254 | /* |
305 | * Description: | 255 | * Get the Tx rate one degree up form the input rate in the supported rates. |
306 | * Get the Tx rate one degree up form the input rate in the supported rates. | 256 | * Return the upgrade rate if it is successed, otherwise return the input rate. |
307 | * Return the upgrade rate if it is successed, otherwise return the input rate. | ||
308 | * By Bruce, 2007-06-05. | ||
309 | */ | 257 | */ |
310 | u8 GetUpgradeTxRate(struct net_device *dev, u8 rate) | 258 | u8 GetUpgradeTxRate(struct net_device *dev, u8 rate) |
311 | { | 259 | { |
@@ -356,19 +304,15 @@ u8 GetUpgradeTxRate(struct net_device *dev, u8 rate) | |||
356 | } | 304 | } |
357 | /* Check if the rate is valid. */ | 305 | /* Check if the rate is valid. */ |
358 | if (IncludedInSupportedRates(priv, UpRate)) { | 306 | if (IncludedInSupportedRates(priv, UpRate)) { |
359 | /* printk("GetUpgradeTxRate(): GetUpgrade Tx rate(%d) from %d !\n", UpRate, priv->CurrentOperaRate); */ | ||
360 | return UpRate; | 307 | return UpRate; |
361 | } else { | 308 | } else { |
362 | /* printk("GetUpgradeTxRate(): Tx rate (%d) is not in supported rates\n", UpRate); */ | ||
363 | return rate; | 309 | return rate; |
364 | } | 310 | } |
365 | return rate; | 311 | return rate; |
366 | } | 312 | } |
367 | /* | 313 | /* |
368 | * Description: | 314 | * Get the Tx rate one degree down form the input rate in the supported rates. |
369 | * Get the Tx rate one degree down form the input rate in the supported rates. | 315 | * Return the degrade rate if it is successed, otherwise return the input rate. |
370 | * Return the degrade rate if it is successed, otherwise return the input rate. | ||
371 | * By Bruce, 2007-06-05. | ||
372 | */ | 316 | */ |
373 | 317 | ||
374 | u8 GetDegradeTxRate(struct net_device *dev, u8 rate) | 318 | u8 GetDegradeTxRate(struct net_device *dev, u8 rate) |
@@ -420,10 +364,8 @@ u8 GetDegradeTxRate(struct net_device *dev, u8 rate) | |||
420 | } | 364 | } |
421 | /* Check if the rate is valid. */ | 365 | /* Check if the rate is valid. */ |
422 | if (IncludedInSupportedRates(priv, DownRate)) { | 366 | if (IncludedInSupportedRates(priv, DownRate)) { |
423 | /* printk("GetDegradeTxRate(): GetDegrade Tx rate(%d) from %d!\n", DownRate, priv->CurrentOperaRate); */ | ||
424 | return DownRate; | 367 | return DownRate; |
425 | } else { | 368 | } else { |
426 | /* printk("GetDegradeTxRate(): Tx rate (%d) is not in supported rates\n", DownRate); */ | ||
427 | return rate; | 369 | return rate; |
428 | } | 370 | } |
429 | return rate; | 371 | return rate; |
@@ -431,7 +373,6 @@ u8 GetDegradeTxRate(struct net_device *dev, u8 rate) | |||
431 | /* | 373 | /* |
432 | * Helper function to determine if specified data rate is | 374 | * Helper function to determine if specified data rate is |
433 | * CCK rate. | 375 | * CCK rate. |
434 | * 2005.01.25, by rcnjko. | ||
435 | */ | 376 | */ |
436 | 377 | ||
437 | bool MgntIsCckRate(u16 rate) | 378 | bool MgntIsCckRate(u16 rate) |
@@ -447,24 +388,18 @@ bool MgntIsCckRate(u16 rate) | |||
447 | /* | 388 | /* |
448 | * Description: | 389 | * Description: |
449 | * Tx Power tracking mechanism routine on 87SE. | 390 | * Tx Power tracking mechanism routine on 87SE. |
450 | * Created by Roger, 2007.12.11. | ||
451 | */ | 391 | */ |
452 | void TxPwrTracking87SE(struct net_device *dev) | 392 | void TxPwrTracking87SE(struct net_device *dev) |
453 | { | 393 | { |
454 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); | 394 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); |
455 | u8 tmpu1Byte, CurrentThermal, Idx; | 395 | u8 tmpu1Byte, CurrentThermal, Idx; |
456 | char CckTxPwrIdx, OfdmTxPwrIdx; | 396 | char CckTxPwrIdx, OfdmTxPwrIdx; |
457 | /* u32 u4bRfReg; */ | ||
458 | 397 | ||
459 | tmpu1Byte = read_nic_byte(dev, EN_LPF_CAL); | 398 | tmpu1Byte = read_nic_byte(dev, EN_LPF_CAL); |
460 | CurrentThermal = (tmpu1Byte & 0xf0) >> 4; /*[ 7:4]: thermal meter indication. */ | 399 | CurrentThermal = (tmpu1Byte & 0xf0) >> 4; /*[ 7:4]: thermal meter indication. */ |
461 | CurrentThermal = (CurrentThermal > 0x0c) ? 0x0c:CurrentThermal;/* lzm add 080826 */ | 400 | CurrentThermal = (CurrentThermal > 0x0c) ? 0x0c:CurrentThermal;/* lzm add 080826 */ |
462 | 401 | ||
463 | /* printk("TxPwrTracking87SE(): CurrentThermal(%d)\n", CurrentThermal); */ | ||
464 | |||
465 | if (CurrentThermal != priv->ThermalMeter) { | 402 | if (CurrentThermal != priv->ThermalMeter) { |
466 | /* printk("TxPwrTracking87SE(): Thermal meter changed!!!\n"); */ | ||
467 | |||
468 | /* Update Tx Power level on each channel. */ | 403 | /* Update Tx Power level on each channel. */ |
469 | for (Idx = 1; Idx < 15; Idx++) { | 404 | for (Idx = 1; Idx < 15; Idx++) { |
470 | CckTxPwrIdx = priv->chtxpwr[Idx]; | 405 | CckTxPwrIdx = priv->chtxpwr[Idx]; |
@@ -506,7 +441,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
506 | unsigned long CurrTxokCnt; | 441 | unsigned long CurrTxokCnt; |
507 | u16 CurrRetryCnt; | 442 | u16 CurrRetryCnt; |
508 | u16 CurrRetryRate; | 443 | u16 CurrRetryRate; |
509 | /*u16 i,idx; */ | ||
510 | unsigned long CurrRxokCnt; | 444 | unsigned long CurrRxokCnt; |
511 | bool bTryUp = false; | 445 | bool bTryUp = false; |
512 | bool bTryDown = false; | 446 | bool bTryDown = false; |
@@ -528,7 +462,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
528 | TxThroughput = (u32)(priv->NumTxOkBytesTotal - priv->LastTxOKBytes); | 462 | TxThroughput = (u32)(priv->NumTxOkBytesTotal - priv->LastTxOKBytes); |
529 | priv->LastTxOKBytes = priv->NumTxOkBytesTotal; | 463 | priv->LastTxOKBytes = priv->NumTxOkBytesTotal; |
530 | priv->CurrentOperaRate = priv->ieee80211->rate / 5; | 464 | priv->CurrentOperaRate = priv->ieee80211->rate / 5; |
531 | /* printk("priv->CurrentOperaRate is %d\n",priv->CurrentOperaRate); */ | ||
532 | /* 2 Compute retry ratio. */ | 465 | /* 2 Compute retry ratio. */ |
533 | if (CurrTxokCnt > 0) { | 466 | if (CurrTxokCnt > 0) { |
534 | CurrRetryRate = (u16)(CurrRetryCnt * 100 / CurrTxokCnt); | 467 | CurrRetryRate = (u16)(CurrRetryCnt * 100 / CurrTxokCnt); |
@@ -537,20 +470,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
537 | CurrRetryRate = (u16)(CurrRetryCnt * 100 / 1); | 470 | CurrRetryRate = (u16)(CurrRetryCnt * 100 / 1); |
538 | } | 471 | } |
539 | 472 | ||
540 | |||
541 | /* | ||
542 | * Added by Roger, 2007.01.02. | ||
543 | * For debug information. | ||
544 | * | ||
545 | * printk("\n(1) pHalData->LastRetryRate: %d \n",priv->LastRetryRate); | ||
546 | * printk("(2) RetryCnt = %d \n", CurrRetryCnt); | ||
547 | * printk("(3) TxokCnt = %d \n", CurrTxokCnt); | ||
548 | * printk("(4) CurrRetryRate = %d \n", CurrRetryRate); | ||
549 | * printk("(5) CurrSignalStrength = %d \n",CurrSignalStrength); | ||
550 | * printk("(6) TxThroughput is %d\n",TxThroughput); | ||
551 | * printk("priv->NumTxOkBytesTotal is %d\n",priv->NumTxOkBytesTotal); | ||
552 | */ | ||
553 | |||
554 | priv->LastRetryCnt = priv->CurrRetryCnt; | 473 | priv->LastRetryCnt = priv->CurrRetryCnt; |
555 | priv->LastTxokCnt = priv->NumTxOkTotal; | 474 | priv->LastTxokCnt = priv->NumTxOkTotal; |
556 | priv->LastRxokCnt = priv->ieee80211->NumRxOkTotal; | 475 | priv->LastRxokCnt = priv->ieee80211->NumRxOkTotal; |
@@ -563,7 +482,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
563 | */ | 482 | */ |
564 | priv->TryupingCountNoData++; | 483 | priv->TryupingCountNoData++; |
565 | 484 | ||
566 | /* printk("No Tx packets, TryupingCountNoData(%d)\n", priv->TryupingCountNoData); */ | ||
567 | /* [TRC Dell Lab] Extend raised period from 4.5sec to 9sec, Isaiah 2008-02-15 18:00 */ | 485 | /* [TRC Dell Lab] Extend raised period from 4.5sec to 9sec, Isaiah 2008-02-15 18:00 */ |
568 | if (priv->TryupingCountNoData > 30) { | 486 | if (priv->TryupingCountNoData > 30) { |
569 | priv->TryupingCountNoData = 0; | 487 | priv->TryupingCountNoData = 0; |
@@ -582,9 +500,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
582 | /* | 500 | /* |
583 | * For Netgear case, I comment out the following signal strength estimation, | 501 | * For Netgear case, I comment out the following signal strength estimation, |
584 | * which can results in lower rate to transmit when sample is NOT enough (e.g. PING request). | 502 | * which can results in lower rate to transmit when sample is NOT enough (e.g. PING request). |
585 | * 2007.04.09, by Roger. | ||
586 | * | ||
587 | * | ||
588 | * | 503 | * |
589 | * Restructure rate adaptive as the following main stages: | 504 | * Restructure rate adaptive as the following main stages: |
590 | * (1) Add retry threshold in 54M upgrading condition with signal strength. | 505 | * (1) Add retry threshold in 54M upgrading condition with signal strength. |
@@ -594,7 +509,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
594 | * situation, Initial Gain Update is upon on DIG mechanism except CCK rate. | 509 | * situation, Initial Gain Update is upon on DIG mechanism except CCK rate. |
595 | * (4) Add the mehanism of trying to upgrade tx rate. | 510 | * (4) Add the mehanism of trying to upgrade tx rate. |
596 | * (5) Record the information of upping tx rate to avoid trying upping tx rate constantly. | 511 | * (5) Record the information of upping tx rate to avoid trying upping tx rate constantly. |
597 | * By Bruce, 2007-06-05. | ||
598 | * | 512 | * |
599 | */ | 513 | */ |
600 | 514 | ||
@@ -623,9 +537,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
623 | if ((CurrRetryRate > 25) && TxThroughput < priv->LastTxThroughput) { | 537 | if ((CurrRetryRate > 25) && TxThroughput < priv->LastTxThroughput) { |
624 | /*Not necessary raising rate, fall back rate. */ | 538 | /*Not necessary raising rate, fall back rate. */ |
625 | bTryDown = true; | 539 | bTryDown = true; |
626 | /* printk("case1-1: Not necessary raising rate, fall back rate....\n"); */ | ||
627 | /* printk("case1-1: pMgntInfo->CurrentOperaRate =%d, TxThroughput = %d, LastThroughput = %d\n", */ | ||
628 | /* priv->CurrentOperaRate, TxThroughput, priv->LastTxThroughput); */ | ||
629 | } else { | 540 | } else { |
630 | priv->bTryuping = false; | 541 | priv->bTryuping = false; |
631 | } | 542 | } |
@@ -633,7 +544,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
633 | /* | 544 | /* |
634 | * 2For High Power | 545 | * 2For High Power |
635 | * | 546 | * |
636 | * Added by Roger, 2007.04.09. | ||
637 | * Return to highest data rate, if signal strength is good enough. | 547 | * Return to highest data rate, if signal strength is good enough. |
638 | * SignalStrength threshold(-50dbm) is for RTL8186. | 548 | * SignalStrength threshold(-50dbm) is for RTL8186. |
639 | * Revise SignalStrength threshold to -51dbm. | 549 | * Revise SignalStrength threshold to -51dbm. |
@@ -644,7 +554,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
644 | /* Upgrade Tx Rate directly. */ | 554 | /* Upgrade Tx Rate directly. */ |
645 | priv->TryupingCount += TryUpTh; | 555 | priv->TryupingCount += TryUpTh; |
646 | } | 556 | } |
647 | /* printk("case2: StaRateAdaptive87SE: Power(%d) is high enough!!. \n", CurrSignalStrength); */ | ||
648 | 557 | ||
649 | } else if (CurrTxokCnt > 9 && CurrTxokCnt < 100 && CurrRetryRate >= 600) { | 558 | } else if (CurrTxokCnt > 9 && CurrTxokCnt < 100 && CurrRetryRate >= 600) { |
650 | /* | 559 | /* |
@@ -655,152 +564,106 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
655 | bTryDown = true; | 564 | bTryDown = true; |
656 | /* Let Rate Mechanism to degrade tx rate directly. */ | 565 | /* Let Rate Mechanism to degrade tx rate directly. */ |
657 | priv->TryDownCountLowData += TryDownTh; | 566 | priv->TryDownCountLowData += TryDownTh; |
658 | /* printk("case3: RA: Tx Retry is serious. Degrade Tx Rate to %d directly...\n", priv->CurrentOperaRate); */ | ||
659 | } else if (priv->CurrentOperaRate == 108) { | 567 | } else if (priv->CurrentOperaRate == 108) { |
660 | /* 2For 54Mbps */ | 568 | /* 2For 54Mbps */ |
661 | /* Air Link */ | 569 | /* Air Link */ |
662 | if ((CurrRetryRate > 26) && (priv->LastRetryRate > 25)) { | 570 | if ((CurrRetryRate > 26) && (priv->LastRetryRate > 25)) { |
663 | /* if ((CurrRetryRate>40)&&(priv->LastRetryRate>39)) */ | ||
664 | /*Down to rate 48Mbps. */ | ||
665 | bTryDown = true; | 571 | bTryDown = true; |
666 | } | 572 | } |
667 | /* Cable Link */ | 573 | /* Cable Link */ |
668 | else if ((CurrRetryRate > 17) && (priv->LastRetryRate > 16) && (CurrSignalStrength > -72)) { | 574 | else if ((CurrRetryRate > 17) && (priv->LastRetryRate > 16) && (CurrSignalStrength > -72)) { |
669 | /* else if ((CurrRetryRate>17)&&(priv->LastRetryRate>16) && (CurrSignalStrength > -72)) */ | ||
670 | /*Down to rate 48Mbps. */ | ||
671 | bTryDown = true; | 575 | bTryDown = true; |
672 | } | 576 | } |
673 | 577 | ||
674 | if (bTryDown && (CurrSignalStrength < -75)) /* cable link */ | 578 | if (bTryDown && (CurrSignalStrength < -75)) /* cable link */ |
675 | priv->TryDownCountLowData += TryDownTh; | 579 | priv->TryDownCountLowData += TryDownTh; |
676 | /*printk("case4---54M \n"); */ | ||
677 | |||
678 | } | 580 | } |
679 | else if (priv->CurrentOperaRate == 96) { | 581 | else if (priv->CurrentOperaRate == 96) { |
680 | /* 2For 48Mbps */ | 582 | /* 2For 48Mbps */ |
681 | /* Air Link */ | 583 | /* Air Link */ |
682 | if (((CurrRetryRate > 48) && (priv->LastRetryRate > 47))) { | 584 | if (((CurrRetryRate > 48) && (priv->LastRetryRate > 47))) { |
683 | /* if ( ((CurrRetryRate>65) && (priv->LastRetryRate>64))) */ | ||
684 | /* Down to rate 36Mbps. */ | ||
685 | bTryDown = true; | 585 | bTryDown = true; |
686 | } else if (((CurrRetryRate > 21) && (priv->LastRetryRate > 20)) && (CurrSignalStrength > -74)) { /* Cable Link */ | 586 | } else if (((CurrRetryRate > 21) && (priv->LastRetryRate > 20)) && (CurrSignalStrength > -74)) { /* Cable Link */ |
687 | /* Down to rate 36Mbps. */ | 587 | /* Down to rate 36Mbps. */ |
688 | bTryDown = true; | 588 | bTryDown = true; |
689 | } else if ((CurrRetryRate > (priv->LastRetryRate + 50)) && (priv->FailTxRateCount > 2)) { | 589 | } else if ((CurrRetryRate > (priv->LastRetryRate + 50)) && (priv->FailTxRateCount > 2)) { |
690 | /* else if((CurrRetryRate> (priv->LastRetryRate + 70 )) && (priv->FailTxRateCount >2 )) */ | ||
691 | bTryDown = true; | 590 | bTryDown = true; |
692 | priv->TryDownCountLowData += TryDownTh; | 591 | priv->TryDownCountLowData += TryDownTh; |
693 | } else if ((CurrRetryRate < 8) && (priv->LastRetryRate < 8)) { /* TO DO: need to consider (RSSI) */ | 592 | } else if ((CurrRetryRate < 8) && (priv->LastRetryRate < 8)) { /* TO DO: need to consider (RSSI) */ |
694 | /* else if ( (CurrRetryRate<28) && (priv->LastRetryRate<8) ) */ | ||
695 | bTryUp = true; | 593 | bTryUp = true; |
696 | } | 594 | } |
697 | 595 | ||
698 | if (bTryDown && (CurrSignalStrength < -75)){ | 596 | if (bTryDown && (CurrSignalStrength < -75)){ |
699 | priv->TryDownCountLowData += TryDownTh; | 597 | priv->TryDownCountLowData += TryDownTh; |
700 | } | 598 | } |
701 | /* printk("case5---48M \n"); */ | ||
702 | } else if (priv->CurrentOperaRate == 72) { | 599 | } else if (priv->CurrentOperaRate == 72) { |
703 | /* 2For 36Mbps */ | 600 | /* 2For 36Mbps */ |
704 | if ((CurrRetryRate > 43) && (priv->LastRetryRate > 41)) { | 601 | if ((CurrRetryRate > 43) && (priv->LastRetryRate > 41)) { |
705 | /* if ( (CurrRetryRate>60) && (priv->LastRetryRate>59)) */ | ||
706 | /* Down to rate 24Mbps. */ | 602 | /* Down to rate 24Mbps. */ |
707 | bTryDown = true; | 603 | bTryDown = true; |
708 | } else if ((CurrRetryRate > (priv->LastRetryRate + 50)) && (priv->FailTxRateCount > 2)) { | 604 | } else if ((CurrRetryRate > (priv->LastRetryRate + 50)) && (priv->FailTxRateCount > 2)) { |
709 | /* else if((CurrRetryRate> (priv->LastRetryRate + 70 )) && (priv->FailTxRateCount >2 )) */ | ||
710 | bTryDown = true; | 605 | bTryDown = true; |
711 | priv->TryDownCountLowData += TryDownTh; | 606 | priv->TryDownCountLowData += TryDownTh; |
712 | } else if ((CurrRetryRate < 15) && (priv->LastRetryRate < 16)) { /* TO DO: need to consider (RSSI) */ | 607 | } else if ((CurrRetryRate < 15) && (priv->LastRetryRate < 16)) { /* TO DO: need to consider (RSSI) */ |
713 | /* else if ( (CurrRetryRate<35) && (priv->LastRetryRate<36)) */ | ||
714 | bTryUp = true; | 608 | bTryUp = true; |
715 | } | 609 | } |
716 | 610 | ||
717 | if (bTryDown && (CurrSignalStrength < -80)) | 611 | if (bTryDown && (CurrSignalStrength < -80)) |
718 | priv->TryDownCountLowData += TryDownTh; | 612 | priv->TryDownCountLowData += TryDownTh; |
719 | 613 | ||
720 | /* printk("case6---36M \n"); */ | ||
721 | } else if (priv->CurrentOperaRate == 48) { | 614 | } else if (priv->CurrentOperaRate == 48) { |
722 | /* 2For 24Mbps */ | 615 | /* 2For 24Mbps */ |
723 | /* Air Link */ | 616 | /* Air Link */ |
724 | if (((CurrRetryRate > 63) && (priv->LastRetryRate > 62))) { | 617 | if (((CurrRetryRate > 63) && (priv->LastRetryRate > 62))) { |
725 | /* if ( ((CurrRetryRate>83) && (priv->LastRetryRate>82))) */ | ||
726 | /* Down to rate 18Mbps. */ | ||
727 | bTryDown = true; | 618 | bTryDown = true; |
728 | } else if (((CurrRetryRate > 33) && (priv->LastRetryRate > 32)) && (CurrSignalStrength > -82)) { /* Cable Link */ | 619 | } else if (((CurrRetryRate > 33) && (priv->LastRetryRate > 32)) && (CurrSignalStrength > -82)) { /* Cable Link */ |
729 | /* else if ( ((CurrRetryRate>50) && (priv->LastRetryRate>49)) && (CurrSignalStrength > -82) ) */ | ||
730 | /* Down to rate 18Mbps. */ | ||
731 | bTryDown = true; | 620 | bTryDown = true; |
732 | } else if ((CurrRetryRate > (priv->LastRetryRate + 50)) && (priv->FailTxRateCount > 2 )) { | 621 | } else if ((CurrRetryRate > (priv->LastRetryRate + 50)) && (priv->FailTxRateCount > 2 )) { |
733 | /* else if((CurrRetryRate> (priv->LastRetryRate + 70 )) && (priv->FailTxRateCount >2 )) */ | ||
734 | bTryDown = true; | 622 | bTryDown = true; |
735 | priv->TryDownCountLowData += TryDownTh; | 623 | priv->TryDownCountLowData += TryDownTh; |
736 | } else if ((CurrRetryRate < 20) && (priv->LastRetryRate < 21)) { /* TO DO: need to consider (RSSI) */ | 624 | } else if ((CurrRetryRate < 20) && (priv->LastRetryRate < 21)) { /* TO DO: need to consider (RSSI) */ |
737 | /* else if ( (CurrRetryRate<40) && (priv->LastRetryRate<41)) */ | ||
738 | bTryUp = true; | 625 | bTryUp = true; |
739 | } | 626 | } |
740 | 627 | ||
741 | if (bTryDown && (CurrSignalStrength < -82)) | 628 | if (bTryDown && (CurrSignalStrength < -82)) |
742 | priv->TryDownCountLowData += TryDownTh; | 629 | priv->TryDownCountLowData += TryDownTh; |
743 | 630 | ||
744 | /* printk("case7---24M \n"); */ | ||
745 | } else if (priv->CurrentOperaRate == 36) { | 631 | } else if (priv->CurrentOperaRate == 36) { |
746 | /* 2For 18Mbps | ||
747 | * original (109, 109) | ||
748 | * [TRC Dell Lab] (90, 91), Isaiah 2008-02-18 23:24 | ||
749 | * (85, 86), Isaiah 2008-02-18 24:00 | ||
750 | */ | ||
751 | if (((CurrRetryRate > 85) && (priv->LastRetryRate > 86))) { | 632 | if (((CurrRetryRate > 85) && (priv->LastRetryRate > 86))) { |
752 | /* if ( ((CurrRetryRate>115) && (priv->LastRetryRate>116))) */ | ||
753 | /* Down to rate 11Mbps. */ | ||
754 | bTryDown = true; | 633 | bTryDown = true; |
755 | |||
756 | /* [TRC Dell Lab] Isaiah 2008-02-18 23:24 */ | ||
757 | } else if ((CurrRetryRate > (priv->LastRetryRate + 50)) && (priv->FailTxRateCount > 2)) { | 634 | } else if ((CurrRetryRate > (priv->LastRetryRate + 50)) && (priv->FailTxRateCount > 2)) { |
758 | /* else if((CurrRetryRate> (priv->LastRetryRate + 70 )) && (priv->FailTxRateCount >2 )) */ | ||
759 | bTryDown = true; | 635 | bTryDown = true; |
760 | priv->TryDownCountLowData += TryDownTh; | 636 | priv->TryDownCountLowData += TryDownTh; |
761 | } else if ((CurrRetryRate < 22) && (priv->LastRetryRate < 23)) { /* TO DO: need to consider (RSSI) */ | 637 | } else if ((CurrRetryRate < 22) && (priv->LastRetryRate < 23)) { /* TO DO: need to consider (RSSI) */ |
762 | /* else if ( (CurrRetryRate<42) && (priv->LastRetryRate<43)) */ | ||
763 | bTryUp = true; | 638 | bTryUp = true; |
764 | } | 639 | } |
765 | /* printk("case8---18M \n"); */ | ||
766 | } else if (priv->CurrentOperaRate == 22) { | 640 | } else if (priv->CurrentOperaRate == 22) { |
767 | /* 2For 11Mbps */ | 641 | /* 2For 11Mbps */ |
768 | if (CurrRetryRate > 95) { | 642 | if (CurrRetryRate > 95) { |
769 | /* if (CurrRetryRate>155) */ | ||
770 | bTryDown = true; | 643 | bTryDown = true; |
771 | } | 644 | } |
772 | else if ((CurrRetryRate < 29) && (priv->LastRetryRate < 30)) { /*TO DO: need to consider (RSSI) */ | 645 | else if ((CurrRetryRate < 29) && (priv->LastRetryRate < 30)) { /*TO DO: need to consider (RSSI) */ |
773 | /* else if ( (CurrRetryRate<49) && (priv->LastRetryRate <50) ) */ | ||
774 | bTryUp = true; | 646 | bTryUp = true; |
775 | } | 647 | } |
776 | /* printk("case9---11M \n"); */ | ||
777 | } else if (priv->CurrentOperaRate == 11) { | 648 | } else if (priv->CurrentOperaRate == 11) { |
778 | /* 2For 5.5Mbps */ | 649 | /* 2For 5.5Mbps */ |
779 | if (CurrRetryRate > 149) { | 650 | if (CurrRetryRate > 149) { |
780 | /* if (CurrRetryRate>189) */ | ||
781 | bTryDown = true; | 651 | bTryDown = true; |
782 | } else if ((CurrRetryRate < 60) && (priv->LastRetryRate < 65)) { | 652 | } else if ((CurrRetryRate < 60) && (priv->LastRetryRate < 65)) { |
783 | /* else if ( (CurrRetryRate<80) && (priv->LastRetryRate < 85)) */ | ||
784 | bTryUp = true; | 653 | bTryUp = true; |
785 | } | 654 | } |
786 | /* printk("case10---5.5M \n"); */ | ||
787 | } else if (priv->CurrentOperaRate == 4) { | 655 | } else if (priv->CurrentOperaRate == 4) { |
788 | /* 2For 2 Mbps */ | 656 | /* 2For 2 Mbps */ |
789 | if ((CurrRetryRate > 99) && (priv->LastRetryRate > 99)) { | 657 | if ((CurrRetryRate > 99) && (priv->LastRetryRate > 99)) { |
790 | /* if((CurrRetryRate>199) && (priv->LastRetryRate>199)) */ | ||
791 | bTryDown = true; | 658 | bTryDown = true; |
792 | } else if ((CurrRetryRate < 65) && (priv->LastRetryRate < 70)) { | 659 | } else if ((CurrRetryRate < 65) && (priv->LastRetryRate < 70)) { |
793 | /* else if ( (CurrRetryRate < 85) && (priv->LastRetryRate < 90)) */ | ||
794 | bTryUp = true; | 660 | bTryUp = true; |
795 | } | 661 | } |
796 | /* printk("case11---2M \n"); */ | ||
797 | } else if (priv->CurrentOperaRate == 2) { | 662 | } else if (priv->CurrentOperaRate == 2) { |
798 | /* 2For 1 Mbps */ | 663 | /* 2For 1 Mbps */ |
799 | if ((CurrRetryRate < 70) && (priv->LastRetryRate < 75)) { | 664 | if ((CurrRetryRate < 70) && (priv->LastRetryRate < 75)) { |
800 | /* if( (CurrRetryRate<90) && (priv->LastRetryRate<95)) */ | ||
801 | bTryUp = true; | 665 | bTryUp = true; |
802 | } | 666 | } |
803 | /* printk("case12---1M \n"); */ | ||
804 | } | 667 | } |
805 | 668 | ||
806 | if (bTryUp && bTryDown) | 669 | if (bTryUp && bTryDown) |
@@ -815,7 +678,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
815 | if (jiffies % (CurrRetryRate + 101) == 0) { | 678 | if (jiffies % (CurrRetryRate + 101) == 0) { |
816 | bTryUp = true; | 679 | bTryUp = true; |
817 | priv->bTryuping = true; | 680 | priv->bTryuping = true; |
818 | /* printk("StaRateAdaptive87SE(): Randomly try upgrading...\n"); */ | ||
819 | } | 681 | } |
820 | } | 682 | } |
821 | 683 | ||
@@ -824,11 +686,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
824 | priv->TryupingCount++; | 686 | priv->TryupingCount++; |
825 | priv->TryDownCountLowData = 0; | 687 | priv->TryDownCountLowData = 0; |
826 | 688 | ||
827 | /* printk("UP: pHalData->TryupingCount = %d\n", priv->TryupingCount); */ | ||
828 | /* printk("UP: TryUpTh(%d)+ (FailTxRateCount(%d))^2 =%d\n", */ | ||
829 | /* TryUpTh, priv->FailTxRateCount, (TryUpTh + priv->FailTxRateCount * priv->FailTxRateCount) ); */ | ||
830 | /* printk("UP: pHalData->bTryuping=%d\n", priv->bTryuping);} */ | ||
831 | |||
832 | /* | 689 | /* |
833 | * Check more times if we need to upgrade indeed. | 690 | * Check more times if we need to upgrade indeed. |
834 | * Because the largest value of pHalData->TryupingCount is 0xFFFF and | 691 | * Because the largest value of pHalData->TryupingCount is 0xFFFF and |
@@ -857,17 +714,13 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
857 | /* (2)If the signal strength is increased, it may be able to upgrade. */ | 714 | /* (2)If the signal strength is increased, it may be able to upgrade. */ |
858 | 715 | ||
859 | priv->CurrentOperaRate = GetUpgradeTxRate(dev, priv->CurrentOperaRate); | 716 | priv->CurrentOperaRate = GetUpgradeTxRate(dev, priv->CurrentOperaRate); |
860 | /* printk("StaRateAdaptive87SE(): Upgrade Tx Rate to %d\n", priv->CurrentOperaRate); */ | ||
861 | 717 | ||
862 | /* [TRC Dell Lab] Bypass 12/9/6, Isaiah 2008-02-18 20:00 */ | ||
863 | if (priv->CurrentOperaRate == 36) { | 718 | if (priv->CurrentOperaRate == 36) { |
864 | priv->bUpdateARFR = true; | 719 | priv->bUpdateARFR = true; |
865 | write_nic_word(dev, ARFR, 0x0F8F); /* bypass 12/9/6 */ | 720 | write_nic_word(dev, ARFR, 0x0F8F); /* bypass 12/9/6 */ |
866 | /* printk("UP: ARFR=0xF8F\n"); */ | ||
867 | } else if(priv->bUpdateARFR) { | 721 | } else if(priv->bUpdateARFR) { |
868 | priv->bUpdateARFR = false; | 722 | priv->bUpdateARFR = false; |
869 | write_nic_word(dev, ARFR, 0x0FFF); /* set 1M ~ 54Mbps. */ | 723 | write_nic_word(dev, ARFR, 0x0FFF); /* set 1M ~ 54Mbps. */ |
870 | /* printk("UP: ARFR=0xFFF\n"); */ | ||
871 | } | 724 | } |
872 | 725 | ||
873 | /* Update Fail Tx rate and count. */ | 726 | /* Update Fail Tx rate and count. */ |
@@ -886,11 +739,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
886 | priv->TryDownCountLowData++; | 739 | priv->TryDownCountLowData++; |
887 | priv->TryupingCount = 0; | 740 | priv->TryupingCount = 0; |
888 | 741 | ||
889 | /* printk("DN: pHalData->TryDownCountLowData = %d\n",priv->TryDownCountLowData); */ | ||
890 | /* printk("DN: TryDownTh =%d\n", TryDownTh); */ | ||
891 | /* printk("DN: pHalData->bTryuping=%d\n", priv->bTryuping); */ | ||
892 | |||
893 | |||
894 | /* Check if Tx rate can be degraded or Test trying upgrading should fallback. */ | 742 | /* Check if Tx rate can be degraded or Test trying upgrading should fallback. */ |
895 | if (priv->TryDownCountLowData > TryDownTh || priv->bTryuping) { | 743 | if (priv->TryDownCountLowData > TryDownTh || priv->bTryuping) { |
896 | priv->TryDownCountLowData = 0; | 744 | priv->TryDownCountLowData = 0; |
@@ -909,21 +757,16 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
909 | priv->CurrentOperaRate = GetDegradeTxRate(dev, priv->CurrentOperaRate); | 757 | priv->CurrentOperaRate = GetDegradeTxRate(dev, priv->CurrentOperaRate); |
910 | 758 | ||
911 | /* Reduce chariot training time at weak signal strength situation. SD3 ED demand. */ | 759 | /* Reduce chariot training time at weak signal strength situation. SD3 ED demand. */ |
912 | /* [TRC Dell Lab] Revise Signal Threshold from -75 to -80 , Isaiah 2008-02-18 20:00 */ | ||
913 | if ((CurrSignalStrength < -80) && (priv->CurrentOperaRate > 72 )) { | 760 | if ((CurrSignalStrength < -80) && (priv->CurrentOperaRate > 72 )) { |
914 | priv->CurrentOperaRate = 72; | 761 | priv->CurrentOperaRate = 72; |
915 | /* printk("DN: weak signal strength (%d), degrade to 36Mbps\n", CurrSignalStrength); */ | ||
916 | } | 762 | } |
917 | 763 | ||
918 | /* [TRC Dell Lab] Bypass 12/9/6, Isaiah 2008-02-18 20:00 */ | ||
919 | if (priv->CurrentOperaRate == 36) { | 764 | if (priv->CurrentOperaRate == 36) { |
920 | priv->bUpdateARFR = true; | 765 | priv->bUpdateARFR = true; |
921 | write_nic_word(dev, ARFR, 0x0F8F); /* bypass 12/9/6 */ | 766 | write_nic_word(dev, ARFR, 0x0F8F); /* bypass 12/9/6 */ |
922 | /* printk("DN: ARFR=0xF8F\n"); */ | ||
923 | } else if (priv->bUpdateARFR) { | 767 | } else if (priv->bUpdateARFR) { |
924 | priv->bUpdateARFR = false; | 768 | priv->bUpdateARFR = false; |
925 | write_nic_word(dev, ARFR, 0x0FFF); /* set 1M ~ 54Mbps. */ | 769 | write_nic_word(dev, ARFR, 0x0FFF); /* set 1M ~ 54Mbps. */ |
926 | /* printk("DN: ARFR=0xFFF\n"); */ | ||
927 | } | 770 | } |
928 | 771 | ||
929 | /* | 772 | /* |
@@ -932,7 +775,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
932 | if (MgntIsCckRate(priv->CurrentOperaRate)) { | 775 | if (MgntIsCckRate(priv->CurrentOperaRate)) { |
933 | bUpdateInitialGain = true; | 776 | bUpdateInitialGain = true; |
934 | } | 777 | } |
935 | /* printk("StaRateAdaptive87SE(): Degrade Tx Rate to %d\n", priv->CurrentOperaRate); */ | ||
936 | } | 778 | } |
937 | } else { | 779 | } else { |
938 | if (priv->TryDownCountLowData > 0) | 780 | if (priv->TryDownCountLowData > 0) |
@@ -952,7 +794,7 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
952 | OfdmTxPwrIdx = priv->chtxpwr_ofdm[priv->ieee80211->current_network.channel]; | 794 | OfdmTxPwrIdx = priv->chtxpwr_ofdm[priv->ieee80211->current_network.channel]; |
953 | CckTxPwrIdx = priv->chtxpwr[priv->ieee80211->current_network.channel]; | 795 | CckTxPwrIdx = priv->chtxpwr[priv->ieee80211->current_network.channel]; |
954 | 796 | ||
955 | /* [TRC Dell Lab] Mac0x9e increase 2 level in 36M~18M situation, Isaiah 2008-02-18 24:00 */ | 797 | /* Mac0x9e increase 2 level in 36M~18M situation */ |
956 | if ((priv->CurrentOperaRate < 96) && (priv->CurrentOperaRate > 22)) { | 798 | if ((priv->CurrentOperaRate < 96) && (priv->CurrentOperaRate > 22)) { |
957 | u1bCck = read_nic_byte(dev, CCK_TXAGC); | 799 | u1bCck = read_nic_byte(dev, CCK_TXAGC); |
958 | u1bOfdm = read_nic_byte(dev, OFDM_TXAGC); | 800 | u1bOfdm = read_nic_byte(dev, OFDM_TXAGC); |
@@ -963,7 +805,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
963 | priv->bEnhanceTxPwr = true; | 805 | priv->bEnhanceTxPwr = true; |
964 | u1bOfdm = ((u1bOfdm + 2) > 35) ? 35: (u1bOfdm + 2); | 806 | u1bOfdm = ((u1bOfdm + 2) > 35) ? 35: (u1bOfdm + 2); |
965 | write_nic_byte(dev, OFDM_TXAGC, u1bOfdm); | 807 | write_nic_byte(dev, OFDM_TXAGC, u1bOfdm); |
966 | /* printk("Enhance OFDM_TXAGC : +++++ u1bOfdm= 0x%x\n", u1bOfdm); */ | ||
967 | } | 808 | } |
968 | } else if (u1bCck < CckTxPwrIdx) { | 809 | } else if (u1bCck < CckTxPwrIdx) { |
969 | /* case 2: enter high power */ | 810 | /* case 2: enter high power */ |
@@ -971,7 +812,6 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
971 | priv->bEnhanceTxPwr = true; | 812 | priv->bEnhanceTxPwr = true; |
972 | u1bOfdm = ((u1bOfdm + 2) > 35) ? 35: (u1bOfdm + 2); | 813 | u1bOfdm = ((u1bOfdm + 2) > 35) ? 35: (u1bOfdm + 2); |
973 | write_nic_byte(dev, OFDM_TXAGC, u1bOfdm); | 814 | write_nic_byte(dev, OFDM_TXAGC, u1bOfdm); |
974 | /* RT_TRACE(COMP_RATE, DBG_TRACE, ("Enhance OFDM_TXAGC(2) : +++++ u1bOfdm= 0x%x\n", u1bOfdm)); */ | ||
975 | } | 815 | } |
976 | } | 816 | } |
977 | } else if (priv->bEnhanceTxPwr) { /* 54/48/11/5.5/2/1 */ | 817 | } else if (priv->bEnhanceTxPwr) { /* 54/48/11/5.5/2/1 */ |
@@ -982,15 +822,12 @@ void StaRateAdaptive87SE(struct net_device *dev) | |||
982 | if (u1bCck == CckTxPwrIdx) { | 822 | if (u1bCck == CckTxPwrIdx) { |
983 | priv->bEnhanceTxPwr = false; | 823 | priv->bEnhanceTxPwr = false; |
984 | write_nic_byte(dev, OFDM_TXAGC, OfdmTxPwrIdx); | 824 | write_nic_byte(dev, OFDM_TXAGC, OfdmTxPwrIdx); |
985 | /*printk("Recover OFDM_TXAGC : ===== u1bOfdm= 0x%x\n", OfdmTxPwrIdx); */ | ||
986 | } | 825 | } |
987 | /* case 2: enter high power */ | 826 | /* case 2: enter high power */ |
988 | else if (u1bCck < CckTxPwrIdx) { | 827 | else if (u1bCck < CckTxPwrIdx) { |
989 | priv->bEnhanceTxPwr = false; | 828 | priv->bEnhanceTxPwr = false; |
990 | u1bOfdm = ((u1bOfdm - 2) > 0) ? (u1bOfdm - 2): 0; | 829 | u1bOfdm = ((u1bOfdm - 2) > 0) ? (u1bOfdm - 2): 0; |
991 | write_nic_byte(dev, OFDM_TXAGC, u1bOfdm); | 830 | write_nic_byte(dev, OFDM_TXAGC, u1bOfdm); |
992 | /* RT_TRACE(COMP_RATE, DBG_TRACE, ("Recover OFDM_TXAGC(2): ===== u1bOfdm= 0x%x\n", u1bOfdm)); */ | ||
993 | |||
994 | } | 831 | } |
995 | } | 832 | } |
996 | 833 | ||
@@ -1039,37 +876,27 @@ void rtl8180_rate_adapter(struct work_struct *work) | |||
1039 | struct delayed_work *dwork = to_delayed_work(work); | 876 | struct delayed_work *dwork = to_delayed_work(work); |
1040 | struct ieee80211_device *ieee = container_of(dwork, struct ieee80211_device, rate_adapter_wq); | 877 | struct ieee80211_device *ieee = container_of(dwork, struct ieee80211_device, rate_adapter_wq); |
1041 | struct net_device *dev = ieee->dev; | 878 | struct net_device *dev = ieee->dev; |
1042 | /* struct r8180_priv *priv = ieee80211_priv(dev); */ | ||
1043 | /* DMESG("---->rtl8180_rate_adapter"); */ | ||
1044 | StaRateAdaptive87SE(dev); | 879 | StaRateAdaptive87SE(dev); |
1045 | /* DMESG("<----rtl8180_rate_adapter"); */ | ||
1046 | } | 880 | } |
1047 | void timer_rate_adaptive(unsigned long data) | 881 | void timer_rate_adaptive(unsigned long data) |
1048 | { | 882 | { |
1049 | struct r8180_priv *priv = ieee80211_priv((struct net_device *)data); | 883 | struct r8180_priv *priv = ieee80211_priv((struct net_device *)data); |
1050 | /* DMESG("---->timer_rate_adaptive()\n"); */ | ||
1051 | if (!priv->up) { | 884 | if (!priv->up) { |
1052 | /* DMESG("<----timer_rate_adaptive():driver is not up!\n"); */ | ||
1053 | return; | 885 | return; |
1054 | } | 886 | } |
1055 | if ((priv->ieee80211->iw_mode != IW_MODE_MASTER) | 887 | if ((priv->ieee80211->iw_mode != IW_MODE_MASTER) |
1056 | && (priv->ieee80211->state == IEEE80211_LINKED) && | 888 | && (priv->ieee80211->state == IEEE80211_LINKED) && |
1057 | (priv->ForcedDataRate == 0)) { | 889 | (priv->ForcedDataRate == 0)) { |
1058 | /* DMESG("timer_rate_adaptive():schedule rate_adapter_wq\n"); */ | ||
1059 | queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->rate_adapter_wq); | 890 | queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->rate_adapter_wq); |
1060 | /* StaRateAdaptive87SE((struct net_device *)data); */ | ||
1061 | } | 891 | } |
1062 | priv->rateadapter_timer.expires = jiffies + MSECS(priv->RateAdaptivePeriod); | 892 | priv->rateadapter_timer.expires = jiffies + MSECS(priv->RateAdaptivePeriod); |
1063 | add_timer(&priv->rateadapter_timer); | 893 | add_timer(&priv->rateadapter_timer); |
1064 | /* DMESG("<----timer_rate_adaptive()\n"); */ | ||
1065 | } | 894 | } |
1066 | /* by amy 080312} */ | 895 | |
1067 | void SwAntennaDiversityRxOk8185(struct net_device *dev, u8 SignalStrength) | 896 | void SwAntennaDiversityRxOk8185(struct net_device *dev, u8 SignalStrength) |
1068 | { | 897 | { |
1069 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); | 898 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); |
1070 | 899 | ||
1071 | /* printk("+SwAntennaDiversityRxOk8185: RxSs: %d\n", SignalStrength); */ | ||
1072 | |||
1073 | priv->AdRxOkCnt++; | 900 | priv->AdRxOkCnt++; |
1074 | 901 | ||
1075 | if (priv->AdRxSignalStrength != -1) { | 902 | if (priv->AdRxSignalStrength != -1) { |
@@ -1077,25 +904,18 @@ void SwAntennaDiversityRxOk8185(struct net_device *dev, u8 SignalStrength) | |||
1077 | } else { /* Initialization case. */ | 904 | } else { /* Initialization case. */ |
1078 | priv->AdRxSignalStrength = SignalStrength; | 905 | priv->AdRxSignalStrength = SignalStrength; |
1079 | } | 906 | } |
1080 | /* {+by amy 080312 */ | 907 | |
1081 | if (priv->LastRxPktAntenna) /* Main antenna. */ | 908 | if (priv->LastRxPktAntenna) /* Main antenna. */ |
1082 | priv->AdMainAntennaRxOkCnt++; | 909 | priv->AdMainAntennaRxOkCnt++; |
1083 | else /* Aux antenna. */ | 910 | else /* Aux antenna. */ |
1084 | priv->AdAuxAntennaRxOkCnt++; | 911 | priv->AdAuxAntennaRxOkCnt++; |
1085 | /* +by amy 080312 */ | ||
1086 | /* printk("-SwAntennaDiversityRxOk8185: AdRxOkCnt: %d AdRxSignalStrength: %d\n", priv->AdRxOkCnt, priv->AdRxSignalStrength); */ | ||
1087 | } | 912 | } |
1088 | /* | 913 | /* Change Antenna Switch. */ |
1089 | * Description: | ||
1090 | * Change Antenna Switch. | ||
1091 | */ | ||
1092 | bool SetAntenna8185(struct net_device *dev, u8 u1bAntennaIndex) | 914 | bool SetAntenna8185(struct net_device *dev, u8 u1bAntennaIndex) |
1093 | { | 915 | { |
1094 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); | 916 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); |
1095 | bool bAntennaSwitched = false; | 917 | bool bAntennaSwitched = false; |
1096 | 918 | ||
1097 | /* printk("+SetAntenna8185(): Antenna is switching to: %d \n", u1bAntennaIndex); */ | ||
1098 | |||
1099 | switch (u1bAntennaIndex) { | 919 | switch (u1bAntennaIndex) { |
1100 | case 0: | 920 | case 0: |
1101 | /* Mac register, main antenna */ | 921 | /* Mac register, main antenna */ |
@@ -1126,14 +946,9 @@ bool SetAntenna8185(struct net_device *dev, u8 u1bAntennaIndex) | |||
1126 | if(bAntennaSwitched) | 946 | if(bAntennaSwitched) |
1127 | priv->CurrAntennaIndex = u1bAntennaIndex; | 947 | priv->CurrAntennaIndex = u1bAntennaIndex; |
1128 | 948 | ||
1129 | /* printk("-SetAntenna8185(): return (%#X)\n", bAntennaSwitched); */ | ||
1130 | |||
1131 | return bAntennaSwitched; | 949 | return bAntennaSwitched; |
1132 | } | 950 | } |
1133 | /* | 951 | /* Toggle Antenna switch. */ |
1134 | * Description: | ||
1135 | * Toggle Antenna switch. | ||
1136 | */ | ||
1137 | bool SwitchAntenna(struct net_device *dev) | 952 | bool SwitchAntenna(struct net_device *dev) |
1138 | { | 953 | { |
1139 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); | 954 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); |
@@ -1142,37 +957,21 @@ bool SwitchAntenna(struct net_device *dev) | |||
1142 | 957 | ||
1143 | if (priv->CurrAntennaIndex == 0) { | 958 | if (priv->CurrAntennaIndex == 0) { |
1144 | bResult = SetAntenna8185(dev, 1); | 959 | bResult = SetAntenna8185(dev, 1); |
1145 | /* | ||
1146 | * by amy 080312 | ||
1147 | * printk("SwitchAntenna(): switching to antenna 1 ......\n"); | ||
1148 | * bResult = SetAntenna8185(dev, 1);//-by amy 080312 | ||
1149 | */ | ||
1150 | } else { | 960 | } else { |
1151 | bResult = SetAntenna8185(dev, 0); | 961 | bResult = SetAntenna8185(dev, 0); |
1152 | /* | ||
1153 | * by amy 080312 | ||
1154 | * printk("SwitchAntenna(): switching to antenna 0 ......\n"); | ||
1155 | * bResult = SetAntenna8185(dev, 0);//-by amy 080312 | ||
1156 | */ | ||
1157 | } | 962 | } |
1158 | 963 | ||
1159 | return bResult; | 964 | return bResult; |
1160 | } | 965 | } |
1161 | /* | 966 | /* |
1162 | * Description: | 967 | * Engine of SW Antenna Diversity mechanism. |
1163 | * Engine of SW Antenna Diversity mechanism. | 968 | * Since 8187 has no Tx part information, |
1164 | * Since 8187 has no Tx part information, | 969 | * this implementation is only dependend on Rx part information. |
1165 | * this implementation is only dependend on Rx part information. | ||
1166 | * | ||
1167 | * 2006.04.17, by rcnjko. | ||
1168 | */ | 970 | */ |
1169 | void SwAntennaDiversity(struct net_device *dev) | 971 | void SwAntennaDiversity(struct net_device *dev) |
1170 | { | 972 | { |
1171 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); | 973 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); |
1172 | bool bSwCheckSS = false; | 974 | bool bSwCheckSS = false; |
1173 | /* printk("+SwAntennaDiversity(): CurrAntennaIndex: %d\n", priv->CurrAntennaIndex); */ | ||
1174 | /* printk("AdTickCount is %d\n",priv->AdTickCount); */ | ||
1175 | /* by amy 080312 */ | ||
1176 | if (bSwCheckSS) { | 975 | if (bSwCheckSS) { |
1177 | priv->AdTickCount++; | 976 | priv->AdTickCount++; |
1178 | 977 | ||
@@ -1181,27 +980,20 @@ void SwAntennaDiversity(struct net_device *dev) | |||
1181 | printk("(2) AdRxSignalStrength: %ld, AdRxSsThreshold: %ld\n", | 980 | printk("(2) AdRxSignalStrength: %ld, AdRxSsThreshold: %ld\n", |
1182 | priv->AdRxSignalStrength, priv->AdRxSsThreshold); | 981 | priv->AdRxSignalStrength, priv->AdRxSsThreshold); |
1183 | } | 982 | } |
1184 | /* priv->AdTickCount++;//-by amy 080312 */ | ||
1185 | 983 | ||
1186 | /* Case 1. No Link. */ | 984 | /* Case 1. No Link. */ |
1187 | if (priv->ieee80211->state != IEEE80211_LINKED) { | 985 | if (priv->ieee80211->state != IEEE80211_LINKED) { |
1188 | /* printk("SwAntennaDiversity(): Case 1. No Link.\n"); */ | ||
1189 | |||
1190 | priv->bAdSwitchedChecking = false; | 986 | priv->bAdSwitchedChecking = false; |
1191 | /* I switch antenna here to prevent any one of antenna is broken before link established, 2006.04.18, by rcnjko.. */ | 987 | /* I switch antenna here to prevent any one of antenna is broken before link established, 2006.04.18, by rcnjko.. */ |
1192 | SwitchAntenna(dev); | 988 | SwitchAntenna(dev); |
1193 | 989 | ||
1194 | /* Case 2. Linked but no packet receive.d */ | 990 | /* Case 2. Linked but no packet receive.d */ |
1195 | } else if (priv->AdRxOkCnt == 0) { | 991 | } else if (priv->AdRxOkCnt == 0) { |
1196 | /* printk("SwAntennaDiversity(): Case 2. Linked but no packet received.\n"); */ | ||
1197 | |||
1198 | priv->bAdSwitchedChecking = false; | 992 | priv->bAdSwitchedChecking = false; |
1199 | SwitchAntenna(dev); | 993 | SwitchAntenna(dev); |
1200 | 994 | ||
1201 | /* Case 3. Evaluate last antenna switch action and undo it if necessary. */ | 995 | /* Case 3. Evaluate last antenna switch action and undo it if necessary. */ |
1202 | } else if (priv->bAdSwitchedChecking == true) { | 996 | } else if (priv->bAdSwitchedChecking == true) { |
1203 | /* printk("SwAntennaDiversity(): Case 3. Evaluate last antenna switch action.\n"); */ | ||
1204 | |||
1205 | priv->bAdSwitchedChecking = false; | 997 | priv->bAdSwitchedChecking = false; |
1206 | 998 | ||
1207 | /* Adjust Rx signal strength threshold. */ | 999 | /* Adjust Rx signal strength threshold. */ |
@@ -1211,12 +1003,8 @@ void SwAntennaDiversity(struct net_device *dev) | |||
1211 | priv->AdMaxRxSsThreshold: priv->AdRxSsThreshold; | 1003 | priv->AdMaxRxSsThreshold: priv->AdRxSsThreshold; |
1212 | if(priv->AdRxSignalStrength < priv->AdRxSsBeforeSwitched) { | 1004 | if(priv->AdRxSignalStrength < priv->AdRxSsBeforeSwitched) { |
1213 | /* Rx signal strength is not improved after we swtiched antenna. => Swich back. */ | 1005 | /* Rx signal strength is not improved after we swtiched antenna. => Swich back. */ |
1214 | /* printk("SwAntennaDiversity(): Rx Signal Strength is not improved, CurrRxSs: %d, LastRxSs: %d\n", */ | ||
1215 | /* priv->AdRxSignalStrength, priv->AdRxSsBeforeSwitched); */ | ||
1216 | /* by amy 080312 */ | ||
1217 | /* Increase Antenna Diversity checking period due to bad decision. */ | 1006 | /* Increase Antenna Diversity checking period due to bad decision. */ |
1218 | priv->AdCheckPeriod *= 2; | 1007 | priv->AdCheckPeriod *= 2; |
1219 | /* by amy 080312 */ | ||
1220 | /* Increase Antenna Diversity checking period. */ | 1008 | /* Increase Antenna Diversity checking period. */ |
1221 | if (priv->AdCheckPeriod > priv->AdMaxCheckPeriod) | 1009 | if (priv->AdCheckPeriod > priv->AdMaxCheckPeriod) |
1222 | priv->AdCheckPeriod = priv->AdMaxCheckPeriod; | 1010 | priv->AdCheckPeriod = priv->AdMaxCheckPeriod; |
@@ -1225,21 +1013,15 @@ void SwAntennaDiversity(struct net_device *dev) | |||
1225 | SwitchAntenna(dev); | 1013 | SwitchAntenna(dev); |
1226 | } else { | 1014 | } else { |
1227 | /* Rx Signal Strength is improved. */ | 1015 | /* Rx Signal Strength is improved. */ |
1228 | /* printk("SwAntennaDiversity(): Rx Signal Strength is improved, CurrRxSs: %d, LastRxSs: %d\n", */ | ||
1229 | /* priv->AdRxSignalStrength, priv->AdRxSsBeforeSwitched); */ | ||
1230 | 1016 | ||
1231 | /* Reset Antenna Diversity checking period to its min value. */ | 1017 | /* Reset Antenna Diversity checking period to its min value. */ |
1232 | priv->AdCheckPeriod = priv->AdMinCheckPeriod; | 1018 | priv->AdCheckPeriod = priv->AdMinCheckPeriod; |
1233 | } | 1019 | } |
1234 | 1020 | ||
1235 | /* printk("SwAntennaDiversity(): AdRxSsThreshold: %d, AdCheckPeriod: %d\n", */ | ||
1236 | /* priv->AdRxSsThreshold, priv->AdCheckPeriod); */ | ||
1237 | } | 1021 | } |
1238 | /* Case 4. Evaluate if we shall switch antenna now. */ | 1022 | /* Case 4. Evaluate if we shall switch antenna now. */ |
1239 | /* Cause Table Speed is very fast in TRC Dell Lab, we check it every time. */ | 1023 | /* Cause Table Speed is very fast in TRC Dell Lab, we check it every time. */ |
1240 | else { /* if(priv->AdTickCount >= priv->AdCheckPeriod)//-by amy 080312 */ | 1024 | else { |
1241 | /* printk("SwAntennaDiversity(): Case 4. Evaluate if we shall switch antenna now.\n"); */ | ||
1242 | |||
1243 | priv->AdTickCount = 0; | 1025 | priv->AdTickCount = 0; |
1244 | 1026 | ||
1245 | /* | 1027 | /* |
@@ -1252,16 +1034,11 @@ void SwAntennaDiversity(struct net_device *dev) | |||
1252 | 1034 | ||
1253 | /* | 1035 | /* |
1254 | * Evaluate RxOk count from each antenna if we shall switch default antenna now. | 1036 | * Evaluate RxOk count from each antenna if we shall switch default antenna now. |
1255 | * Added by Roger, 2008.02.21. | ||
1256 | */ | 1037 | */ |
1257 | /* {by amy 080312 */ | ||
1258 | if ((priv->AdMainAntennaRxOkCnt < priv->AdAuxAntennaRxOkCnt) | 1038 | if ((priv->AdMainAntennaRxOkCnt < priv->AdAuxAntennaRxOkCnt) |
1259 | && (priv->CurrAntennaIndex == 0)) { | 1039 | && (priv->CurrAntennaIndex == 0)) { |
1260 | /* We set Main antenna as default but RxOk count was less than Aux ones. */ | 1040 | /* We set Main antenna as default but RxOk count was less than Aux ones. */ |
1261 | 1041 | ||
1262 | /* printk("SwAntennaDiversity(): Main antenna RxOK is poor, AdMainAntennaRxOkCnt: %d, AdAuxAntennaRxOkCnt: %d\n", */ | ||
1263 | /* priv->AdMainAntennaRxOkCnt, priv->AdAuxAntennaRxOkCnt); */ | ||
1264 | |||
1265 | /* Switch to Aux antenna. */ | 1042 | /* Switch to Aux antenna. */ |
1266 | SwitchAntenna(dev); | 1043 | SwitchAntenna(dev); |
1267 | priv->bHWAdSwitched = true; | 1044 | priv->bHWAdSwitched = true; |
@@ -1269,18 +1046,12 @@ void SwAntennaDiversity(struct net_device *dev) | |||
1269 | && (priv->CurrAntennaIndex == 1)) { | 1046 | && (priv->CurrAntennaIndex == 1)) { |
1270 | /* We set Aux antenna as default but RxOk count was less than Main ones. */ | 1047 | /* We set Aux antenna as default but RxOk count was less than Main ones. */ |
1271 | 1048 | ||
1272 | /* printk("SwAntennaDiversity(): Aux antenna RxOK is poor, AdMainAntennaRxOkCnt: %d, AdAuxAntennaRxOkCnt: %d\n", */ | ||
1273 | /* priv->AdMainAntennaRxOkCnt, priv->AdAuxAntennaRxOkCnt); */ | ||
1274 | |||
1275 | /* Switch to Main antenna. */ | 1049 | /* Switch to Main antenna. */ |
1276 | SwitchAntenna(dev); | 1050 | SwitchAntenna(dev); |
1277 | priv->bHWAdSwitched = true; | 1051 | priv->bHWAdSwitched = true; |
1278 | } else { | 1052 | } else { |
1279 | /* Default antenna is better. */ | 1053 | /* Default antenna is better. */ |
1280 | 1054 | ||
1281 | /* printk("SwAntennaDiversity(): Default antenna is better., AdMainAntennaRxOkCnt: %d, AdAuxAntennaRxOkCnt: %d\n", */ | ||
1282 | /* priv->AdMainAntennaRxOkCnt, priv->AdAuxAntennaRxOkCnt); */ | ||
1283 | |||
1284 | /* Still need to check current signal strength. */ | 1055 | /* Still need to check current signal strength. */ |
1285 | priv->bHWAdSwitched = false; | 1056 | priv->bHWAdSwitched = false; |
1286 | } | 1057 | } |
@@ -1296,22 +1067,15 @@ void SwAntennaDiversity(struct net_device *dev) | |||
1296 | * to receive more CCK packets(ex.Beacon) which have stronger SignalStrength. | 1067 | * to receive more CCK packets(ex.Beacon) which have stronger SignalStrength. |
1297 | */ | 1068 | */ |
1298 | if ((!priv->bHWAdSwitched) && (bSwCheckSS)) { | 1069 | if ((!priv->bHWAdSwitched) && (bSwCheckSS)) { |
1299 | /* by amy 080312} */ | ||
1300 | /* Evaluate Rx signal strength if we shall switch antenna now. */ | 1070 | /* Evaluate Rx signal strength if we shall switch antenna now. */ |
1301 | if (priv->AdRxSignalStrength < priv->AdRxSsThreshold) { | 1071 | if (priv->AdRxSignalStrength < priv->AdRxSsThreshold) { |
1302 | /* Rx signal strength is weak => Switch Antenna. */ | 1072 | /* Rx signal strength is weak => Switch Antenna. */ |
1303 | /* printk("SwAntennaDiversity(): Rx Signal Strength is weak, CurrRxSs: %d, RxSsThreshold: %d\n", */ | ||
1304 | /* priv->AdRxSignalStrength, priv->AdRxSsThreshold); */ | ||
1305 | |||
1306 | priv->AdRxSsBeforeSwitched = priv->AdRxSignalStrength; | 1073 | priv->AdRxSsBeforeSwitched = priv->AdRxSignalStrength; |
1307 | priv->bAdSwitchedChecking = true; | 1074 | priv->bAdSwitchedChecking = true; |
1308 | 1075 | ||
1309 | SwitchAntenna(dev); | 1076 | SwitchAntenna(dev); |
1310 | } else { | 1077 | } else { |
1311 | /* Rx signal strength is OK. */ | 1078 | /* Rx signal strength is OK. */ |
1312 | /* printk("SwAntennaDiversity(): Rx Signal Strength is OK, CurrRxSs: %d, RxSsThreshold: %d\n", */ | ||
1313 | /* priv->AdRxSignalStrength, priv->AdRxSsThreshold); */ | ||
1314 | |||
1315 | priv->bAdSwitchedChecking = false; | 1079 | priv->bAdSwitchedChecking = false; |
1316 | /* Increase Rx signal strength threshold if necessary. */ | 1080 | /* Increase Rx signal strength threshold if necessary. */ |
1317 | if ((priv->AdRxSignalStrength > (priv->AdRxSsThreshold + 10)) && /* Signal is much stronger than current threshold */ | 1081 | if ((priv->AdRxSignalStrength > (priv->AdRxSsThreshold + 10)) && /* Signal is much stronger than current threshold */ |
@@ -1328,22 +1092,13 @@ void SwAntennaDiversity(struct net_device *dev) | |||
1328 | } | 1092 | } |
1329 | } | 1093 | } |
1330 | } | 1094 | } |
1331 | /* by amy 080312 */ | ||
1332 | /* Reset antenna diversity Rx related statistics. */ | 1095 | /* Reset antenna diversity Rx related statistics. */ |
1333 | priv->AdRxOkCnt = 0; | 1096 | priv->AdRxOkCnt = 0; |
1334 | priv->AdMainAntennaRxOkCnt = 0; | 1097 | priv->AdMainAntennaRxOkCnt = 0; |
1335 | priv->AdAuxAntennaRxOkCnt = 0; | 1098 | priv->AdAuxAntennaRxOkCnt = 0; |
1336 | /* by amy 080312 */ | ||
1337 | |||
1338 | /* priv->AdRxOkCnt = 0;//-by amy 080312 */ | ||
1339 | |||
1340 | /* printk("-SwAntennaDiversity()\n"); */ | ||
1341 | } | 1099 | } |
1342 | 1100 | ||
1343 | /* | 1101 | /* Return TRUE if we shall perform Tx Power Tracking Mecahnism, FALSE otherwise. */ |
1344 | * Description: | ||
1345 | * Return TRUE if we shall perform Tx Power Tracking Mecahnism, FALSE otherwise. | ||
1346 | */ | ||
1347 | bool CheckTxPwrTracking(struct net_device *dev) | 1102 | bool CheckTxPwrTracking(struct net_device *dev) |
1348 | { | 1103 | { |
1349 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); | 1104 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); |
@@ -1351,14 +1106,6 @@ bool CheckTxPwrTracking(struct net_device *dev) | |||
1351 | if (!priv->bTxPowerTrack) | 1106 | if (!priv->bTxPowerTrack) |
1352 | return false; | 1107 | return false; |
1353 | 1108 | ||
1354 | /* lzm reserved 080826 */ | ||
1355 | /* | ||
1356 | * if(priv->bScanInProgress) | ||
1357 | * { | ||
1358 | * return false; | ||
1359 | * } | ||
1360 | */ | ||
1361 | |||
1362 | /* if 87SE is in High Power , don't do Tx Power Tracking. asked by SD3 ED. 2008-08-08 Isaiah */ | 1109 | /* if 87SE is in High Power , don't do Tx Power Tracking. asked by SD3 ED. 2008-08-08 Isaiah */ |
1363 | if (priv->bToUpdateTxPwr) | 1110 | if (priv->bToUpdateTxPwr) |
1364 | return false; | 1111 | return false; |
@@ -1367,29 +1114,19 @@ bool CheckTxPwrTracking(struct net_device *dev) | |||
1367 | } | 1114 | } |
1368 | 1115 | ||
1369 | 1116 | ||
1370 | /* | 1117 | /* Timer callback function of SW Antenna Diversity. */ |
1371 | * Description: | ||
1372 | * Timer callback function of SW Antenna Diversity. | ||
1373 | */ | ||
1374 | void SwAntennaDiversityTimerCallback(struct net_device *dev) | 1118 | void SwAntennaDiversityTimerCallback(struct net_device *dev) |
1375 | { | 1119 | { |
1376 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); | 1120 | struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); |
1377 | RT_RF_POWER_STATE rtState; | 1121 | RT_RF_POWER_STATE rtState; |
1378 | 1122 | ||
1379 | /* printk("+SwAntennaDiversityTimerCallback()\n"); */ | 1123 | /* We do NOT need to switch antenna while RF is off. */ |
1380 | |||
1381 | /* | ||
1382 | * We do NOT need to switch antenna while RF is off. | ||
1383 | * 2007.05.09, added by Roger. | ||
1384 | */ | ||
1385 | rtState = priv->eRFPowerState; | 1124 | rtState = priv->eRFPowerState; |
1386 | do { | 1125 | do { |
1387 | if (rtState == eRfOff) { | 1126 | if (rtState == eRfOff) { |
1388 | /* printk("SwAntennaDiversityTimer - RF is OFF.\n"); */ | ||
1389 | break; | 1127 | break; |
1390 | } else if (rtState == eRfSleep) { | 1128 | } else if (rtState == eRfSleep) { |
1391 | /* Don't access BB/RF under Disable PLL situation. */ | 1129 | /* Don't access BB/RF under Disable PLL situation. */ |
1392 | /* RT_TRACE((COMP_RF|COMP_ANTENNA), DBG_LOUD, ("SwAntennaDiversityTimerCallback(): RF is Sleep => skip it\n")); */ | ||
1393 | break; | 1130 | break; |
1394 | } | 1131 | } |
1395 | SwAntennaDiversity(dev); | 1132 | SwAntennaDiversity(dev); |
@@ -1400,7 +1137,5 @@ void SwAntennaDiversityTimerCallback(struct net_device *dev) | |||
1400 | priv->SwAntennaDiversityTimer.expires = jiffies + MSECS(ANTENNA_DIVERSITY_TIMER_PERIOD); | 1137 | priv->SwAntennaDiversityTimer.expires = jiffies + MSECS(ANTENNA_DIVERSITY_TIMER_PERIOD); |
1401 | add_timer(&priv->SwAntennaDiversityTimer); | 1138 | add_timer(&priv->SwAntennaDiversityTimer); |
1402 | } | 1139 | } |
1403 | |||
1404 | /* printk("-SwAntennaDiversityTimerCallback()\n"); */ | ||
1405 | } | 1140 | } |
1406 | 1141 | ||