qcacmn: Fill per psoc regulatory info

Move per psoc regulatory info from pdev level function to psoc
level function.

Change-Id: Id06c6fee110ce929925f568db3a3b507214294d5
CRs-Fixed: 2066122
This commit is contained in:
Abhijit Pradhan 2017-07-12 12:08:42 +05:30
commit ca7d77b408
10 changed files with 134 additions and 25 deletions

View file

@ -37,6 +37,7 @@
#include "wlan_objmgr_psoc_obj.h"
#include "target_if.h"
#include "target_if_scan.h"
#include "target_if_reg.h"
/**
* init_deinit_service_ready_event_handler() - service ready handler

View file

@ -119,6 +119,8 @@ int init_deinit_service_ready_event_handler(ol_scn_t scn_handle,
target_if_scan_set_max_active_scans(psoc,
WLAN_MAX_ACTIVE_SCANS_ALLOWED);
target_if_reg_set_offloaded_info(psoc);
free_param_and_exit:
qdf_mem_free(service_param);

View file

@ -30,3 +30,11 @@
*/
QDF_STATUS target_if_register_regulatory_tx_ops(struct wlan_lmac_if_tx_ops
*tx_ops);
/**
* target_if_reg_set_offloaded_info() - populate regulatory offloaded info
*
* @psoc: psoc pointer
* Return: Success or Failure
*/
QDF_STATUS target_if_reg_set_offloaded_info(struct wlan_objmgr_psoc *psoc);

View file

@ -98,6 +98,27 @@ target_if_regulatory_get_rx_ops(struct wlan_objmgr_psoc *psoc)
return &psoc->soc_cb.rx_ops.reg_rx_ops;
}
QDF_STATUS target_if_reg_set_offloaded_info(struct wlan_objmgr_psoc *psoc)
{
struct wlan_lmac_if_reg_rx_ops *reg_rx_ops;
reg_rx_ops = target_if_regulatory_get_rx_ops(psoc);
if (!reg_rx_ops) {
target_if_err("reg_rx_ops is NULL");
return QDF_STATUS_E_FAILURE;
}
if (reg_rx_ops->reg_set_regdb_offloaded)
reg_rx_ops->reg_set_regdb_offloaded(psoc,
tgt_if_regulatory_is_regdb_offloaded(psoc));
if (reg_rx_ops->reg_set_11d_offloaded)
reg_rx_ops->reg_set_11d_offloaded(psoc,
tgt_if_regulatory_is_11d_offloaded(psoc));
return QDF_STATUS_SUCCESS;
}
static int tgt_reg_chan_list_update_handler(ol_scn_t handle,
uint8_t *event_buf,
uint32_t len)
@ -295,10 +316,6 @@ QDF_STATUS target_if_register_regulatory_tx_ops(struct wlan_lmac_if_tx_ops
reg_ops->stop_11d_scan = tgt_if_regulatory_stop_11d_scan;
reg_ops->is_11d_offloaded = tgt_if_regulatory_is_11d_offloaded;
reg_ops->is_regdb_offloaded = tgt_if_regulatory_is_regdb_offloaded;
reg_ops->is_there_serv_ready_extn =
tgt_if_regulatory_is_there_serv_ready_extn;

View file

@ -562,9 +562,6 @@ struct wlan_lmac_if_reg_tx_ops {
struct reg_start_11d_scan_req *reg_start_11d_scan_req);
QDF_STATUS (*stop_11d_scan)(struct wlan_objmgr_psoc *psoc,
struct reg_stop_11d_scan_req *reg_stop_11d_scan_req);
bool (*is_11d_offloaded)(struct wlan_objmgr_psoc *psoc);
bool (*is_regdb_offloaded)(struct wlan_objmgr_psoc *psoc);
bool (*is_there_serv_ready_extn)(struct wlan_objmgr_psoc *psoc);
};
@ -758,6 +755,10 @@ struct wlan_lmac_if_reg_rx_ops {
*reg_info);
QDF_STATUS (*reg_11d_new_cc_handler)(struct wlan_objmgr_psoc *psoc,
struct reg_11d_new_country *reg_11d_new_cc);
QDF_STATUS (*reg_set_regdb_offloaded)(struct wlan_objmgr_psoc *psoc,
bool val);
QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc,
bool val);
};
#ifdef CONVERGED_P2P_ENABLE

View file

@ -191,6 +191,22 @@ static void wlan_lmac_if_register_nan_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops)
}
#endif /* WLAN_FEATURE_NAN_CONVERGENCE */
static void wlan_lmac_if_umac_reg_rx_ops_register(
struct wlan_lmac_if_rx_ops *rx_ops)
{
rx_ops->reg_rx_ops.master_list_handler =
tgt_reg_process_master_chan_list;
rx_ops->reg_rx_ops.reg_11d_new_cc_handler =
tgt_reg_process_11d_new_country;
rx_ops->reg_rx_ops.reg_set_regdb_offloaded =
tgt_reg_set_regdb_offloaded;
rx_ops->reg_rx_ops.reg_set_11d_offloaded =
tgt_reg_set_11d_offloaded;
}
#ifdef CONVERGED_P2P_ENABLE
static void wlan_lmac_if_umac_rx_ops_register_p2p(
struct wlan_lmac_if_rx_ops *rx_ops)
@ -316,11 +332,7 @@ wlan_lmac_if_umac_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
wlan_lmac_if_register_nan_rx_ops(rx_ops);
rx_ops->reg_rx_ops.master_list_handler =
tgt_reg_process_master_chan_list;
rx_ops->reg_rx_ops.reg_11d_new_cc_handler =
tgt_reg_process_11d_new_country;
wlan_lmac_if_umac_reg_rx_ops_register(rx_ops);
/* p2p rx ops */
wlan_lmac_if_umac_rx_ops_register_p2p(rx_ops);

View file

@ -1872,7 +1872,6 @@ QDF_STATUS reg_process_master_chan_list(struct cur_regulatory_info
struct cur_reg_rule *reg_rule_2g, *reg_rule_5g;
uint16_t min_bw_2g, max_bw_2g, min_bw_5g, max_bw_5g;
struct regulatory_channel *mas_chan_list;
struct wlan_lmac_if_reg_tx_ops *tx_ops;
struct wlan_objmgr_psoc *psoc;
enum channel_enum chan_enum;
wlan_objmgr_ref_dbgid dbg_id;
@ -1890,18 +1889,6 @@ QDF_STATUS reg_process_master_chan_list(struct cur_regulatory_info
return QDF_STATUS_E_FAILURE;
}
tx_ops = reg_get_psoc_tx_ops(psoc);
if (tx_ops->is_regdb_offloaded)
soc_reg->offload_enabled =
tx_ops->is_regdb_offloaded(psoc);
else
soc_reg->offload_enabled = false;
if (tx_ops->is_11d_offloaded)
soc_reg->is_11d_offloaded =
tx_ops->is_11d_offloaded(psoc);
else
soc_reg->is_11d_offloaded = false;
phy_id = regulat_info->phy_id;
mas_chan_list = soc_reg->mas_chan_params[phy_id].mas_chan_list;
@ -3015,3 +3002,37 @@ bool reg_11d_enabled_on_host(struct wlan_objmgr_psoc *psoc)
return (psoc_priv_obj->enable_11d_supp &&
!psoc_priv_obj->is_11d_offloaded);
}
QDF_STATUS reg_set_regdb_offloaded(struct wlan_objmgr_psoc *psoc,
bool val)
{
struct wlan_regulatory_psoc_priv_obj *soc_reg;
soc_reg = reg_get_psoc_obj(psoc);
if (!IS_VALID_PSOC_REG_OBJ(soc_reg)) {
reg_err("psoc reg component is NULL");
return QDF_STATUS_E_FAILURE;
}
soc_reg->offload_enabled = val;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS reg_set_11d_offloaded(struct wlan_objmgr_psoc *psoc,
bool val)
{
struct wlan_regulatory_psoc_priv_obj *soc_reg;
soc_reg = reg_get_psoc_obj(psoc);
if (!IS_VALID_PSOC_REG_OBJ(soc_reg)) {
reg_err("psoc reg component is NULL");
return QDF_STATUS_E_FAILURE;
}
soc_reg->is_11d_offloaded = val;
return QDF_STATUS_SUCCESS;
}

View file

@ -356,4 +356,22 @@ QDF_STATUS reg_11d_vdev_delete_update(struct wlan_objmgr_vdev *vdev);
* Return: Success or Failure
*/
QDF_STATUS reg_11d_vdev_created_update(struct wlan_objmgr_vdev *vdev);
/**
* reg_set_regdb_offloaded() - set/clear regulatory offloaded flag
*
* @psoc: psoc pointer
* Return: Success or Failure
*/
QDF_STATUS reg_set_regdb_offloaded(struct wlan_objmgr_psoc *psoc,
bool val);
/**
* reg_set_11d_offloaded() - set/clear 11d offloaded flag
*
* @psoc: psoc pointer
* Return: Success or Failure
*/
QDF_STATUS reg_set_11d_offloaded(struct wlan_objmgr_psoc *psoc,
bool val);
#endif

View file

@ -42,4 +42,22 @@ QDF_STATUS tgt_reg_process_master_chan_list(struct cur_regulatory_info
*/
QDF_STATUS tgt_reg_process_11d_new_country(struct wlan_objmgr_psoc *psoc,
struct reg_11d_new_country *reg_11d_new_cc);
/**
* tgt_reg_set_regdb_offloaded() - set/clear regulatory offloaded flag
*
* @psoc: psoc pointer
* Return: Success or Failure
*/
QDF_STATUS tgt_reg_set_regdb_offloaded(struct wlan_objmgr_psoc *psoc,
bool val);
/**
* tgt_reg_set_11d_offloaded() - set/clear 11d offloaded flag
*
* @psoc: psoc pointer
* Return: Success or Failure
*/
QDF_STATUS tgt_reg_set_11d_offloaded(struct wlan_objmgr_psoc *psoc,
bool val);
#endif

View file

@ -45,3 +45,14 @@ QDF_STATUS tgt_reg_process_11d_new_country(struct wlan_objmgr_psoc *psoc,
return reg_save_new_11d_country(psoc, reg_11d_new_cc->alpha2);
}
QDF_STATUS tgt_reg_set_regdb_offloaded(struct wlan_objmgr_psoc *psoc,
bool val)
{
return reg_set_regdb_offloaded(psoc, val);
}
QDF_STATUS tgt_reg_set_11d_offloaded(struct wlan_objmgr_psoc *psoc,
bool val)
{
return reg_set_11d_offloaded(psoc, val);
}