INT BndStrg_TableInit(PRTMP_ADAPTER pAd, PBND_STRG_CLI_TABLE table) { INT ret_val = BND_STRG_SUCCESS; if (table->bInitialized == TRUE) return BND_STRG_SUCCESS; NdisZeroMemory(table, sizeof(BND_STRG_CLI_TABLE)); OS_NdisAllocateSpinLock(&table->Lock); if (PHY_MODE_IS_5G_BAND(pAd->CommonCfg.PhyMode)) table->Band = BAND_5G; else table->Band = BAND_24G; BndStrg_SetInfFlags(pAd, table, TRUE); table->Ops = &D_BndStrgOps; table->RssiCheck = BND_STRG_RSSI_CHECK; table->AgeTime = BND_STRG_AGE_TIME; table->HoldTime = BND_STRG_HOLD_TIME; table->CheckTime_5G = BND_STRG_CHECK_TIME_5G; table->AutoOnOffThrd = BND_STRG_AUTO_ONOFF_THRD; table->priv = (VOID *) pAd; table->bInitialized = TRUE; if (ret_val != BND_STRG_SUCCESS) { BND_STRG_DBGPRINT(RT_DEBUG_ERROR, ("Error in %s(), error code = %d!\n", __FUNCTION__, ret_val)); } return BND_STRG_SUCCESS; }
INT BndStrg_SetInfFlags(PRTMP_ADAPTER pAd, PBND_STRG_CLI_TABLE table, BOOLEAN bInfReady) { INT ret_val = BND_STRG_SUCCESS; BNDSTRG_MSG msg; if (PHY_MODE_IS_5G_BAND(pAd->CommonCfg.PhyMode) && (table->b5GInfReady ^ bInfReady)) { table->b5GInfReady = bInfReady; msg.Action = INF_STATUS_RSP_5G; msg.b5GInfReady = table->b5GInfReady; RtmpOSWrielessEventSend( pAd->net_dev, RT_WLAN_EVENT_CUSTOM, OID_BNDSTRG_MSG, NULL, (UCHAR *)&msg, sizeof(msg)); BND_STRG_DBGPRINT(RT_DEBUG_OFF, (BLUE("%s(): BSS (%02x:%02x:%02x:%02x:%02x:%02x)") BLUE(" set 5G Inf %s.\n") , __FUNCTION__, PRINT_MAC(pAd->ApCfg.MBSSID[0].Bssid), bInfReady ? "ready" : "not ready")); } else if (table->b2GInfReady ^ bInfReady) { table->b2GInfReady = bInfReady; msg.Action = INF_STATUS_RSP_2G; msg.b2GInfReady = table->b2GInfReady; RtmpOSWrielessEventSend( pAd->net_dev, RT_WLAN_EVENT_CUSTOM, OID_BNDSTRG_MSG, NULL, (UCHAR *)&msg, sizeof(msg)); BND_STRG_DBGPRINT(RT_DEBUG_OFF, (BLUE("%s(): BSS (%02x:%02x:%02x:%02x:%02x:%02x)") BLUE(" set 2G Inf %s.\n") , __FUNCTION__, PRINT_MAC(pAd->ApCfg.MBSSID[0].Bssid), bInfReady ? "ready" : "not ready")); } return ret_val; }
/* ========================================================================== Description: Set Wireless Mode Return: TRUE if all parameters are OK, FALSE otherwise ========================================================================== */ INT RT_CfgSetWirelessMode( IN PRTMP_ADAPTER pAd, IN PSTRING arg) { INT MaxPhyMode = PHY_11G; LONG 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); /* 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 %d!\n", pAd->RfIcType)); return FALSE; } } if (WirelessMode <= MaxPhyMode) { pAd->CommonCfg.PhyMode = WirelessMode; pAd->CommonCfg.DesiredPhyMode = WirelessMode; return TRUE; } return FALSE; }
/* ========================================================================== 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; }