Exemplo n.º 1
0
extern BOOLEAN wlSetRFChan(vmacApInfo_t *vmacSta_p,UINT32 channel)
{
	MIB_802DOT11 *mib = vmacSta_p->ShadowMib802dot11;
	MIB_PHY_DSSS_TABLE *PhyDSSSTable=mib->PhyDSSSTable;
	CHNL_FLAGS Chanflag;
	Chanflag = PhyDSSSTable->Chanflag;
	Chanflag.ChnlWidth=CH_20_MHz_WIDTH;
	Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
	if(domainChannelValid(channel, channel <= 14?FREQ_BAND_2DOT4GHZ:FREQ_BAND_5GHZ))
	{
		if(channel<=14)
			Chanflag.FreqBand=FREQ_BAND_2DOT4GHZ;
		else
			Chanflag.FreqBand=FREQ_BAND_5GHZ;

		if (wlchannelSet(vmacSta_p->dev, channel, Chanflag, 1))
		{
			WLDBG_EXIT_INFO(DBG_LEVEL_15, "setting channel failed");
			return FALSE;
		}
	}
	return TRUE;
}
Exemplo n.º 2
0
BOOLEAN UpdateCurrentChannelInMIB(vmacApInfo_t *vmacSta_p, UINT32 channel)
{
	MIB_802DOT11 *mib = vmacSta_p->ShadowMib802dot11;
	MIB_PHY_DSSS_TABLE *PhyDSSSTable=mib->PhyDSSSTable;
	UINT8 *mib_extSubCh_p = mib->mib_extSubCh;

	if(domainChannelValid(channel, channel <= 14?FREQ_BAND_2DOT4GHZ:FREQ_BAND_5GHZ))
	{
		PhyDSSSTable->CurrChan = channel;

		/* Currentlly, 40M is not supported for channel 14 */
		if (PhyDSSSTable->CurrChan == 14)
		{
			if ((PhyDSSSTable->Chanflag.ChnlWidth == CH_AUTO_WIDTH) ||
				(PhyDSSSTable->Chanflag.ChnlWidth == CH_40_MHz_WIDTH))
				PhyDSSSTable->Chanflag.ChnlWidth = CH_20_MHz_WIDTH;
		}

		//PhyDSSSTable->Chanflag.ChnlWidth=CH_40_MHz_WIDTH;
		PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
		if(((PhyDSSSTable->Chanflag.ChnlWidth==CH_40_MHz_WIDTH) || 
			(PhyDSSSTable->Chanflag.ChnlWidth==CH_AUTO_WIDTH)))
		{
			switch(PhyDSSSTable->CurrChan)
			{
			case 1:
			case 2:
			case 3:
			case 4:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 5:
				if(*mib_extSubCh_p==0)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				else if(*mib_extSubCh_p==1)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				else if(*mib_extSubCh_p==2)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 6:
			case 7:
			case 8:
			case 9:
			case 10:
				if(*mib_extSubCh_p==0)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				else if(*mib_extSubCh_p==1)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				else if(*mib_extSubCh_p==2)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 11:
			case 12:
			case 13:
			case 14:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
				/* for 5G */
			case 36:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 40:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 44:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 48:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 52:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 56:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 60:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 64:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;

			case 100:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 104:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 108:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 112:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 116:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 120:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 124:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 128:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 132:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 136:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 140:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;

			case 149:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 153:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 157:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 161:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			default:
				break;
			}
		}
		if(PhyDSSSTable->CurrChan<=14)
			PhyDSSSTable->Chanflag.FreqBand=FREQ_BAND_2DOT4GHZ;
		else
			PhyDSSSTable->Chanflag.FreqBand=FREQ_BAND_5GHZ;
	}else 
	{
		WLDBG_INFO(DBG_LEVEL_15,  "invalid channel %d\n", channel);
		return FALSE;
	}
	wlFwApplyChannelSettings(vmacSta_p->dev);
	return TRUE;
}
Exemplo n.º 3
0
extern BOOLEAN wlUpdateAutoChan(vmacApInfo_t *vmacSta_p,UINT32 chan,UINT8 shadowMIB)
{
	MIB_802DOT11 *mib = shadowMIB ? vmacSta_p->ShadowMib802dot11: vmacSta_p->Mib802dot11;

	MIB_PHY_DSSS_TABLE *PhyDSSSTable=mib->PhyDSSSTable;
	UINT8 *mib_extSubCh_p = mib->mib_extSubCh;
	PhyDSSSTable->CurrChan = chan;
	PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
	if(((PhyDSSSTable->Chanflag.ChnlWidth==CH_40_MHz_WIDTH) || (PhyDSSSTable->Chanflag.ChnlWidth==CH_AUTO_WIDTH)))
	{
		switch(PhyDSSSTable->CurrChan)
		{
		case 1:
		case 2:
		case 3:
		case 4:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 5:
			/* Now AutoBW use 5-1 instead of 5-9 for wifi cert convenience*/
			/*if(*mib_extSubCh_p==0)
			{
				if(domainChannelValid(chan+4, FREQ_BAND_2DOT4GHZ))
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				else if(domainChannelValid(chan-4, FREQ_BAND_2DOT4GHZ))
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			}
			else if(*mib_extSubCh_p==1)
			{
				if(domainChannelValid(chan-4, FREQ_BAND_2DOT4GHZ))
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				else
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;					
			}
			else if(*mib_extSubCh_p==2)
			{
				if(domainChannelValid(chan+4, FREQ_BAND_2DOT4GHZ))
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				else
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			}
			break;*/
        case 6:
		case 7:
		case 8:
		case 9:
		case 10:
			if(*mib_extSubCh_p==0)
			{
				if(domainChannelValid(chan-4, FREQ_BAND_2DOT4GHZ))
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				else if(domainChannelValid(chan+4, FREQ_BAND_2DOT4GHZ))
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			}
			else if(*mib_extSubCh_p==1)
			{
				if(domainChannelValid(chan-4, FREQ_BAND_2DOT4GHZ))
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				else
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;					
			}
			else if(*mib_extSubCh_p==2)
			{
				if(domainChannelValid(chan+4, FREQ_BAND_2DOT4GHZ))
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				else
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			}
			break;
		case 11:
		case 12:
		case 13:
		case 14:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
			/* for 5G */
		case 36:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 40:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 44:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 48:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 52:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 56:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 60:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 64:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;

		case 100:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 104:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 108:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 112:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 116:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 120:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 124:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 128:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 132:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 136:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 140:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;

		case 149:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 153:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 157:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
			break;
		case 161:
			PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
			break;
		case 165:
			/* Channel 165 currently only supports 20 MHz BW.*/
			/* Commented out for now.  Causes channel width to be set
			to 20 MHz if current channel is 165 and then switched
			to another channel. */
			/* PhyDSSSTable->Chanflag.ChnlWidth	   = CH_20_MHz_WIDTH; */
			/* PhyDSSSTable->Chanflag.ExtChnlOffset = NO_EXT_CHANNEL; */
			break;
		default:
			break;
		}
	}
	if(PhyDSSSTable->CurrChan<=14)
		PhyDSSSTable->Chanflag.FreqBand=FREQ_BAND_2DOT4GHZ;
	else
		PhyDSSSTable->Chanflag.FreqBand=FREQ_BAND_5GHZ;
	return TRUE;
}
Exemplo n.º 4
0
int wlset_mibChannel(vmacEntry_t *clientVMacEntry_p, UINT8 mib_STAMode)
{
	int rc = 0;
	//not sure the purpose of changing wdev0's mib, TODO
#ifndef MBSS
	mibMaster = vmacSta_p->master->ShadowMib802dot11;
	if ((mib_STAMode == CLIENT_MODE_N_5) || (mib_STAMode == CLIENT_MODE_A) ||(mib_STAMode == CLIENT_MODE_AUTO))
	{
		channel = 64;
		*mibMaster->mib_ApMode = AP_MODE_AandN;
	}
	else
	{
		channel = 6;
		*mibMaster->mib_ApMode = AP_MODE_BandGandN;
	}

	//#ifdef BRS_SUPPORT
	ieee80211_reset_rate_mask(mibMaster);
#if 0	
	switch (*(mibMaster->mib_ApMode))
	{
	case AP_MODE_B_ONLY:
		*(mibMaster->BssBasicRateMask) = MRVL_BSSBASICRATEMASK_B;
		*(mibMaster->NotBssBasicRateMask) = MRVL_NOTBSSBASICRATEMASK_B;
		break;

	case AP_MODE_G_ONLY:
		*(mibMaster->BssBasicRateMask) = MRVL_BSSBASICRATEMASK_G;
		*(mibMaster->NotBssBasicRateMask)  = MRVL_NOTBSSBASICRATEMASK_G;
		break;

	case AP_MODE_A_ONLY:
	case AP_MODE_AandN:
	case AP_MODE_5GHZ_N_ONLY:
		*(mibMaster->BssBasicRateMask) = MRVL_BSSBASICRATEMASK_A;
		*(mibMaster->NotBssBasicRateMask)  = MRVL_NOTBSSBASICRATEMASK_A;
		break;

	case AP_MODE_N_ONLY:
	case AP_MODE_MIXED:
	default:
		*(mibMaster->BssBasicRateMask) = MRVL_BSSBASICRATEMASK_BGN;
		*(mibMaster->NotBssBasicRateMask)  = MRVL_NOTBSSBASICRATEMASK_BGN;
		break;
	}
#endif	
	//#endif

	if(domainChannelValid(channel, channel <= 14?FREQ_BAND_2DOT4GHZ:FREQ_BAND_5GHZ))
	{
		PhyDSSSTable->CurrChan = channel;
		/* Currentlly, 40M is not supported for channel 14 */
		if (PhyDSSSTable->CurrChan == 14)
		{
			if ((PhyDSSSTable->Chanflag.ChnlWidth == CH_AUTO_WIDTH) || 
				(PhyDSSSTable->Chanflag.ChnlWidth == CH_40_MHz_WIDTH))
				PhyDSSSTable->Chanflag.ChnlWidth = CH_20_MHz_WIDTH;
		}

		//PhyDSSSTable->Chanflag.ChnlWidth=CH_40_MHz_WIDTH;
		PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
		if(((PhyDSSSTable->Chanflag.ChnlWidth==CH_40_MHz_WIDTH) || (PhyDSSSTable->Chanflag.ChnlWidth==CH_AUTO_WIDTH)))
		{
			switch(PhyDSSSTable->CurrChan)
			{
			case 1:
			case 2:
			case 3:
			case 4:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 5:
				/* Now AutoBW use 5-1 instead of 5-9 for wifi cert convenience*/
				/*if(*mib_extSubCh_p==0)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				else if(*mib_extSubCh_p==1)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				else if(*mib_extSubCh_p==2)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;*/
			case 6:
			case 7:
			case 8:
			case 9:
			case 10:
				if(*mib_extSubCh_p==0)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				else if(*mib_extSubCh_p==1)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				else if(*mib_extSubCh_p==2)
					PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 11:
			case 12:
			case 13:
			case 14:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
				/* for 5G */
			case 36:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 40:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 44:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 48:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 52:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 56:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 60:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 64:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;

			case 100:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 104:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 108:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 112:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 116:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 120:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 124:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 128:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 132:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 136:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 140:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;

			case 149:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 153:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			case 157:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_ABOVE_CTRL_CH;
				break;
			case 161:
				PhyDSSSTable->Chanflag.ExtChnlOffset=EXT_CH_BELOW_CTRL_CH;
				break;
			}
		}
		if(PhyDSSSTable->CurrChan<=14)
			PhyDSSSTable->Chanflag.FreqBand=FREQ_BAND_2DOT4GHZ;
		else
			PhyDSSSTable->Chanflag.FreqBand=FREQ_BAND_5GHZ;
	}else
		WLDBG_INFO(DBG_LEVEL_1,  "invalid channel %d\n", channel);
#endif
	return rc;
}