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; }
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; }
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; }
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; }