From f00be1dbc47dd7c45c8cea3d472fdf68c554dfce Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Sat, 7 Jan 2017 18:21:55 -0800 Subject: [PATCH] qcacmn: Add support for DFS_PHYERR_OFFLOAD commands Add support for below wmi commands WMI_PDEV_DFS_PHYERR_OFFLOAD_ENABLE_CMDID WMI_PDEV_DFS_PHYERR_OFFLOAD_DISABLE_CMDID Change-Id: I5cfcfac428ce076d42f186752c967f67ffa1879f CRs-Fixed: 2017481 --- wmi_unified_api.c | 26 ++++++++++++ wmi_unified_non_tlv.c | 36 ++++++++++++++++ wmi_unified_tlv.c | 98 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 160 insertions(+) diff --git a/wmi_unified_api.c b/wmi_unified_api.c index 24ee3e65ce..bf9db91aa5 100644 --- a/wmi_unified_api.c +++ b/wmi_unified_api.c @@ -6404,3 +6404,29 @@ QDF_STATUS wmi_extract_peer_delete_response_event( return QDF_STATUS_E_FAILURE; } + +QDF_STATUS +wmi_unified_dfs_phyerr_offload_en_cmd(void *wmi_hdl, + uint32_t pdev_id) +{ + wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; + + if (wmi_handle->ops->send_dfs_phyerr_offload_en_cmd) + return wmi_handle->ops->send_dfs_phyerr_offload_en_cmd( + wmi_handle, pdev_id); + + return QDF_STATUS_E_FAILURE; +} + +QDF_STATUS +wmi_unified_dfs_phyerr_offload_dis_cmd(void *wmi_hdl, + uint32_t pdev_id) +{ + wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; + + if (wmi_handle->ops->send_dfs_phyerr_offload_dis_cmd) + return wmi_handle->ops->send_dfs_phyerr_offload_dis_cmd( + wmi_handle, pdev_id); + + return QDF_STATUS_E_FAILURE; +} diff --git a/wmi_unified_non_tlv.c b/wmi_unified_non_tlv.c index a01b9abd3f..6a610d3833 100644 --- a/wmi_unified_non_tlv.c +++ b/wmi_unified_non_tlv.c @@ -7886,6 +7886,38 @@ static uint16_t wmi_set_htc_tx_tag_non_tlv(wmi_unified_t wmi_handle, return 0; } +/** + * send_dfs_phyerr_offload_en_cmd_non_tlv() - send dfs phyerr offload en cmd + * @wmi_handle: wmi handle + * @pdev_id: pdev id + * + * Send WMI_PDEV_DFS_PHYERR_OFFLOAD_ENABLE_CMDID command to firmware. + * + * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error + */ +static QDF_STATUS send_dfs_phyerr_offload_en_cmd_non_tlv( + wmi_unified_t wmi_handle, + uint32_t pdev_id) +{ + return QDF_STATUS_SUCCESS; +} + +/** + * send_dfs_phyerr_offload_dis_cmd_non_tlv() - send dfs phyerr offload dis cmd + * @wmi_handle: wmi handle + * @pdev_id: pdev id + * + * Send WMI_PDEV_DFS_PHYERR_OFFLOAD_DISABLE_CMDID command to firmware. + * + * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error + */ +static QDF_STATUS send_dfs_phyerr_offload_dis_cmd_non_tlv( + wmi_unified_t wmi_handle, + uint32_t pdev_id) +{ + return QDF_STATUS_SUCCESS; +} + struct wmi_ops non_tlv_ops = { .send_vdev_create_cmd = send_vdev_create_cmd_non_tlv, .send_vdev_delete_cmd = send_vdev_delete_cmd_non_tlv, @@ -8101,6 +8133,10 @@ struct wmi_ops non_tlv_ops = { .extract_pdev_utf_event = extract_pdev_utf_event_non_tlv, .wmi_set_htc_tx_tag = wmi_set_htc_tx_tag_non_tlv, .is_management_record = is_management_record_non_tlv, + .send_dfs_phyerr_offload_en_cmd = + send_dfs_phyerr_offload_en_cmd_non_tlv, + .send_dfs_phyerr_offload_dis_cmd = + send_dfs_phyerr_offload_dis_cmd_non_tlv, }; /** diff --git a/wmi_unified_tlv.c b/wmi_unified_tlv.c index 54393939bf..5cd42a1a1a 100644 --- a/wmi_unified_tlv.c +++ b/wmi_unified_tlv.c @@ -13677,6 +13677,102 @@ end: return qdf_status; } +/** + * send_dfs_phyerr_offload_en_cmd_tlv() - send dfs phyerr offload enable cmd + * @wmi_handle: wmi handle + * @pdev_id: pdev id + * + * Send WMI_PDEV_DFS_PHYERR_OFFLOAD_ENABLE_CMDID command to firmware. + * + * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error + */ +static QDF_STATUS send_dfs_phyerr_offload_en_cmd_tlv(wmi_unified_t wmi_handle, + uint32_t pdev_id) +{ + wmi_pdev_dfs_phyerr_offload_enable_cmd_fixed_param *cmd; + wmi_buf_t buf; + uint16_t len; + QDF_STATUS ret; + + len = sizeof(*cmd); + buf = wmi_buf_alloc(wmi_handle, len); + + WMI_LOGI("%s: pdev_id=%d", __func__, pdev_id); + + if (!buf) { + WMI_LOGE("%s : wmi_buf_alloc failed", __func__); + return QDF_STATUS_E_NOMEM; + } + + cmd = (wmi_pdev_dfs_phyerr_offload_enable_cmd_fixed_param *) + wmi_buf_data(buf); + + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_pdev_dfs_phyerr_offload_enable_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_pdev_dfs_phyerr_offload_enable_cmd_fixed_param)); + + cmd->pdev_id = pdev_id; + ret = wmi_unified_cmd_send(wmi_handle, buf, len, + WMI_PDEV_DFS_PHYERR_OFFLOAD_ENABLE_CMDID); + if (QDF_IS_STATUS_ERROR(ret)) { + WMI_LOGE("%s: Failed to send cmd to fw, ret=%d, pdev_id=%d", + __func__, ret, pdev_id); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} + +/** + * send_dfs_phyerr_offload_dis_cmd_tlv() - send dfs phyerr offload disable cmd + * @wmi_handle: wmi handle + * @pdev_id: pdev id + * + * Send WMI_PDEV_DFS_PHYERR_OFFLOAD_DISABLE_CMDID command to firmware. + * + * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error + */ +static QDF_STATUS send_dfs_phyerr_offload_dis_cmd_tlv(wmi_unified_t wmi_handle, + uint32_t pdev_id) +{ + wmi_pdev_dfs_phyerr_offload_disable_cmd_fixed_param *cmd; + wmi_buf_t buf; + uint16_t len; + QDF_STATUS ret; + + len = sizeof(*cmd); + buf = wmi_buf_alloc(wmi_handle, len); + + WMI_LOGI("%s: pdev_id=%d", __func__, pdev_id); + + if (!buf) { + WMI_LOGE("%s : wmi_buf_alloc failed", __func__); + return QDF_STATUS_E_NOMEM; + } + + cmd = (wmi_pdev_dfs_phyerr_offload_disable_cmd_fixed_param *) + wmi_buf_data(buf); + + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_pdev_dfs_phyerr_offload_disable_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_pdev_dfs_phyerr_offload_disable_cmd_fixed_param)); + + cmd->pdev_id = pdev_id; + ret = wmi_unified_cmd_send(wmi_handle, buf, len, + WMI_PDEV_DFS_PHYERR_OFFLOAD_DISABLE_CMDID); + if (QDF_IS_STATUS_ERROR(ret)) { + WMI_LOGE("%s: Failed to send cmd to fw, ret=%d, pdev_id=%d", + __func__, ret, pdev_id); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} + /** * init_cmd_send_tlv() - send initialization cmd to fw * @wmi_handle: wmi handle @@ -15988,6 +16084,8 @@ struct wmi_ops tlv_ops = { extract_peer_sta_ps_statechange_ev_tlv, .extract_inst_rssi_stats_event = extract_inst_rssi_stats_event_tlv, .send_per_roam_config_cmd = send_per_roam_config_cmd_tlv, + .send_dfs_phyerr_offload_en_cmd = send_dfs_phyerr_offload_en_cmd_tlv, + .send_dfs_phyerr_offload_dis_cmd = send_dfs_phyerr_offload_dis_cmd_tlv, }; #ifndef CONFIG_MCL