chanspec_t wf_chspec_ctlchspec(chanspec_t chspec) { chanspec_t ctl_chspec = 0; uint8 channel; ASSERT(!wf_chspec_malformed(chspec)); /* Is there a sideband ? */ if (CHSPEC_CTL_SB(chspec) == WL_CHANSPEC_CTL_SB_NONE) { return chspec; } else { if (CHSPEC_CTL_SB(chspec) == WL_CHANSPEC_CTL_SB_UPPER) { channel = UPPER_20_SB(CHSPEC_CHANNEL(chspec)); } else { channel = LOWER_20_SB(CHSPEC_CHANNEL(chspec)); } ctl_chspec = channel | WL_CHANSPEC_BW_20 | WL_CHANSPEC_CTL_SB_NONE; ctl_chspec |= CHSPEC_BAND(chspec); } return ctl_chspec; }
/* * This function returns the channel number that control traffic is being sent on, for legacy * channels this is just the channel number, for 40MHZ channels it is the upper or lowre 20MHZ * sideband depending on the chanspec selected */ u8 brcmu_chspec_ctlchan(chanspec_t chspec) { u8 ctl_chan; /* Is there a sideband ? */ if (CHSPEC_CTL_SB(chspec) == WL_CHANSPEC_CTL_SB_NONE) { return CHSPEC_CHANNEL(chspec); } else { /* we only support 40MHZ with sidebands */ /* chanspec channel holds the centre frequency, use that and the * side band information to reconstruct the control channel number */ if (CHSPEC_CTL_SB(chspec) == WL_CHANSPEC_CTL_SB_UPPER) { /* control chan is the upper 20 MHZ SB of the 40MHZ channel */ ctl_chan = UPPER_20_SB(CHSPEC_CHANNEL(chspec)); } else { /* control chan is the lower 20 MHZ SB of the 40MHZ channel */ ctl_chan = LOWER_20_SB(CHSPEC_CHANNEL(chspec)); } } return ctl_chan; }
static uint8 spec_to_chan(chanspec_t chspec) { switch (CHSPEC_CTL_SB(chspec)) { case WL_CHANSPEC_CTL_SB_NONE: return CHSPEC_CHANNEL(chspec); case WL_CHANSPEC_CTL_SB_UPPER: return UPPER_20_SB(CHSPEC_CHANNEL(chspec)); case WL_CHANSPEC_CTL_SB_LOWER: return LOWER_20_SB(CHSPEC_CHANNEL(chspec)); default: return 0; } }
chanspec_t wf_chspec_ctlchspec(chanspec_t chspec) { DHD_MYTRACE(("%s-%s\n", __FILE__, __FUNCTION__)); chanspec_t ctl_chspec = 0; uint8 channel; ASSERT(!wf_chspec_malformed(chspec)); if (CHSPEC_CTL_SB(chspec) == WL_CHANSPEC_CTL_SB_NONE) { return chspec; } else { if (CHSPEC_CTL_SB(chspec) == WL_CHANSPEC_CTL_SB_UPPER) { channel = UPPER_20_SB(CHSPEC_CHANNEL(chspec)); } else { channel = LOWER_20_SB(CHSPEC_CHANNEL(chspec)); } ctl_chspec = channel | WL_CHANSPEC_BW_20 | WL_CHANSPEC_CTL_SB_NONE; ctl_chspec |= CHSPEC_BAND(chspec); } return ctl_chspec; }
uint8 wf_chspec_ctlchan(chanspec_t chspec) { uint8 ctl_chan; if (CHSPEC_CTL_SB(chspec) == WL_CHANSPEC_CTL_SB_NONE) { return CHSPEC_CHANNEL(chspec); } else { ASSERT(CHSPEC_BW(chspec) == WL_CHANSPEC_BW_40); if (CHSPEC_CTL_SB(chspec) == WL_CHANSPEC_CTL_SB_UPPER) { ctl_chan = UPPER_20_SB(CHSPEC_CHANNEL(chspec)); } else { ASSERT(CHSPEC_CTL_SB(chspec) == WL_CHANSPEC_CTL_SB_LOWER); ctl_chan = LOWER_20_SB(CHSPEC_CHANNEL(chspec)); } } return ctl_chan; }