add rk3288 pinctrl dts code
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rtl8723bs / hal / OUTSRC / rtl8723b / odm_RTL8723B.c
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
4  *                                        \r
5  * This program is free software; you can redistribute it and/or modify it\r
6  * under the terms of version 2 of the GNU General Public License as\r
7  * published by the Free Software Foundation.\r
8  *\r
9  * This program is distributed in the hope that it will be useful, but WITHOUT\r
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
12  * more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along with\r
15  * this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
17  *\r
18  *\r
19  ******************************************************************************/\r
20 \r
21 //============================================================\r
22 // include files\r
23 //============================================================\r
24 \r
25 #include "../odm_precomp.h"\r
26 \r
27 #if (RTL8723B_SUPPORT == 1)\r
28 \r
29 VOID\r
30 odm8723b_DigForBtHsMode(\r
31         IN              PDM_ODM_T               pDM_Odm\r
32         )\r
33 {\r
34 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
35         //PFALSE_ALARM_STATISTICS       pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;\r
36         pDIG_T                                  pDM_DigTable=&pDM_Odm->DM_DigTable;\r
37         u1Byte                                  digForBtHs=0;\r
38         //BOOLEAN                                       bChkFA=FALSE;\r
39         \r
40         if(pDM_Odm->bBtConnectProcess)\r
41         {\r
42                 if(pDM_Odm->SupportICType&(ODM_RTL8723A))\r
43                         digForBtHs = 0x28;\r
44                 else\r
45                         digForBtHs = 0x22;\r
46         }\r
47         else\r
48         {\r
49                 //\r
50                 // Decide DIG value by BT RSSI.\r
51                 //\r
52                 digForBtHs = pDM_Odm->btHsRssi+4;\r
53 #if 0\r
54                 // check if cur dig and pre dig diff is larger than 10\r
55                 \r
56                 if(digForBtHs > pDM_DigTable->PreIGValue)\r
57                 {\r
58                         if( (digForBtHs - pDM_DigTable->PreIGValue) > 10)\r
59                                 pDM_DigTable->PreIGValue = digForBtHs;\r
60                         else\r
61                                 bChkFA = TRUE;\r
62                 }\r
63                 else\r
64                 {\r
65                         if( (pDM_DigTable->PreIGValue -digForBtHs) > 10)\r
66                                 pDM_DigTable->PreIGValue = digForBtHs;\r
67                         else\r
68                                 bChkFA = TRUE;\r
69                 }\r
70                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DigForBtHsMode() : pFalseAlmCnt->Cnt_all=0x%x\n", pFalseAlmCnt->Cnt_all));\r
71                 //Current IGI update by FA\r
72                 if(bChkFA)\r
73                 {                               \r
74                         if(pFalseAlmCnt->Cnt_all > 0x150)\r
75                                 pDM_DigTable->PreIGValue += 2;\r
76                         else if (pFalseAlmCnt->Cnt_all > 0x100)\r
77                                 pDM_DigTable->PreIGValue += 1;\r
78                         else if(pFalseAlmCnt->Cnt_all < 0x20)\r
79                                 pDM_DigTable->PreIGValue -= 1;\r
80 \r
81                         digForBtHs = pDM_DigTable->PreIGValue;\r
82                 }\r
83         \r
84                 if(digForBtHs > (pDM_Odm->btHsRssi+10))\r
85                         digForBtHs = (pDM_Odm->btHsRssi+10);\r
86                 else\r
87                 {\r
88                         if(pDM_Odm->btHsRssi < 10)\r
89                                 digForBtHs = 0x1c;\r
90                         else\r
91                         {\r
92                                 if(digForBtHs > (pDM_Odm->btHsRssi -10))\r
93                                         digForBtHs = (pDM_Odm->btHsRssi -10);\r
94                         }\r
95                 }\r
96 #endif\r
97                 //DIG Bound\r
98                 if(digForBtHs > 0x3e)\r
99                         digForBtHs = 0x3e;\r
100                 if(digForBtHs < 0x1c)\r
101                         digForBtHs = 0x1c;\r
102 \r
103                 // update Current IGI\r
104                 pDM_DigTable->BT30_CurIGI = digForBtHs;\r
105         }\r
106         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DigForBtHsMode() : set DigValue=0x%x\n", digForBtHs));\r
107         //ODM_Write_DIG(pDM_Odm, digForBtHs);\r
108 #endif\r
109 }\r
110 \r
111 VOID \r
112 odm_DIG_8723(\r
113         IN              PDM_ODM_T               pDM_Odm\r
114         )\r
115 {\r
116         pDIG_T                                          pDM_DigTable = &pDM_Odm->DM_DigTable;\r
117         PFALSE_ALARM_STATISTICS         pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;\r
118         //pRXHP_T                                               pRX_HP_Table  = &pDM_Odm->DM_RXHP_Table;\r
119         u1Byte                                          DIG_Dynamic_MIN;\r
120         BOOLEAN                                         FirstConnect, FirstDisConnect;\r
121         u1Byte                                          dm_dig_max, dm_dig_min;\r
122         u1Byte                                          CurrentIGI = pDM_DigTable->CurIGValue;\r
123 \r
124 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
125 // This should be moved out of OUTSRC\r
126         PADAPTER                pAdapter        = pDM_Odm->Adapter;\r
127 #if OS_WIN_FROM_WIN7(OS_VERSION)\r
128         if(IsAPModeExist( pAdapter) && pAdapter->bInHctTest)\r
129         {\r
130                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: Is AP mode or In HCT Test \n"));\r
131                 return;\r
132         }\r
133 #endif\r
134         \r
135         if(pDM_Odm->bBtHsOperation)\r
136         {\r
137                 odm8723b_DigForBtHsMode(pDM_Odm);\r
138         }\r
139 \r
140 #if 0        // Neil Chen No RX HP for 8723\r
141         if(!(pDM_Odm->SupportICType &(ODM_RTL8723A|ODM_RTL8188E)))\r
142         {\r
143                 if(pRX_HP_Table->RXHP_flag == 1)\r
144                 {\r
145                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: In RXHP Operation \n"));\r
146                         return; \r
147                 }\r
148         }\r
149 #endif\r
150 \r
151 \r
152 #endif\r
153 \r
154 #if 0\r
155 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
156         prtl8192cd_priv priv                    = pDM_Odm->priv;        \r
157         if (!((priv->up_time > 5) && (priv->up_time % 2)) )\r
158         {\r
159                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: Not In DIG Operation Period \n"));\r
160                 return;\r
161         }\r
162 #endif\r
163 #endif\r
164 \r
165         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG()==>\n"));\r
166         //if(!(pDM_Odm->SupportAbility & (ODM_BB_DIG|ODM_BB_FA_CNT)))\r
167         if((!(pDM_Odm->SupportAbility&ODM_BB_DIG)) ||(!(pDM_Odm->SupportAbility&ODM_BB_FA_CNT)))\r
168         {\r
169 #if 0        \r
170                 if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))\r
171                 {\r
172                         if ((pDM_Odm->SupportICType == ODM_RTL8192C) && (pDM_Odm->ExtLNA == 1))\r
173                                 CurrentIGI = 0x30; //pDM_DigTable->CurIGValue  = 0x30;\r
174                         else\r
175                                 CurrentIGI = 0x20; //pDM_DigTable->CurIGValue  = 0x20;\r
176                         ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);\r
177                 }\r
178 #endif          \r
179                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: SupportAbility ODM_BB_DIG or ODM_BB_FA_CNT is disabled\n"));\r
180                 return;\r
181         }\r
182                 \r
183         if(*(pDM_Odm->pbScanInProcess))\r
184         {\r
185                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: In Scan Progress \n"));\r
186                 return;\r
187         }\r
188 \r
189         //add by Neil Chen to avoid PSD is processing\r
190         if(pDM_Odm->SupportICType&(ODM_RTL8723A|ODM_RTL8723B))\r
191         {\r
192                 if(pDM_Odm->bDMInitialGainEnable == FALSE)\r
193                 {\r
194                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: PSD is Processing \n"));\r
195                         return;\r
196                 }\r
197         }\r
198                 \r
199         \r
200         DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;\r
201         FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);\r
202         FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == TRUE);\r
203 \r
204         \r
205 #if 0   \r
206         if(pDM_Odm->SupportICType & (ODM_RTL8192C) &&(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA)))\r
207         {\r
208                 if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))\r
209                 {\r
210 \r
211                         dm_dig_max = DM_DIG_MAX_AP_HP;\r
212                         dm_dig_min = DM_DIG_MIN_AP_HP;\r
213                 }\r
214                 else\r
215                 {\r
216                         dm_dig_max = DM_DIG_MAX_NIC_HP;\r
217                         dm_dig_min = DM_DIG_MIN_NIC_HP;\r
218                 }\r
219                 DIG_MaxOfMin = DM_DIG_MAX_AP_HP;\r
220         }\r
221         else\r
222         {\r
223                 if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))\r
224                 {\r
225 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
226 #ifdef DFS\r
227                         if (!priv->pmib->dot11DFSEntry.disable_DFS &&\r
228                                 (OPMODE & WIFI_AP_STATE) &&\r
229                                 (((pDM_Odm->ControlChannel >= 52) &&\r
230                                 (pDM_Odm->ControlChannel <= 64)) ||\r
231                                 ((pDM_Odm->ControlChannel >= 100) &&\r
232                                 (pDM_Odm->ControlChannel <= 140))))\r
233                                 dm_dig_max = 0x24;\r
234                         else\r
235 #endif\r
236                         if (priv->pmib->dot11RFEntry.tx2path) {\r
237                                 if (*(pDM_Odm->pWirelessMode) == ODM_WM_B)//(priv->pmib->dot11BssType.net_work_type == WIRELESS_11B)\r
238                                         dm_dig_max = 0x2A;\r
239                                 else\r
240                                         dm_dig_max = 0x32;\r
241                         }\r
242                         else\r
243 #endif                          \r
244                         dm_dig_max = DM_DIG_MAX_AP;\r
245                         dm_dig_min = DM_DIG_MIN_AP;\r
246                         DIG_MaxOfMin = dm_dig_max;\r
247                 }\r
248                 else\r
249                 {\r
250                         if((pDM_Odm->SupportICType >= ODM_RTL8188E) && (pDM_Odm->SupportPlatform & (ODM_WIN|ODM_CE)))\r
251                                 dm_dig_max = 0x5A;\r
252                         else\r
253                                 dm_dig_max = DM_DIG_MAX_NIC;\r
254                         \r
255                         dm_dig_min = DM_DIG_MIN_NIC;\r
256                         DIG_MaxOfMin = DM_DIG_MAX_AP;\r
257                 }\r
258         }\r
259 #endif   // masked by neilchen to simpily 8723B case\r
260 \r
261 \r
262         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): RSSI=0x%x\n",pDM_Odm->RSSI_Min));\r
263 \r
264         if((pDM_Odm->SupportICType >= ODM_RTL8723B) && (pDM_Odm->SupportPlatform & (ODM_WIN|ODM_CE)))\r
265                 dm_dig_max = 0x5A;\r
266         else\r
267                 dm_dig_max = DM_DIG_MAX_NIC;\r
268 \r
269                         \r
270         dm_dig_min = DM_DIG_MIN_NIC_8723;\r
271                 \r
272         if(pDM_Odm->bLinked)\r
273         {\r
274                 if(pDM_Odm->SupportICType&(ODM_RTL8723B))\r
275                 {\r
276                         //BT is Concurrent\r
277                         if(pDM_Odm->bBtLimitedDig)\r
278                         {\r
279                                 if(( pDM_Odm->RSSI_Min + 10) > DM_DIG_MAX_NIC )\r
280                                         pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;\r
281                                 else if(( pDM_Odm->RSSI_Min + 10) < DM_DIG_MIN_NIC )\r
282                                         pDM_DigTable->rx_gain_range_max = DM_DIG_MIN_NIC;\r
283                                 else\r
284                                         pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 10;\r
285                         \r
286                                 if(pDM_Odm->RSSI_Min>10)\r
287                                 {\r
288                                         if((pDM_Odm->RSSI_Min - 10) > DM_DIG_MAX_NIC)\r
289                                                 DIG_Dynamic_MIN = DM_DIG_MAX_NIC;\r
290                                         else if((pDM_Odm->RSSI_Min - 10) < DM_DIG_MIN_NIC_8723)\r
291                                                 DIG_Dynamic_MIN = DM_DIG_MIN_NIC_8723;\r
292                                         else\r
293                                                 DIG_Dynamic_MIN = pDM_Odm->RSSI_Min - 10;\r
294                                 }\r
295                                 else\r
296                                         DIG_Dynamic_MIN=DM_DIG_MIN_NIC_8723;\r
297                         }\r
298                         else\r
299                         {\r
300                                 if((pDM_Odm->RSSI_Min + 20) > dm_dig_max )\r
301                                         pDM_DigTable->rx_gain_range_max = dm_dig_max;\r
302                                 else if((pDM_Odm->RSSI_Min + 20) < dm_dig_min )\r
303                                         pDM_DigTable->rx_gain_range_max = dm_dig_min;\r
304                                 else\r
305                                         pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 20;\r
306 \r
307 \r
308                                 if(pDM_Odm->RSSI_Min>20)\r
309                                 {\r
310                                         if((pDM_Odm->RSSI_Min - 20) > DM_DIG_MAX_NIC)\r
311                                                 DIG_Dynamic_MIN = DM_DIG_MAX_NIC;\r
312                                         else if((pDM_Odm->RSSI_Min - 20) < DM_DIG_MIN_NIC_8723)\r
313                                                 DIG_Dynamic_MIN = DM_DIG_MIN_NIC_8723;\r
314                                         else\r
315                                                 DIG_Dynamic_MIN = pDM_Odm->RSSI_Min -20;\r
316                                 }\r
317                                 else\r
318                                         DIG_Dynamic_MIN=DM_DIG_MIN_NIC_8723;\r
319                                 \r
320                                 \r
321                         }\r
322                 }\r
323 \r
324         }\r
325         else\r
326         {\r
327                 pDM_DigTable->rx_gain_range_max = dm_dig_max;\r
328                 pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC_8723;\r
329                 DIG_Dynamic_MIN = dm_dig_min;\r
330                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() : No Link\n"));\r
331         }\r
332         \r
333 #if 0\r
334         if(pFalseAlmCnt->Cnt_all > 10000)\r
335         {\r
336                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("dm_DIG(): Abnornally false alarm case. \n"));\r
337 \r
338                 if(pDM_DigTable->LargeFAHit != 3)\r
339                         pDM_DigTable->LargeFAHit++;\r
340                 if(pDM_DigTable->ForbiddenIGI < CurrentIGI)//if(pDM_DigTable->ForbiddenIGI < pDM_DigTable->CurIGValue)\r
341                 {\r
342                         pDM_DigTable->ForbiddenIGI = CurrentIGI;//pDM_DigTable->ForbiddenIGI = pDM_DigTable->CurIGValue;\r
343                         pDM_DigTable->LargeFAHit = 1;\r
344                 }\r
345 \r
346                 if(pDM_DigTable->LargeFAHit >= 3)\r
347                 {\r
348                         if((pDM_DigTable->ForbiddenIGI+1) >pDM_DigTable->rx_gain_range_max)\r
349                                 pDM_DigTable->rx_gain_range_min = pDM_DigTable->rx_gain_range_max;\r
350                         else\r
351                                 pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);\r
352                         pDM_DigTable->Recover_cnt = 3600; //3600=2hr\r
353                 }\r
354 \r
355         }\r
356         else\r
357         {\r
358                 //Recovery mechanism for IGI lower bound\r
359                 if(pDM_DigTable->Recover_cnt != 0)\r
360                         pDM_DigTable->Recover_cnt --;\r
361                 else\r
362                 {\r
363                         if(pDM_DigTable->LargeFAHit < 3)\r
364                         {\r
365                                 if((pDM_DigTable->ForbiddenIGI -1) < DIG_Dynamic_MIN) //DM_DIG_MIN)\r
366                                 {\r
367                                         pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN; //DM_DIG_MIN;\r
368                                         pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN; //DM_DIG_MIN;\r
369                                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Normal Case: At Lower Bound\n"));\r
370                                 }\r
371                                 else\r
372                                 {\r
373                                         pDM_DigTable->ForbiddenIGI --;\r
374                                         pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);\r
375                                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Normal Case: Approach Lower Bound\n"));\r
376                                 }\r
377                         }\r
378                         else\r
379                         {\r
380                                 pDM_DigTable->LargeFAHit = 0;\r
381                         }\r
382                 }\r
383         }\r
384         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): pDM_DigTable->LargeFAHit=%d\n",pDM_DigTable->LargeFAHit));\r
385 #endif\r
386 \r
387         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG():pDM_DigTable->Recover_cnt=%d\n",pDM_DigTable->Recover_cnt));\r
388 \r
389         //1 Adjust initial gain by false alarm\r
390         if(pDM_Odm->bLinked)\r
391         {\r
392                 ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG AfterLink\n"));\r
393                 if(FirstConnect)\r
394                 {\r
395                         CurrentIGI = pDM_Odm->RSSI_Min;\r
396                         ODM_RT_TRACE(pDM_Odm,   ODM_COMP_DIG, ODM_DBG_LOUD, ("DIG: First Connect\n"));\r
397                 }\r
398                 else\r
399                 {\r
400                         //FA for Combo IC--NeilChen--2012--09--28 \r
401                         if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
402                         {\r
403                                         //WLAN and BT ConCurrent\r
404                                 if(pDM_Odm->bBtLimitedDig)\r
405                                 {\r
406                                         if(pFalseAlmCnt->Cnt_all > 0x500)\r
407                                                 CurrentIGI = CurrentIGI + 4;\r
408                                         else if (pFalseAlmCnt->Cnt_all > 0x300)\r
409                                                 CurrentIGI = CurrentIGI + 2;\r
410                                         else if(pFalseAlmCnt->Cnt_all <0x150)\r
411                                                 CurrentIGI = CurrentIGI -2;\r
412                                 }\r
413                                 else //Not Concurrent\r
414                                 {\r
415                                         if(pFalseAlmCnt->Cnt_all > 0x400)\r
416                                                 CurrentIGI = CurrentIGI + 4;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2;\r
417                                         else if (pFalseAlmCnt->Cnt_all > 0x200)\r
418                                                 CurrentIGI = CurrentIGI + 2;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1;\r
419                                         else if(pFalseAlmCnt->Cnt_all < 0x100)\r
420                                                 CurrentIGI = CurrentIGI - 2;//pDM_DigTable->CurIGValue =pDM_DigTable->PreIGValue-1;     \r
421                                 }\r
422                         }\r
423                 \r
424                 }\r
425         }       \r
426         else\r
427         {\r
428                 CurrentIGI = pDM_DigTable->rx_gain_range_min;//pDM_DigTable->CurIGValue = pDM_DigTable->rx_gain_range_min\r
429                 ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG BeforeLink\n"));\r
430                 if(FirstDisConnect)\r
431                 {\r
432                                 CurrentIGI = pDM_DigTable->rx_gain_range_min;\r
433                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): First DisConnect \n"));\r
434                 }\r
435                 else\r
436                 {\r
437                         //2012.03.30 LukeLee: enable DIG before link but with very high thresholds\r
438                      if(pFalseAlmCnt->Cnt_all > 10000)\r
439                                 CurrentIGI = CurrentIGI + 4;\r
440                         else if (pFalseAlmCnt->Cnt_all > 8000)\r
441                                 CurrentIGI = CurrentIGI + 2;\r
442                         else if(pFalseAlmCnt->Cnt_all < 500)\r
443                                 CurrentIGI = CurrentIGI - 2;\r
444                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): England DIG \n"));\r
445                 }\r
446         }\r
447         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG End Adjust IGI\n"));\r
448         //1 Check initial gain by upper/lower bound\r
449 \r
450         if(CurrentIGI > pDM_DigTable->rx_gain_range_max)\r
451                 CurrentIGI = pDM_DigTable->rx_gain_range_max;\r
452         if(CurrentIGI < pDM_DigTable->rx_gain_range_min)\r
453                 CurrentIGI = pDM_DigTable->rx_gain_range_min;\r
454         \r
455         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): rx_gain_range_max=0x%x, rx_gain_range_min=0x%x\n", \r
456                 pDM_DigTable->rx_gain_range_max, pDM_DigTable->rx_gain_range_min));\r
457         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): TotalFA=%d\n", pFalseAlmCnt->Cnt_all));\r
458         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue=0x%x\n", CurrentIGI));\r
459 \r
460         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): RSSI=0x%x\n",pDM_Odm->RSSI_Min));\r
461 \r
462         //2 High power RSSI threshold\r
463 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)     \r
464 {\r
465         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pDM_Odm->Adapter);\r
466         //----------------------------------------------------------end for LC Mocca issue\r
467         if((pDM_Odm->SupportICType == ODM_RTL8723B)&& (pHalData->UndecoratedSmoothedPWDB > DM_DIG_HIGH_PWR_THRESHOLD))\r
468         {\r
469                 // High power IGI lower bound\r
470                 ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): UndecoratedSmoothedPWDB(%#x)\n", pHalData->UndecoratedSmoothedPWDB));\r
471                 if(CurrentIGI < DM_DIG_HIGH_PWR_IGI_LOWER_BOUND)\r
472                 {\r
473                         ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue(%#x)\n", pDM_DigTable->CurIGValue));\r
474                         //pDM_DigTable->CurIGValue = DM_DIG_HIGH_PWR_IGI_LOWER_BOUND;\r
475                         CurrentIGI=DM_DIG_HIGH_PWR_IGI_LOWER_BOUND;\r
476                 }\r
477         }\r
478 #if 0   \r
479         if((pDM_Odm->SupportICType & ODM_RTL8723A) && \r
480                         IS_WIRELESS_MODE_G(pAdapter))\r
481                 {\r
482                         if(pHalData->UndecoratedSmoothedPWDB > 0x28)\r
483                         {\r
484                                 if(CurrentIGI < DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND)\r
485                                 {\r
486                                         //pDM_DigTable->CurIGValue = DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND;\r
487                                         CurrentIGI = DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND;\r
488                                 }       \r
489                         } \r
490                 }       \r
491 \r
492 #endif  // end if 0 \r
493 }\r
494 #endif\r
495 \r
496         if(pDM_Odm->bBtHsOperation)\r
497         {\r
498                 if(pDM_Odm->bLinked)\r
499                 {\r
500                         if(pDM_DigTable->BT30_CurIGI > (CurrentIGI))\r
501                         {\r
502                                 ODM_Write_DIG(pDM_Odm, CurrentIGI);\r
503                                 \r
504                         }       \r
505                         else\r
506                         {\r
507                                 ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);\r
508                         }\r
509                         pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;\r
510                         pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;\r
511                 }\r
512                 else\r
513                 {\r
514                         if(pDM_Odm->bLinkInProcess)\r
515                         {\r
516                                 ODM_Write_DIG(pDM_Odm, 0x1c);\r
517                         }\r
518                         else if(pDM_Odm->bBtConnectProcess)\r
519                         {\r
520                                 ODM_Write_DIG(pDM_Odm, 0x28);\r
521                         }\r
522                         else\r
523                         {\r
524                                 ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);   \r
525                         }\r
526                 }\r
527         }       \r
528         else            // BT is not using\r
529         {\r
530                 ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);\r
531                 pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;\r
532                 pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;\r
533         }       \r
534 }\r
535 \r
536 \r
537  s1Byte\r
538 odm_CCKRSSI_8723B(\r
539         IN              u1Byte  LNA_idx,\r
540         IN              u1Byte  VGA_idx\r
541         )\r
542 {\r
543         s1Byte  rx_pwr_all=0x00;\r
544         switch(LNA_idx)\r
545         {\r
546                 //46  53 73 95 201301231630\r
547                 // 46 53 77 99 201301241630\r
548                 \r
549                 case 6: \r
550                         rx_pwr_all = -34 - (2 * VGA_idx);\r
551                         break;\r
552                 case 4: \r
553                         rx_pwr_all = -14 - (2 * VGA_idx);\r
554                         break;\r
555                 case 1: \r
556                         rx_pwr_all = 6 - (2 * VGA_idx);\r
557                         break;\r
558                 case 0: \r
559                         rx_pwr_all = 16 - (2 * VGA_idx);        \r
560                         break;\r
561                 default:\r
562                         //rx_pwr_all = -53+(2*(31-VGA_idx));\r
563                         //DbgPrint("wrong LNA index\n");\r
564                         break;\r
565                         \r
566         }\r
567         return  rx_pwr_all;\r
568 }\r
569 \r
570 s1Byte\r
571 odm_RSSIOFDM_8723B(\r
572         IN      s1Byte  rx_pwr_new)\r
573 {\r
574         s1Byte  rx_pwr_all=0;\r
575         \r
576         if(rx_pwr_new >=63)\r
577                 rx_pwr_all      =rx_pwr_new -120+10;\r
578         else if(rx_pwr_all >=54)\r
579                 rx_pwr_all=rx_pwr_new-120+6;\r
580         else if(rx_pwr_all >=43)\r
581                 rx_pwr_all=rx_pwr_new-120+8;\r
582         else if(rx_pwr_all >=33)\r
583                 rx_pwr_all=rx_pwr_new-120+8;\r
584         else if(rx_pwr_all >=23)\r
585                 rx_pwr_all=rx_pwr_new-120+10;\r
586         else \r
587                 rx_pwr_all=rx_pwr_new-120+7;\r
588 \r
589 \r
590         return rx_pwr_all;\r
591 \r
592 }\r
593 \r
594 #endif          // end if RTL8723B \r
595 \r
596 \r
597 \r
598 \r
599 \r
600 \r
601 \r
602 \r