qcacmn: Add WMI changes for host DFS confirmation check

Send average radar parameters to FW.
Extract host dfs spoof check status from FW.

Change-Id: I70c4e5aad0fe1eda55da37abd20cc6d70728edba
CRs-Fixed: 2211883
This commit is contained in:
Shashikala Prabhu
2018-05-16 10:08:09 +05:30
committed by nshrivas
parent 21a96f9644
commit 9951d56842
5 changed files with 157 additions and 0 deletions

View File

@@ -2260,4 +2260,31 @@ QDF_STATUS wmi_extract_cca_stats(wmi_unified_t wmi_handle, void *evt_buf,
struct wmi_host_congestion_stats *stats); struct wmi_host_congestion_stats *stats);
#endif /* QCA_SUPPORT_CP_STATS */ #endif /* QCA_SUPPORT_CP_STATS */
#if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
/**
* wmi_unified_dfs_send_avg_params_cmd() - send average radar parameters cmd.
* @wmi_hdl: wmi handle
* @params: radar found params
*
* This function passes the average radar parameters to fw
*
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
*/
QDF_STATUS
wmi_unified_dfs_send_avg_params_cmd(void *wmi_hdl,
struct dfs_radar_found_params *params);
/**
* wmi_extract_dfs_status_from_fw() - extract host dfs status from fw.
* @wmi_hdl: wmi handle
* @evt_buf: pointer to event buffer
* @dfs_status_check: pointer to the host dfs status
*
* This function extracts the result of host dfs from fw
*
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
*/
QDF_STATUS wmi_extract_dfs_status_from_fw(void *wmi_hdl, void *evt_buf,
uint32_t *dfs_status_check);
#endif
#endif /* _WMI_UNIFIED_API_H_ */ #endif /* _WMI_UNIFIED_API_H_ */

View File

@@ -432,6 +432,7 @@ typedef enum {
typedef enum { typedef enum {
WMI_HOST_VDEV_START_OK = 0, WMI_HOST_VDEV_START_OK = 0,
WMI_HOST_VDEV_START_CHAN_INVALID, WMI_HOST_VDEV_START_CHAN_INVALID,
WMI_HOST_VDEV_START_CHAN_BLOCKED,
} WMI_HOST_VDEV_START_STATUS; } WMI_HOST_VDEV_START_STATUS;
/* /*
@@ -5519,6 +5520,9 @@ typedef enum {
wmi_host_swfda_event_id, wmi_host_swfda_event_id,
wmi_sar_get_limits_event_id, wmi_sar_get_limits_event_id,
wmi_pdev_div_rssi_antid_event_id, wmi_pdev_div_rssi_antid_event_id,
#if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
wmi_host_dfs_status_check_event_id,
#endif
wmi_events_max, wmi_events_max,
} wmi_conv_event_id; } wmi_conv_event_id;
@@ -5944,6 +5948,7 @@ typedef enum {
wmi_service_ap_obss_detection_offload, wmi_service_ap_obss_detection_offload,
wmi_service_bss_color_offload, wmi_service_bss_color_offload,
wmi_service_gmac_offload_support, wmi_service_gmac_offload_support,
wmi_service_host_dfs_check_support,
wmi_services_max, wmi_services_max,
} wmi_conv_service_ids; } wmi_conv_service_ids;

View File

@@ -1616,6 +1616,16 @@ QDF_STATUS (*extract_twt_resume_dialog_comp_event)(wmi_unified_t wmi_handle,
QDF_STATUS (*extract_cca_stats)(wmi_unified_t wmi_handle, void *evt_buf, QDF_STATUS (*extract_cca_stats)(wmi_unified_t wmi_handle, void *evt_buf,
struct wmi_host_congestion_stats *stats); struct wmi_host_congestion_stats *stats);
#endif /* QCA_SUPPORT_CP_STATS */ #endif /* QCA_SUPPORT_CP_STATS */
#if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
QDF_STATUS (*send_dfs_average_radar_params_cmd)(
wmi_unified_t wmi_handle,
struct dfs_radar_found_params *params);
QDF_STATUS (*extract_dfs_status_from_fw)(wmi_unified_t wmi_handle,
void *evt_buf,
uint32_t *dfs_status_check);
#endif
}; };
/* Forward declartion for psoc*/ /* Forward declartion for psoc*/

View File

@@ -7507,3 +7507,30 @@ QDF_STATUS wmi_extract_cca_stats(wmi_unified_t wmi_handle, void *evt_buf,
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
#endif /* QCA_SUPPORT_CP_STATS */ #endif /* QCA_SUPPORT_CP_STATS */
#if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
QDF_STATUS
wmi_unified_dfs_send_avg_params_cmd(void *wmi_hdl,
struct dfs_radar_found_params *params)
{
wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
if (wmi_handle->ops->send_dfs_average_radar_params_cmd)
return wmi_handle->ops->send_dfs_average_radar_params_cmd(
wmi_handle, params);
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS wmi_extract_dfs_status_from_fw(void *wmi_hdl, void *evt_buf,
uint32_t *dfs_status_check)
{
wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
if (wmi_handle->ops->extract_dfs_status_from_fw)
return wmi_handle->ops->extract_dfs_status_from_fw(wmi_handle,
evt_buf, dfs_status_check);
return QDF_STATUS_E_FAILURE;
}
#endif

View File

@@ -8413,6 +8413,83 @@ QDF_STATUS send_wds_entry_list_cmd_non_tlv(wmi_unified_t wmi_handle)
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
#if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
/**
* send_dfs_average_radar_params_cmd_non_tlv() - send average radar params to
* fw.
* @wmi_handle: wmi handle
* @params: pointer to dfs_radar_found_params.
*
* Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
*/
static QDF_STATUS send_dfs_average_radar_params_cmd_non_tlv(
wmi_unified_t wmi_handle,
struct dfs_radar_found_params *params)
{
wmi_host_dfs_radar_found_cmd *cmd;
wmi_buf_t buf;
int len = sizeof(wmi_host_dfs_radar_found_cmd);
buf = wmi_buf_alloc(wmi_handle, len);
if (!buf) {
WMI_LOGD("%s:wmi_buf_alloc failed\n", __func__);
return QDF_STATUS_E_FAILURE;
}
cmd = (wmi_host_dfs_radar_found_cmd *)wmi_buf_data(buf);
/* Fill the WMI structure (PRI, duration, SIDX) from
* the radar_found_param structure and then send
* out.
*/
cmd->pri_min_value = params->pri_min;
cmd->pri_max_value = params->pri_max;
cmd->duration_min_value = params->duration_min;
cmd->duration_max_value = params->duration_max;
cmd->sidx_min_value = params->sidx_min;
cmd->sidx_max_value = params->sidx_max;
if (wmi_unified_cmd_send(wmi_handle, buf, len,
WMI_HOST_DFS_RADAR_FOUND_CMDID)) {
WMI_LOGD("%s:Failed to send WMI command\n", __func__);
wmi_buf_free(buf);
return QDF_STATUS_E_FAILURE;
}
return QDF_STATUS_SUCCESS;
}
/**
* extract_dfs_status_from_fw_non_tlv() - extract the result of host dfs check
* from fw
* @wmi_handle: wmi handle
* @evt_buf: pointer to event buffer
* @fw_dfs_status_code: pointer to the status received from fw.
*
* Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
*/
static QDF_STATUS
extract_dfs_status_from_fw_non_tlv(wmi_unified_t wmi_handle,
void *evt_buf,
uint32_t *fw_dfs_status_code)
{
wmi_host_dfs_status_check_event *ev =
(wmi_host_dfs_status_check_event *)evt_buf;
if ((ev->status == WMI_HOST_DFS_CHECK_PASSED) ||
(ev->status == WMI_HOST_DFS_CHECK_FAILED) ||
(ev->status == WMI_HOST_DFS_CHECK_HW_RADAR)) {
*fw_dfs_status_code = ev->status;
return QDF_STATUS_SUCCESS;
}
WMI_LOGD("%s..Invalid status code : %d received\n", __func__,
ev->status);
return QDF_STATUS_E_FAILURE;
}
#endif
/** /**
* wmi_non_tlv_pdev_id_conversion_enable() - Enable pdev_id conversion * wmi_non_tlv_pdev_id_conversion_enable() - Enable pdev_id conversion
@@ -8659,6 +8736,11 @@ struct wmi_ops non_tlv_ops = {
.extract_swfda_vdev_id = extract_swfda_vdev_id_non_tlv, .extract_swfda_vdev_id = extract_swfda_vdev_id_non_tlv,
#endif /* WLAN_SUPPORT_FILS */ #endif /* WLAN_SUPPORT_FILS */
.wmi_pdev_id_conversion_enable = wmi_non_tlv_pdev_id_conversion_enable, .wmi_pdev_id_conversion_enable = wmi_non_tlv_pdev_id_conversion_enable,
#if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
.send_dfs_average_radar_params_cmd =
send_dfs_average_radar_params_cmd_non_tlv,
.extract_dfs_status_from_fw = extract_dfs_status_from_fw_non_tlv,
#endif
}; };
/** /**
@@ -8852,6 +8934,8 @@ static void populate_non_tlv_service(uint32_t *wmi_service)
wmi_service[wmi_service_widebw_scan] = WMI_SERVICE_UNAVAILABLE; wmi_service[wmi_service_widebw_scan] = WMI_SERVICE_UNAVAILABLE;
wmi_service[wmi_service_support_dma] = wmi_service[wmi_service_support_dma] =
WMI_SERVICE_UNAVAILABLE; WMI_SERVICE_UNAVAILABLE;
wmi_service[wmi_service_host_dfs_check_support] =
WMI_SERVICE_HOST_DFS_CHECK_SUPPORT;
} }
/** /**
@@ -8951,6 +9035,10 @@ static void populate_non_tlv_events_id(uint32_t *event_ids)
event_ids[wmi_pdev_wds_entry_list_event_id] = event_ids[wmi_pdev_wds_entry_list_event_id] =
WMI_PDEV_WDS_ENTRY_LIST_EVENTID; WMI_PDEV_WDS_ENTRY_LIST_EVENTID;
event_ids[wmi_host_swfda_event_id] = WMI_HOST_SWFDA_EVENTID; event_ids[wmi_host_swfda_event_id] = WMI_HOST_SWFDA_EVENTID;
#if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
event_ids[wmi_host_dfs_status_check_event_id] =
WMI_HOST_DFS_STATUS_CHECK_EVENTID;
#endif
} }
/** /**