summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNitesh Shah <niteshs@codeaurora.org>2017-03-30 19:50:54 +0530
committerspuligil <spuligil@codeaurora.org>2017-04-19 16:12:55 -0700
commit2442fea1e0c8a7202cdc38b8314f79e8e4e980a2 (patch)
treea522b4c6f85997d633aa842201da10806da13f4d
parentcc0f4ed21f1d5bf06e34ddf8927e681ccc54c5c9 (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.h2
-rw-r--r--wmi/inc/wmi_unified_param.h19
-rw-r--r--wmi/inc/wmi_unified_priv.h3
-rw-r--r--wmi/src/wmi_unified_api.c21
-rw-r--r--wmi/src/wmi_unified_tlv.c73
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,