qcacmn: Add wmi command to set limit off chan parameters
Add WMI command for setting limit off channel command parameters to firmware. CRs-Fixed: 2068307 Change-Id: Ia99f1b4d4fe33082a561c9307af9d76ae16d8be4
This commit is contained in:

committed by
snandini

parent
db183ccb8c
commit
34e0131b30
@@ -1508,4 +1508,7 @@ void wmi_print_mgmt_event_log(wmi_unified_t wmi, uint32_t count,
|
||||
|
||||
QDF_STATUS wmi_unified_send_dbs_scan_sel_params_cmd(void *wmi_hdl,
|
||||
struct wmi_dbs_scan_sel_params *wmi_param);
|
||||
|
||||
QDF_STATUS wmi_unified_send_limit_off_chan_cmd(void *wmi_hdl,
|
||||
struct wmi_limit_off_chan_param *wmi_param);
|
||||
#endif /* _WMI_UNIFIED_API_H_ */
|
||||
|
@@ -7382,4 +7382,20 @@ struct wmi_dbs_scan_sel_params {
|
||||
uint32_t num_non_dbs_scans[WMI_SCAN_CLIENT_MAX];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_limit_off_chan_param - limit off channel parameters
|
||||
* @vdev_id: vdev id
|
||||
* @status: status of the command (enable/disable)
|
||||
* @max_offchan_time: max off channel time
|
||||
* @rest_time: home channel time
|
||||
* @skip_dfs_chans: skip dfs channels during scan
|
||||
*/
|
||||
struct wmi_limit_off_chan_param {
|
||||
uint32_t vdev_id;
|
||||
bool status;
|
||||
uint32_t max_offchan_time;
|
||||
uint32_t rest_time;
|
||||
bool skip_dfs_chans;
|
||||
};
|
||||
|
||||
#endif /* _WMI_UNIFIED_PARAM_H_ */
|
||||
|
@@ -1354,6 +1354,8 @@ uint32_t (*convert_pdev_id_target_to_host)(uint32_t pdev_id);
|
||||
|
||||
QDF_STATUS (*send_user_country_code_cmd)(wmi_unified_t wmi_handle,
|
||||
uint8_t pdev_id, struct cc_regdmn_s *rd);
|
||||
QDF_STATUS (*send_limit_off_chan_cmd)(wmi_unified_t wmi_handle,
|
||||
struct wmi_limit_off_chan_param *limit_off_chan_param);
|
||||
};
|
||||
|
||||
struct target_abi_version {
|
||||
|
@@ -6699,3 +6699,23 @@ QDF_STATUS wmi_unified_send_dbs_scan_sel_params_cmd(void *wmi_hdl,
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/**
|
||||
* wmi_unified_send_limit_off_chan_cmd() - send wmi cmd of limit off channel
|
||||
* configuration params
|
||||
* @wmi_hdl: wmi handler
|
||||
* @limit_off_chan_param: pointer to wmi_limit_off_chan_param
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS on success and QDF failure reason code on failure
|
||||
*/
|
||||
QDF_STATUS wmi_unified_send_limit_off_chan_cmd(void *wmi_hdl,
|
||||
struct wmi_limit_off_chan_param *limit_off_chan_param)
|
||||
{
|
||||
wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
|
||||
|
||||
if (wmi_handle->ops->send_limit_off_chan_cmd)
|
||||
return wmi_handle->ops->send_limit_off_chan_cmd(wmi_handle,
|
||||
limit_off_chan_param);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
@@ -18237,6 +18237,63 @@ static QDF_STATUS send_user_country_code_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* send_limit_off_chan_cmd_tlv() - send wmi cmd of limit off chan
|
||||
* configuration params
|
||||
* @wmi_handle: wmi handler
|
||||
* @limit_off_chan_param: pointer to wmi_off_chan_param
|
||||
*
|
||||
* Return: 0 for success and non zero for failure
|
||||
*/
|
||||
static
|
||||
QDF_STATUS send_limit_off_chan_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
struct wmi_limit_off_chan_param *limit_off_chan_param)
|
||||
{
|
||||
wmi_vdev_limit_offchan_cmd_fixed_param *cmd;
|
||||
wmi_buf_t buf;
|
||||
uint32_t len = sizeof(*cmd);
|
||||
int err;
|
||||
|
||||
buf = wmi_buf_alloc(wmi_handle, len);
|
||||
if (!buf) {
|
||||
WMI_LOGP("%s: failed to allocate memory for limit off chan cmd",
|
||||
__func__);
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
cmd = (wmi_vdev_limit_offchan_cmd_fixed_param *)wmi_buf_data(buf);
|
||||
|
||||
WMITLV_SET_HDR(&cmd->tlv_header,
|
||||
WMITLV_TAG_STRUC_wmi_vdev_limit_offchan_cmd_fixed_param,
|
||||
WMITLV_GET_STRUCT_TLVLEN(
|
||||
wmi_vdev_limit_offchan_cmd_fixed_param));
|
||||
|
||||
cmd->vdev_id = limit_off_chan_param->vdev_id;
|
||||
|
||||
cmd->flags &= 0;
|
||||
if (limit_off_chan_param->status)
|
||||
cmd->flags |= WMI_VDEV_LIMIT_OFFCHAN_ENABLE;
|
||||
if (limit_off_chan_param->skip_dfs_chans)
|
||||
cmd->flags |= WMI_VDEV_LIMIT_OFFCHAN_SKIP_DFS;
|
||||
|
||||
cmd->max_offchan_time = limit_off_chan_param->max_offchan_time;
|
||||
cmd->rest_time = limit_off_chan_param->rest_time;
|
||||
|
||||
WMI_LOGE("%s: vdev_id=%d, flags =%x, max_offchan_time=%d, rest_time=%d",
|
||||
__func__, cmd->vdev_id, cmd->flags, cmd->max_offchan_time,
|
||||
cmd->rest_time);
|
||||
|
||||
err = wmi_unified_cmd_send(wmi_handle, buf,
|
||||
len, WMI_VDEV_LIMIT_OFFCHAN_CMDID);
|
||||
if (QDF_IS_STATUS_ERROR(err)) {
|
||||
WMI_LOGE("Failed to send limit off chan cmd err=%d", err);
|
||||
wmi_buf_free(buf);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
struct wmi_ops tlv_ops = {
|
||||
.send_vdev_create_cmd = send_vdev_create_cmd_tlv,
|
||||
.send_vdev_delete_cmd = send_vdev_delete_cmd_tlv,
|
||||
@@ -18619,6 +18676,8 @@ struct wmi_ops tlv_ops = {
|
||||
.extract_reg_11d_new_country_event =
|
||||
extract_reg_11d_new_country_event_tlv,
|
||||
.send_user_country_code_cmd = send_user_country_code_cmd_tlv,
|
||||
.send_limit_off_chan_cmd =
|
||||
send_limit_off_chan_cmd_tlv,
|
||||
};
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user