From 0ead45c2d7726bb62da2319650b15b793900611e Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Mon, 29 Apr 2019 15:32:49 +0530 Subject: [PATCH] qcacmn: Call log handler in case of HTT command/event htt_command_record, htt_event_record, htt_wbm_event_record function is used to log command,event, wbm event to in-memory data-structure. We call these function from htt path. Change-Id: Ib3e18b895485c84f0010f8c3ba95c2da85b00bde CRs-Fixed: 2428742 --- dp/wifi3.0/dp_htt.c | 53 +++++++++++++++++++++++++++++-------- dp/wifi3.0/dp_htt.h | 38 ++++++++++++++++++++++++++ dp/wifi3.0/dp_tx.c | 5 +++- qdf/linux/src/qdf_debugfs.c | 4 ++- 4 files changed, 87 insertions(+), 13 deletions(-) diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index ac4c9a20e0..2831b4e9be 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -43,12 +43,6 @@ #define HTT_PID_BIT_MASK 0x3 #define DP_EXT_MSG_LENGTH 2048 -#define DP_HTT_SEND_HTC_PKT(soc, pkt) \ -do { \ - if (htc_send_pkt(soc->htc_soc, &pkt->htc_pkt) == \ - QDF_STATUS_SUCCESS) \ - htt_htc_misc_pkt_list_add(soc, pkt); \ -} while (0) #define HTT_MGMT_CTRL_TLV_HDR_RESERVERD_LEN 16 @@ -391,6 +385,28 @@ htt_htc_misc_pkt_list_add(struct htt_soc *soc, struct dp_htt_htc_pkt *pkt) htt_htc_misc_pkt_list_trim(soc, misclist_trim_level); } +/** + * DP_HTT_SEND_HTC_PKT() - Send htt packet from host + * @soc : HTT SOC handle + * @pkt: pkt to be send + * @cmd : command to be recorded in dp htt logger + * @buf : Pointer to buffer needs to be recored for above cmd + * Note: Changed from macro function to statis inline function + * due to error reported by checkpatch for multiple use + * of same variable. + * + * Return: None + */ +static inline void DP_HTT_SEND_HTC_PKT(struct htt_soc *soc, + struct dp_htt_htc_pkt *pkt, uint8_t cmd, + uint8_t *buf) +{ + htt_command_record(soc->htt_logger_handle, cmd, buf); + if (htc_send_pkt(soc->htc_soc, &pkt->htc_pkt) == + QDF_STATUS_SUCCESS) + htt_htc_misc_pkt_list_add(soc, pkt); +} + /* * htt_htc_misc_pkt_pool_free() - free pkts in misc list * @htt_soc: HTT SOC handle @@ -554,7 +570,7 @@ static int htt_h2t_ver_req_msg(struct htt_soc *soc) 1); /* tag - not relevant here */ SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg); - DP_HTT_SEND_HTC_PKT(soc, pkt); + DP_HTT_SEND_HTC_PKT(soc, pkt, HTT_H2T_MSG_TYPE_VERSION_REQ, NULL); return 0; } @@ -579,6 +595,7 @@ int htt_srng_setup(void *htt_soc, int mac_id, void *hal_srng, uint32_t ring_entry_size = hal_srng_get_entrysize(soc->hal_soc, hal_ring_type); int htt_ring_type, htt_ring_id; + uint8_t *htt_logger_bufp; /* Sizes should be set in 4-byte words */ ring_entry_size = ring_entry_size >> 2; @@ -682,6 +699,7 @@ int htt_srng_setup(void *htt_soc, int mac_id, void *hal_srng, /* word 0 */ *msg_word = 0; + htt_logger_bufp = (uint8_t *)msg_word; HTT_H2T_MSG_TYPE_SET(*msg_word, HTT_H2T_MSG_TYPE_SRING_SETUP); if ((htt_ring_type == HTT_SW_TO_HW_RING) || @@ -809,7 +827,8 @@ int htt_srng_setup(void *htt_soc, int mac_id, void *hal_srng, HTC_TX_PACKET_TAG_RUNTIME_PUT); /* tag for no FW response msg */ SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, htt_msg); - DP_HTT_SEND_HTC_PKT(soc, pkt); + DP_HTT_SEND_HTC_PKT(soc, pkt, HTT_H2T_MSG_TYPE_SRING_SETUP, + htt_logger_bufp); return QDF_STATUS_SUCCESS; @@ -841,6 +860,7 @@ int htt_h2t_rx_ring_cfg(void *htt_soc, int pdev_id, void *hal_srng, struct hal_srng_params srng_params; uint32_t htt_ring_type, htt_ring_id; uint32_t tlv_filter; + uint8_t *htt_logger_bufp; htt_msg = qdf_nbuf_alloc(soc->osdev, HTT_MSG_BUF_SIZE(HTT_RX_RING_SELECTION_CFG_SZ), @@ -902,6 +922,7 @@ int htt_h2t_rx_ring_cfg(void *htt_soc, int pdev_id, void *hal_srng, qdf_nbuf_push_head(htt_msg, HTC_HDR_ALIGNMENT_PADDING); /* word 0 */ + htt_logger_bufp = (uint8_t *)msg_word; *msg_word = 0; HTT_H2T_MSG_TYPE_SET(*msg_word, HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG); @@ -1511,7 +1532,8 @@ int htt_h2t_rx_ring_cfg(void *htt_soc, int pdev_id, void *hal_srng, 1); /* tag - not relevant here */ SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, htt_msg); - DP_HTT_SEND_HTC_PKT(soc, pkt); + DP_HTT_SEND_HTC_PKT(soc, pkt, HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG, + htt_logger_bufp); return QDF_STATUS_SUCCESS; fail1: @@ -3197,6 +3219,8 @@ static void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) msg_word = (u_int32_t *) qdf_nbuf_data(htt_t2h_msg); msg_type = HTT_T2H_MSG_TYPE_GET(*msg_word); + htt_event_record(soc->htt_logger_handle, + msg_type, (uint8_t *)msg_word); switch (msg_type) { case HTT_T2H_MSG_TYPE_PEER_MAP: { @@ -3508,6 +3532,8 @@ htt_htc_soc_attach(struct htt_soc *soc) soc->htc_endpoint = response.Endpoint; hif_save_htc_htt_config_endpoint(dpsoc->hif_handle, soc->htc_endpoint); + + htt_interface_logging_init(&soc->htt_logger_handle); dp_hif_update_pipe_callback(soc->dp_soc, (void *)soc, dp_htt_hif_t2h_hp_callback, DP_HTT_T2H_HP_PIPE); @@ -3546,6 +3572,7 @@ fail2: void htt_soc_htc_dealloc(struct htt_soc *htt_handle) { + htt_interface_logging_deinit(htt_handle->htt_logger_handle); htt_htc_misc_pkt_pool_free(htt_handle); htt_htc_pkt_pool_free(htt_handle); } @@ -3611,6 +3638,7 @@ QDF_STATUS dp_h2t_ext_stats_msg_send(struct dp_pdev *pdev, qdf_nbuf_t msg; uint32_t *msg_word; uint8_t pdev_mask = 0; + uint8_t *htt_logger_bufp; msg = qdf_nbuf_alloc( soc->osdev, @@ -3652,6 +3680,7 @@ QDF_STATUS dp_h2t_ext_stats_msg_send(struct dp_pdev *pdev, msg_word = (uint32_t *) qdf_nbuf_data(msg); qdf_nbuf_push_head(msg, HTC_HDR_ALIGNMENT_PADDING); + htt_logger_bufp = (uint8_t *)msg_word; *msg_word = 0; HTT_H2T_MSG_TYPE_SET(*msg_word, HTT_H2T_MSG_TYPE_EXT_STATS_REQ); HTT_H2T_EXT_STATS_REQ_PDEV_MASK_SET(*msg_word, pdev_mask); @@ -3709,7 +3738,8 @@ QDF_STATUS dp_h2t_ext_stats_msg_send(struct dp_pdev *pdev, 1); /* tag - not relevant here */ SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg); - DP_HTT_SEND_HTC_PKT(soc, pkt); + DP_HTT_SEND_HTC_PKT(soc, pkt, HTT_H2T_MSG_TYPE_EXT_STATS_REQ, + htt_logger_bufp); return 0; } @@ -3794,7 +3824,8 @@ QDF_STATUS dp_h2t_cfg_stats_msg_send(struct dp_pdev *pdev, 1); /* tag - not relevant here */ SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg); - DP_HTT_SEND_HTC_PKT(soc, pkt); + DP_HTT_SEND_HTC_PKT(soc, pkt, HTT_H2T_MSG_TYPE_PPDU_STATS_CFG, + (uint8_t *)msg_word); return 0; } #endif diff --git a/dp/wifi3.0/dp_htt.h b/dp/wifi3.0/dp_htt.h index c085d93be3..3eac37a828 100644 --- a/dp/wifi3.0/dp_htt.h +++ b/dp/wifi3.0/dp_htt.h @@ -26,6 +26,42 @@ #include "cdp_txrx_cmn_struct.h" #include "dp_types.h" +#ifdef HTT_LOGGER +#include "dp_htt_logger.h" +#else +struct htt_logger; +static inline +void htt_interface_logging_init(struct htt_logger **htt_logger_handle) +{ +} + +static inline +void htt_interface_logging_deinit(struct htt_logger *htt_logger_handle) +{ +} + +static inline +int htt_command_record(struct htt_logger *h, uint8_t msg_type, + uint8_t *msg_data) +{ + return 0; +} + +static inline +int htt_event_record(struct htt_logger *h, uint8_t msg_type, + uint8_t *msg_data) +{ + return 0; +} + +static inline +int htt_wbm_event_record(struct htt_logger *h, uint8_t tx_status, + uint8_t *msg_data) +{ + return 0; +} + +#endif #define HTT_TX_MUTEX_TYPE qdf_spinlock_t @@ -81,6 +117,8 @@ struct htt_soc { void *ctrl_psoc; void *dp_soc; void *hal_soc; + /* htt_logger handle */ + struct htt_logger *htt_logger_handle; HTC_HANDLE htc_soc; qdf_device_t osdev; HTC_ENDPOINT_ID htc_endpoint; diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 2024e52020..df6d857518 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -17,6 +17,7 @@ */ #include "htt.h" +#include "dp_htt.h" #include "hal_hw_headers.h" #include "dp_tx.h" #include "dp_tx_desc.h" @@ -3187,6 +3188,7 @@ void dp_tx_process_htt_completion(struct dp_tx_desc_s *tx_desc, uint8_t *status, uint32_t *htt_desc = (uint32_t *)status; struct dp_peer *peer; struct cdp_tid_tx_stats *tid_stats = NULL; + struct htt_soc *htt_handle; qdf_assert(tx_desc->pdev); @@ -3196,8 +3198,9 @@ void dp_tx_process_htt_completion(struct dp_tx_desc_s *tx_desc, uint8_t *status, if (!vdev) return; - tx_status = HTT_TX_WBM_COMPLETION_V2_TX_STATUS_GET(htt_desc[0]); + htt_handle = (struct htt_soc *)soc->htt_handle; + htt_wbm_event_record(htt_handle->htt_logger_handle, tx_status, status); switch (tx_status) { case HTT_TX_FW2WBM_TX_STATUS_OK: diff --git a/qdf/linux/src/qdf_debugfs.c b/qdf/linux/src/qdf_debugfs.c index f590a87508..f16908b264 100644 --- a/qdf/linux/src/qdf_debugfs.c +++ b/qdf/linux/src/qdf_debugfs.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019 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 @@ -165,6 +165,8 @@ void qdf_debugfs_printf(qdf_debugfs_file_t file, const char *f, ...) va_end(args); } +qdf_export_symbol(qdf_debugfs_printf); + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) void qdf_debugfs_hexdump(qdf_debugfs_file_t file, const uint8_t *buf,