diff --git a/wmi/inc/wmi_unified_dfs_api.h b/wmi/inc/wmi_unified_dfs_api.h index b0d13ebdac..5a35821b00 100644 --- a/wmi/inc/wmi_unified_dfs_api.h +++ b/wmi/inc/wmi_unified_dfs_api.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -54,4 +54,19 @@ QDF_STATUS wmi_extract_dfs_radar_detection_event(void *wmi_hdl, struct radar_found_info *radar_found, uint32_t len); +#ifdef QCA_MCL_DFS_SUPPORT +/** + * wmi_extract_wlan_radar_event_info() - function to handle radar pulse event. + * @wmi_hdl: wmi handle + * @evt_buf: event buffer + * @wlan_radar_event: pointer to radar event info structure + * @len: length of buffer + * + * Return: QDF_STATUS + */ +QDF_STATUS wmi_extract_wlan_radar_event_info(void *wmi_hdl, + uint8_t *evt_buf, + struct radar_event_info *wlan_radar_event, + uint32_t len); +#endif #endif /* _WMI_UNIFIED_DFS_API_H_ */ diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index ecb284463a..cb363cac91 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -1462,6 +1462,10 @@ QDF_STATUS (*extract_dfs_radar_detection_event)(wmi_unified_t wmi_handle, uint8_t *evt_buf, struct radar_found_info *radar_found, uint32_t len); +QDF_STATUS (*extract_wlan_radar_event_info)(wmi_unified_t wmi_handle, + uint8_t *evt_buf, + struct radar_event_info *wlan_radar_event, + uint32_t len); #endif QDF_STATUS (*send_set_country_cmd)(wmi_unified_t wmi_handle, struct set_country *param); diff --git a/wmi/src/wmi_unified_dfs_api.c b/wmi/src/wmi_unified_dfs_api.c index 1b88fde632..6cce9f52eb 100644 --- a/wmi/src/wmi_unified_dfs_api.c +++ b/wmi/src/wmi_unified_dfs_api.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. * * * Permission to use, copy, modify, and/or distribute this software for @@ -54,3 +54,19 @@ QDF_STATUS wmi_extract_dfs_radar_detection_event(void *wmi_hdl, return QDF_STATUS_E_FAILURE; } + +#ifdef QCA_MCL_DFS_SUPPORT +QDF_STATUS wmi_extract_wlan_radar_event_info(void *wmi_hdl, + uint8_t *evt_buf, + struct radar_event_info *wlan_radar_event, + uint32_t len) +{ + struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; + + if (wmi_handle->ops->extract_wlan_radar_event_info) + return wmi_handle->ops->extract_wlan_radar_event_info( + wmi_handle, evt_buf, wlan_radar_event, len); + + return QDF_STATUS_E_FAILURE; +} +#endif diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index e5aaa174c0..095cd7502b 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -20637,6 +20637,55 @@ static QDF_STATUS extract_dfs_radar_detection_event_tlv( return QDF_STATUS_SUCCESS; } + +#ifdef QCA_MCL_DFS_SUPPORT +/** + * extract_wlan_radar_event_info_tlv() - extract radar pulse event + * @wmi_handle: wma handle + * @evt_buf: event buffer + * @wlan_radar_event: Pointer to struct radar_event_info + * @len: length of buffer + * + * Return: QDF_STATUS + */ +static QDF_STATUS extract_wlan_radar_event_info_tlv( + wmi_unified_t wmi_handle, + uint8_t *evt_buf, + struct radar_event_info *wlan_radar_event, + uint32_t len) +{ + WMI_DFS_RADAR_EVENTID_param_tlvs *param_tlv; + wmi_dfs_radar_event_fixed_param *radar_event; + + param_tlv = (WMI_DFS_RADAR_EVENTID_param_tlvs *)evt_buf; + if (!param_tlv) { + WMI_LOGE("invalid wlan radar event buf"); + return QDF_STATUS_E_FAILURE; + } + + radar_event = param_tlv->fixed_param; + wlan_radar_event->pulse_is_chirp = radar_event->pulse_is_chirp; + wlan_radar_event->pulse_center_freq = radar_event->pulse_center_freq; + wlan_radar_event->pulse_duration = radar_event->pulse_duration; + wlan_radar_event->rssi = radar_event->rssi; + wlan_radar_event->pulse_detect_ts = radar_event->pulse_detect_ts; + wlan_radar_event->upload_fullts_high = radar_event->upload_fullts_high; + wlan_radar_event->upload_fullts_low = radar_event->upload_fullts_low; + wlan_radar_event->peak_sidx = radar_event->peak_sidx; + wlan_radar_event->pdev_id = radar_event->pdev_id; + + return QDF_STATUS_SUCCESS; +} +#else +static QDF_STATUS extract_wlan_radar_event_info_tlv( + wmi_unified_t wmi_handle, + uint8_t *evt_buf, + struct radar_event_info *wlan_radar_event, + uint32_t len) +{ + return QDF_STATUS_SUCCESS; +} +#endif #endif /** @@ -21875,6 +21924,7 @@ struct wmi_ops tlv_ops = { .extract_dfs_cac_complete_event = extract_dfs_cac_complete_event_tlv, .extract_dfs_radar_detection_event = extract_dfs_radar_detection_event_tlv, + .extract_wlan_radar_event_info = extract_wlan_radar_event_info_tlv, #endif .convert_pdev_id_host_to_target = convert_host_pdev_id_to_target_pdev_id_legacy,