|
@@ -30,40 +30,6 @@
|
|
|
/* QDB() macro takes a dB value and converts to a quarter dB value */
|
|
|
#define QDB(n) ((n) * BRCMS_TXPWR_DB_FACTOR)
|
|
|
|
|
|
-#define LOCALE_CHAN_01_11 (1<<0)
|
|
|
-#define LOCALE_CHAN_12_13 (1<<1)
|
|
|
-#define LOCALE_CHAN_14 (1<<2)
|
|
|
-#define LOCALE_SET_5G_LOW_JP1 (1<<3) /* 34-48, step 2 */
|
|
|
-#define LOCALE_SET_5G_LOW_JP2 (1<<4) /* 34-46, step 4 */
|
|
|
-#define LOCALE_SET_5G_LOW1 (1<<5) /* 36-48, step 4 */
|
|
|
-#define LOCALE_SET_5G_LOW2 (1<<6) /* 52 */
|
|
|
-#define LOCALE_SET_5G_LOW3 (1<<7) /* 56-64, step 4 */
|
|
|
-#define LOCALE_SET_5G_MID1 (1<<8) /* 100-116, step 4 */
|
|
|
-#define LOCALE_SET_5G_MID2 (1<<9) /* 120-124, step 4 */
|
|
|
-#define LOCALE_SET_5G_MID3 (1<<10) /* 128 */
|
|
|
-#define LOCALE_SET_5G_HIGH1 (1<<11) /* 132-140, step 4 */
|
|
|
-#define LOCALE_SET_5G_HIGH2 (1<<12) /* 149-161, step 4 */
|
|
|
-#define LOCALE_SET_5G_HIGH3 (1<<13) /* 165 */
|
|
|
-#define LOCALE_CHAN_52_140_ALL (1<<14)
|
|
|
-#define LOCALE_SET_5G_HIGH4 (1<<15) /* 184-216 */
|
|
|
-
|
|
|
-#define LOCALE_CHAN_36_64 (LOCALE_SET_5G_LOW1 | \
|
|
|
- LOCALE_SET_5G_LOW2 | \
|
|
|
- LOCALE_SET_5G_LOW3)
|
|
|
-#define LOCALE_CHAN_52_64 (LOCALE_SET_5G_LOW2 | LOCALE_SET_5G_LOW3)
|
|
|
-#define LOCALE_CHAN_100_124 (LOCALE_SET_5G_MID1 | LOCALE_SET_5G_MID2)
|
|
|
-#define LOCALE_CHAN_100_140 (LOCALE_SET_5G_MID1 | LOCALE_SET_5G_MID2 | \
|
|
|
- LOCALE_SET_5G_MID3 | LOCALE_SET_5G_HIGH1)
|
|
|
-#define LOCALE_CHAN_149_165 (LOCALE_SET_5G_HIGH2 | LOCALE_SET_5G_HIGH3)
|
|
|
-#define LOCALE_CHAN_184_216 LOCALE_SET_5G_HIGH4
|
|
|
-
|
|
|
-#define LOCALE_CHAN_01_14 (LOCALE_CHAN_01_11 | \
|
|
|
- LOCALE_CHAN_12_13 | \
|
|
|
- LOCALE_CHAN_14)
|
|
|
-
|
|
|
-#define LOCALE_RESTRICTED_NONE 0
|
|
|
-#define LOCALE_RESTRICTED_SET_2G_SHORT 1
|
|
|
-
|
|
|
#define LOCALE_2G_IDX_i 0
|
|
|
#define LOCALE_5G_IDX_11 0
|
|
|
#define LOCALE_MIMO_IDX_bn 0
|
|
@@ -134,10 +100,6 @@ static const struct ieee80211_regdomain brcms_regdom_x2 = {
|
|
|
struct brcms_cm_band {
|
|
|
/* struct locale_info flags */
|
|
|
u8 locale_flags;
|
|
|
- /* List of valid channels in the country */
|
|
|
- struct brcms_chanvec valid_channels;
|
|
|
- /* List of restricted use channels */
|
|
|
- const struct brcms_chanvec *restricted_channels;
|
|
|
};
|
|
|
|
|
|
/* locale per-channel tx power limits for MIMO frames
|
|
@@ -171,211 +133,17 @@ struct brcms_cm_info {
|
|
|
const struct brcms_regd *world_regd;
|
|
|
/* per-band state (one per phy/radio) */
|
|
|
struct brcms_cm_band bandstate[MAXBANDS];
|
|
|
- /* quiet channels currently for radar sensitivity or 11h support */
|
|
|
- /* channels on which we cannot transmit */
|
|
|
- struct brcms_chanvec quiet_channels;
|
|
|
};
|
|
|
|
|
|
/* locale channel and power info. */
|
|
|
struct locale_info {
|
|
|
- u32 valid_channels;
|
|
|
- /* List of channels used only if APs are detected */
|
|
|
- u8 restricted_channels;
|
|
|
u8 flags;
|
|
|
};
|
|
|
|
|
|
-/* Regulatory Matrix Spreadsheet (CLM) MIMO v3.7.9 */
|
|
|
-
|
|
|
-/*
|
|
|
- * Some common channel sets
|
|
|
- */
|
|
|
-
|
|
|
-/* No channels */
|
|
|
-static const struct brcms_chanvec chanvec_none = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-/*
|
|
|
- * Restricted channel sets
|
|
|
- */
|
|
|
-
|
|
|
-/* Channels 12, 13 */
|
|
|
-static const struct brcms_chanvec restricted_set_2g_short = {
|
|
|
- {0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-/* global memory to provide working buffer for expanded locale */
|
|
|
-
|
|
|
-static const struct brcms_chanvec *g_table_restricted_chan[] = {
|
|
|
- &chanvec_none, /* restricted_set_none */
|
|
|
- &restricted_set_2g_short,
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_2g_01_11 = {
|
|
|
- {0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_2g_12_13 = {
|
|
|
- {0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_2g_14 = {
|
|
|
- {0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_LOW_JP1 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x01, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_LOW_JP2 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_LOW1 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x01, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_LOW2 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_LOW3 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
|
|
|
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_MID1 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_MID2 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_MID3 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_HIGH1 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_HIGH2 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x20, 0x22, 0x02, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_HIGH3 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_52_140_ALL = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11,
|
|
|
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
|
|
|
- 0x11, 0x11, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec locale_5g_HIGH4 = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
|
|
|
- 0x11, 0x11, 0x11, 0x11}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct brcms_chanvec *g_table_locale_base[] = {
|
|
|
- &locale_2g_01_11,
|
|
|
- &locale_2g_12_13,
|
|
|
- &locale_2g_14,
|
|
|
- &locale_5g_LOW_JP1,
|
|
|
- &locale_5g_LOW_JP2,
|
|
|
- &locale_5g_LOW1,
|
|
|
- &locale_5g_LOW2,
|
|
|
- &locale_5g_LOW3,
|
|
|
- &locale_5g_MID1,
|
|
|
- &locale_5g_MID2,
|
|
|
- &locale_5g_MID3,
|
|
|
- &locale_5g_HIGH1,
|
|
|
- &locale_5g_HIGH2,
|
|
|
- &locale_5g_HIGH3,
|
|
|
- &locale_5g_52_140_ALL,
|
|
|
- &locale_5g_HIGH4
|
|
|
-};
|
|
|
-
|
|
|
-static void brcms_c_locale_add_channels(struct brcms_chanvec *target,
|
|
|
- const struct brcms_chanvec *channels)
|
|
|
-{
|
|
|
- u8 i;
|
|
|
- for (i = 0; i < sizeof(struct brcms_chanvec); i++)
|
|
|
- target->vec[i] |= channels->vec[i];
|
|
|
-}
|
|
|
-
|
|
|
-static void brcms_c_locale_get_channels(const struct locale_info *locale,
|
|
|
- struct brcms_chanvec *channels)
|
|
|
-{
|
|
|
- u8 i;
|
|
|
-
|
|
|
- memset(channels, 0, sizeof(struct brcms_chanvec));
|
|
|
-
|
|
|
- for (i = 0; i < ARRAY_SIZE(g_table_locale_base); i++) {
|
|
|
- if (locale->valid_channels & (1 << i))
|
|
|
- brcms_c_locale_add_channels(channels,
|
|
|
- g_table_locale_base[i]);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Locale Definitions - 2.4 GHz
|
|
|
*/
|
|
|
static const struct locale_info locale_i = { /* locale i. channel 1 - 13 */
|
|
|
- LOCALE_CHAN_01_11 | LOCALE_CHAN_12_13,
|
|
|
- LOCALE_RESTRICTED_SET_2G_SHORT,
|
|
|
BRCMS_EIRP
|
|
|
};
|
|
|
|
|
@@ -383,9 +151,6 @@ static const struct locale_info locale_i = { /* locale i. channel 1 - 13 */
|
|
|
* Locale Definitions - 5 GHz
|
|
|
*/
|
|
|
static const struct locale_info locale_11 = {
|
|
|
- /* locale 11. channel 36 - 48, 52 - 64, 100 - 140, 149 - 165 */
|
|
|
- LOCALE_CHAN_36_64 | LOCALE_CHAN_100_140 | LOCALE_CHAN_149_165,
|
|
|
- LOCALE_RESTRICTED_NONE,
|
|
|
BRCMS_EIRP | BRCMS_DFS_EU
|
|
|
};
|
|
|
|
|
@@ -521,62 +286,6 @@ static const struct brcms_regd *brcms_default_world_regd(void)
|
|
|
return &cntry_locales[0];
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * reset the quiet channels vector to the union
|
|
|
- * of the restricted and radar channel sets
|
|
|
- */
|
|
|
-static void brcms_c_quiet_channels_reset(struct brcms_cm_info *wlc_cm)
|
|
|
-{
|
|
|
- struct brcms_c_info *wlc = wlc_cm->wlc;
|
|
|
- uint i, j;
|
|
|
- struct brcms_band *band;
|
|
|
- const struct brcms_chanvec *chanvec;
|
|
|
-
|
|
|
- memset(&wlc_cm->quiet_channels, 0, sizeof(struct brcms_chanvec));
|
|
|
-
|
|
|
- band = wlc->band;
|
|
|
- for (i = 0; i < wlc->pub->_nbands;
|
|
|
- i++, band = wlc->bandstate[OTHERBANDUNIT(wlc)]) {
|
|
|
-
|
|
|
- /* initialize quiet channels for restricted channels */
|
|
|
- chanvec = wlc_cm->bandstate[band->bandunit].restricted_channels;
|
|
|
- for (j = 0; j < sizeof(struct brcms_chanvec); j++)
|
|
|
- wlc_cm->quiet_channels.vec[j] |= chanvec->vec[j];
|
|
|
-
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/* Is the channel valid for the current locale and current band? */
|
|
|
-static bool brcms_c_valid_channel20(struct brcms_cm_info *wlc_cm, uint val)
|
|
|
-{
|
|
|
- struct brcms_c_info *wlc = wlc_cm->wlc;
|
|
|
-
|
|
|
- return ((val < MAXCHANNEL) &&
|
|
|
- isset(wlc_cm->bandstate[wlc->band->bandunit].valid_channels.vec,
|
|
|
- val));
|
|
|
-}
|
|
|
-
|
|
|
-/* Is the channel valid for the current locale and specified band? */
|
|
|
-static bool brcms_c_valid_channel20_in_band(struct brcms_cm_info *wlc_cm,
|
|
|
- uint bandunit, uint val)
|
|
|
-{
|
|
|
- return ((val < MAXCHANNEL)
|
|
|
- && isset(wlc_cm->bandstate[bandunit].valid_channels.vec, val));
|
|
|
-}
|
|
|
-
|
|
|
-/* Is the channel valid for the current locale? (but don't consider channels not
|
|
|
- * available due to bandlocking)
|
|
|
- */
|
|
|
-static bool brcms_c_valid_channel20_db(struct brcms_cm_info *wlc_cm, uint val)
|
|
|
-{
|
|
|
- struct brcms_c_info *wlc = wlc_cm->wlc;
|
|
|
-
|
|
|
- return brcms_c_valid_channel20(wlc->cmi, val) ||
|
|
|
- (!wlc->bandlocked
|
|
|
- && brcms_c_valid_channel20_in_band(wlc->cmi,
|
|
|
- OTHERBANDUNIT(wlc), val));
|
|
|
-}
|
|
|
-
|
|
|
/* JP, J1 - J10 are Japan ccodes */
|
|
|
static bool brcms_c_japan_ccode(const char *ccode)
|
|
|
{
|
|
@@ -664,10 +373,9 @@ brcms_c_channels_init(struct brcms_cm_info *wlc_cm,
|
|
|
const struct country_info *country)
|
|
|
{
|
|
|
struct brcms_c_info *wlc = wlc_cm->wlc;
|
|
|
- uint i, j;
|
|
|
+ uint i;
|
|
|
struct brcms_band *band;
|
|
|
const struct locale_info *li;
|
|
|
- struct brcms_chanvec sup_chan;
|
|
|
const struct locale_mimo_info *li_mimo;
|
|
|
|
|
|
band = wlc->band;
|
|
@@ -685,26 +393,8 @@ brcms_c_channels_init(struct brcms_cm_info *wlc_cm,
|
|
|
/* merge the mimo non-mimo locale flags */
|
|
|
wlc_cm->bandstate[band->bandunit].locale_flags |=
|
|
|
li_mimo->flags;
|
|
|
-
|
|
|
- wlc_cm->bandstate[band->bandunit].restricted_channels =
|
|
|
- g_table_restricted_chan[li->restricted_channels];
|
|
|
-
|
|
|
- /*
|
|
|
- * set the channel availability, masking out the channels
|
|
|
- * that may not be supported on this phy.
|
|
|
- */
|
|
|
- wlc_phy_chanspec_band_validch(band->pi, band->bandtype,
|
|
|
- &sup_chan);
|
|
|
- brcms_c_locale_get_channels(li,
|
|
|
- &wlc_cm->bandstate[band->bandunit].
|
|
|
- valid_channels);
|
|
|
- for (j = 0; j < sizeof(struct brcms_chanvec); j++)
|
|
|
- wlc_cm->bandstate[band->bandunit].valid_channels.
|
|
|
- vec[j] &= sup_chan.vec[j];
|
|
|
}
|
|
|
|
|
|
- brcms_c_quiet_channels_reset(wlc_cm);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -794,23 +484,12 @@ brcms_c_channel_locale_flags_in_band(struct brcms_cm_info *wlc_cm,
|
|
|
return wlc_cm->bandstate[bandunit].locale_flags;
|
|
|
}
|
|
|
|
|
|
-static bool
|
|
|
-brcms_c_quiet_chanspec(struct brcms_cm_info *wlc_cm, u16 chspec)
|
|
|
-{
|
|
|
- return (wlc_cm->wlc->pub->_n_enab & SUPPORT_11N) &&
|
|
|
- CHSPEC_IS40(chspec) ?
|
|
|
- (isset(wlc_cm->quiet_channels.vec,
|
|
|
- lower_20_sb(CHSPEC_CHANNEL(chspec))) ||
|
|
|
- isset(wlc_cm->quiet_channels.vec,
|
|
|
- upper_20_sb(CHSPEC_CHANNEL(chspec)))) :
|
|
|
- isset(wlc_cm->quiet_channels.vec, CHSPEC_CHANNEL(chspec));
|
|
|
-}
|
|
|
-
|
|
|
void
|
|
|
brcms_c_channel_set_chanspec(struct brcms_cm_info *wlc_cm, u16 chanspec,
|
|
|
u8 local_constraint_qdbm)
|
|
|
{
|
|
|
struct brcms_c_info *wlc = wlc_cm->wlc;
|
|
|
+ struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.channel;
|
|
|
struct txpwr_limits txpwr;
|
|
|
|
|
|
brcms_c_channel_reg_limits(wlc_cm, chanspec, &txpwr);
|
|
@@ -820,7 +499,7 @@ brcms_c_channel_set_chanspec(struct brcms_cm_info *wlc_cm, u16 chanspec,
|
|
|
);
|
|
|
|
|
|
brcms_b_set_chanspec(wlc->hw, chanspec,
|
|
|
- (brcms_c_quiet_chanspec(wlc_cm, chanspec) != 0),
|
|
|
+ !!(ch->flags & IEEE80211_CHAN_PASSIVE_SCAN),
|
|
|
&txpwr);
|
|
|
}
|
|
|
|
|
@@ -1036,8 +715,7 @@ static bool brcms_c_chspec_malformed(u16 chanspec)
|
|
|
* and they are also a legal HT combination
|
|
|
*/
|
|
|
static bool
|
|
|
-brcms_c_valid_chanspec_ext(struct brcms_cm_info *wlc_cm, u16 chspec,
|
|
|
- bool dualband)
|
|
|
+brcms_c_valid_chanspec_ext(struct brcms_cm_info *wlc_cm, u16 chspec)
|
|
|
{
|
|
|
struct brcms_c_info *wlc = wlc_cm->wlc;
|
|
|
u8 channel = CHSPEC_CHANNEL(chspec);
|
|
@@ -1053,22 +731,12 @@ brcms_c_valid_chanspec_ext(struct brcms_cm_info *wlc_cm, u16 chspec,
|
|
|
chspec_bandunit(chspec))
|
|
|
return false;
|
|
|
|
|
|
- /* Check a 20Mhz channel */
|
|
|
- if (CHSPEC_IS20(chspec)) {
|
|
|
- if (dualband)
|
|
|
- return brcms_c_valid_channel20_db(wlc_cm->wlc->cmi,
|
|
|
- channel);
|
|
|
- else
|
|
|
- return brcms_c_valid_channel20(wlc_cm->wlc->cmi,
|
|
|
- channel);
|
|
|
- }
|
|
|
-
|
|
|
- return false;
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
bool brcms_c_valid_chanspec_db(struct brcms_cm_info *wlc_cm, u16 chspec)
|
|
|
{
|
|
|
- return brcms_c_valid_chanspec_ext(wlc_cm, chspec, true);
|
|
|
+ return brcms_c_valid_chanspec_ext(wlc_cm, chspec);
|
|
|
}
|
|
|
|
|
|
static bool brcms_is_radar_freq(u16 center_freq)
|