mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 08:36:12 -04:00
qcacld-3.0: Use lockless sme API to get valid channel list from sme
Use lockless sme API to get valid channel list from sme instead of sme_get_cfg_valid_channels to avoid deadlock. Change-Id: I481824cb116244b9c13665d6a0ee88e28c88cf66 CRs-Fixed: 2063060
This commit is contained in:
parent
2df9de7637
commit
c3c375e5e9
3 changed files with 37 additions and 5 deletions
|
|
@ -637,7 +637,7 @@ void wlan_hdd_one_connection_scenario(struct hdd_context *hdd_ctx)
|
|||
QDF_STATUS ret;
|
||||
struct policy_mgr_sme_cbacks sme_cbacks;
|
||||
|
||||
sme_cbacks.sme_get_valid_channels = sme_get_cfg_valid_channels;
|
||||
sme_cbacks.sme_get_valid_channels = sme_get_valid_channels;
|
||||
sme_cbacks.sme_get_nss_for_vdev = sme_get_vdev_type_nss;
|
||||
/* flush the entire table first */
|
||||
ret = policy_mgr_psoc_enable(hdd_ctx->hdd_psoc);
|
||||
|
|
@ -697,7 +697,7 @@ void wlan_hdd_two_connections_scenario(struct hdd_context *hdd_ctx,
|
|||
sub_type < PM_MAX_NUM_OF_MODE; sub_type++) {
|
||||
type = wlan_hdd_valid_type_of_persona(sub_type);
|
||||
|
||||
sme_cbacks.sme_get_valid_channels = sme_get_cfg_valid_channels;
|
||||
sme_cbacks.sme_get_valid_channels = sme_get_valid_channels;
|
||||
sme_cbacks.sme_get_nss_for_vdev = sme_get_vdev_type_nss;
|
||||
/* flush the entire table first */
|
||||
ret = policy_mgr_psoc_enable(hdd_ctx->hdd_psoc);
|
||||
|
|
@ -734,7 +734,8 @@ void wlan_hdd_two_connections_scenario(struct hdd_context *hdd_ctx,
|
|||
pcl_len = 0;
|
||||
pcl_type = policy_mgr_get_pcl_from_second_conn_table(
|
||||
second_index, next_sub_type, system_pref,
|
||||
policy_mgr_is_hw_dbs_capable(hdd_ctx->hdd_psoc));
|
||||
policy_mgr_is_hw_dbs_capable(
|
||||
hdd_ctx->hdd_psoc));
|
||||
/* check PCL for second connection is correct or no */
|
||||
policy_mgr_get_pcl(hdd_ctx->hdd_psoc,
|
||||
next_sub_type, pcl, &pcl_len,
|
||||
|
|
@ -802,7 +803,7 @@ void wlan_hdd_three_connections_scenario(struct hdd_context *hdd_ctx,
|
|||
|
||||
type_1 = wlan_hdd_valid_type_of_persona(sub_type_1);
|
||||
|
||||
sme_cbacks.sme_get_valid_channels = sme_get_cfg_valid_channels;
|
||||
sme_cbacks.sme_get_valid_channels = sme_get_valid_channels;
|
||||
sme_cbacks.sme_get_nss_for_vdev = sme_get_vdev_type_nss;
|
||||
/* flush the entire table first */
|
||||
ret = policy_mgr_psoc_enable(hdd_ctx->hdd_psoc);
|
||||
|
|
|
|||
|
|
@ -1682,4 +1682,17 @@ QDF_STATUS sme_get_chain_rssi(tHalHandle hal,
|
|||
struct get_chain_rssi_req_params *input,
|
||||
get_chain_rssi_callback callback,
|
||||
void *context);
|
||||
|
||||
/**
|
||||
* sme_get_valid_channels() - sme api to get valid channels for
|
||||
* current regulatory domain
|
||||
* @chan_list: list of the valid channels
|
||||
* @list_len: length of the channel list
|
||||
*
|
||||
* This function will get valid channels for current regulatory
|
||||
* domain
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or non-zero on failure
|
||||
*/
|
||||
QDF_STATUS sme_get_valid_channels(uint8_t *chan_list, uint32_t *list_len);
|
||||
#endif /* #if !defined( __SME_API_H ) */
|
||||
|
|
|
|||
|
|
@ -1318,6 +1318,24 @@ QDF_STATUS sme_hdd_ready_ind(tHalHandle hHal)
|
|||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS sme_get_valid_channels(uint8_t *chan_list, uint32_t *list_len)
|
||||
{
|
||||
tpAniSirGlobal mac_ctx = sme_get_mac_context();
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (NULL == mac_ctx) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("Invalid MAC context"));
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (eSIR_SUCCESS != wlan_cfg_get_str(mac_ctx,
|
||||
WNI_CFG_VALID_CHANNEL_LIST, chan_list, list_len))
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
|
||||
\brief sme_start() - Put all SME modules at ready state.
|
||||
|
|
@ -1346,7 +1364,7 @@ QDF_STATUS sme_start(tHalHandle hHal)
|
|||
break;
|
||||
}
|
||||
sme_cbacks.sme_get_nss_for_vdev = sme_get_vdev_type_nss;
|
||||
sme_cbacks.sme_get_valid_channels = sme_get_cfg_valid_channels;
|
||||
sme_cbacks.sme_get_valid_channels = sme_get_valid_channels;
|
||||
sme_cbacks.sme_nss_update_request = sme_nss_update_request;
|
||||
sme_cbacks.sme_pdev_set_hw_mode = sme_pdev_set_hw_mode;
|
||||
sme_cbacks.sme_pdev_set_pcl = sme_pdev_set_pcl;
|
||||
|
|
|
|||
Loading…
Reference in a new issue