diff options
| author | Nitesh Shah <niteshs@codeaurora.org> | 2017-03-30 19:50:54 +0530 |
|---|---|---|
| committer | spuligil <spuligil@codeaurora.org> | 2017-04-19 16:12:55 -0700 |
| commit | 2442fea1e0c8a7202cdc38b8314f79e8e4e980a2 (patch) | |
| tree | a522b4c6f85997d633aa842201da10806da13f4d | |
| parent | cc0f4ed21f1d5bf06e34ddf8927e681ccc54c5c9 (diff) | |
qcacmn: Add support to send DBS Scan command to firmware
This change adds support to send the DBS Scan command to
the firmware.
Change-Id: I147855690f09af03a43f85f2e57626d7f73998de
CRs-Fixed: 2029402
| -rw-r--r-- | wmi/inc/wmi_unified_api.h | 2 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_param.h | 19 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_priv.h | 3 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_api.c | 21 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_tlv.c | 73 |
5 files changed, 116 insertions, 2 deletions
diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index 65750fa42164..e6d8e05dacea 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -1386,4 +1386,6 @@ void wmi_print_mgmt_event_log(wmi_unified_t wmi, uint32_t count, qdf_abstract_print *print, void *print_priv); #endif /* WMI_INTERFACE_EVENT_LOGGING */ +QDF_STATUS wmi_unified_send_dbs_scan_sel_params_cmd(void *wmi_hdl, + struct wmi_dbs_scan_sel_params *wmi_param); #endif /* _WMI_UNIFIED_API_H_ */ diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index afd865ceadcf..834d24f337ea 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -1087,6 +1087,7 @@ struct scan_start_params { uint32_t num_vendor_oui; uint32_t oui_field_len; uint8_t *voui; + uint32_t scan_ctrl_flags_ext; }; /** @@ -6895,5 +6896,23 @@ struct get_arp_stats { uint32_t vdev_id; }; +#define WMI_SCAN_CLIENT_MAX 7 + +/** + * struct wmi_dbs_scan_sel_params - DBS scan selection params + * @num_clients: Number of scan clients dutycycle + * @pdev_id: pdev_id for identifying the MAC + * @module_id: scan client module id + * @num_dbs_scans: number of DBS scans + * @num_non_dbs_scans: number of non-DBS scans + */ +struct wmi_dbs_scan_sel_params { + uint32_t num_clients; + uint32_t pdev_id; + uint32_t module_id[WMI_SCAN_CLIENT_MAX]; + uint32_t num_dbs_scans[WMI_SCAN_CLIENT_MAX]; + uint32_t num_non_dbs_scans[WMI_SCAN_CLIENT_MAX]; +}; + #endif /* _WMI_UNIFIED_PARAM_H_ */ diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 3dc67f32aac5..e54330e4114e 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -1156,6 +1156,9 @@ QDF_STATUS (*send_power_dbg_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_adapt_dwelltime_params_cmd)(wmi_unified_t wmi_handle, struct wmi_adaptive_dwelltime_params *dwelltime_params); +QDF_STATUS (*send_dbs_scan_sel_params_cmd)(wmi_unified_t wmi_handle, + struct wmi_dbs_scan_sel_params *dbs_scan_params); + QDF_STATUS (*send_fw_test_cmd)(wmi_unified_t wmi_handle, struct set_fwtest_params *wmi_fwtest); diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index 232cb9becc7a..a81b0bc9ba6b 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -6261,3 +6261,24 @@ QDF_STATUS wmi_unified_get_rcpi_cmd(void *wmi_hdl, return QDF_STATUS_E_FAILURE; } + +/** + * wmi_unified_send_dbs_scan_sel_params_cmd() - send wmi cmd of + * DBS scan selection configuration params + * @wma_handle: wma handler + * @dbs_scan_params: pointer to wmi_dbs_scan_sel_params + * + * Return: QDF_STATUS_SUCCESS on success and QDF failure reason code for failure + */ +QDF_STATUS wmi_unified_send_dbs_scan_sel_params_cmd(void *wmi_hdl, + struct wmi_dbs_scan_sel_params *dbs_scan_params) +{ + wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; + + if (wmi_handle->ops->send_dbs_scan_sel_params_cmd) + return wmi_handle->ops-> + send_dbs_scan_sel_params_cmd(wmi_handle, + dbs_scan_params); + + return QDF_STATUS_E_FAILURE; +} diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 51619a946e9b..329c930549e5 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -1534,6 +1534,7 @@ QDF_STATUS send_scan_start_cmd_tlv(wmi_unified_t wmi_handle, cmd->num_ssids = params->num_ssids; cmd->ie_len = params->ie_len; cmd->n_probes = params->n_probes; + cmd->scan_ctrl_flags_ext = params->scan_ctrl_flags_ext; /* mac randomization attributes */ if (params->enable_scan_randomization) { @@ -1553,7 +1554,8 @@ QDF_STATUS send_scan_start_cmd_tlv(wmi_unified_t wmi_handle, cmd->num_vendor_oui = params->num_vendor_oui; } - WMI_LOGD("scan_ctrl_flags = %x", cmd->scan_ctrl_flags); + WMI_LOGD("scan_ctrl_flags = %x, scan_ctrl_flags_ext = %x", + cmd->scan_ctrl_flags, cmd->scan_ctrl_flags_ext); buf_ptr += sizeof(*cmd); tmp_ptr = (uint32_t *) (buf_ptr + WMI_TLV_HDR_SIZE); @@ -4869,6 +4871,72 @@ QDF_STATUS send_adapt_dwelltime_params_cmd_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +/** + * send_dbs_scan_sel_params_cmd_tlv() - send wmi cmd of DBS scan selection + * configuration params + * @wmi_handle: wmi handler + * @dbs_scan_params: pointer to wmi_dbs_scan_sel_params + * + * Return: QDF_STATUS_SUCCESS on success and QDF failure reason code for failure + */ +static +QDF_STATUS send_dbs_scan_sel_params_cmd_tlv(wmi_unified_t wmi_handle, + struct wmi_dbs_scan_sel_params *dbs_scan_params) +{ + wmi_scan_dbs_duty_cycle_fixed_param *dbs_scan_param; + wmi_scan_dbs_duty_cycle_tlv_param *cmd; + wmi_buf_t buf; + uint8_t *buf_ptr; + QDF_STATUS err; + uint32_t i; + int len; + + len = sizeof(*dbs_scan_param); + len += WMI_TLV_HDR_SIZE; + len += dbs_scan_params->num_clients * sizeof(*cmd); + + buf = wmi_buf_alloc(wmi_handle, len); + if (!buf) { + WMI_LOGE("%s:Failed to allocate buffer to send cmd", __func__); + return QDF_STATUS_E_NOMEM; + } + + buf_ptr = (uint8_t *) wmi_buf_data(buf); + dbs_scan_param = (wmi_scan_dbs_duty_cycle_fixed_param *) buf_ptr; + WMITLV_SET_HDR(&dbs_scan_param->tlv_header, + WMITLV_TAG_STRUC_wmi_scan_dbs_duty_cycle_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_scan_dbs_duty_cycle_fixed_param)); + + dbs_scan_param->num_clients = dbs_scan_params->num_clients; + dbs_scan_param->pdev_id = dbs_scan_params->pdev_id; + buf_ptr += sizeof(*dbs_scan_param); + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, + (sizeof(*cmd) * dbs_scan_params->num_clients)); + buf_ptr = buf_ptr + (uint8_t) WMI_TLV_HDR_SIZE; + + for (i = 0; i < dbs_scan_params->num_clients; i++) { + cmd = (wmi_scan_dbs_duty_cycle_tlv_param *) buf_ptr; + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_scan_dbs_duty_cycle_param_tlv, + WMITLV_GET_STRUCT_TLVLEN( + wmi_scan_dbs_duty_cycle_tlv_param)); + cmd->module_id = dbs_scan_params->module_id[i]; + cmd->num_dbs_scans = dbs_scan_params->num_dbs_scans[i]; + cmd->num_non_dbs_scans = dbs_scan_params->num_non_dbs_scans[i]; + buf_ptr = buf_ptr + (uint8_t) sizeof(*cmd); + } + + err = wmi_unified_cmd_send(wmi_handle, buf, + len, WMI_SET_SCAN_DBS_DUTY_CYCLE_CMDID); + if (QDF_IS_STATUS_ERROR(err)) { + WMI_LOGE("Failed to send dbs scan selection cmd err=%d", err); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} /** * send_roam_scan_filter_cmd_tlv() - Filter to be applied while roaming @@ -9558,7 +9626,6 @@ void wmi_copy_resource_config(wmi_resource_config *resource_cfg, tgt_res_cfg->num_ocb_channels; resource_cfg->num_ocb_schedules = tgt_res_cfg->num_ocb_schedules; - } #ifdef CONFIG_MCL /** @@ -13114,6 +13181,8 @@ struct wmi_ops tlv_ops = { .send_set_active_bpf_mode_cmd = send_set_active_bpf_mode_cmd_tlv, .send_adapt_dwelltime_params_cmd = send_adapt_dwelltime_params_cmd_tlv, + .send_dbs_scan_sel_params_cmd = + send_dbs_scan_sel_params_cmd_tlv, .init_cmd_send = init_cmd_send_tlv, .get_target_cap_from_service_ready = extract_service_ready_tlv, .extract_hal_reg_cap = extract_hal_reg_cap_tlv, |
