dt-bindings: Document the Rockchip RGA bindings
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / hal / OUTSRC / phydm_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 #include "Mp_Precomp.h"
25 #include "phydm_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                         pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)
370                 {
371                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
372                 }
373                 else
374                 {
375                         if(pMgntInfo->bMediaConnect)    // Default port
376                         {
377                                 if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter))
378                                 {
379                                         UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
380                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
381                                 }
382                                 else
383                                 {
384                                         UndecoratedSmoothedPWDB = pHalData->UndecoratedSmoothedPWDB;
385                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
386                                 }
387                         }
388                         else // associated entry pwdb
389                         {       
390                                 UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
391                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
392                         }
393                                 
394                         if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
395                         {
396                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
397                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
398                         }
399                         else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
400                                 (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
401                         {
402                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
403                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
404                         }
405                         else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
406                         {
407                                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
408                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
409                         }
410                 }
411         }
412         if( pHalData->DynamicTxHighPowerLvl != pHalData->LastDTPLvl )
413         {
414                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192C() Channel = %d \n" , pHalData->CurrentChannel));
415                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
416                 if(     (pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Normal) &&
417                         (pHalData->LastDTPLvl == TxHighPwrLevel_Level1 || pHalData->LastDTPLvl == TxHighPwrLevel_Level2)) //TxHighPwrLevel_Normal
418                         odm_DynamicTxPowerRestorePowerIndex(pDM_Odm);
419                 else if(pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
420                         odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x14);
421                 else if(pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
422                         odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x10);
423         }
424         pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
425
426         
427 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
428
429         #if (RTL8192C_SUPPORT==1) 
430         PADAPTER Adapter = pDM_Odm->Adapter;
431         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
432         struct dm_priv  *pdmpriv = &pHalData->dmpriv;
433         struct mlme_priv        *pmlmepriv = &(Adapter->mlmepriv);
434         struct mlme_ext_priv    *pmlmeext = &Adapter->mlmeextpriv;
435         int     UndecoratedSmoothedPWDB;
436
437         if(!pdmpriv->bDynamicTxPowerEnable)
438                 return;
439
440 #ifdef CONFIG_INTEL_PROXIM
441         if(Adapter->proximity.proxim_on== _TRUE){
442                 struct proximity_priv *prox_priv=Adapter->proximity.proximity_priv;
443                 // Intel set fixed tx power 
444                 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);
445                 if(prox_priv!=NULL){
446                         if(prox_priv->proxim_modeinfo->power_output> 0) 
447                         {
448                                 switch(prox_priv->proxim_modeinfo->power_output)
449                                 {
450                                         case 1:
451                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_100;
452                                                 printk("TxHighPwrLevel_100\n");
453                                                 break;
454                                         case 2:
455                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_70;
456                                                 printk("TxHighPwrLevel_70\n");
457                                                 break;
458                                         case 3:
459                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_50;
460                                                 printk("TxHighPwrLevel_50\n");
461                                                 break;
462                                         case 4:
463                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_35;
464                                                 printk("TxHighPwrLevel_35\n");
465                                                 break;
466                                         case 5:
467                                                 pdmpriv->DynamicTxHighPowerLvl  = TxHighPwrLevel_15;
468                                                 printk("TxHighPwrLevel_15\n");
469                                                 break;
470                                         default:
471                                                 pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
472                                                 printk("TxHighPwrLevel_100\n");
473                                                 break;
474                                 }               
475                         }
476                 }
477         }
478         else
479 #endif  
480         {
481                 // STA not connected and AP not connected
482                 if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) &&   
483                         (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))
484                 {
485                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("Not connected to any \n"));
486                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
487
488                         //the LastDTPlvl should reset when disconnect, 
489                         //otherwise the tx power level wouldn't change when disconnect and connect again.
490                         // Maddest 20091220.
491                         pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
492                         return;
493                 }
494                 
495                 if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)       // Default port
496                 {
497                 #if 0
498                         //todo: AP Mode
499                         if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
500                                (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE))
501                         {
502                                 UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
503                                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
504                         }
505                         else
506                         {
507                                 UndecoratedSmoothedPWDB = pdmpriv->UndecoratedSmoothedPWDB;
508                                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
509                         }
510                 #else
511                 UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;     
512                 #endif
513                 }
514                 else // associated entry pwdb
515                 {       
516                         UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
517                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
518                 }
519                         
520                 if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
521                 {
522                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
523                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
524                 }
525                 else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
526                         (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
527                 {
528                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
529                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
530                 }
531                 else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
532                 {
533                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
534                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
535                 }
536         }
537         if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
538         {
539                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
540                 if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Normal) // HP1 -> Normal  or HP2 -> Normal
541                         odm_DynamicTxPowerRestorePowerIndex(pDM_Odm);
542                 else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
543                         odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x14);
544                 else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
545                         odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x10);
546         }
547         pdmpriv->LastDTPLvl = pdmpriv->DynamicTxHighPowerLvl;
548         #endif
549 #endif  // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
550
551 }
552
553
554 VOID 
555 odm_DynamicTxPower_92D(
556         IN              PVOID                                   pDM_VOID\r
557         )
558 {
559         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
560 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
561         PADAPTER Adapter = pDM_Odm->Adapter;
562         PMGNT_INFO                      pMgntInfo = &Adapter->MgntInfo;
563         HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);
564         s4Byte                          UndecoratedSmoothedPWDB;
565
566         PADAPTER        BuddyAdapter = Adapter->BuddyAdapter;
567         BOOLEAN         bGetValueFromBuddyAdapter = dm_DualMacGetParameterFromBuddyAdapter(Adapter);
568         u1Byte          HighPowerLvlBackForMac0 = TxHighPwrLevel_Level1;
569
570         // 2012/01/12 MH According to Luke's suggestion, only high power will support the feature.
571         if (pDM_Odm->ExtPA == FALSE)
572                 return;
573
574         // If dynamic high power is disabled.
575         if( (pMgntInfo->bDynamicTxPowerEnable != TRUE) ||
576                 pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)
577         {
578                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
579                 return;
580         }
581
582         // STA not connected and AP not connected
583         if((!pMgntInfo->bMediaConnect) &&       
584                 (pHalData->EntryMinUndecoratedSmoothedPWDB == 0))
585         {
586                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("Not connected to any \n"));
587                 pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
588
589                 //the LastDTPlvl should reset when disconnect, 
590                 //otherwise the tx power level wouldn't change when disconnect and connect again.
591                 // Maddest 20091220.
592                  pHalData->LastDTPLvl=TxHighPwrLevel_Normal;
593                 return;
594         }
595         
596         if(pMgntInfo->bMediaConnect)    // Default port
597         {
598                 if(ACTING_AS_AP(Adapter) || pMgntInfo->mIbss)
599                 {
600                         UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
601                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
602                 }
603                 else
604                 {
605                         UndecoratedSmoothedPWDB = pHalData->UndecoratedSmoothedPWDB;
606                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
607                 }
608         }
609         else // associated entry pwdb
610         {       
611                 UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB;
612                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
613         }
614         
615         if(IS_HARDWARE_TYPE_8192D(Adapter) && GET_HAL_DATA(Adapter)->CurrentBandType == 1){
616                 if(UndecoratedSmoothedPWDB >= 0x33)
617                 {
618                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
619                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level2 (TxPwr=0x0)\n"));
620                 }
621                 else if((UndecoratedSmoothedPWDB <0x33) &&
622                         (UndecoratedSmoothedPWDB >= 0x2b) )
623                 {
624                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
625                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
626                 }
627                 else if(UndecoratedSmoothedPWDB < 0x2b)
628                 {
629                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
630                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Normal\n"));
631                 }
632
633         }
634         else
635         
636         {
637                 if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
638                 {
639                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
640                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
641                 }
642                 else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
643                         (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
644                 {
645                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
646                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
647                 }
648                 else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
649                 {
650                         pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
651                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
652                 }
653
654         }
655
656 //sherry  delete flag 20110517
657         if(bGetValueFromBuddyAdapter)
658         {
659                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 1 \n"));
660                 if(Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP)
661                 {
662                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() change value \n"));
663                         HighPowerLvlBackForMac0 = pHalData->DynamicTxHighPowerLvl;
664                         pHalData->DynamicTxHighPowerLvl = Adapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP;
665                         PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
666                         pHalData->DynamicTxHighPowerLvl = HighPowerLvlBackForMac0;
667                         Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = FALSE;
668                 }                                               
669         }
670
671         if( (pHalData->DynamicTxHighPowerLvl != pHalData->LastDTPLvl) )
672         {
673                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192S() Channel = %d \n" , pHalData->CurrentChannel));
674                         if(Adapter->DualMacSmartConcurrent == TRUE)
675                         {
676                                 if(BuddyAdapter == NULL)
677                                 {
678                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter == NULL case \n"));
679                                         if(!Adapter->bSlaveOfDMSP)
680                                         {
681                                                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
682                                         }
683                                 }
684                                 else
685                                 {
686                                         if(pHalData->MacPhyMode92D == DUALMAC_SINGLEPHY)
687                                         {
688                                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMSP \n"));
689                                                 if(Adapter->bSlaveOfDMSP)
690                                                 {
691                                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() bslave case  \n"));
692                                                         BuddyAdapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = TRUE;
693                                                         BuddyAdapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP = pHalData->DynamicTxHighPowerLvl;
694                                                 }
695                                                 else
696                                                 {
697                                                         ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() master case  \n"));                                  
698                                                         if(!bGetValueFromBuddyAdapter)
699                                                         {
700                                                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 0 \n"));
701                                                                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
702                                                         }
703                                                 }
704                                         }
705                                         else
706                                         {
707                                                 ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMDP\n"));
708                                                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
709                                         }
710                                 }
711                         }
712                         else
713                         {
714                                 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
715                         }
716
717                 }
718         pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl;
719 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
720 #if (RTL8192D_SUPPORT==1) 
721         PADAPTER Adapter = pDM_Odm->Adapter;
722         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);
723         struct mlme_priv        *pmlmepriv = &(Adapter->mlmepriv);
724
725         struct dm_priv  *pdmpriv = &pHalData->dmpriv;
726         DM_ODM_T                *podmpriv = &pHalData->odmpriv;
727         int     UndecoratedSmoothedPWDB;
728         #if (RTL8192D_EASY_SMART_CONCURRENT == 1)
729         PADAPTER        BuddyAdapter = Adapter->BuddyAdapter;
730         BOOLEAN         bGetValueFromBuddyAdapter = DualMacGetParameterFromBuddyAdapter(Adapter);
731         u8              HighPowerLvlBackForMac0 = TxHighPwrLevel_Level1;
732         #endif
733
734         // If dynamic high power is disabled.
735         if( (pdmpriv->bDynamicTxPowerEnable != _TRUE) ||
736                 (!(podmpriv->SupportAbility& ODM_BB_DYNAMIC_TXPWR)) )
737         {
738                 pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
739                 return;
740         }
741
742         // STA not connected and AP not connected
743         if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) &&   
744                 (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))
745         {
746                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("Not connected to any \n"));
747                 pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
748                 //the LastDTPlvl should reset when disconnect, 
749                 //otherwise the tx power level wouldn't change when disconnect and connect again.
750                 // Maddest 20091220.
751                 pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
752                 return;
753         }
754                 
755         if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)       // Default port
756         {
757         #if 0
758                 //todo: AP Mode
759                 if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
760                (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE))
761                 {
762                         UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
763                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
764                 }
765                 else
766                 {
767                         UndecoratedSmoothedPWDB = pdmpriv->UndecoratedSmoothedPWDB;
768                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
769                 }
770         #else
771         UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
772         #endif
773         }
774         else // associated entry pwdb
775         {       
776                 UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
777                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB));
778         }
779 #if TX_POWER_FOR_5G_BAND == 1
780         if(pHalData->CurrentBandType92D == BAND_ON_5G){
781                 if(UndecoratedSmoothedPWDB >= 0x33)
782                 {
783                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
784                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level2 (TxPwr=0x0)\n"));
785                 }
786                 else if((UndecoratedSmoothedPWDB <0x33) &&
787                         (UndecoratedSmoothedPWDB >= 0x2b) )
788                 {
789                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
790                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
791                 }
792                 else if(UndecoratedSmoothedPWDB < 0x2b)
793                 {
794                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
795                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("5G:TxHighPwrLevel_Normal\n"));
796                 }
797         }
798         else
799 #endif
800         {
801                 if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2)
802                 {
803                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2;
804                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n"));
805                 }
806                 else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) &&
807                         (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) )
808                 {
809                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1;
810                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n"));
811                 }
812                 else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5))
813                 {
814                         pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
815                         //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
816                 }
817         }
818 #if (RTL8192D_EASY_SMART_CONCURRENT == 1)
819         if(bGetValueFromBuddyAdapter)
820         {
821                 //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 1 \n"));
822                 if(Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP)
823                 {
824                         //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() change value \n"));
825                         HighPowerLvlBackForMac0 = pHalData->DynamicTxHighPowerLvl;
826                         pHalData->DynamicTxHighPowerLvl = Adapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP;
827                         PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
828                         pHalData->DynamicTxHighPowerLvl = HighPowerLvlBackForMac0;
829                         Adapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = _FALSE;
830                 }                                               
831         }
832 #endif
833
834         if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
835         {
836                 //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192S() Channel = %d \n" , pHalData->CurrentChannel));
837 #if (RTL8192D_EASY_SMART_CONCURRENT == 1)
838                 if(BuddyAdapter == NULL)
839                 {
840                         //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter == NULL case \n"));
841                         if(!Adapter->bSlaveOfDMSP)
842                         {
843                                 PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
844                         }
845                 }
846                 else
847                 {
848                         if(pHalData->MacPhyMode92D == DUALMAC_SINGLEPHY)
849                         {
850                                 //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMSP \n"));
851                                 if(Adapter->bSlaveOfDMSP)
852                                 {
853                                         //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() bslave case  \n"));
854                                         BuddyAdapter->DualMacDMSPControl.bChangeTxHighPowerLvlForAnotherMacOfDMSP = _TRUE;
855                                         BuddyAdapter->DualMacDMSPControl.CurTxHighLvlForAnotherMacOfDMSP = pHalData->DynamicTxHighPowerLvl;
856                                 }
857                                 else
858                                 {
859                                         //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() master case  \n"));                                     
860                                         if(!bGetValueFromBuddyAdapter)
861                                         {
862                                                 //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() mac 0 for mac 0 \n"));
863                                                 PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
864                                         }
865                                 }
866                         }
867                         else
868                         {
869                                 //ODM_RT_TRACE(pDM_Odm,COMP_MLME,DBG_LOUD,("dm_DynamicTxPower() BuddyAdapter DMDP\n"));
870                                 PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
871                         }
872                 }
873 #else
874                 PHY_SetTxPowerLevel8192D(Adapter, pHalData->CurrentChannel);
875 #endif
876         }
877         pdmpriv->LastDTPLvl = pdmpriv->DynamicTxHighPowerLvl;
878 #endif  
879 #endif  // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
880
881 }
882 \r