diff options
| author | Rajeev Kumar <rajekuma@qca.qualcomm.com> | 2014-03-20 15:38:48 -0700 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-03-21 22:57:05 -0700 |
| commit | ba68a0a653f4c3bf90032ddbb3c326609d424c99 (patch) | |
| tree | 4f548d5ec5759c47741344692716a05f452fef32 | |
| parent | 1a03a75c1ef04bb27fa96c0381ed0d394f78b0d5 (diff) | |
qcacld-new: WMI interface event logging
Add interface event logging for WMI commands from host
to target and events from target to host in a circular
buffer of last 1024 events
Change-Id: I90947b7c2cf1263853f835f45b6d2823f41fe0e4
CRs-Fixed: 636118
| -rw-r--r-- | CORE/SERVICES/WMI/wmi_unified.c | 46 | ||||
| -rw-r--r-- | CORE/SERVICES/WMI/wmi_unified_priv.h | 23 | ||||
| -rw-r--r-- | Kbuild | 1 |
3 files changed, 70 insertions, 0 deletions
diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c index 6ea5fe36cb21..bf1a2c4d42da 100644 --- a/CORE/SERVICES/WMI/wmi_unified.c +++ b/CORE/SERVICES/WMI/wmi_unified.c @@ -51,6 +51,36 @@ #define WMI_EMPTY_HTC_QUEUE_MAX_RETRY 40 #define WMI_SLEEP_TO_FLUSH_HTC_QUEUE 40 +#ifdef WMI_INTERFACE_EVENT_LOGGING + +u_int32_t g_wmi_command_buf_idx = 0; +struct wmi_command_debug wmi_command_log_buffer[WMI_EVENT_DEBUG_MAX_ENTRY]; + + +u_int32_t g_wmi_event_buf_idx = 0; +struct wmi_event_debug wmi_event_log_buffer[WMI_EVENT_DEBUG_MAX_ENTRY]; + +#define WMI_COMMAND_RECORD(a) { \ + if (WMI_EVENT_DEBUG_MAX_ENTRY <= g_wmi_command_buf_idx) \ + g_wmi_command_buf_idx = 0; \ + wmi_command_log_buffer[g_wmi_command_buf_idx].command = a; \ + wmi_command_log_buffer[g_wmi_command_buf_idx].time = \ + adf_os_ticks(); \ + g_wmi_command_buf_idx++; \ +} + +#define WMI_EVENT_RECORD(a) { \ + if (WMI_EVENT_DEBUG_MAX_ENTRY <= g_wmi_event_buf_idx) \ + g_wmi_event_buf_idx = 0; \ + wmi_event_log_buffer[g_wmi_event_buf_idx].event = a; \ + wmi_event_log_buffer[g_wmi_event_buf_idx].time = \ + adf_os_ticks(); \ + g_wmi_event_buf_idx++; \ +} + +#endif /*WMI_INTERFACE_EVENT_LOGGING*/ + + static void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf); int wmi_get_host_credits(wmi_unified_t wmi_handle); /* WMI buffer APIs */ @@ -561,6 +591,13 @@ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, int len, WMA_LOGD("Send WMI command:%s command_id:%d", get_wmi_cmd_string(cmd_id), cmd_id); + +#ifdef WMI_INTERFACE_EVENT_LOGGING + adf_os_spin_lock_bh(&wmi_handle->wmi_cmd_record_lock); + WMI_COMMAND_RECORD(cmd_id); + adf_os_spin_unlock_bh(&wmi_handle->wmi_cmd_record_lock); +#endif + status = HTCSendPkt(wmi_handle->htc_handle, pkt); if (A_OK != status) { @@ -727,6 +764,11 @@ void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf) goto end; } +#ifdef WMI_INTERFACE_EVENT_LOGGING + adf_os_spin_lock_bh(&wmi_handle->wmi_event_record_lock); + WMI_EVENT_RECORD(id); + adf_os_spin_unlock_bh(&wmi_handle->wmi_event_record_lock); +#endif /* Call the WMI registered event handler */ wmi_handle->event_handler[idx](wmi_handle->scn_handle, wmi_cmd_struct_ptr, len); @@ -790,6 +832,10 @@ wmi_unified_attach(ol_scn_t scn_handle) adf_nbuf_queue_init(&wmi_handle->event_queue); INIT_WORK(&wmi_handle->rx_event_work, wmi_rx_event_work); #endif +#ifdef WMI_INTERFACE_EVENT_LOGGING + adf_os_spinlock_init(&wmi_handle->wmi_cmd_record_lock); + adf_os_spinlock_init(&wmi_handle->wmi_event_record_lock); +#endif return wmi_handle; } diff --git a/CORE/SERVICES/WMI/wmi_unified_priv.h b/CORE/SERVICES/WMI/wmi_unified_priv.h index 17ad918ced43..9880519a6b9d 100644 --- a/CORE/SERVICES/WMI/wmi_unified_priv.h +++ b/CORE/SERVICES/WMI/wmi_unified_priv.h @@ -42,6 +42,23 @@ typedef adf_nbuf_t wmi_buf_t; +#ifdef WMI_INTERFACE_EVENT_LOGGING + +#define WMI_EVENT_DEBUG_MAX_ENTRY (1024) + +struct wmi_command_debug{ + u_int32_t command; + unsigned long time; +}; + +struct wmi_event_debug{ + u_int32_t event; + unsigned long time; +}; + +#endif /*WMI_INTERFACE_EVENT_LOGGING*/ + + #ifdef WLAN_OPEN_SOURCE struct fwdebug { struct sk_buff_head fwlog_queue; @@ -67,5 +84,11 @@ struct wmi_unified { struct fwdebug dbglog; struct dentry *debugfs_phy; #endif /* WLAN_OPEN_SOURCE */ + +#ifdef WMI_INTERFACE_EVENT_LOGGING + adf_os_spinlock_t wmi_cmd_record_lock; + adf_os_spinlock_t wmi_event_record_lock; +#endif /*WMI_INTERFACE_EVENT_LOGGING*/ + }; #endif @@ -871,6 +871,7 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \ -DFEATURE_WLAN_PAL_MEM_DISABLE \ -DQCA_SUPPORT_TXRX_VDEV_PAUSE_LL \ -DQCA_SUPPORT_TX_THROTTLE_LL \ + -DWMI_INTERFACE_EVENT_LOGGING\ ifeq ($(CONFIG_ARCH_MSM), y) CDEFINES += -DMSM_PLATFORM |
