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;
}
示例#3
0
/* 
    ==========================================================================
    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;
	
}
示例#4
0
/* 
    ==========================================================================
    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;
}