WiFi: add rtl8189es/etv support, Optimization wifi configuration.
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8189es / hal / OUTSRC / rtl8188e / odm_RTL8188E.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 (RTL8188E_SUPPORT == 1)\r
28 \r
29 VOID\r
30 ODM_DIG_LowerBound_88E(\r
31         IN              PDM_ODM_T               pDM_Odm\r
32 )\r
33 {\r
34         pDIG_T          pDM_DigTable = &pDM_Odm->DM_DigTable;\r
35 \r
36         if(pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)\r
37         {\r
38                 pDM_DigTable->rx_gain_range_min = (u1Byte) pDM_DigTable->AntDiv_RSSI_max;\r
39                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_DIG_LowerBound_88E(): pDM_DigTable->AntDiv_RSSI_max=%d \n",pDM_DigTable->AntDiv_RSSI_max));\r
40         }\r
41         //If only one Entry connected\r
42 }\r
43 \r
44 \r
45 //3============================================================\r
46 //3 Dynamic Primary CCA\r
47 //3============================================================\r
48 \r
49 VOID\r
50 odm_PrimaryCCA_Init(\r
51         IN              PDM_ODM_T               pDM_Odm)\r
52 {\r
53         pPri_CCA_T              PrimaryCCA = &(pDM_Odm->DM_PriCCA);  \r
54         PrimaryCCA->DupRTS_flag = 0;\r
55         PrimaryCCA->intf_flag = 0;\r
56         PrimaryCCA->intf_type = 0;\r
57         PrimaryCCA->Monitor_flag = 0;\r
58         PrimaryCCA->PriCCA_flag = 0;\r
59 }\r
60 \r
61 BOOLEAN\r
62 ODM_DynamicPrimaryCCA_DupRTS(\r
63         IN              PDM_ODM_T               pDM_Odm\r
64         )\r
65 {\r
66         pPri_CCA_T              PrimaryCCA = &(pDM_Odm->DM_PriCCA);  \r
67         \r
68         return  PrimaryCCA->DupRTS_flag;\r
69 }\r
70 \r
71 VOID\r
72 odm_DynamicPrimaryCCA(\r
73         IN              PDM_ODM_T               pDM_Odm\r
74         )\r
75 {\r
76         PADAPTER        Adapter =  pDM_Odm->Adapter;    // for NIC\r
77 \r
78 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))   \r
79         PRT_WLAN_STA    pEntry;\r
80 #endif  \r
81 \r
82         PFALSE_ALARM_STATISTICS         FalseAlmCnt = &(pDM_Odm->FalseAlmCnt);\r
83         pPri_CCA_T              PrimaryCCA = &(pDM_Odm->DM_PriCCA);  \r
84         \r
85         BOOLEAN         Is40MHz;\r
86         BOOLEAN         Client_40MHz = FALSE, Client_tmp = FALSE;      // connected client BW  \r
87         BOOLEAN         bConnected = FALSE;             // connected or not\r
88         static u1Byte   Client_40MHz_pre = 0;\r
89         static u8Byte   lastTxOkCnt = 0;\r
90         static u8Byte   lastRxOkCnt = 0;\r
91         static u4Byte   Counter = 0;\r
92         static u1Byte   Delay = 1;\r
93         u8Byte          curTxOkCnt;\r
94         u8Byte          curRxOkCnt;\r
95         u1Byte          SecCHOffset;\r
96         u1Byte          i;\r
97         \r
98 #if((DM_ODM_SUPPORT_TYPE==ODM_ADSL) ||( DM_ODM_SUPPORT_TYPE==ODM_CE))\r
99         return;\r
100 #endif\r
101 \r
102         if(pDM_Odm->SupportICType != ODM_RTL8188E) \r
103                 return;\r
104 \r
105         Is40MHz = *(pDM_Odm->pBandWidth);\r
106         SecCHOffset = *(pDM_Odm->pSecChOffset);\r
107         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("Second CH Offset = %d\n", SecCHOffset));\r
108         \r
109 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
110         if(Is40MHz==1)\r
111                 SecCHOffset = SecCHOffset%2+1;     // NIC's definition is reverse to AP   1:secondary below,  2: secondary above\r
112         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("Second CH Offset = %d\n", SecCHOffset));\r
113         //3 Check Current WLAN Traffic\r
114         curTxOkCnt = Adapter->TxStats.NumTxBytesUnicast - lastTxOkCnt;\r
115         curRxOkCnt = Adapter->RxStats.NumRxBytesUnicast - lastRxOkCnt;\r
116         lastTxOkCnt = Adapter->TxStats.NumTxBytesUnicast;\r
117         lastRxOkCnt = Adapter->RxStats.NumRxBytesUnicast;       \r
118 #elif (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
119         //3 Check Current WLAN Traffic\r
120         curTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast)-lastTxOkCnt;\r
121         curRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast)-lastRxOkCnt;\r
122         lastTxOkCnt = *(pDM_Odm->pNumTxBytesUnicast);\r
123         lastRxOkCnt = *(pDM_Odm->pNumRxBytesUnicast);\r
124 #endif\r
125 \r
126         //==================Debug Message====================\r
127         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("TP = %llu\n", curTxOkCnt+curRxOkCnt));\r
128         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("Is40MHz = %d\n", Is40MHz));\r
129         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("BW_LSC = %d\n", FalseAlmCnt->Cnt_BW_LSC));\r
130         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("BW_USC = %d\n", FalseAlmCnt->Cnt_BW_USC));\r
131         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("CCA OFDM = %d\n", FalseAlmCnt->Cnt_OFDM_CCA));\r
132         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("CCA CCK = %d\n", FalseAlmCnt->Cnt_CCK_CCA));\r
133         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("OFDM FA = %d\n", FalseAlmCnt->Cnt_Ofdm_fail));\r
134         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("CCK FA = %d\n", FalseAlmCnt->Cnt_Cck_fail));\r
135         //================================================\r
136         \r
137 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
138         if (ACTING_AS_AP(Adapter))   // primary cca process only do at AP mode\r
139 #endif\r
140         {\r
141                 \r
142         #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
143                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("ACTING as AP mode=%d\n", ACTING_AS_AP(Adapter)));\r
144                 //3 To get entry's connection and BW infomation status. \r
145                 for(i=0;i<ASSOCIATE_ENTRY_NUM;i++)\r
146                 {\r
147                         if(IsAPModeExist(Adapter)&&GetFirstExtAdapter(Adapter)!=NULL)\r
148                                 pEntry=AsocEntry_EnumStation(GetFirstExtAdapter(Adapter), i);\r
149                         else\r
150                                 pEntry=AsocEntry_EnumStation(GetDefaultAdapter(Adapter), i);\r
151                         if(pEntry!=NULL)\r
152                         {\r
153                                 Client_tmp = pEntry->BandWidth;   // client BW\r
154                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("Client_BW=%d\n", Client_tmp));\r
155                                 if(Client_tmp>Client_40MHz)\r
156                                         Client_40MHz = Client_tmp;     // 40M/20M coexist => 40M priority is High\r
157                                 \r
158                                 if(pEntry->bAssociated)\r
159                                 {\r
160                                         bConnected=TRUE;    // client is connected or not\r
161                                         break;\r
162                                 }\r
163                         }\r
164                         else\r
165                         {\r
166                                 break;\r
167                         }\r
168                 }\r
169 #elif (DM_ODM_SUPPORT_TYPE == ODM_AP)\r
170                 //3 To get entry's connection and BW infomation status. \r
171 \r
172                 PSTA_INFO_T pstat;\r
173 \r
174                 for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)\r
175                 {\r
176                         pstat = pDM_Odm->pODM_StaInfo[i];\r
177                         if(IS_STA_VALID(pstat) )\r
178                         {                       \r
179                                 Client_tmp = pstat->tx_bw;  \r
180                                 if(Client_tmp>Client_40MHz)\r
181                                         Client_40MHz = Client_tmp;     // 40M/20M coexist => 40M priority is High\r
182                                 \r
183                                 bConnected = TRUE;\r
184                         }\r
185                 }\r
186 #endif\r
187                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("bConnected=%d\n", bConnected));\r
188                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("Is Client 40MHz=%d\n", Client_40MHz));\r
189                 //1 Monitor whether the interference exists or not \r
190                 if(PrimaryCCA->Monitor_flag == 1)\r
191                 {\r
192                         if(SecCHOffset == 1)       // secondary channel is below the primary channel\r
193                         {\r
194                                 if((FalseAlmCnt->Cnt_OFDM_CCA > 500)&&(FalseAlmCnt->Cnt_BW_LSC > FalseAlmCnt->Cnt_BW_USC+500))\r
195                                 {\r
196                                         if(FalseAlmCnt->Cnt_Ofdm_fail > FalseAlmCnt->Cnt_OFDM_CCA>>1)\r
197                                         {\r
198                                                 PrimaryCCA->intf_type = 1;\r
199                                                 PrimaryCCA->PriCCA_flag = 1;\r
200                                                 ODM_SetBBReg(pDM_Odm, 0xc6c, BIT8|BIT7, 2);   // USC MF\r
201                                                 if(PrimaryCCA->DupRTS_flag == 1)\r
202                                                         PrimaryCCA->DupRTS_flag = 0;\r
203                                         }\r
204                                         else\r
205                                         {\r
206                                                 PrimaryCCA->intf_type = 2;\r
207                                                 if(PrimaryCCA->DupRTS_flag == 0)\r
208                                                         PrimaryCCA->DupRTS_flag = 1;\r
209                                         }\r
210                                 \r
211                                 }\r
212                                 else   // interferecne disappear\r
213                                 {\r
214                                         PrimaryCCA->DupRTS_flag = 0;\r
215                                         PrimaryCCA->intf_flag = 0;\r
216                                         PrimaryCCA->intf_type = 0;\r
217                                 }\r
218                         }\r
219                         else if(SecCHOffset == 2)  // secondary channel is above the primary channel\r
220                         {\r
221                                 if((FalseAlmCnt->Cnt_OFDM_CCA > 500)&&(FalseAlmCnt->Cnt_BW_USC > FalseAlmCnt->Cnt_BW_LSC+500))\r
222                                 {\r
223                                         if(FalseAlmCnt->Cnt_Ofdm_fail > FalseAlmCnt->Cnt_OFDM_CCA>>1)\r
224                                         {\r
225                                                 PrimaryCCA->intf_type = 1;\r
226                                                 PrimaryCCA->PriCCA_flag = 1;\r
227                                                 ODM_SetBBReg(pDM_Odm, 0xc6c, BIT8|BIT7, 1);  // LSC MF\r
228                                                 if(PrimaryCCA->DupRTS_flag == 1)\r
229                                                         PrimaryCCA->DupRTS_flag = 0;\r
230                                         }\r
231                                         else\r
232                                         {\r
233                                                 PrimaryCCA->intf_type = 2;\r
234                                                 if(PrimaryCCA->DupRTS_flag == 0)\r
235                                                         PrimaryCCA->DupRTS_flag = 1;\r
236                                         }\r
237                                 \r
238                                 }\r
239                                 else   // interferecne disappear\r
240                                 {\r
241                                         PrimaryCCA->DupRTS_flag = 0;\r
242                                         PrimaryCCA->intf_flag = 0;\r
243                                         PrimaryCCA->intf_type = 0;\r
244                                 }\r
245 \r
246 \r
247                         }\r
248                         PrimaryCCA->Monitor_flag = 0;\r
249                 }\r
250 \r
251                 //1 Dynamic Primary CCA Main Function\r
252                 if(PrimaryCCA->Monitor_flag == 0)\r
253                 {\r
254                         if(Is40MHz)             // if RFBW==40M mode which require to process primary cca\r
255                         {\r
256                                 //2 STA is NOT Connected\r
257                                 if(!bConnected)\r
258                                 {\r
259                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("STA NOT Connected!!!!\n"));\r
260                         \r
261                                         if(PrimaryCCA->PriCCA_flag == 1)                // reset primary cca when STA is disconnected\r
262                                         {\r
263                                                 PrimaryCCA->PriCCA_flag = 0;\r
264                                                 ODM_SetBBReg(pDM_Odm, 0xc6c, BIT8|BIT7, 0);\r
265                                         }\r
266                                         if(PrimaryCCA->DupRTS_flag == 1)                // reset Duplicate RTS when STA is disconnected\r
267                                                 PrimaryCCA->DupRTS_flag = 0;\r
268 \r
269                                         if(SecCHOffset == 1)   // secondary channel is below the primary channel\r
270                                         {\r
271                                                 if((FalseAlmCnt->Cnt_OFDM_CCA > 800)&&(FalseAlmCnt->Cnt_BW_LSC*5 > FalseAlmCnt->Cnt_BW_USC*9))\r
272                                                 {\r
273                                                         PrimaryCCA->intf_flag = 1;    // secondary channel interference is detected!!!\r
274                                                         if(FalseAlmCnt->Cnt_Ofdm_fail > FalseAlmCnt->Cnt_OFDM_CCA>>1)\r
275                                                                 PrimaryCCA->intf_type = 1;      // interference is shift\r
276                                                         else\r
277                                                                 PrimaryCCA->intf_type = 2;      // interference is in-band\r
278                                                 }\r
279                                                 else    \r
280                                                 {\r
281                                                         PrimaryCCA->intf_flag = 0;\r
282                                                         PrimaryCCA->intf_type = 0;  \r
283                                                 }\r
284                                         }\r
285                                         else if(SecCHOffset == 2)    // secondary channel is above the primary channel\r
286                                         {\r
287                                                 if((FalseAlmCnt->Cnt_OFDM_CCA > 800)&&(FalseAlmCnt->Cnt_BW_USC*5 > FalseAlmCnt->Cnt_BW_LSC*9))\r
288                                                 {\r
289                                                         PrimaryCCA->intf_flag = 1;    // secondary channel interference is detected!!!\r
290                                                         if(FalseAlmCnt->Cnt_Ofdm_fail > FalseAlmCnt->Cnt_OFDM_CCA>>1)\r
291                                                                 PrimaryCCA->intf_type = 1;      // interference is shift\r
292                                                         else\r
293                                                                 PrimaryCCA->intf_type = 2;      // interference is in-band\r
294                                                 }\r
295                                                 else    \r
296                                                 {\r
297                                                         PrimaryCCA->intf_flag = 0;\r
298                                                         PrimaryCCA->intf_type = 0;  \r
299                                                 }\r
300                                         }\r
301                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("PrimaryCCA=%d\n",PrimaryCCA->PriCCA_flag));\r
302                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("Intf_Type=%d\n", PrimaryCCA->intf_type));\r
303                                 }\r
304                                 //2 STA is Connected\r
305                                 else\r
306                                 {\r
307                                         if(Client_40MHz == 0)           //3 // client BW = 20MHz\r
308                                         {\r
309                                                 if(PrimaryCCA->PriCCA_flag == 0)\r
310                                                 {\r
311                                                         PrimaryCCA->PriCCA_flag = 1;\r
312                                                         if(SecCHOffset==1)\r
313                                                                 ODM_SetBBReg(pDM_Odm, 0xc6c, BIT8|BIT7, 2);\r
314                                                         else if(SecCHOffset==2)\r
315                                                                 ODM_SetBBReg(pDM_Odm, 0xc6c, BIT8|BIT7, 1);\r
316                                                 }\r
317                                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("STA Connected 20M!!! PrimaryCCA=%d\n", PrimaryCCA->PriCCA_flag));\r
318                                         }\r
319                                         else            //3 // client BW = 40MHz\r
320                                         {\r
321                                                 if(PrimaryCCA->intf_flag == 1)    // interference is detected!!\r
322                                                 {\r
323                                                         if(PrimaryCCA->intf_type == 1)\r
324                                                         {\r
325                                                                 if(PrimaryCCA->PriCCA_flag!=1)\r
326                                                                 {\r
327                                                                         PrimaryCCA->PriCCA_flag = 1;\r
328                                                                         if(SecCHOffset==1)\r
329                                                                                 ODM_SetBBReg(pDM_Odm, 0xc6c, BIT8|BIT7, 2);\r
330                                                                         else if(SecCHOffset==2)\r
331                                                                                 ODM_SetBBReg(pDM_Odm, 0xc6c, BIT8|BIT7, 1);\r
332                                                                 }\r
333                                                         }\r
334                                                         else if(PrimaryCCA->intf_type == 2)\r
335                                                         {\r
336                                                                 if(PrimaryCCA->DupRTS_flag!=1)\r
337                                                                         PrimaryCCA->DupRTS_flag = 1;\r
338                                                         }\r
339                                                 }\r
340                                                 else   // if intf_flag==0\r
341                                                 {\r
342                                                         if((curTxOkCnt+curRxOkCnt)<10000)   //idle mode or TP traffic is very low\r
343                                                         {\r
344                                                                 if(SecCHOffset == 1)\r
345                                                                 {\r
346                                                                         if((FalseAlmCnt->Cnt_OFDM_CCA > 800)&&(FalseAlmCnt->Cnt_BW_LSC*5 > FalseAlmCnt->Cnt_BW_USC*9))\r
347                                                                         {\r
348                                                                                 PrimaryCCA->intf_flag = 1;\r
349                                                                                 if(FalseAlmCnt->Cnt_Ofdm_fail > FalseAlmCnt->Cnt_OFDM_CCA>>1)           \r
350                                                                                         PrimaryCCA->intf_type = 1;      // interference is shift\r
351                                                                                 else\r
352                                                                                         PrimaryCCA->intf_type = 2;      // interference is in-band\r
353                                                                         }\r
354                                                                 }\r
355                                                                 else if(SecCHOffset == 2)\r
356                                                                 {\r
357                                                                         if((FalseAlmCnt->Cnt_OFDM_CCA > 800)&&(FalseAlmCnt->Cnt_BW_USC*5 > FalseAlmCnt->Cnt_BW_LSC*9))\r
358                                                                         {\r
359                                                                                 PrimaryCCA->intf_flag = 1;\r
360                                                                                 if(FalseAlmCnt->Cnt_Ofdm_fail > FalseAlmCnt->Cnt_OFDM_CCA>>1)           \r
361                                                                                         PrimaryCCA->intf_type = 1;      // interference is shift\r
362                                                                                 else\r
363                                                                                         PrimaryCCA->intf_type = 2;      // interference is in-band\r
364                                                                         }\r
365 \r
366                                                                 }\r
367                                                         }\r
368                                                         else     // TP Traffic is High\r
369                                                         {\r
370                                                                 if(SecCHOffset == 1)\r
371                                                                 {\r
372                                                                         if(FalseAlmCnt->Cnt_BW_LSC > (FalseAlmCnt->Cnt_BW_USC+500))\r
373                                                                         {       \r
374                                                                                 if(Delay == 0)    // add delay to avoid interference occurring abruptly, jump one time\r
375                                                                                 {\r
376                                                                                         PrimaryCCA->intf_flag = 1;\r
377                                                                                         if(FalseAlmCnt->Cnt_Ofdm_fail > FalseAlmCnt->Cnt_OFDM_CCA>>1)\r
378                                                                                                 PrimaryCCA->intf_type = 1;      // interference is shift\r
379                                                                                         else\r
380                                                                                                 PrimaryCCA->intf_type = 2;      // interference is in-band\r
381                                                                                         Delay = 1;\r
382                                                                                 }\r
383                                                                                 else\r
384                                                                                         Delay = 0;\r
385                                                                         }       \r
386                                                                 }       \r
387                                                                 else if(SecCHOffset == 2)\r
388                                                                 {\r
389                                                                         if(FalseAlmCnt->Cnt_BW_USC > (FalseAlmCnt->Cnt_BW_LSC+500))\r
390                                                                         {       \r
391                                                                                 if(Delay == 0)    // add delay to avoid interference occurring abruptly\r
392                                                                                 {\r
393                                                                                         PrimaryCCA->intf_flag = 1;\r
394                                                                                         if(FalseAlmCnt->Cnt_Ofdm_fail > FalseAlmCnt->Cnt_OFDM_CCA>>1)\r
395                                                                                                 PrimaryCCA->intf_type = 1;      // interference is shift\r
396                                                                                         else\r
397                                                                                                 PrimaryCCA->intf_type = 2;      // interference is in-band\r
398                                                                                         Delay = 1;\r
399                                                                                 }\r
400                                                                                 else\r
401                                                                                         Delay = 0;\r
402                                                                         }       \r
403                                                                 }\r
404                                                         }\r
405                                                 }\r
406                                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("Primary CCA=%d\n", PrimaryCCA->PriCCA_flag));\r
407                                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("Duplicate RTS=%d\n", PrimaryCCA->DupRTS_flag));\r
408                                         }\r
409 \r
410                                 }// end of connected\r
411                         }\r
412                 }\r
413                 //1 Dynamic Primary CCA Monitor Counter\r
414                 if((PrimaryCCA->PriCCA_flag == 1)||(PrimaryCCA->DupRTS_flag == 1))\r
415                 {\r
416                         if(Client_40MHz == 0)     // client=20M no need to monitor primary cca flag  \r
417                         {\r
418                                 Client_40MHz_pre = Client_40MHz;\r
419                                 return;\r
420                         }\r
421                         Counter++;\r
422                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_PRICCA, ODM_DBG_LOUD, ("Counter=%d\n", Counter));\r
423                         if((Counter == 30)||((Client_40MHz -Client_40MHz_pre)==1))      // Every 60 sec to monitor one time\r
424                         {\r
425                                 PrimaryCCA->Monitor_flag = 1;     // monitor flag is triggered!!!!!\r
426                                 if(PrimaryCCA->PriCCA_flag == 1)\r
427                                 {\r
428                                         PrimaryCCA->PriCCA_flag = 0;\r
429                                         ODM_SetBBReg(pDM_Odm, 0xc6c, BIT8|BIT7, 0);\r
430                                 }\r
431                                 Counter = 0;\r
432                         }\r
433                 }\r
434         }\r
435 \r
436         Client_40MHz_pre = Client_40MHz;\r
437 }\r
438 #else //#if (RTL8188E_SUPPORT == 1)\r
439 \r
440 VOID\r
441 odm_PrimaryCCA_Init(\r
442         IN              PDM_ODM_T               pDM_Odm)\r
443 {\r
444 }\r
445 VOID\r
446 odm_DynamicPrimaryCCA(\r
447         IN              PDM_ODM_T               pDM_Odm\r
448         )\r
449 {\r
450 }\r
451 BOOLEAN\r
452 ODM_DynamicPrimaryCCA_DupRTS(\r
453         IN              PDM_ODM_T               pDM_Odm\r
454         )\r
455 {\r
456         return FALSE;\r
457 }\r
458 #endif //#if (RTL8188E_SUPPORT == 1)\r
459 \r