qcacmn: Add WMI_UNIT_TEST_EVENTID extraction code

Add corresponding host side extraction for WMI_UNIT_TEST_EVENTID

CRs-Fixed: 2073983
Change-Id: Id8455f58d1ba1accdee7095b211abf9a25c7538c
This commit is contained in:
Adil Saeed Musthafa
2017-08-23 17:32:11 -07:00
committed by snandini
parent e0c7fbdb93
commit 65dabe448c
7 changed files with 110 additions and 0 deletions

View File

@@ -841,6 +841,7 @@ enum qca_nl80211_vendor_subcmds_index {
QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX,
QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX,
#endif /* FEATURE_WLAN_EXTSCAN */
QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_CONFIGURATION_INDEX,
QCA_NL80211_VENDOR_SUBCMD_MONITOR_RSSI_INDEX,
#ifdef WLAN_FEATURE_MEMDUMP
QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_MEMORY_DUMP_INDEX,

View File

@@ -200,6 +200,7 @@ typedef void (*wlan_objmgr_peer_status_handler)(
* @WLAN_POLICY_MGR_ID: Policy Manager operations
* @WLAN_SPECTRAL_ID: Spectral operations
* @WLAN_SPLITMAC_ID SplitMac
* @WLAN_DEBUG_ID Debug operations
* @WLAN_REF_ID_MAX: Max id used to generate ref count tracking array
*/
/* New value added to the enum must also be reflected in function
@@ -235,6 +236,7 @@ typedef enum {
WLAN_SA_API_ID = 26,
WLAN_SPECTRAL_ID = 27,
WLAN_SPLITMAC_ID = 28,
WLAN_DEBUG_ID = 29,
WLAN_REF_ID_MAX,
} wlan_objmgr_ref_dbgid;
@@ -277,6 +279,7 @@ static inline char *string_from_dbgid(wlan_objmgr_ref_dbgid id)
"WLAN_SA_API_ID",
"WLAN_SPECTRAL_ID",
"WLAN_SPLITMAC_ID",
"WLAN_DEBUG_ID",
"WLAN_REF_ID_MAX" };
return (char *)strings[id];

View File

@@ -1448,6 +1448,9 @@ QDF_STATUS wmi_extract_pdev_stats(void *wmi_hdl, void *evt_buf,
uint32_t index,
wmi_host_pdev_stats *pdev_stats);
QDF_STATUS wmi_extract_unit_test(void *wmi_hdl, void *evt_buf,
wmi_unit_test_event *unit_test, uint32_t maxspace);
QDF_STATUS wmi_extract_pdev_ext_stats(void *wmi_hdl, void *evt_buf,
uint32_t index,
wmi_host_pdev_ext_stats *pdev_ext_stats);

View File

@@ -3576,12 +3576,16 @@ struct ssid_hotlist_request_params {
* @vdev_id: vdev id
* @module_id: module id
* @num_args: number of arguments
* @diag_token: dialog token, which identifies the transaction.
* this number is generated by wifitool and may be used to
* identify the transaction in the event path
* @args: arguments
*/
struct wmi_unit_test_cmd {
uint32_t vdev_id;
uint32_t module_id;
uint32_t num_args;
uint32_t diag_token;
uint32_t args[WMI_MAX_NUM_ARGS];
};
@@ -5136,6 +5140,32 @@ typedef struct {
uint32_t mib_int_count;
} wmi_host_pdev_stats;
/**
* struct wmi_unit_test_event - Structure corresponding to WMI Unit test event
* @vdev_id: VDEV ID
* @module_id: MODULE ID
* @diag_token: Diag Token (the number that was generated in the unit-test cmd)
* @flag: flag has 2 bits 0x1 indicates status, and 0x2 indicates done-bit
* @payload_len: payload_len (blindly copied from payload_len field in WMI)
* @buffer_len: actual number of data bytes in the variable data size TLV
* buffer_len is likely to be the nearest multiple of 4 (from
* payload_len). both buffer_len and payload_len need to be
* passed to wifitool so that the driver can be agnostic
* regarding these differences.
* @buffer: data buffer
*/
typedef struct {
uint32_t vdev_id;
uint32_t module_id;
uint32_t diag_token;
uint32_t flag;
uint32_t payload_len;
uint32_t buffer_len;
uint8_t buffer[1];
} wmi_unit_test_event;
/**
* struct wmi_host_snr_info - WMI host Signal to noise ration info
* @bcn_snr: beacon SNR
@@ -5407,6 +5437,7 @@ typedef enum {
wmi_update_whal_mib_stats_event_id,
wmi_update_vdev_rate_stats_event_id,
wmi_diag_event_id,
wmi_unit_test_event_id,
wmi_ocb_set_sched_event_id,
wmi_dbg_mesg_flush_complete_event_id,
wmi_rssi_breach_event_id,

View File

@@ -1223,6 +1223,9 @@ QDF_STATUS (*extract_all_stats_count)(wmi_unified_t wmi_handle, void *evt_buf,
QDF_STATUS (*extract_pdev_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_pdev_stats *pdev_stats);
QDF_STATUS (*extract_unit_test)(wmi_unified_t wmi_handle, void *evt_buf,
wmi_unit_test_event *unit_test, uint32_t maxspace);
QDF_STATUS (*extract_pdev_ext_stats)(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index, wmi_host_pdev_ext_stats *pdev_ext_stats);

View File

@@ -6007,6 +6007,27 @@ QDF_STATUS wmi_extract_pdev_stats(void *wmi_hdl, void *evt_buf,
return QDF_STATUS_E_FAILURE;
}
/**
* extract_unit_test() - extract unit test from event
* @wmi_handle: wmi handle
* @param evt_buf: pointer to event buffer
* @param unit_test: Pointer to hold unit-test header
* @param maxspace: The amount of space in evt_buf
*
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
*/
QDF_STATUS wmi_extract_unit_test(void *wmi_hdl, void *evt_buf,
wmi_unit_test_event *unit_test, uint32_t maxspace)
{
wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
if (wmi_handle->ops->extract_unit_test)
return wmi_handle->ops->extract_unit_test(wmi_handle,
evt_buf, unit_test, maxspace);
return QDF_STATUS_E_FAILURE;
}
/**
* wmi_extract_pdev_ext_stats() - extract extended pdev stats from event
* @wmi_handle: wmi handle

View File

@@ -15180,10 +15180,14 @@ static QDF_STATUS send_unit_test_cmd_tlv(wmi_unified_t wmi_handle,
cmd->vdev_id = wmi_utest->vdev_id;
cmd->module_id = wmi_utest->module_id;
cmd->num_args = wmi_utest->num_args;
cmd->diag_token = wmi_utest->diag_token;
buf_ptr += sizeof(wmi_unit_test_cmd_fixed_param);
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_UINT32,
(wmi_utest->num_args * sizeof(uint32_t)));
unit_test_cmd_args = (A_UINT32 *) (buf_ptr + WMI_TLV_HDR_SIZE);
WMI_LOGI("%s: VDEV ID: %d\n", __func__, cmd->vdev_id);
WMI_LOGI("%s: MODULE ID: %d\n", __func__, cmd->module_id);
WMI_LOGI("%s: TOKEN: %d\n", __func__, cmd->diag_token);
WMI_LOGI("%s: %d num of args = ", __func__, wmi_utest->num_args);
for (i = 0; (i < wmi_utest->num_args && i < WMI_MAX_NUM_ARGS); i++) {
unit_test_cmd_args[i] = wmi_utest->args[i];
@@ -17878,6 +17882,48 @@ static QDF_STATUS extract_pdev_stats_tlv(wmi_unified_t wmi_handle,
return QDF_STATUS_SUCCESS;
}
/**
* extract_unit_test_tlv() - extract unit test data
* @wmi_handle: wmi handle
* @param evt_buf: pointer to event buffer
* @param unit_test: pointer to hold unit test data
* @param maxspace: Amount of space in evt_buf
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
static QDF_STATUS extract_unit_test_tlv(wmi_unified_t wmi_handle,
void *evt_buf, wmi_unit_test_event *unit_test, uint32_t maxspace)
{
WMI_UNIT_TEST_EVENTID_param_tlvs *param_buf;
wmi_unit_test_event_fixed_param *ev_param;
uint32_t num_bufp;
uint32_t copy_size;
uint8_t *bufp;
param_buf = (WMI_UNIT_TEST_EVENTID_param_tlvs *) evt_buf;
ev_param = param_buf->fixed_param;
bufp = param_buf->bufp;
num_bufp = param_buf->num_bufp;
unit_test->vdev_id = ev_param->vdev_id;
unit_test->module_id = ev_param->module_id;
unit_test->diag_token = ev_param->diag_token;
unit_test->flag = ev_param->flag;
unit_test->payload_len = ev_param->payload_len;
WMI_LOGI("%s:vdev_id:%d mod_id:%d diag_token:%d flag:%d\n", __func__,
ev_param->vdev_id,
ev_param->module_id,
ev_param->diag_token,
ev_param->flag);
WMI_LOGD("%s: Unit-test data given below %d", __func__, num_bufp);
qdf_trace_hex_dump(QDF_MODULE_ID_WMI, QDF_TRACE_LEVEL_DEBUG,
bufp, num_bufp);
copy_size = (num_bufp < maxspace) ? num_bufp : maxspace;
qdf_mem_copy(unit_test->buffer, bufp, copy_size);
unit_test->buffer_len = copy_size;
return QDF_STATUS_SUCCESS;
}
/**
* extract_pdev_ext_stats_tlv() - extract extended pdev stats from event
* @wmi_handle: wmi handle
@@ -20261,6 +20307,7 @@ struct wmi_ops tlv_ops = {
.extract_peer_sta_kickout_ev = extract_peer_sta_kickout_ev_tlv,
.extract_all_stats_count = extract_all_stats_counts_tlv,
.extract_pdev_stats = extract_pdev_stats_tlv,
.extract_unit_test = extract_unit_test_tlv,
.extract_pdev_ext_stats = extract_pdev_ext_stats_tlv,
.extract_vdev_stats = extract_vdev_stats_tlv,
.extract_peer_stats = extract_peer_stats_tlv,
@@ -20479,6 +20526,7 @@ static void populate_tlv_events_id(uint32_t *event_ids)
WMI_UPDATE_VDEV_RATE_STATS_EVENTID;
event_ids[wmi_diag_event_id] = WMI_DIAG_EVENTID;
event_ids[wmi_unit_test_event_id] = WMI_UNIT_TEST_EVENTID;
/** Set OCB Sched Response, deprecated */
event_ids[wmi_ocb_set_sched_event_id] = WMI_OCB_SET_SCHED_EVENTID;