/* ========================================================================== Description: Set Wireless Mode for MBSS Return: TRUE if all parameters are OK, FALSE otherwise ========================================================================== */ INT RT_CfgSetMbssWirelessMode(RTMP_ADAPTER *pAd, PSTRING arg) { INT cfg_mode; UCHAR wmode; RTMP_CHIP_CAP *pChipCap = &pAd->chipCap; cfg_mode = simple_strtol(arg, 0, 10); wmode = cfgmode_2_wmode((UCHAR)cfg_mode); if ((wmode == WMODE_INVALID) || (!wmode_valid(pAd, wmode))) { DBGPRINT(RT_DEBUG_ERROR, ("%s(): Invalid wireless mode(%d, wmode=0x%x), ChipCap(%s)\n", __FUNCTION__, cfg_mode, wmode, BAND_STR[pAd->chipCap.phy_caps & 0x3])); return FALSE; } if (WMODE_CAP_5G(wmode) && WMODE_CAP_2G(wmode)) { DBGPRINT(RT_DEBUG_ERROR, ("AP cannot support 2.4G/5G band mxied mode!\n")); return FALSE; } #if defined(MT76x2) && defined(DOT11_VHT_AC) if (pChipCap->ac_off_mode && WMODE_CAP_AC(wmode)) { DBGPRINT(RT_DEBUG_ERROR, ("it doesn't support VHT AC!\n")); wmode &= ~(WMODE_AC); } #endif /* MT76x2 */ if (pAd->ApCfg.BssidNum > 1) { /* pAd->CommonCfg.PhyMode = maximum capability of all MBSS */ if (wmode_band_equal(pAd->CommonCfg.PhyMode, wmode) == TRUE) { wmode = RT_CfgMbssWirelessModeMaxGet(pAd); DBGPRINT(RT_DEBUG_TRACE, ("mbss> Maximum phy mode = %d!\n", wmode)); } else { UINT32 IdBss; /* replace all phy mode with the one with different band */ DBGPRINT(RT_DEBUG_TRACE, ("mbss> Different band with the current one!\n")); DBGPRINT(RT_DEBUG_TRACE, ("mbss> Reset band of all BSS to the new one!\n")); for(IdBss=0; IdBss<pAd->ApCfg.BssidNum; IdBss++) pAd->ApCfg.MBSSID[IdBss].wdev.PhyMode = wmode; } } pAd->CommonCfg.PhyMode = wmode; pAd->CommonCfg.cfg_wmode = wmode; return TRUE; }
/* ========================================================================== Description: Set Wireless Mode for MBSS Return: TRUE if all parameters are OK, FALSE otherwise ========================================================================== */ INT RT_CfgSetMbssWirelessMode( IN PRTMP_ADAPTER pAd, IN PSTRING arg) { UINT32 MaxPhyMode = PHY_11G; UINT32 WirelessMode; #ifdef DOT11_N_SUPPORT if (!RTMP_TEST_MORE_FLAG(pAd, fRTMP_ADAPTER_DISABLE_DOT_11N)) MaxPhyMode = PHY_11N_5G; #endif /* DOT11_N_SUPPORT */ WirelessMode = simple_strtol(arg, 0, 10); if ((WirelessMode == PHY_11ABG_MIXED) #ifdef DOT11_N_SUPPORT || (WirelessMode == PHY_11ABGN_MIXED) || (WirelessMode == PHY_11AGN_MIXED) #endif /* DOT11_N_SUPPORT */ ) { DBGPRINT(RT_DEBUG_ERROR, ("mbss> Wrong phy mode for AP!\n")); return FALSE; } /* check if chip support 5G band when WirelessMode is 5G band */ if (PHY_MODE_IS_5G_BAND(WirelessMode)) { if (!RFIC_IS_5G_BAND(pAd)) { DBGPRINT(RT_DEBUG_ERROR, ("phy mode> Error! The chip does not support 5G band!\n")); return FALSE; } } if (WirelessMode <= MaxPhyMode) { if (pAd->ApCfg.BssidNum > 1) { /* pAd->CommonCfg.PhyMode = maximum capability of all MBSS */ if (RT_CfgMbssWirelessModeSameBand(pAd, WirelessMode) == TRUE) { WirelessMode = RT_CfgMbssWirelessModeMaxGet(pAd); DBGPRINT(RT_DEBUG_TRACE, ("mbss> Maximum phy mode = %d!\n", WirelessMode)); } else { UINT32 IdBss; /* replace all phy mode with the one with different band */ DBGPRINT(RT_DEBUG_TRACE, ("mbss> Different band with the current one!\n")); DBGPRINT(RT_DEBUG_TRACE, ("mbss> Reset band of all BSS to the new one!\n")); for(IdBss=0; IdBss<pAd->ApCfg.BssidNum; IdBss++) pAd->ApCfg.MBSSID[IdBss].PhyMode = WirelessMode; } } pAd->CommonCfg.PhyMode = WirelessMode; pAd->CommonCfg.DesiredPhyMode = WirelessMode; return TRUE; } return FALSE; }