video: rockchip: tve: support rk3228
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bu / hal / OUTSRC / odm_DynamicTxPower.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 VOID \r
28 odm_DynamicTxPowerInit(
29         IN              PVOID                                   pDM_VOID        \r
30         )
31 {
32         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
33 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
34         PADAPTER        Adapter = pDM_Odm->Adapter;
35         PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;
36         HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
37
38         #if DEV_BUS_TYPE==RT_USB_INTERFACE                                      
39         if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
40         {
41                 odm_DynamicTxPowerSavePowerIndex(pDM_Odm);
42                 pMgntInfo->bDynamicTxPowerEnable = TRUE;
43         }               
44         else    
45         #else
46         //so 92c pci do not need dynamic tx power? vivi check it later
47         if(IS_HARDWARE_TYPE_8192D(Adapter))
48                 pMgntInfo->bDynamicTxPowerEnable = TRUE;
49         else
50                 pMgntInfo->bDynamicTxPowerEnable = FALSE;
51         #endif
52         
53
54         pHalData->LastDTPLvl = TxHighPwrLevel_Normal;
55         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
56 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
57         PADAPTER        Adapter = pDM_Odm->Adapter;
58         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
59         struct dm_priv  *pdmpriv = &pHalData->dmpriv;
60         pdmpriv->bDynamicTxPowerEnable = _FALSE;
61
62         #if (RTL8192C_SUPPORT==1) 
63         #ifdef CONFIG_USB_HCI
64
65         #ifdef CONFIG_INTEL_PROXIM
66         if((pHalData->BoardType == BOARD_USB_High_PA)||(Adapter->proximity.proxim_support==_TRUE))
67         #else
68         if(pHalData->BoardType == BOARD_USB_High_PA)
69         #endif
70
71         {
72                 //odm_SavePowerIndex(Adapter);
73                 odm_DynamicTxPowerSavePowerIndex(pDM_Odm);
74                 pdmpriv->bDynamicTxPowerEnable = _TRUE;
75         }               
76         else    
77         #else
78                 pdmpriv->bDynamicTxPowerEnable = _FALSE;
79         #endif
80         #endif
81         
82         pdmpriv->LastDTPLvl = TxHighPwrLevel_Normal;
83         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; 
84         
85 #endif
86         
87 }
88
89 VOID
90 odm_DynamicTxPowerSavePowerIndex(
91         IN              PVOID                                   pDM_VOID        \r
92         )
93 {       
94         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
95 #if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))
96         u1Byte          index;
97         u4Byte          Power_Index_REG[6] = {0xc90, 0xc91, 0xc92, 0xc98, 0xc99, 0xc9a};\r
98         
99 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)    
100         PADAPTER        Adapter = pDM_Odm->Adapter;
101         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);      
102         for(index = 0; index< 6; index++)
103                 pHalData->PowerIndex_backup[index] = PlatformEFIORead1Byte(Adapter, Power_Index_REG[index]);
104 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)   
105         PADAPTER        Adapter = pDM_Odm->Adapter;
106         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
107         struct dm_priv  *pdmpriv = &pHalData->dmpriv;
108         for(index = 0; index< 6; index++)
109                 pdmpriv->PowerIndex_backup[index] = rtw_read8(Adapter, Power_Index_REG[index]);
110 #endif
111 #endif
112 }
113
114 VOID
115 odm_DynamicTxPowerRestorePowerIndex(
116         IN              PVOID                                   pDM_VOID\r
117         )
118 {
119         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
120 #if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))
121         u1Byte                  index;
122         PADAPTER                Adapter = pDM_Odm->Adapter;\r
123         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
124         u4Byte                  Power_Index_REG[6] = {0xc90, 0xc91, 0xc92, 0xc98, 0xc99, 0xc9a};
125 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
126         for(index = 0; index< 6; index++)
127                 PlatformEFIOWrite1Byte(Adapter, Power_Index_REG[index], pHalData->PowerIndex_backup[index]);
128 #elif(DM_ODM_SUPPORT_TYPE == ODM_CE)    
129         struct dm_priv  *pdmpriv = &pHalData->dmpriv;
130         for(index = 0; index< 6; index++)
131                 rtw_write8(Adapter, Power_Index_REG[index], pdmpriv->PowerIndex_backup[index]);
132 #endif
133 #endif
134 }
135
136 VOID
137 odm_DynamicTxPowerWritePowerIndex(
138         IN              PVOID                                   pDM_VOID, \r
139         IN      u1Byte          Value)
140 {
141         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
142         u1Byte                  index;\r
143         u4Byte                  Power_Index_REG[6] = {0xc90, 0xc91, 0xc92, 0xc98, 0xc99, 0xc9a};
144         
145         for(index = 0; index< 6; index++)
146                 //PlatformEFIOWrite1Byte(Adapter, Power_Index_REG[index], Value);
147                 ODM_Write1Byte(pDM_Odm, Power_Index_REG[index], Value);
148
149 }
150
151
152 VOID 
153 odm_DynamicTxPower(
154         IN              PVOID                                   pDM_VOID\r
155         )
156 {
157         // 
158         // For AP/ADSL use prtl8192cd_priv
159         // For CE/NIC use PADAPTER
160         //
161         //PADAPTER              pAdapter = pDM_Odm->Adapter;
162 //      prtl8192cd_priv priv            = pDM_Odm->priv;
163         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
164         if (!(pDM_Odm->SupportAbility & ODM_BB_DYNAMIC_TXPWR))
165                 return;
166         //
167         // 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate
168         // at the same time. In the stage2/3, we need to prive universal interface and merge all
169         // HW dynamic mechanism.
170         //
171         switch  (pDM_Odm->SupportPlatform)
172         {
173                 case    ODM_WIN:
174                 case    ODM_CE:
175                         odm_DynamicTxPowerNIC(pDM_Odm);
176                         break;  
177                 case    ODM_AP:
178                         odm_DynamicTxPowerAP(pDM_Odm);
179                         break;          
180
181                 case    ODM_ADSL:
182                         //odm_DIGAP(pDM_Odm);
183                         break;  
184         }
185
186         
187 }
188
189
190 VOID 
191 odm_DynamicTxPowerNIC(
192         IN              PVOID                                   pDM_VOID\r
193         )
194 {       
195         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
196         
197         if (!(pDM_Odm->SupportAbility & ODM_BB_DYNAMIC_TXPWR))\r
198                 return;
199         
200 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
201
202         if(pDM_Odm->SupportICType == ODM_RTL8192C)      
203         {
204                 odm_DynamicTxPower_92C(pDM_Odm);
205         }
206         else if(pDM_Odm->SupportICType == ODM_RTL8192D)
207         {
208                 odm_DynamicTxPower_92D(pDM_Odm);
209         }
210         else if (pDM_Odm->SupportICType == ODM_RTL8821)
211         {
212 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
213                 PADAPTER                Adapter  =  pDM_Odm->Adapter;
214                 PMGNT_INFO              pMgntInfo = GetDefaultMgntInfo(Adapter);
215
216                 if (pMgntInfo->RegRspPwr == 1)
217                 {
218                         if(pDM_Odm->RSSI_Min > 60)
219                         {
220                                 ODM_SetMACReg(pDM_Odm, ODM_REG_RESP_TX_11AC, BIT20|BIT19|BIT18, 1); // Resp TXAGC offset = -3dB
221
222                         }
223                         else if(pDM_Odm->RSSI_Min < 55)
224                         {
225                                 ODM_SetMACReg(pDM_Odm, ODM_REG_RESP_TX_11AC, BIT20|BIT19|BIT18, 0); // Resp TXAGC offset = 0dB
226                         }
227                 }
228 #endif
229         }
230 #endif  
231 }
232
233 VOID 
234 odm_DynamicTxPowerAP(
235         IN              PVOID                                   pDM_VOID\r
236
237         )
238 {       \r
239         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
240 #if (DM_ODM_SUPPORT_TYPE == ODM_AP)
241
242 //#if ((RTL8192C_SUPPORT==1) || (RTL8192D_SUPPORT==1) || (RTL8188E_SUPPORT==1) || (RTL8812E_SUPPORT==1))
243
244
245         prtl8192cd_priv priv            = pDM_Odm->priv;
246         s4Byte i;
247         s2Byte pwr_thd = TX_POWER_NEAR_FIELD_THRESH_AP;
248
249         if(!priv->pshare->rf_ft_var.tx_pwr_ctrl)
250                 return;
251         
252 #if ((RTL8812E_SUPPORT==1) || (RTL8881A_SUPPORT==1))
253         if (pDM_Odm->SupportICType & (ODM_RTL8812 | ODM_RTL8881A))
254                 pwr_thd = TX_POWER_NEAR_FIELD_THRESH_8812;
255 #endif
256
257 #if defined(CONFIG_RTL_92D_SUPPORT) || defined(CONFIG_RTL_92C_SUPPORT)
258         if(CHIP_VER_92X_SERIES(priv))
259         {
260 #ifdef HIGH_POWER_EXT_PA
261         if(pDM_Odm->ExtPA)
262                 tx_power_control(priv);
263 #endif          
264         }
265 #endif  
266         /*
267          *      Check if station is near by to use lower tx power
268          */
269
270         if ((priv->up_time % 3) == 0 )  {
271                 int disable_pwr_ctrl = ((pDM_Odm->FalseAlmCnt.Cnt_all > 1000 ) || ((pDM_Odm->FalseAlmCnt.Cnt_all > 300 ) && ((RTL_R8(0xc50) & 0x7f) >= 0x32))) ? 1 : 0;
272                         
273                 for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++){
274                         PSTA_INFO_T pstat = pDM_Odm->pODM_StaInfo[i];
275                         if(IS_STA_VALID(pstat) ) {
276                                         if(disable_pwr_ctrl)
277                                                 pstat->hp_level = 0;
278                                          else if ((pstat->hp_level == 0) && (pstat->rssi > pwr_thd))
279                                         pstat->hp_level = 1;
280                                                 else if ((pstat->hp_level == 1) && (pstat->rssi < (pwr_thd-8)))
281                                         pstat->hp_level = 0;
282                         }
283                 }
284
285 #if defined(CONFIG_WLAN_HAL_8192EE)
286                 if (GET_CHIP_VER(priv) == VERSION_8192E) {
287                         if( !disable_pwr_ctrl && (pDM_Odm->RSSI_Min != 0xff) ) {
288                                 if(pDM_Odm->RSSI_Min > pwr_thd)
289                                         RRSR_power_control_11n(priv,  1 );
290                                 else if(pDM_Odm->RSSI_Min < (pwr_thd-8))
291                                         RRSR_power_control_11n(priv,  0 );
292                         } else {
293                                         RRSR_power_control_11n(priv,  0 );
294                         }
295                 }
296 #endif                  
297         }
298 //#endif        
299
300 #endif  
301 }
302
303
304 VOID 
305 odm_DynamicTxPower_92C(
306         IN              PVOID                                   pDM_VOID\r
307         )
308 {\r
309         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
310 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
311         PADAPTER Adapter = pDM_Odm->Adapter;
312         PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;
313         HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
314         s4Byte                          UndecoratedSmoothedPWDB;
315
316         // 2012/01/12 MH According to Luke's suggestion, only high power will support the feature.
317         if (pDM_Odm->ExtPA == FALSE)
318                 return;
319
320         // STA not connected and AP not connected
321         if((!pMgntInfo->bMediaConnect) &&       
322                 (pHalData->EntryMinUndecoratedSmoothedPWDB == 0))
323         {
324                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("Not connected to any \n"));
325                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
326
327                 //the LastDTPlvl should reset when disconnect, 
328                 //otherwise the tx power level wouldn't change when disconnect and connect again.
329                 // Maddest 20091220.
330                  pHalData->LastDTPLvl=TxHighPwrLevel_Normal;
331                 return;
332         }
333
334 #if (INTEL_PROXIMITY_SUPPORT == 1)
335         // Intel set fixed tx power 
336         if(pMgntInfo->IntelProximityModeInfo.PowerOutput > 0)
337         {
338                 switch(pMgntInfo->IntelProximityModeInfo.PowerOutput){
339                         case 1:
340                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
341                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_100\n"));
342                                 break;
343                         case 2:
344                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_70;
345                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_70\n"));
346                                 break;
347                         case 3:
348                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_50;
349                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_50\n"));
350                                 break;
351                         case 4:
352                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_35;
353                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_35\n"));
354                                 break;
355                         case 5:
356                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_15;
357                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_15\n"));
358                                 break;
359                         default:
360                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
361                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_100\n"));
362                                 break;
363                 }               
364         }
365         else
366 #endif          
367         { 
368                 if(     (pMgntInfo->bDynamicTxPowerEnable != TRUE) ||
369                         (pHalData->DMFlag & HAL_DM_HIPWR_DISABLE) ||
370                         pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)
371                 {
372                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
373                 }
374                 else
375                 {
376                         if(pMgntInfo->bMediaConnect)    // Default port
377                         {
378                                 if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter))
379                                 {
380                                         UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
381                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
382                                 }
383                                 else
384                                 {
385                                         UndecoratedSmoothedPWDB = pHalData->UndecoratedSmoothedPWDB;
386                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
387                                 }
388                         }
389                         else // associated entry pwdb
390                         {       
391                                 UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
392                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
393                         }
394                                 
395                         if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
396                         {
397                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
398                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
399                         }
400                         else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
401                                 (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
402                         {
403                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
404                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
405                         }
406                         else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
407                         {
408                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
409                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
410                         }
411                 }
412         }
413         if( pHalData->DynamicTxHighPowerLvl != pHalData->LastDTPLvl )
414         {
415                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192C() Channel = %d \n" , pHalData->CurrentChannel));
416                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
417                 if(     (pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Normal) &&
418                         (pHalData->LastDTPLvl == TxHighPwrLevel_Level1 || pHalData->LastDTPLvl == TxHighPwrLevel_Level2)) //TxHighPwrLevel_Normal
419                         odm_DynamicTxPowerRestorePowerIndex(pDM_Odm);
420                 else if(pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
421                         odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x14);
422                 else if(pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
423                         odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x10);
424         }
425         pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
426
427         
428 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
429
430         #if (RTL8192C_SUPPORT==1) 
431         PADAPTER Adapter = pDM_Odm->Adapter;
432         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
433         struct dm_priv  *pdmpriv = &pHalData->dmpriv;
434         struct mlme_priv        *pmlmepriv = &(Adapter->mlmepriv);
435         struct mlme_ext_priv    *pmlmeext = &Adapter->mlmeextpriv;
436         int     UndecoratedSmoothedPWDB;
437
438         if(!pdmpriv->bDynamicTxPowerEnable)
439                 return;
440
441 #ifdef CONFIG_INTEL_PROXIM
442         if(Adapter->proximity.proxim_on== _TRUE){
443                 struct proximity_priv *prox_priv=Adapter->proximity.proximity_priv;
444                 // Intel set fixed tx power 
445                 printk("\n %s  Adapter->proximity.proxim_on=%d prox_priv->proxim_modeinfo->power_output=%d \n",__FUNCTION__,Adapter->proximity.proxim_on,prox_priv->proxim_modeinfo->power_output);
446                 if(prox_priv!=NULL){
447                         if(prox_priv->proxim_modeinfo->power_output> 0) 
448                         {
449                                 switch(prox_priv->proxim_modeinfo->power_output)
450                                 {
451                                         case 1:
452                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_100;
453                                                 printk("TxHighPwrLevel_100\n");
454                                                 break;
455                                         case 2:
456                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_70;
457                                                 printk("TxHighPwrLevel_70\n");
458                                                 break;
459                                         case 3:
460                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_50;
461                                                 printk("TxHighPwrLevel_50\n");
462                                                 break;
463                                         case 4:
464                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_35;
465                                                 printk("TxHighPwrLevel_35\n");
466                                                 break;
467                                         case 5:
468                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_15;
469                                                 printk("TxHighPwrLevel_15\n");
470                                                 break;
471                                         default:
472                                                 pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
473                                                 printk("TxHighPwrLevel_100\n");
474                                                 break;
475                                 }               
476                         }
477                 }
478         }
479         else
480 #endif  
481         {
482                 // STA not connected and AP not connected
483                 if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) &&   
484                         (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))
485                 {
486                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("Not connected to any \n"));
487                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
488
489                         //the LastDTPlvl should reset when disconnect, 
490                         //otherwise the tx power level wouldn't change when disconnect and connect again.
491                         // Maddest 20091220.
492                         pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
493                         return;
494                 }
495                 
496                 if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)       // Default port
497                 {
498                 #if 0
499                         //todo: AP Mode
500                         if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
501                                (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE))
502                         {
503                                 UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
504                                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
505                         }
506                         else
507                         {
508                                 UndecoratedSmoothedPWDB = pdmpriv->UndecoratedSmoothedPWDB;
509                                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
510                         }
511                 #else
512                 UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;     
513                 #endif
514                 }
515                 else // associated entry pwdb
516                 {       
517                         UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
518                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
519                 }
520                         
521                 if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
522                 {
523                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
524                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
525                 }
526                 else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
527                         (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
528                 {
529                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
530                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
531                 }
532                 else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
533                 {
534                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
535                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
536                 }
537         }
538         if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
539         {
540                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
541                 if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Normal) // HP1 -> Normal  or HP2 -> Normal
542                         odm_DynamicTxPowerRestorePowerIndex(pDM_Odm);
543                 else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
544                         odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x14);
545                 else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
546                         odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x10);
547         }
548         pdmpriv->LastDTPLvl = pdmpriv->DynamicTxHighPowerLvl;
549         #endif
550 #endif  // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
551
552 }
553
554
555 VOID 
556 odm_DynamicTxPower_92D(
557         IN              PVOID                                   pDM_VOID\r
558         )
559 {
560         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
561 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
562         PADAPTER Adapter = pDM_Odm->Adapter;
563         PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;
564         HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
565         s4Byte                          UndecoratedSmoothedPWDB;
566
567         PADAPTER        BuddyAdapter = Adapter->BuddyAdapter;
568         BOOLEAN         bGetValueFromBuddyAdapter = dm_DualMacGetParameterFromBuddyAdapter(Adapter);
569         u1Byte          HighPowerLvlBackForMac0 = TxHighPwrLevel_Level1;
570
571         // 2012/01/12 MH According to Luke's suggestion, only high power will support the feature.
572         if (pDM_Odm->ExtPA == FALSE)
573                 return;
574
575         // If dynamic high power is disabled.
576         if( (pMgntInfo->bDynamicTxPowerEnable != TRUE) ||
577                 (pHalData->DMFlag & HAL_DM_HIPWR_DISABLE) ||
578                 pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)
579         {
580                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
581                 return;
582         }
583
584         // STA not connected and AP not connected
585         if((!pMgntInfo->bMediaConnect) &&       
586                 (pHalData->EntryMinUndecoratedSmoothedPWDB == 0))
587         {
588                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("Not connected to any \n"));
589                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
590
591                 //the LastDTPlvl should reset when disconnect, 
592                 //otherwise the tx power level wouldn't change when disconnect and connect again.
593                 // Maddest 20091220.
594                  pHalData->LastDTPLvl=TxHighPwrLevel_Normal;
595                 return;
596         }
597         
598         if(pMgntInfo->bMediaConnect)    // Default port
599         {
600                 if(ACTING_AS_AP(Adapter) || pMgntInfo->mIbss)
601                 {
602                         UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
603                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
604                 }
605                 else
606                 {
607                         UndecoratedSmoothedPWDB = pHalData->UndecoratedSmoothedPWDB;
608                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
609                 }
610         }
611         else // associated entry pwdb
612         {       
613                 UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
614                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
615         }
616         
617         if(IS_HARDWARE_TYPE_8192D(Adapter) && GET_HAL_DATA(Adapter)->CurrentBandType == 1){
618                 if(UndecoratedSmoothedPWDB >= 0x33)
619                 {
620                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
621                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level2 (TxPwr=0x0)\n"));
622                 }
623                 else if((UndecoratedSmoothedPWDB <0x33) &&
624                         (UndecoratedSmoothedPWDB >= 0x2b) )
625                 {
626                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
627                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
628                 }
629                 else if(UndecoratedSmoothedPWDB < 0x2b)
630                 {
631                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
632                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Normal\n"));
633                 }
634
635         }
636         else
637         
638         {
639                 if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
640                 {
641                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
642                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
643                 }
644                 else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
645                         (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
646                 {
647                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
648                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
649                 }
650                 else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
651                 {
652                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
653                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
654                 }
655
656         }
657
658 //sherry  delete flag 20110517
659         if(bGetValueFromBuddyAdapter)
660         {
661                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 1 \n"));
662                 if(Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP)
663                 {
664                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() change value \n"));
665                         HighPowerLvlBackForMac0 = pHalData->DynamicTxHighPowerLvl;
666                         pHalData->DynamicTxHighPowerLvl = Adapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP;
667                         PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
668                         pHalData->DynamicTxHighPowerLvl = HighPowerLvlBackForMac0;
669                         Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = FALSE;
670                 }                                               
671         }
672
673         if( (pHalData->DynamicTxHighPowerLvl != pHalData->LastDTPLvl) )
674         {
675                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192S() Channel = %d \n" , pHalData->CurrentChannel));
676                         if(Adapter->DualMacSmartConcurrent == TRUE)
677                         {
678                                 if(BuddyAdapter == NULL)
679                                 {
680                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter == NULL case \n"));
681                                         if(!Adapter->bSlaveOfDMSP)
682                                         {
683                                                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
684                                         }
685                                 }
686                                 else
687                                 {
688                                         if(pHalData->MacPhyMode92D == DUALMAC_SINGLEPHY)
689                                         {
690                                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMSP \n"));
691                                                 if(Adapter->bSlaveOfDMSP)
692                                                 {
693                                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() bslave case  \n"));
694                                                         BuddyAdapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = TRUE;
695                                                         BuddyAdapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP = pHalData->DynamicTxHighPowerLvl;
696                                                 }
697                                                 else
698                                                 {
699                                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() master case  \n"));                                  
700                                                         if(!bGetValueFromBuddyAdapter)
701                                                         {
702                                                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 0 \n"));
703                                                                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
704                                                         }
705                                                 }
706                                         }
707                                         else
708                                         {
709                                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMDP\n"));
710                                                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
711                                         }
712                                 }
713                         }
714                         else
715                         {
716                                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
717                         }
718
719                 }
720         pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
721 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
722 #if (RTL8192D_SUPPORT==1) 
723         PADAPTER Adapter = pDM_Odm->Adapter;
724         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
725         struct mlme_priv        *pmlmepriv = &(Adapter->mlmepriv);
726
727         struct dm_priv  *pdmpriv = &pHalData->dmpriv;
728         DM_ODM_T                *podmpriv = &pHalData->odmpriv;
729         int     UndecoratedSmoothedPWDB;
730         #if (RTL8192D_EASY_SMART_CONCURRENT == 1)
731         PADAPTER        BuddyAdapter = Adapter->BuddyAdapter;
732         BOOLEAN         bGetValueFromBuddyAdapter = DualMacGetParameterFromBuddyAdapter(Adapter);
733         u8              HighPowerLvlBackForMac0 = TxHighPwrLevel_Level1;
734         #endif
735
736         // If dynamic high power is disabled.
737         if( (pdmpriv->bDynamicTxPowerEnable != _TRUE) ||
738                 (!(podmpriv->SupportAbility& ODM_BB_DYNAMIC_TXPWR)) )
739         {
740                 pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
741                 return;
742         }
743
744         // STA not connected and AP not connected
745         if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) &&   
746                 (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))
747         {
748                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("Not connected to any \n"));
749                 pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
750                 //the LastDTPlvl should reset when disconnect, 
751                 //otherwise the tx power level wouldn't change when disconnect and connect again.
752                 // Maddest 20091220.
753                 pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
754                 return;
755         }
756                 
757         if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)       // Default port
758         {
759         #if 0
760                 //todo: AP Mode
761                 if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
762                (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE))
763                 {
764                         UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
765                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
766                 }
767                 else
768                 {
769                         UndecoratedSmoothedPWDB = pdmpriv->UndecoratedSmoothedPWDB;
770                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
771                 }
772         #else
773         UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
774         #endif
775         }
776         else // associated entry pwdb
777         {       
778                 UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
779                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
780         }
781 #if TX_POWER_FOR_5G_BAND == 1
782         if(pHalData->CurrentBandType92D == BAND_ON_5G){
783                 if(UndecoratedSmoothedPWDB >= 0x33)
784                 {
785                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
786                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level2 (TxPwr=0x0)\n"));
787                 }
788                 else if((UndecoratedSmoothedPWDB <0x33) &&
789                         (UndecoratedSmoothedPWDB >= 0x2b) )
790                 {
791                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
792                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
793                 }
794                 else if(UndecoratedSmoothedPWDB < 0x2b)
795                 {
796                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
797                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Normal\n"));
798                 }
799         }
800         else
801 #endif
802         {
803                 if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
804                 {
805                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
806                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
807                 }
808                 else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
809                         (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
810                 {
811                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
812                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
813                 }
814                 else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
815                 {
816                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
817                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
818                 }
819         }
820 #if (RTL8192D_EASY_SMART_CONCURRENT == 1)
821         if(bGetValueFromBuddyAdapter)
822         {
823                 //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 1 \n"));
824                 if(Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP)
825                 {
826                         //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() change value \n"));
827                         HighPowerLvlBackForMac0 = pHalData->DynamicTxHighPowerLvl;
828                         pHalData->DynamicTxHighPowerLvl = Adapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP;
829                         PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
830                         pHalData->DynamicTxHighPowerLvl = HighPowerLvlBackForMac0;
831                         Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = _FALSE;
832                 }                                               
833         }
834 #endif
835
836         if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
837         {
838                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192S() Channel = %d \n" , pHalData->CurrentChannel));
839 #if (RTL8192D_EASY_SMART_CONCURRENT == 1)
840                 if(BuddyAdapter == NULL)
841                 {
842                         //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter == NULL case \n"));
843                         if(!Adapter->bSlaveOfDMSP)
844                         {
845                                 PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
846                         }
847                 }
848                 else
849                 {
850                         if(pHalData->MacPhyMode92D == DUALMAC_SINGLEPHY)
851                         {
852                                 //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMSP \n"));
853                                 if(Adapter->bSlaveOfDMSP)
854                                 {
855                                         //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() bslave case  \n"));
856                                         BuddyAdapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = _TRUE;
857                                         BuddyAdapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP = pHalData->DynamicTxHighPowerLvl;
858                                 }
859                                 else
860                                 {
861                                         //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() master case  \n"));                                     
862                                         if(!bGetValueFromBuddyAdapter)
863                                         {
864                                                 //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 0 \n"));
865                                                 PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
866                                         }
867                                 }
868                         }
869                         else
870                         {
871                                 //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMDP\n"));
872                                 PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
873                         }
874                 }
875 #else
876                 PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
877 #endif
878         }
879         pdmpriv->LastDTPLvl = pdmpriv->DynamicTxHighPowerLvl;
880 #endif  
881 #endif  // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
882
883 }
884 \r