|
@@ -41,40 +41,6 @@
|
|
|
#endif
|
|
|
|
|
|
const struct chan_map *channel_map;
|
|
|
-#ifdef CONFIG_CHAN_NUM_API
|
|
|
-static const struct bonded_channel bonded_chan_40mhz_list[] = {
|
|
|
- {36, 40},
|
|
|
- {44, 48},
|
|
|
- {52, 56},
|
|
|
- {60, 64},
|
|
|
- {100, 104},
|
|
|
- {108, 112},
|
|
|
- {116, 120},
|
|
|
- {124, 128},
|
|
|
- {132, 136},
|
|
|
- {140, 144},
|
|
|
- {149, 153},
|
|
|
- {157, 161},
|
|
|
- {165, 169},
|
|
|
- {173, 177}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct bonded_channel bonded_chan_80mhz_list[] = {
|
|
|
- {36, 48},
|
|
|
- {52, 64},
|
|
|
- {100, 112},
|
|
|
- {116, 128},
|
|
|
- {132, 144},
|
|
|
- {149, 161},
|
|
|
- {165, 177}
|
|
|
-};
|
|
|
-
|
|
|
-static const struct bonded_channel bonded_chan_160mhz_list[] = {
|
|
|
- {36, 64},
|
|
|
- {100, 128},
|
|
|
- {149, 177}
|
|
|
-};
|
|
|
-#endif /* CONFIG_CHAN_NUM_API */
|
|
|
|
|
|
#ifdef CONFIG_CHAN_FREQ_API
|
|
|
/* bonded_chan_40mhz_list_freq - List of 40MHz bonnded channel frequencies */
|
|
@@ -1160,241 +1126,6 @@ struct wlan_lmac_if_reg_tx_ops *reg_get_psoc_tx_ops(
|
|
|
return &tx_ops->reg_ops;
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_CHAN_NUM_API
|
|
|
-enum channel_enum reg_get_chan_enum(uint8_t chan_num)
|
|
|
-{
|
|
|
- uint32_t count;
|
|
|
-
|
|
|
- for (count = 0; count < NUM_CHANNELS; count++)
|
|
|
- if (channel_map[count].chan_num == chan_num)
|
|
|
- return count;
|
|
|
-
|
|
|
- reg_err_rl("invalid channel number %d", chan_num);
|
|
|
-
|
|
|
- return INVALID_CHANNEL;
|
|
|
-}
|
|
|
-
|
|
|
-enum channel_state reg_get_channel_state(struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t ch)
|
|
|
-{
|
|
|
- enum channel_enum ch_idx;
|
|
|
- struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
|
|
|
-
|
|
|
- ch_idx = reg_get_chan_enum(ch);
|
|
|
-
|
|
|
- if (ch_idx == INVALID_CHANNEL)
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
-
|
|
|
- pdev_priv_obj = reg_get_pdev_obj(pdev);
|
|
|
-
|
|
|
- if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
|
|
|
- reg_err("pdev reg obj is NULL");
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
- }
|
|
|
-
|
|
|
- return pdev_priv_obj->cur_chan_list[ch_idx].state;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * reg_get_5g_bonded_chan_array() - get ptr to bonded channel
|
|
|
- * @pdev: Pointer to pdev structure
|
|
|
- * @oper_ch: operating channel number
|
|
|
- * @bonded_chan_ar: bonded channel array
|
|
|
- * @array_size; Array size
|
|
|
- * @bonded_chan_ptr_ptr: bonded channel ptr ptr
|
|
|
- *
|
|
|
- * Return: bonded channel state
|
|
|
- */
|
|
|
-static enum channel_state reg_get_5g_bonded_chan_array(
|
|
|
- struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t oper_chan,
|
|
|
- const struct bonded_channel bonded_chan_ar[],
|
|
|
- uint16_t array_size,
|
|
|
- const struct bonded_channel **bonded_chan_ptr_ptr)
|
|
|
-{
|
|
|
- int i;
|
|
|
- uint8_t chan_num;
|
|
|
- const struct bonded_channel *bonded_chan_ptr = NULL;
|
|
|
- enum channel_state chan_state = CHANNEL_STATE_INVALID;
|
|
|
- enum channel_state temp_chan_state;
|
|
|
-
|
|
|
- for (i = 0; i < array_size; i++) {
|
|
|
- if ((oper_chan >= bonded_chan_ar[i].start_ch) &&
|
|
|
- (oper_chan <= bonded_chan_ar[i].end_ch)) {
|
|
|
- bonded_chan_ptr = &bonded_chan_ar[i];
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (!bonded_chan_ptr)
|
|
|
- return chan_state;
|
|
|
-
|
|
|
- *bonded_chan_ptr_ptr = bonded_chan_ptr;
|
|
|
- chan_num = bonded_chan_ptr->start_ch;
|
|
|
- while (chan_num <= bonded_chan_ptr->end_ch) {
|
|
|
- temp_chan_state = reg_get_channel_state(pdev, chan_num);
|
|
|
- if (temp_chan_state < chan_state)
|
|
|
- chan_state = temp_chan_state;
|
|
|
- chan_num = chan_num + 4;
|
|
|
- }
|
|
|
-
|
|
|
- return chan_state;
|
|
|
-}
|
|
|
-
|
|
|
-enum channel_state reg_get_5g_bonded_channel(
|
|
|
- struct wlan_objmgr_pdev *pdev, uint8_t chan_num,
|
|
|
- enum phy_ch_width ch_width,
|
|
|
- const struct bonded_channel **bonded_chan_ptr_ptr)
|
|
|
-{
|
|
|
- if (ch_width == CH_WIDTH_80P80MHZ)
|
|
|
- return reg_get_5g_bonded_chan_array(pdev, chan_num,
|
|
|
- bonded_chan_80mhz_list,
|
|
|
- QDF_ARRAY_SIZE(bonded_chan_80mhz_list),
|
|
|
- bonded_chan_ptr_ptr);
|
|
|
- else if (ch_width == CH_WIDTH_160MHZ)
|
|
|
- return reg_get_5g_bonded_chan_array(pdev, chan_num,
|
|
|
- bonded_chan_160mhz_list,
|
|
|
- QDF_ARRAY_SIZE(bonded_chan_160mhz_list),
|
|
|
- bonded_chan_ptr_ptr);
|
|
|
- else if (ch_width == CH_WIDTH_80MHZ)
|
|
|
- return reg_get_5g_bonded_chan_array(pdev, chan_num,
|
|
|
- bonded_chan_80mhz_list,
|
|
|
- QDF_ARRAY_SIZE(bonded_chan_80mhz_list),
|
|
|
- bonded_chan_ptr_ptr);
|
|
|
- else if (ch_width == CH_WIDTH_40MHZ)
|
|
|
- return reg_get_5g_bonded_chan_array(pdev, chan_num,
|
|
|
- bonded_chan_40mhz_list,
|
|
|
- QDF_ARRAY_SIZE(bonded_chan_40mhz_list),
|
|
|
- bonded_chan_ptr_ptr);
|
|
|
- else
|
|
|
- return reg_get_channel_state(pdev, chan_num);
|
|
|
-}
|
|
|
-
|
|
|
-enum channel_state reg_get_5g_bonded_channel_state(
|
|
|
- struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t ch, enum phy_ch_width bw)
|
|
|
-{
|
|
|
- enum channel_enum ch_indx;
|
|
|
- enum channel_state chan_state;
|
|
|
- struct regulatory_channel *reg_channels;
|
|
|
- struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
|
|
|
- bool bw_enabled = false;
|
|
|
- const struct bonded_channel *bonded_chan_ptr = NULL;
|
|
|
-
|
|
|
- if (bw > CH_WIDTH_80P80MHZ) {
|
|
|
- reg_err("bw passed is not good");
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
- }
|
|
|
-
|
|
|
- chan_state = reg_get_5g_bonded_channel(pdev, ch, bw, &bonded_chan_ptr);
|
|
|
-
|
|
|
- if ((chan_state == CHANNEL_STATE_INVALID) ||
|
|
|
- (chan_state == CHANNEL_STATE_DISABLE))
|
|
|
- return chan_state;
|
|
|
-
|
|
|
- pdev_priv_obj = reg_get_pdev_obj(pdev);
|
|
|
-
|
|
|
- if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
|
|
|
- reg_err("pdev reg obj is NULL");
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
- }
|
|
|
- reg_channels = pdev_priv_obj->cur_chan_list;
|
|
|
-
|
|
|
- ch_indx = reg_get_chan_enum(ch);
|
|
|
- if (ch_indx == INVALID_CHANNEL)
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
- if (bw == CH_WIDTH_5MHZ)
|
|
|
- bw_enabled = true;
|
|
|
- else if (bw == CH_WIDTH_10MHZ)
|
|
|
- bw_enabled = (reg_channels[ch_indx].min_bw <= 10) &&
|
|
|
- (reg_channels[ch_indx].max_bw >= 10);
|
|
|
- else if (bw == CH_WIDTH_20MHZ)
|
|
|
- bw_enabled = (reg_channels[ch_indx].min_bw <= 20) &&
|
|
|
- (reg_channels[ch_indx].max_bw >= 20);
|
|
|
- else if (bw == CH_WIDTH_40MHZ)
|
|
|
- bw_enabled = (reg_channels[ch_indx].min_bw <= 40) &&
|
|
|
- (reg_channels[ch_indx].max_bw >= 40);
|
|
|
- else if (bw == CH_WIDTH_80MHZ)
|
|
|
- bw_enabled = (reg_channels[ch_indx].min_bw <= 80) &&
|
|
|
- (reg_channels[ch_indx].max_bw >= 80);
|
|
|
- else if (bw == CH_WIDTH_160MHZ)
|
|
|
- bw_enabled = (reg_channels[ch_indx].min_bw <= 160) &&
|
|
|
- (reg_channels[ch_indx].max_bw >= 160);
|
|
|
- else if (bw == CH_WIDTH_80P80MHZ)
|
|
|
- bw_enabled = (reg_channels[ch_indx].min_bw <= 80) &&
|
|
|
- (reg_channels[ch_indx].max_bw >= 80);
|
|
|
-
|
|
|
- if (bw_enabled)
|
|
|
- return chan_state;
|
|
|
- else
|
|
|
- return CHANNEL_STATE_DISABLE;
|
|
|
-}
|
|
|
-
|
|
|
-enum channel_state reg_get_2g_bonded_channel_state(
|
|
|
- struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t oper_ch, uint8_t sec_ch,
|
|
|
- enum phy_ch_width bw)
|
|
|
-{
|
|
|
- enum channel_enum chan_idx;
|
|
|
- enum channel_state chan_state;
|
|
|
- struct regulatory_channel *reg_channels;
|
|
|
- struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
|
|
|
- bool bw_enabled = false;
|
|
|
- enum channel_state chan_state2 = CHANNEL_STATE_INVALID;
|
|
|
-
|
|
|
- if (bw > CH_WIDTH_40MHZ)
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
-
|
|
|
- if (bw == CH_WIDTH_40MHZ) {
|
|
|
- if ((sec_ch + 4 != oper_ch) &&
|
|
|
- (oper_ch + 4 != sec_ch))
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
- chan_state2 = reg_get_channel_state(pdev, sec_ch);
|
|
|
- if (chan_state2 == CHANNEL_STATE_INVALID)
|
|
|
- return chan_state2;
|
|
|
- }
|
|
|
-
|
|
|
- pdev_priv_obj = reg_get_pdev_obj(pdev);
|
|
|
-
|
|
|
- if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
|
|
|
- reg_err("reg pdev priv obj is NULL");
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
- }
|
|
|
-
|
|
|
- reg_channels = pdev_priv_obj->cur_chan_list;
|
|
|
-
|
|
|
- chan_state = reg_get_channel_state(pdev, oper_ch);
|
|
|
- if (chan_state2 < chan_state)
|
|
|
- chan_state = chan_state2;
|
|
|
-
|
|
|
- if ((chan_state == CHANNEL_STATE_INVALID) ||
|
|
|
- (chan_state == CHANNEL_STATE_DISABLE))
|
|
|
- return chan_state;
|
|
|
-
|
|
|
- chan_idx = reg_get_chan_enum(oper_ch);
|
|
|
- if (chan_idx == INVALID_CHANNEL)
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
- if (bw == CH_WIDTH_5MHZ)
|
|
|
- bw_enabled = true;
|
|
|
- else if (bw == CH_WIDTH_10MHZ)
|
|
|
- bw_enabled = (reg_channels[chan_idx].min_bw <= 10) &&
|
|
|
- (reg_channels[chan_idx].max_bw >= 10);
|
|
|
- else if (bw == CH_WIDTH_20MHZ)
|
|
|
- bw_enabled = (reg_channels[chan_idx].min_bw <= 20) &&
|
|
|
- (reg_channels[chan_idx].max_bw >= 20);
|
|
|
- else if (bw == CH_WIDTH_40MHZ)
|
|
|
- bw_enabled = (reg_channels[chan_idx].min_bw <= 40) &&
|
|
|
- (reg_channels[chan_idx].max_bw >= 40);
|
|
|
-
|
|
|
- if (bw_enabled)
|
|
|
- return chan_state;
|
|
|
- else
|
|
|
- return CHANNEL_STATE_DISABLE;
|
|
|
-
|
|
|
- return CHANNEL_STATE_ENABLE;
|
|
|
-}
|
|
|
-#endif /* CONFIG_CHAN_NUM_API */
|
|
|
-
|
|
|
/**
|
|
|
* reg_combine_channel_states() - Get minimum of channel state1 and state2
|
|
|
* @chan_state1: Channel state1
|
|
@@ -1412,171 +1143,6 @@ enum channel_state reg_combine_channel_states(enum channel_state chan_state1,
|
|
|
return min(chan_state1, chan_state2);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_CHAN_NUM_API
|
|
|
-/**
|
|
|
- * reg_set_5g_channel_params () - Sets channel parameteres for given bandwidth
|
|
|
- * @ch: channel number.
|
|
|
- * @ch_params: pointer to the channel parameters.
|
|
|
- *
|
|
|
- * Return: None
|
|
|
- */
|
|
|
-static void reg_set_5g_channel_params(struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t ch,
|
|
|
- struct ch_params *ch_params)
|
|
|
-{
|
|
|
- /*
|
|
|
- * Set channel parameters like center frequency for a bonded channel
|
|
|
- * state. Also return the maximum bandwidth supported by the channel.
|
|
|
- */
|
|
|
-
|
|
|
- enum channel_state chan_state = CHANNEL_STATE_ENABLE;
|
|
|
- enum channel_state chan_state2 = CHANNEL_STATE_ENABLE;
|
|
|
- const struct bonded_channel *bonded_chan_ptr = NULL;
|
|
|
- const struct bonded_channel *bonded_chan_ptr2 = NULL;
|
|
|
-
|
|
|
- if (!ch_params) {
|
|
|
- reg_err("ch_params is NULL");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (ch_params->ch_width >= CH_WIDTH_MAX) {
|
|
|
- if (ch_params->center_freq_seg1 != 0)
|
|
|
- ch_params->ch_width = CH_WIDTH_80P80MHZ;
|
|
|
- else
|
|
|
- ch_params->ch_width = CH_WIDTH_160MHZ;
|
|
|
- }
|
|
|
-
|
|
|
- while (ch_params->ch_width != CH_WIDTH_INVALID) {
|
|
|
- bonded_chan_ptr = NULL;
|
|
|
- bonded_chan_ptr2 = NULL;
|
|
|
- chan_state = reg_get_5g_bonded_channel(
|
|
|
- pdev, ch, ch_params->ch_width,
|
|
|
- &bonded_chan_ptr);
|
|
|
-
|
|
|
- chan_state = reg_get_5g_bonded_channel_state(
|
|
|
- pdev, ch, ch_params->ch_width);
|
|
|
-
|
|
|
- if (ch_params->ch_width == CH_WIDTH_80P80MHZ) {
|
|
|
- chan_state2 = reg_get_5g_bonded_channel_state(
|
|
|
- pdev, ch_params->center_freq_seg1 - 2,
|
|
|
- CH_WIDTH_80MHZ);
|
|
|
-
|
|
|
- chan_state = reg_combine_channel_states(
|
|
|
- chan_state, chan_state2);
|
|
|
- }
|
|
|
-
|
|
|
- if ((chan_state != CHANNEL_STATE_ENABLE) &&
|
|
|
- (chan_state != CHANNEL_STATE_DFS))
|
|
|
- goto update_bw;
|
|
|
-
|
|
|
- if (ch_params->ch_width <= CH_WIDTH_20MHZ) {
|
|
|
- ch_params->sec_ch_offset = NO_SEC_CH;
|
|
|
- ch_params->center_freq_seg0 = ch;
|
|
|
- break;
|
|
|
- } else if (ch_params->ch_width >= CH_WIDTH_40MHZ) {
|
|
|
- reg_get_5g_bonded_chan_array(
|
|
|
- pdev, ch, bonded_chan_40mhz_list,
|
|
|
- QDF_ARRAY_SIZE(bonded_chan_40mhz_list),
|
|
|
- &bonded_chan_ptr2);
|
|
|
- if (!bonded_chan_ptr || !bonded_chan_ptr2)
|
|
|
- goto update_bw;
|
|
|
- if (ch == bonded_chan_ptr2->start_ch)
|
|
|
- ch_params->sec_ch_offset = LOW_PRIMARY_CH;
|
|
|
- else
|
|
|
- ch_params->sec_ch_offset = HIGH_PRIMARY_CH;
|
|
|
-
|
|
|
- ch_params->center_freq_seg0 =
|
|
|
- (bonded_chan_ptr->start_ch +
|
|
|
- bonded_chan_ptr->end_ch) / 2;
|
|
|
- break;
|
|
|
- }
|
|
|
-update_bw:
|
|
|
- ch_params->ch_width =
|
|
|
- get_next_lower_bandwidth(ch_params->ch_width);
|
|
|
- }
|
|
|
-
|
|
|
- if (ch_params->ch_width == CH_WIDTH_160MHZ) {
|
|
|
- ch_params->center_freq_seg1 = ch_params->center_freq_seg0;
|
|
|
- chan_state = reg_get_5g_bonded_channel(
|
|
|
- pdev, ch, CH_WIDTH_80MHZ, &bonded_chan_ptr);
|
|
|
- if (bonded_chan_ptr)
|
|
|
- ch_params->center_freq_seg0 =
|
|
|
- (bonded_chan_ptr->start_ch +
|
|
|
- bonded_chan_ptr->end_ch) / 2;
|
|
|
- }
|
|
|
-
|
|
|
- /* Overwrite center_freq_seg1 to 0 for non 160 and 80+80 width */
|
|
|
- if (!(ch_params->ch_width == CH_WIDTH_160MHZ ||
|
|
|
- ch_params->ch_width == CH_WIDTH_80P80MHZ))
|
|
|
- ch_params->center_freq_seg1 = 0;
|
|
|
-
|
|
|
- reg_nofl_debug("ch %d ch_wd %d freq0 %d freq1 %d", ch,
|
|
|
- ch_params->ch_width, ch_params->center_freq_seg0,
|
|
|
- ch_params->center_freq_seg1);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * reg_set_2g_channel_params() - set the 2.4G bonded channel parameters
|
|
|
- * @oper_ch: operating channel
|
|
|
- * @ch_params: channel parameters
|
|
|
- * @sec_ch_2g: 2.4G secondary channel
|
|
|
- *
|
|
|
- * Return: void
|
|
|
- */
|
|
|
-static void reg_set_2g_channel_params(struct wlan_objmgr_pdev *pdev,
|
|
|
- uint16_t oper_ch,
|
|
|
- struct ch_params *ch_params,
|
|
|
- uint16_t sec_ch_2g)
|
|
|
-{
|
|
|
- enum channel_state chan_state = CHANNEL_STATE_ENABLE;
|
|
|
-
|
|
|
- if (ch_params->ch_width >= CH_WIDTH_MAX)
|
|
|
- ch_params->ch_width = CH_WIDTH_40MHZ;
|
|
|
- if ((reg_get_bw_value(ch_params->ch_width) > 20) && !sec_ch_2g) {
|
|
|
- if (oper_ch >= 1 && oper_ch <= 5)
|
|
|
- sec_ch_2g = oper_ch + 4;
|
|
|
- else if (oper_ch >= 6 && oper_ch <= 13)
|
|
|
- sec_ch_2g = oper_ch - 4;
|
|
|
- }
|
|
|
-
|
|
|
- while (ch_params->ch_width != CH_WIDTH_INVALID) {
|
|
|
- chan_state = reg_get_2g_bonded_channel_state(
|
|
|
- pdev, oper_ch, sec_ch_2g, ch_params->ch_width);
|
|
|
- if (chan_state == CHANNEL_STATE_ENABLE) {
|
|
|
- if (ch_params->ch_width == CH_WIDTH_40MHZ) {
|
|
|
- if (oper_ch < sec_ch_2g)
|
|
|
- ch_params->sec_ch_offset =
|
|
|
- LOW_PRIMARY_CH;
|
|
|
- else
|
|
|
- ch_params->sec_ch_offset =
|
|
|
- HIGH_PRIMARY_CH;
|
|
|
- ch_params->center_freq_seg0 =
|
|
|
- (oper_ch + sec_ch_2g) / 2;
|
|
|
- } else {
|
|
|
- ch_params->sec_ch_offset = NO_SEC_CH;
|
|
|
- ch_params->center_freq_seg0 = oper_ch;
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- ch_params->ch_width =
|
|
|
- get_next_lower_bandwidth(ch_params->ch_width);
|
|
|
- }
|
|
|
- /* Overwrite center_freq_seg1 to 0 for 2.4 Ghz */
|
|
|
- ch_params->center_freq_seg1 = 0;
|
|
|
-}
|
|
|
-
|
|
|
-void reg_set_channel_params(struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t ch, uint8_t sec_ch_2g,
|
|
|
- struct ch_params *ch_params)
|
|
|
-{
|
|
|
- if (REG_IS_5GHZ_CH(ch))
|
|
|
- reg_set_5g_channel_params(pdev, ch, ch_params);
|
|
|
- else if (REG_IS_24GHZ_CH(ch))
|
|
|
- reg_set_2g_channel_params(pdev, ch, ch_params, sec_ch_2g);
|
|
|
-}
|
|
|
-#endif /* CONFIG_CHAN_NUM_API */
|
|
|
-
|
|
|
QDF_STATUS reg_read_default_country(struct wlan_objmgr_psoc *psoc,
|
|
|
uint8_t *country_code)
|
|
|
{
|
|
@@ -1673,77 +1239,6 @@ void reg_set_dfs_region(struct wlan_objmgr_pdev *pdev,
|
|
|
reg_init_channel_map(dfs_reg);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_CHAN_NUM_API
|
|
|
-uint32_t reg_get_channel_reg_power(struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t chan_num)
|
|
|
-{
|
|
|
- enum channel_enum chan_enum;
|
|
|
- struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
|
|
|
- struct regulatory_channel *reg_channels;
|
|
|
-
|
|
|
- chan_enum = reg_get_chan_enum(chan_num);
|
|
|
-
|
|
|
- if (chan_enum == INVALID_CHANNEL) {
|
|
|
- reg_err("channel is invalid");
|
|
|
- return QDF_STATUS_E_FAILURE;
|
|
|
- }
|
|
|
-
|
|
|
- pdev_priv_obj = reg_get_pdev_obj(pdev);
|
|
|
-
|
|
|
- if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
|
|
|
- reg_err("reg pdev priv obj is NULL");
|
|
|
- return QDF_STATUS_E_FAILURE;
|
|
|
- }
|
|
|
-
|
|
|
- reg_channels = pdev_priv_obj->cur_chan_list;
|
|
|
-
|
|
|
- return reg_channels[chan_enum].tx_power;
|
|
|
-}
|
|
|
-
|
|
|
-qdf_freq_t reg_get_channel_freq(struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t chan_num)
|
|
|
-{
|
|
|
- enum channel_enum chan_enum;
|
|
|
- struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
|
|
|
- struct regulatory_channel *reg_channels;
|
|
|
-
|
|
|
- chan_enum = reg_get_chan_enum(chan_num);
|
|
|
-
|
|
|
- if (chan_enum == INVALID_CHANNEL)
|
|
|
- return CHANNEL_STATE_INVALID;
|
|
|
-
|
|
|
- pdev_priv_obj = reg_get_pdev_obj(pdev);
|
|
|
-
|
|
|
- if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
|
|
|
- reg_err("reg pdev priv obj is NULL");
|
|
|
- return QDF_STATUS_E_FAILURE;
|
|
|
- }
|
|
|
-
|
|
|
- reg_channels = pdev_priv_obj->cur_chan_list;
|
|
|
-
|
|
|
- return reg_channels[chan_enum].center_freq;
|
|
|
-}
|
|
|
-
|
|
|
-bool reg_is_dfs_ch(struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t chan)
|
|
|
-{
|
|
|
- enum channel_state ch_state;
|
|
|
-
|
|
|
- ch_state = reg_get_channel_state(pdev, chan);
|
|
|
-
|
|
|
- return ch_state == CHANNEL_STATE_DFS;
|
|
|
-}
|
|
|
-
|
|
|
-bool reg_is_disable_ch(struct wlan_objmgr_pdev *pdev, uint8_t chan)
|
|
|
-{
|
|
|
- enum channel_state ch_state;
|
|
|
-
|
|
|
- ch_state = reg_get_channel_state(pdev, chan);
|
|
|
-
|
|
|
- return ch_state == CHANNEL_STATE_DISABLE;
|
|
|
-}
|
|
|
-#endif /* CONFIG_CHAN_NUM_API */
|
|
|
-
|
|
|
uint8_t reg_freq_to_chan(struct wlan_objmgr_pdev *pdev,
|
|
|
qdf_freq_t freq)
|
|
|
{
|
|
@@ -1875,52 +1370,6 @@ uint16_t reg_legacy_chan_to_freq(struct wlan_objmgr_pdev *pdev,
|
|
|
max_chan_range);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_CHAN_NUM_API
|
|
|
-bool reg_chan_is_49ghz(struct wlan_objmgr_pdev *pdev, uint8_t chan_num)
|
|
|
-{
|
|
|
- qdf_freq_t freq = 0;
|
|
|
-
|
|
|
- freq = reg_legacy_chan_to_freq(pdev, chan_num);
|
|
|
-
|
|
|
- return REG_IS_49GHZ_FREQ(freq) ? true : false;
|
|
|
-}
|
|
|
-
|
|
|
-void reg_update_nol_ch(struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t *chan_list,
|
|
|
- uint8_t num_chan,
|
|
|
- bool nol_chan)
|
|
|
-{
|
|
|
- enum channel_enum chan_enum;
|
|
|
- struct regulatory_channel *mas_chan_list;
|
|
|
- struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
|
|
|
- uint16_t i;
|
|
|
-
|
|
|
- if (!num_chan || !chan_list) {
|
|
|
- reg_err("chan_list or num_ch is NULL");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- pdev_priv_obj = reg_get_pdev_obj(pdev);
|
|
|
- if (!pdev_priv_obj) {
|
|
|
- reg_err("reg psoc private obj is NULL");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- mas_chan_list = pdev_priv_obj->mas_chan_list;
|
|
|
- for (i = 0; i < num_chan; i++) {
|
|
|
- chan_enum = reg_get_chan_enum(chan_list[i]);
|
|
|
- if (chan_enum == INVALID_CHANNEL) {
|
|
|
- reg_err("Invalid ch in nol list, chan %d",
|
|
|
- chan_list[i]);
|
|
|
- continue;
|
|
|
- }
|
|
|
- mas_chan_list[chan_enum].nol_chan = nol_chan;
|
|
|
- }
|
|
|
-
|
|
|
- reg_compute_pdev_current_chan_list(pdev_priv_obj);
|
|
|
-}
|
|
|
-#endif /* CONFIG_CHAN_NUM_API */
|
|
|
-
|
|
|
QDF_STATUS reg_program_default_cc(struct wlan_objmgr_pdev *pdev,
|
|
|
uint16_t regdmn)
|
|
|
{
|
|
@@ -2385,47 +1834,6 @@ bool reg_chan_in_range(struct regulatory_channel *chan_list,
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_CHAN_NUM_API
|
|
|
-void reg_update_nol_history_ch(struct wlan_objmgr_pdev *pdev,
|
|
|
- uint8_t *chan_list, uint8_t num_chan,
|
|
|
- bool nol_history_chan)
|
|
|
-{
|
|
|
- enum channel_enum chan_enum;
|
|
|
- struct regulatory_channel *mas_chan_list;
|
|
|
- struct regulatory_channel *cur_chan_list;
|
|
|
- struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
|
|
|
- uint16_t i;
|
|
|
-
|
|
|
- if (!num_chan || !chan_list) {
|
|
|
- reg_err("chan_list or num_ch is NULL");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- pdev_priv_obj = wlan_objmgr_pdev_get_comp_private_obj(
|
|
|
- pdev, WLAN_UMAC_COMP_REGULATORY);
|
|
|
-
|
|
|
- if (!pdev_priv_obj) {
|
|
|
- reg_err("reg psoc private obj is NULL");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- mas_chan_list = pdev_priv_obj->mas_chan_list;
|
|
|
- cur_chan_list = pdev_priv_obj->cur_chan_list;
|
|
|
-
|
|
|
- for (i = 0; i < num_chan; i++) {
|
|
|
- chan_enum = reg_get_chan_enum(chan_list[i]);
|
|
|
- if (chan_enum == INVALID_CHANNEL) {
|
|
|
- reg_err("Invalid ch in nol list, chan %d",
|
|
|
- chan_list[i]);
|
|
|
- continue;
|
|
|
- }
|
|
|
- mas_chan_list[chan_enum].nol_history = nol_history_chan;
|
|
|
- cur_chan_list[chan_enum].nol_history = nol_history_chan;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-#endif /* CONFIG_CHAN_NUM_API */
|
|
|
-
|
|
|
bool reg_is_24ghz_ch_freq(uint32_t freq)
|
|
|
{
|
|
|
return REG_IS_24GHZ_CH_FREQ(freq);
|
|
@@ -2906,32 +2314,10 @@ qdf_freq_t reg_ch_to_freq(uint32_t ch_enum)
|
|
|
return REG_CH_TO_FREQ(ch_enum);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_CHAN_NUM_API
|
|
|
-bool reg_is_channel_valid_5g_sbs(uint8_t curchan, uint8_t newchan)
|
|
|
-{
|
|
|
- return REG_IS_CHANNEL_VALID_5G_SBS(curchan, newchan);
|
|
|
-}
|
|
|
-
|
|
|
-uint8_t reg_min_24ghz_ch_num(void)
|
|
|
-{
|
|
|
- return REG_MIN_24GHZ_CH_NUM;
|
|
|
-}
|
|
|
-
|
|
|
-uint8_t reg_max_24ghz_ch_num(void)
|
|
|
-{
|
|
|
- return REG_MAX_24GHZ_CH_NUM;
|
|
|
-}
|
|
|
-
|
|
|
-uint8_t reg_min_5ghz_ch_num(void)
|
|
|
-{
|
|
|
- return REG_MIN_5GHZ_CH_NUM;
|
|
|
-}
|
|
|
-
|
|
|
uint8_t reg_max_5ghz_ch_num(void)
|
|
|
{
|
|
|
return REG_MAX_5GHZ_CH_NUM;
|
|
|
}
|
|
|
-#endif /* CONFIG_CHAN_NUM_API */
|
|
|
|
|
|
#ifdef CONFIG_CHAN_FREQ_API
|
|
|
qdf_freq_t reg_min_24ghz_chan_freq(void)
|