VOID WPS_ConstructBeaconFrame( IN PADAPTER Adapter ) { // // Simple config IE. by CCW - copy from 818x // PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); PSIMPLE_CONFIG_T pSimpleConfig ; OCTET_STRING SimpleConfigInfo; PMGNT_INFO pDefaultMgntInfo; if(ACTING_AS_IBSS(Adapter)) return; if(!ACTING_AS_AP(Adapter)) return; pDefaultMgntInfo = &(GetDefaultAdapter(Adapter)->MgntInfo); pSimpleConfig = GET_SIMPLE_CONFIG(pDefaultMgntInfo); if( ((pSimpleConfig->WpsIeVersion < SUPPORT_WPS_INFO_VERSION) || (wps_IsWPSIEReady(Adapter) == FALSE)) && pSimpleConfig->IELen > 0) { // Original method carrying WPS IE RT_TRACE(COMP_WPS, DBG_TRACE, ("AP Construct Beacon \n")); FillOctetString(SimpleConfigInfo, pSimpleConfig->IEBuf, pSimpleConfig->IELen); PacketMakeElement( &pMgntInfo->beaconframe, EID_Vendor, SimpleConfigInfo); } else if(pSimpleConfig->WpsIeVersion == SUPPORT_WPS_INFO_VERSION) { FillOctetString(SimpleConfigInfo, pSimpleConfig->ieBeaconBuf, pSimpleConfig->ieBeaconLen); if(pSimpleConfig->ieBeaconLen > 0) PacketAppendData(&pMgntInfo->beaconframe, SimpleConfigInfo); } }
VOID odm_DynamicTxPower_92C( IN PVOID pDM_VOID ) { PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID; #if (DM_ODM_SUPPORT_TYPE == ODM_WIN) PADAPTER Adapter = pDM_Odm->Adapter; PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); s4Byte UndecoratedSmoothedPWDB; // 2012/01/12 MH According to Luke's suggestion, only high power will support the feature. if (pDM_Odm->ExtPA == FALSE) return; // STA not connected and AP not connected if((!pMgntInfo->bMediaConnect) && (pHalData->EntryMinUndecoratedSmoothedPWDB == 0)) { ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("Not connected to any \n")); pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; //the LastDTPlvl should reset when disconnect, //otherwise the tx power level wouldn't change when disconnect and connect again. // Maddest 20091220. pHalData->LastDTPLvl=TxHighPwrLevel_Normal; return; } #if (INTEL_PROXIMITY_SUPPORT == 1) // Intel set fixed tx power if(pMgntInfo->IntelProximityModeInfo.PowerOutput > 0) { switch(pMgntInfo->IntelProximityModeInfo.PowerOutput){ case 1: pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_100; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_100\n")); break; case 2: pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_70; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_70\n")); break; case 3: pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_50; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_50\n")); break; case 4: pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_35; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_35\n")); break; case 5: pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_15; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_15\n")); break; default: pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_100; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_100\n")); break; } } else #endif { if( (pMgntInfo->bDynamicTxPowerEnable != TRUE) || (pHalData->DMFlag & HAL_DM_HIPWR_DISABLE) || pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER) { pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; } else { if(pMgntInfo->bMediaConnect) // Default port { if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) { UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB)); } else { UndecoratedSmoothedPWDB = pHalData->UndecoratedSmoothedPWDB; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB)); } } else // associated entry pwdb { UndecoratedSmoothedPWDB = pHalData->EntryMinUndecoratedSmoothedPWDB; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB)); } if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2) { pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n")); } else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) && (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) ) { pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n")); } else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5)) { pHalData->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n")); } } } if( pHalData->DynamicTxHighPowerLvl != pHalData->LastDTPLvl ) { ODM_RT_TRACE(pDM_Odm,ODM_COMP_DYNAMIC_TXPWR, DBG_LOUD, ("PHY_SetTxPowerLevel8192C() Channel = %d \n" , pHalData->CurrentChannel)); PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel); if( (pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Normal) && (pHalData->LastDTPLvl == TxHighPwrLevel_Level1 || pHalData->LastDTPLvl == TxHighPwrLevel_Level2)) //TxHighPwrLevel_Normal odm_DynamicTxPowerRestorePowerIndex(pDM_Odm); else if(pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1) odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x14); else if(pHalData->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2) odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x10); } pHalData->LastDTPLvl = pHalData->DynamicTxHighPowerLvl; #elif (DM_ODM_SUPPORT_TYPE == ODM_CE) #if (RTL8192C_SUPPORT==1) PADAPTER Adapter = pDM_Odm->Adapter; HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); struct dm_priv *pdmpriv = &pHalData->dmpriv; struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv); struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; int UndecoratedSmoothedPWDB; if(!pdmpriv->bDynamicTxPowerEnable) return; #ifdef CONFIG_INTEL_PROXIM if(Adapter->proximity.proxim_on== _TRUE){ struct proximity_priv *prox_priv=Adapter->proximity.proximity_priv; // Intel set fixed tx power 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); if(prox_priv!=NULL){ if(prox_priv->proxim_modeinfo->power_output> 0) { switch(prox_priv->proxim_modeinfo->power_output) { case 1: pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100; printk("TxHighPwrLevel_100\n"); break; case 2: pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_70; printk("TxHighPwrLevel_70\n"); break; case 3: pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_50; printk("TxHighPwrLevel_50\n"); break; case 4: pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_35; printk("TxHighPwrLevel_35\n"); break; case 5: pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_15; printk("TxHighPwrLevel_15\n"); break; default: pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100; printk("TxHighPwrLevel_100\n"); break; } } } } else #endif { // STA not connected and AP not connected if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) && (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0)) { //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("Not connected to any \n")); pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; //the LastDTPlvl should reset when disconnect, //otherwise the tx power level wouldn't change when disconnect and connect again. // Maddest 20091220. pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal; return; } if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) // Default port { #if 0 //todo: AP Mode if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) || (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE)) { UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB; //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Client PWDB = 0x%x \n", UndecoratedSmoothedPWDB)); } else { UndecoratedSmoothedPWDB = pdmpriv->UndecoratedSmoothedPWDB; //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("STA Default Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB)); } #else UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB; #endif } else // associated entry pwdb { UndecoratedSmoothedPWDB = pdmpriv->EntryMinUndecoratedSmoothedPWDB; //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("AP Ext Port PWDB = 0x%x \n", UndecoratedSmoothedPWDB)); } if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2) { pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2; //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x0)\n")); } else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) && (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) ) { pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1; //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Level1 (TxPwr=0x10)\n")); } else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-5)) { pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; //ODM_RT_TRACE(pDM_Odm,COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n")); } } if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) ) { PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel); if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Normal) // HP1 -> Normal or HP2 -> Normal odm_DynamicTxPowerRestorePowerIndex(pDM_Odm); else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1) odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x14); else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2) odm_DynamicTxPowerWritePowerIndex(pDM_Odm, 0x10); } pdmpriv->LastDTPLvl = pdmpriv->DynamicTxHighPowerLvl; #endif #endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN) }
// // This function set bandwidth mode in protocol layer. // VOID CHNL_SetBwChnl( IN PADAPTER pAdapter, IN u1Byte PrimaryChnl, IN CHANNEL_WIDTH Bandwidth, IN EXTCHNL_OFFSET BwOffset ) { PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; PRT_CHANNEL_INFO pChnlInfo = GET_CHNL_INFO(pMgntInfo); PADAPTER DefAdapter = GetDefaultAdapter(pAdapter); PMGNT_INFO pDefMgntInfo = &DefAdapter->MgntInfo; PRT_CHANNEL_INFO pDefChnlInfo = GET_CHNL_INFO(pDefMgntInfo); PCHANNEL_COMMON_CONTEXT pDefChnlCommInfo = DefAdapter->pPortCommonInfo->pChnlCommInfo; CHANNEL_WIDTH ToSetBandWidth = CHANNEL_WIDTH_20; EXTCHNL_OFFSET ToSTAExtChnlOffsetof40MHz= EXTCHNL_OFFSET_NO_EXT; EXTCHNL_OFFSET ToSTAExtChnlOffsetof80MHz= EXTCHNL_OFFSET_NO_EXT; u1Byte ToSTACenterFrequency; RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("PrimaryChnl %d\n", PrimaryChnl)); if(ACTING_AS_IBSS(DefAdapter)) { { // 2013/10/15 MH Add for higher adhoc and VHT 2.4G mode. if (!pMgntInfo->bReg11nAdhoc && !pMgntInfo->bRegVht24g) { Bandwidth= CHANNEL_WIDTH_20; BwOffset = EXTCHNL_OFFSET_NO_EXT; } } } ToSetBandWidth = Bandwidth; ToSTAExtChnlOffsetof40MHz = BwOffset; ToSTACenterFrequency = CHNL_GetCenterFrequency(PrimaryChnl, Bandwidth, BwOffset); ToSetBandWidth = CHNL_CheckChnlPlanWithBW(pAdapter,PrimaryChnl,Bandwidth,BwOffset); if((ToSetBandWidth != Bandwidth) && ToSetBandWidth==CHANNEL_WIDTH_20) ToSTACenterFrequency =PrimaryChnl; if(Bandwidth == CHANNEL_WIDTH_80) { if(ToSTACenterFrequency > pMgntInfo->dot11CurrentChannelNumber) ToSTAExtChnlOffsetof80MHz = EXTCHNL_OFFSET_UPPER; else if(ToSTACenterFrequency < pMgntInfo->dot11CurrentChannelNumber) ToSTAExtChnlOffsetof80MHz = EXTCHNL_OFFSET_LOWER; else ToSTAExtChnlOffsetof80MHz = EXTCHNL_OFFSET_NO_EXT; } RT_DISP(FCHNL, FCHNL_FUN, ("Set ToSetBandWidth = %d, ToSTAExtChnlOffset = %d,ToSTAExtChnlOffsetof80MHz %d, ToSTACenterFrequency= %d \n", ToSetBandWidth, ToSTAExtChnlOffsetof40MHz,ToSTAExtChnlOffsetof80MHz,ToSTACenterFrequency)); pMgntInfo->dot11CurrentChannelBandWidth = ToSetBandWidth; pChnlInfo->PrimaryChannelNumber = pDefChnlCommInfo->PrimaryChannelNumber = PrimaryChnl; pChnlInfo->CurrentChannelBandWidth = pDefChnlCommInfo->CurrentChannelBandWidth = ToSetBandWidth; pChnlInfo->CurrentChannelCenterFrequency = pDefChnlCommInfo->CurrentChannelCenterFrequency = ToSTACenterFrequency; pChnlInfo->Ext20MHzChnlOffsetOf40MHz = pDefChnlCommInfo->Ext20MHzChnlOffsetOf40MHz = ToSTAExtChnlOffsetof40MHz; pChnlInfo->Ext40MHzChnlOffsetOf80MHz = pDefChnlCommInfo->Ext40MHzChnlOffsetOf80MHz = ToSTAExtChnlOffsetof80MHz; // TODO: 2007.7.13 by Emily Wait 2000ms in order to garantee that switching // bandwidth is executed after scan is finished. It is a temporal solution // because software should ganrantee the last operation of switching bandwidth // is executed properlly. if(!(RT_DRIVER_HALT(DefAdapter))) PlatformSetTimer(DefAdapter, &pDefChnlInfo->SwBwTimer, 0); FunctionOut(COMP_SCAN); }
VOID CHNL_ChangeBwChnlFromPeerWorkitemCallBack( IN PVOID Context ) { PADAPTER Adapter = (PADAPTER)Context; CHANNEL_WIDTH ChnlBW; EXTCHNL_OFFSET ExtChnlOffset; PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; PRT_CHANNEL_INFO pChnlInfo = GET_CHNL_INFO(pMgntInfo); PADAPTER pExtAdapter = GetFirstAPAdapter(Adapter); PADAPTER pGoAdapter = GetFirstGOPort(Adapter); if(pExtAdapter != NULL) { if(pExtAdapter->bAPChannelInprogressForNewconnected) { RT_DISP(FCHNL, FCHNL_ERROR, ("%s: AP change channel in progress , return \n", __FUNCTION__)); return; } } if(pGoAdapter != NULL) { if(pGoAdapter->bAPChannelInprogressForNewconnected) { RT_DISP(FCHNL, FCHNL_ERROR, ("%s: AP change channel in progress , return \n", __FUNCTION__)); return; } } if(GetDefaultMgntInfo(Adapter)->RegMultiChannelFcsMode != 0) { if(TRUE == MultiChannel_IsFCSInProgress(Adapter)) { RT_TRACE(COMP_MULTICHANNEL, DBG_TRACE, ("CHNL_ChangeBwChnlFromPeerWorkitemCallBack(): skip change ch & bw due to MCC\n")); return; } } #if 0 if(GetDefaultAdapter(Adapter)->bInHctTest) { RT_DISP(FCHNL, FCHNL_ERROR, ("%s: hct test , return \n", __FUNCTION__)); return; } #endif chnl_GetBWFrom_IE(Adapter, &ChnlBW, &ExtChnlOffset); if( pChnlInfo->CurrentChannelBandWidth != ChnlBW || pChnlInfo->Ext20MHzChnlOffsetOf40MHz != ExtChnlOffset) { // // Leave LPS and wait until RF is already on before switching channel. 2014.09.25, by tynli. // LPSLeaveAndCheckReady(Adapter); RT_TRACE(COMP_MLME, DBG_LOUD, ("CHNL_ChangeBwChnlFromPeerWorkitemCallBack(): CurrentChannel=%d, ChnlBW=%d, ExtChnlOffset=%d\n", pMgntInfo->dot11CurrentChannelNumber, ChnlBW, ExtChnlOffset)); CHNL_SetBwChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber, ChnlBW, ExtChnlOffset); // We should set RA H2C cmd because the BW in TxDesc will be filled again by Fw, we // need to inform Fw the BW changed information. 2012.11.26. by tynli. // Suggested by SD1 Alex Chou. if(!ACTING_AS_AP(Adapter) && !ACTING_AS_IBSS(Adapter)) { // we only need to set rate mask Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mMacId, NULL, 0); } } }