qcacmn: Add WMI health monitor events

Add WMI health monitor events to send the health
monitor data to application.

Change-Id: I792b733822b03518dc964f38fe4a158132b0ac49
CRs-Fixed: 3266229
This commit is contained in:
Sham Muthayyan
2022-08-11 22:25:21 +05:30
committed by Madan Koyyalamudi
parent 0f6b60eed6
commit 1e28e45ce7
7 changed files with 124 additions and 1 deletions

View File

@@ -190,6 +190,7 @@ struct target_version_info {
* @scan_radio_caps: scan radio capabilities
* @device_mode: Global Device mode
* @sbs_lower_band_end_freq: sbs lower band end frequency
* @health_mon_params: health monitor params
*/
struct tgt_info {
struct host_fw_ver version;
@@ -224,6 +225,7 @@ struct tgt_info {
struct wlan_psoc_host_scan_radio_caps *scan_radio_caps;
uint32_t device_mode;
uint32_t sbs_lower_band_end_freq;
struct wmi_health_mon_params health_mon_param;
};
/**

View File

@@ -954,6 +954,42 @@ exit:
return 0;
}
static int init_deinit_health_mon_event_handler(ol_scn_t scn_handle,
uint8_t *event,
uint32_t data_len)
{
struct wlan_objmgr_psoc *psoc;
struct target_psoc_info *tgt_hdl;
struct wmi_unified *wmi_handle;
struct tgt_info *info;
struct wmi_health_mon_params *param;
if (!scn_handle) {
target_if_err("scn handle NULL");
return -EINVAL;
}
psoc = target_if_get_psoc_from_scn_hdl(scn_handle);
if (!psoc) {
target_if_err("psoc is null");
return -EINVAL;
}
tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
if (!tgt_hdl) {
target_if_err("target_psoc_info is null");
return -EINVAL;
}
wmi_handle = target_psoc_get_wmi_hdl(tgt_hdl);
info = (&tgt_hdl->info);
param = (&info->health_mon_param);
wmi_extract_health_mon_event(wmi_handle, event, param);
return 0;
}
#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
static void init_deinit_mlo_setup_done_event(struct wlan_objmgr_psoc *psoc)
{
@@ -1117,6 +1153,12 @@ QDF_STATUS init_deinit_register_tgt_psoc_ev_handlers(
WMI_RX_WORK_CTX);
retval = init_deinit_register_mlo_ev_handlers(wmi_handle);
retval = wmi_unified_register_event_handler(
wmi_handle,
wmi_extract_health_mon_init_done_info_eventid,
init_deinit_health_mon_event_handler,
WMI_RX_WORK_CTX);
return retval;
}

View File

@@ -4954,4 +4954,19 @@ QDF_STATUS wmi_feature_set_cmd_send(
wmi_unified_t wmi_handle,
struct target_feature_set *feature_set);
#endif
/**
* wmi_extract_health_mon_event - extract health monitor params
* @wmi_handle: wmi handle
* @ev: pointer to event buffer
* @params: health monitor params
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
QDF_STATUS wmi_extract_health_mon_event(
wmi_unified_t wmi_handle,
void *ev,
struct wmi_health_mon_params *param);
#endif /* _WMI_UNIFIED_API_H_ */

View File

@@ -5105,6 +5105,7 @@ typedef enum {
#ifdef WLAN_FEATURE_COAP
wmi_wow_coap_buf_info_eventid,
#endif
wmi_extract_health_mon_init_done_info_eventid,
wmi_events_max,
} wmi_conv_event_id;
@@ -5785,7 +5786,6 @@ typedef enum {
#endif
wmi_service_is_my_mgmt_frame,
wmi_service_linkspeed_roam_trigger_support,
#ifdef FEATURE_SET
wmi_service_feature_set_event_support,
#endif
@@ -9036,4 +9036,19 @@ struct wmi_host_sw_cal_ver {
uint32_t ftm_cal_ver;
uint32_t status;
};
/**
* struct wmi_health_mon_params - Health mon params
* @ring_buf_paddr_low: Ring buffer physical address LOW
* @ring_buf_paddr_high: Ring buffer physical address HIGH
* @initial_upload_period_ms: Health mon periodic time
* @read_index: ring element read_index
*/
struct wmi_health_mon_params {
uint32_t ring_buf_paddr_low;
uint32_t ring_buf_paddr_high;
uint32_t initial_upload_period_ms;
uint32_t read_index;
};
#endif /* _WMI_UNIFIED_PARAM_H_ */

View File

@@ -3115,6 +3115,10 @@ QDF_STATUS
QDF_STATUS (*extract_coap_buf_info)(wmi_unified_t wmi_handle, void *evt_buf,
struct coap_buf_info *info);
#endif
QDF_STATUS
(*extract_health_mon_init_done_info_event)(wmi_unified_t wmi_handle,
void *evt_buf,
struct wmi_health_mon_params *param);
};
/* Forward declartion for psoc*/

View File

@@ -1440,6 +1440,17 @@ QDF_STATUS wmi_unified_thermal_mitigation_param_cmd_send(
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS wmi_extract_health_mon_event(
wmi_unified_t wmi_handle,
void *ev,
struct wmi_health_mon_params *param)
{
if (wmi_handle->ops->extract_health_mon_init_done_info_event)
return wmi_handle->ops->extract_health_mon_init_done_info_event(
wmi_handle, ev, param);
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS
wmi_unified_vdev_set_fwtest_param_cmd_send(wmi_unified_t wmi_handle,
struct set_fwtest_params *param)

View File

@@ -18806,6 +18806,36 @@ extract_pktlog_decode_info_event_tlv(wmi_unified_t wmi_handle, void *evt_buf,
return QDF_STATUS_SUCCESS;
}
/**
* extract_health_mon_init_done_info_event_tlv() - Extract health monitor from
* fw
* @wmi_handle: wmi handle
* @evt_buf: pointer to event buffer
* @params: health monitor params
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
static QDF_STATUS
extract_health_mon_init_done_info_event_tlv(wmi_unified_t wmi_handle,
void *evt_buf,
struct wmi_health_mon_params *param)
{
WMI_HEALTH_MON_INIT_DONE_EVENTID_param_tlvs *param_buf;
wmi_health_mon_init_done_fixed_param *event;
param_buf =
(WMI_HEALTH_MON_INIT_DONE_EVENTID_param_tlvs *)evt_buf;
event = param_buf->fixed_param;
param->ring_buf_paddr_low = event->ring_buf_paddr_low;
param->ring_buf_paddr_high = event->ring_buf_paddr_high;
param->initial_upload_period_ms = event->initial_upload_period_ms;
param->read_index = 0;
return QDF_STATUS_SUCCESS;
}
/**
* extract_pdev_telemetry_stats_tlv - extract pdev telemetry stats
* @wmi_handle: wmi handle
@@ -19305,6 +19335,8 @@ struct wmi_ops tlv_ops = {
#ifdef FEATURE_SET
.feature_set_cmd_send = feature_set_cmd_send_tlv,
#endif
.extract_health_mon_init_done_info_event =
extract_health_mon_init_done_info_event_tlv,
};
#ifdef WLAN_FEATURE_11BE_MLO
@@ -19795,6 +19827,8 @@ static void populate_tlv_events_id(uint32_t *event_ids)
event_ids[wmi_wow_coap_buf_info_eventid] =
WMI_WOW_COAP_BUF_INFO_EVENTID;
#endif
event_ids[wmi_extract_health_mon_init_done_info_eventid] =
WMI_HEALTH_MON_INIT_DONE_EVENTID;
}
#ifdef WLAN_FEATURE_LINK_LAYER_STATS