summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimanshu Agarwal <himanaga@qti.qualcomm.com>2016-03-09 10:26:47 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-03-22 18:19:52 +0530
commitdd90bdb033beb011feba9be8cf66d650e14f24e8 (patch)
tree9be8eb0bba18bc3ef6bdd44ef914f9285bdfad84
parent9684b3ccf1b7ff3a5247cf36597eb1737c8131d9 (diff)
qcacld-2.0: Refactor packet dump logging
Refactor packet dump logging to maintain modularity and do packet dumping in txrx layer only. Change-Id: If3afdbb6fc794af9347ac80506144755de3a3b84 CRs-Fixed: 984482
-rw-r--r--CORE/CLD_TXRX/HTT/htt_rx.c68
-rw-r--r--CORE/CLD_TXRX/HTT/htt_types.h4
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx.c46
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_send.c67
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx.c5
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx_types.h4
-rw-r--r--CORE/SERVICES/COMMON/ol_htt_api.h7
-rw-r--r--CORE/SERVICES/COMMON/ol_txrx_api.h8
-rw-r--r--CORE/SERVICES/COMMON/osapi_linux.h4
-rw-r--r--CORE/SVC/src/logging/wlan_logging_sock_svc.c5
10 files changed, 166 insertions, 52 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt_rx.c b/CORE/CLD_TXRX/HTT/htt_rx.c
index 88add181d110..beab5473e7c2 100644
--- a/CORE/CLD_TXRX/HTT/htt_rx.c
+++ b/CORE/CLD_TXRX/HTT/htt_rx.c
@@ -48,7 +48,6 @@
#include <ol_cfg.h>
#include <ol_rx.h>
#include <ol_htt_rx_api.h>
-#include <ol_txrx_peer_find.h>
#include <htt_internal.h> /* HTT_ASSERT, htt_pdev_t, HTT_RX_BUF_SIZE */
#include "regtable.h"
@@ -65,8 +64,6 @@
#endif
#include <pktlog_ac_fmt.h>
-static tp_htt_packetdump_cb ghtt_packetdump_cb;
-
#ifdef DEBUG_DMA_DONE
extern int process_wma_set_command(int sessid, int paramid,
int sval, int vpdev);
@@ -1848,6 +1845,8 @@ htt_rx_amsdu_rx_in_order_pop_ll(
unsigned int msdu_count = 0;
u_int8_t offload_ind;
struct htt_host_rx_desc_base *rx_desc;
+ enum rx_pkt_fate status = RX_PKT_FATE_SUCCESS;
+ uint16_t peer_id;
HTT_ASSERT1(htt_rx_in_order_ring_elems(pdev) != 0);
@@ -1915,24 +1914,20 @@ htt_rx_amsdu_rx_in_order_pop_ll(
msdu_count--;
- if (ghtt_packetdump_cb) {
- uint8_t status = RX_PKT_FATE_SUCCESS;
- uint16_t peer_id =
- HTT_RX_IN_ORD_PADDR_IND_PEER_ID_GET(*(u_int32_t *)rx_ind_data);
- struct ol_txrx_peer_t *peer =
- ol_txrx_peer_find_by_id(pdev->txrx_pdev, peer_id);
- if (adf_os_unlikely((*((u_int8_t *) &rx_desc->fw_desc.u.val)) &
- FW_RX_DESC_MIC_ERR_M))
- status = RX_PKT_FATE_FW_DROP_INVALID;
- ghtt_packetdump_cb(msdu, status, peer->vdev->vdev_id, RX_DATA_PKT);
- }
+ /* calling callback function for packet logging */
+ peer_id = HTT_RX_IN_ORD_PADDR_IND_PEER_ID_GET(
+ *(u_int32_t *)rx_ind_data);
+ if (adf_os_unlikely((*((u_int8_t *) &rx_desc->fw_desc.u.val)) &
+ FW_RX_DESC_MIC_ERR_M))
+ status = RX_PKT_FATE_FW_DROP_INVALID;
+ if (pdev->rx_pkt_dump_cb)
+ pdev->rx_pkt_dump_cb(msdu, peer_id, status);
if (adf_os_unlikely((*((u_int8_t *) &rx_desc->fw_desc.u.val)) &
FW_RX_DESC_MIC_ERR_M)) {
u_int8_t tid =
HTT_RX_IN_ORD_PADDR_IND_EXT_TID_GET(*(u_int32_t *)rx_ind_data);
- u_int16_t peer_id =
- HTT_RX_IN_ORD_PADDR_IND_PEER_ID_GET(*(u_int32_t *)rx_ind_data);
+
ol_rx_mic_error_handler(pdev->txrx_pdev, tid, peer_id, rx_desc, msdu);
htt_rx_desc_frame_free(pdev, msdu);
@@ -3384,30 +3379,49 @@ int htt_rx_ipa_uc_detach(struct htt_pdev_t *pdev)
#endif /* IPA_UC_OFFLOAD */
/**
- * htt_register_packetdump_callback() - stores rx packet dump
- * callback handler
- * @htt_packetdump_cb: packetdump cb
+ * htt_register_rx_pkt_dump_callback() - registers callback to
+ * get rx pkt status and call callback to do rx packet dump
+ *
+ * @pdev: htt pdev handle
+ * @callback: callback to get rx pkt status and
+ * call callback to do rx packet dump
*
- * This function is used to store rx packet dump callback
+ * This function is used to register the callback to get
+ * rx pkt status and call callback to do rx packet dump
*
* Return: None
*
*/
-void htt_register_packetdump_callback(tp_htt_packetdump_cb htt_packetdump_cb)
+void htt_register_rx_pkt_dump_callback(struct htt_pdev_t *pdev,
+ tp_rx_pkt_dump_cb callback)
{
- ghtt_packetdump_cb = htt_packetdump_cb;
+ if (!pdev) {
+ adf_os_print("%s: htt pdev is NULL, rx packet status callback register unsuccessful\n",
+ __func__);
+ return;
+ }
+ pdev->rx_pkt_dump_cb = callback;
}
/**
- * htt_deregister_packetdump_callback() - removes rx packet dump
- * callback handler
+ * htt_deregister_rx_pkt_dump_callback() - deregisters callback to
+ * get rx pkt status and call callback to do rx packet dump
+ *
+ * @pdev: htt pdev handle
*
- * This function is used to remove rx packet dump callback
+ * This function is used to deregister the callback to get
+ * rx pkt status and call callback to do rx packet dump
*
* Return: None
*
*/
-void htt_deregister_packetdump_callback(void)
+void htt_deregister_rx_pkt_dump_callback(struct htt_pdev_t *pdev)
{
- ghtt_packetdump_cb = NULL;
+ if (!pdev) {
+ adf_os_print("%s: htt pdev is NULL, rx packet status callback deregister unsuccessful\n",
+ __func__);
+ return;
+ }
+ pdev->rx_pkt_dump_cb = NULL;
}
+
diff --git a/CORE/CLD_TXRX/HTT/htt_types.h b/CORE/CLD_TXRX/HTT/htt_types.h
index 4b81fd189d90..8d7b099ccb75 100644
--- a/CORE/CLD_TXRX/HTT/htt_types.h
+++ b/CORE/CLD_TXRX/HTT/htt_types.h
@@ -38,6 +38,7 @@
#include <ol_ctrl_api.h> /* ol_pdev_handle */
#include <ol_txrx_api.h> /* ol_txrx_pdev_handle */
+#include <ol_htt_api.h>
#define DEBUG_DMA_DONE
@@ -380,6 +381,9 @@ struct htt_pdev_t {
int rx_buff_index;
#endif
+ /* callback function for packetdump */
+ tp_rx_pkt_dump_cb rx_pkt_dump_cb;
+
int num_pages;
int num_desc_per_page;
struct htt_tx_desc_page_t *desc_pages;
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.c b/CORE/CLD_TXRX/TXRX/ol_rx.c
index 3691ee683c5a..1ecc049bf464 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_rx.c
@@ -59,6 +59,7 @@
#include <ipv6_defs.h> /* IPv6 header defs */
#include <ol_vowext_dbg_defs.h>
#include <wma.h>
+#include "pktlog_ac_fmt.h"
#ifdef HTT_RX_RESTORE
#include "vos_cnss.h"
@@ -1227,6 +1228,51 @@ ol_rx_in_order_indication_handler(
peer->rx_opt_proc(vdev, peer, tid, head_msdu);
}
+/**
+ * ol_rx_pkt_dump_call() - updates status and
+ * calls packetdump callback to log rx packet
+ *
+ * @msdu: rx packet
+ * @peer_id: peer id
+ * @status: status of rx packet
+ *
+ * This function is used to update the status of rx packet
+ * and then calls packetdump callback to log that packet.
+ *
+ * Return: None
+ *
+ */
+void ol_rx_pkt_dump_call(
+ adf_nbuf_t msdu,
+ uint16_t peer_id,
+ uint8_t status)
+{
+ v_CONTEXT_t vos_context;
+ ol_txrx_pdev_handle pdev;
+ struct ol_txrx_peer_t *peer = NULL;
+
+ vos_context = vos_get_global_context(VOS_MODULE_ID_TXRX, NULL);
+ pdev = vos_get_context(VOS_MODULE_ID_TXRX, vos_context);
+
+ if (!pdev) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "%s: pdev is NULL", __func__);
+ return;
+ }
+
+ if (pdev->ol_rx_packetdump_cb) {
+ peer = ol_txrx_peer_find_by_id(pdev, peer_id);
+ if (!peer) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "%s: peer with peer id %d is NULL", __func__,
+ peer_id);
+ return;
+ }
+ pdev->ol_rx_packetdump_cb(msdu, status, peer->vdev->vdev_id,
+ RX_DATA_PKT);
+ }
+}
+
/* the msdu_list passed here must be NULL terminated */
void
ol_rx_in_order_deliver(
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_send.c b/CORE/CLD_TXRX/TXRX/ol_tx_send.c
index 2a87be36097d..7b736fa28b17 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_send.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_send.c
@@ -61,8 +61,6 @@
#include <ol_txrx.h>
#include <pktlog_ac_fmt.h>
-static tp_ol_packetdump_cb gol_packetdump_cb;
-
#ifdef TX_CREDIT_RECLAIM_SUPPORT
#define OL_TX_CREDIT_RECLAIM(pdev) \
@@ -555,8 +553,9 @@ ol_tx_completion_handler(
OL_TX_DESC_UPDATE_GROUP_CREDIT(pdev, tx_desc_id, 1, 0, status);
}
- if (gol_packetdump_cb)
- gol_packetdump_cb(netbuf, status, tx_desc->vdev->vdev_id, TX_DATA_PKT);
+ if (pdev->ol_tx_packetdump_cb)
+ pdev->ol_tx_packetdump_cb(netbuf, status, tx_desc->vdev->vdev_id,
+ TX_DATA_PKT);
htc_pm_runtime_put(pdev->htt_pdev->htc_pdev);
adf_nbuf_trace_update(netbuf, trace_str);
@@ -751,8 +750,9 @@ ol_tx_single_completion_handler(
/* Do one shot statistics */
TXRX_STATS_UPDATE_TX_STATS(pdev, status, 1, adf_nbuf_len(netbuf));
- if (gol_packetdump_cb)
- gol_packetdump_cb(netbuf, status, tx_desc->vdev->vdev_id, TX_MGMT_PKT);
+ if (pdev->ol_tx_packetdump_cb)
+ pdev->ol_tx_packetdump_cb(netbuf, status, tx_desc->vdev->vdev_id,
+ TX_MGMT_PKT);
if (OL_TX_DESC_NO_REFS(tx_desc)) {
ol_tx_desc_frame_free_nonstd(pdev, tx_desc, status != htt_tx_status_ok);
@@ -1142,30 +1142,65 @@ ol_tx_delay_compute(
#endif /* QCA_COMPUTE_TX_DELAY */
/**
- * ol_register_packetdump_callback() - stores tx packet dump
- * callback handler
- * @ol_packetdump_cb: packetdump cb
+ * ol_register_packetdump_callback() - registers
+ * tx data packet, tx mgmt. packet and rx data packet
+ * dump callback handler
+ *
+ * @ol_tx_packetdump_cb: tx packetdump cb
+ * @ol_rx_packetdump_cb: rx packetdump cb
*
- * This function is used to store tx packet dump callback
+ * This function is used to register tx data pkt, tx mgmt.
+ * pkt and rx data pkt dump callback
*
* Return: None
*
*/
-void ol_register_packetdump_callback(tp_ol_packetdump_cb ol_packetdump_cb)
+void ol_register_packetdump_callback(tp_ol_packetdump_cb ol_tx_packetdump_cb,
+ tp_ol_packetdump_cb ol_rx_packetdump_cb)
{
- gol_packetdump_cb = ol_packetdump_cb;
+ v_CONTEXT_t vos_context = NULL;
+ ol_txrx_pdev_handle pdev = NULL;
+
+ vos_context = vos_get_global_context(VOS_MODULE_ID_TXRX,
+ NULL);
+ pdev = vos_get_context(VOS_MODULE_ID_TXRX, vos_context);
+
+ if (!pdev) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "%s: pdev is NULL", __func__);
+ return;
+ }
+
+ pdev->ol_tx_packetdump_cb = ol_tx_packetdump_cb;
+ pdev->ol_rx_packetdump_cb = ol_rx_packetdump_cb;
}
/**
- * ol_deregister_packetdump_callback() - removes tx packet dump
- * callback handler
+ * ol_deregister_packetdump_callback() - deregidters
+ * tx data packet, tx mgmt. packet and rx data packet
+ * dump callback handler
*
- * This function is used to remove tx packet dump callback
+ * This function is used to deregidter tx data pkt.,
+ * tx mgmt. pkt and rx data pkt. dump callback
*
* Return: None
*
*/
void ol_deregister_packetdump_callback(void)
{
- gol_packetdump_cb = NULL;
+ v_CONTEXT_t vos_context = NULL;
+ ol_txrx_pdev_handle pdev = NULL;
+
+ vos_context = vos_get_global_context(VOS_MODULE_ID_TXRX,
+ NULL);
+ pdev = vos_get_context(VOS_MODULE_ID_TXRX, vos_context);
+
+ if (!pdev) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "%s: pdev is NULL", __func__);
+ return;
+ }
+
+ pdev->ol_tx_packetdump_cb = NULL;
+ pdev->ol_rx_packetdump_cb = NULL;
}
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c
index 8adb3fc0e1b2..3cea3d24963e 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c
@@ -418,6 +418,9 @@ ol_txrx_pdev_attach(
goto fail2;
}
+ htt_register_rx_pkt_dump_callback(pdev->htt_pdev,
+ ol_rx_pkt_dump_call);
+
adf_os_mem_zero(pdev->pn_replays,
OL_RX_NUM_PN_REPLAY_TYPES * sizeof(uint32_t));
@@ -921,6 +924,8 @@ ol_txrx_pdev_detach(ol_txrx_pdev_handle pdev, int force)
ol_txrx_peer_find_hash_erase(pdev);
}
+ htt_deregister_rx_pkt_dump_callback(pdev->htt_pdev);
+
/* Stop the communication between HTT and target at first */
htt_detach_target(pdev->htt_pdev);
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
index d76f26c0da49..7a2377eb270c 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
@@ -588,6 +588,10 @@ struct ol_txrx_pdev_t {
} callbacks[OL_TXRX_MGMT_NUM_TYPES];
} tx_mgmt;
+ /* packetdump callback functions */
+ tp_ol_packetdump_cb ol_tx_packetdump_cb;
+ tp_ol_packetdump_cb ol_rx_packetdump_cb;
+
/* tx descriptor pool */
struct {
u_int16_t pool_size;
diff --git a/CORE/SERVICES/COMMON/ol_htt_api.h b/CORE/SERVICES/COMMON/ol_htt_api.h
index 55d15565c035..8afe917d912f 100644
--- a/CORE/SERVICES/COMMON/ol_htt_api.h
+++ b/CORE/SERVICES/COMMON/ol_htt_api.h
@@ -326,4 +326,11 @@ htt_clear_bundle_stats(struct htt_pdev_t *pdev);
#endif
+typedef void (*tp_rx_pkt_dump_cb)(adf_nbuf_t msdu, uint16_t peer_id,
+ uint8_t status);
+void htt_register_rx_pkt_dump_callback(struct htt_pdev_t *pdev,
+ tp_rx_pkt_dump_cb ol_rx_pkt_dump_call);
+void htt_deregister_rx_pkt_dump_callback(struct htt_pdev_t *pdev);
+void ol_rx_pkt_dump_call(adf_nbuf_t msdu, uint16_t peer_id, uint8_t status);
+
#endif /* _OL_HTT_API__H_ */
diff --git a/CORE/SERVICES/COMMON/ol_txrx_api.h b/CORE/SERVICES/COMMON/ol_txrx_api.h
index 70d15d681b73..8e8f47e5d22d 100644
--- a/CORE/SERVICES/COMMON/ol_txrx_api.h
+++ b/CORE/SERVICES/COMMON/ol_txrx_api.h
@@ -121,12 +121,8 @@ enum ol_tx_spec {
typedef void (*tp_ol_packetdump_cb)(adf_nbuf_t netbuf,
uint8_t status, uint8_t vdev_id, uint8_t type);
-void ol_register_packetdump_callback(tp_ol_packetdump_cb ol_packetdump_cb);
+void ol_register_packetdump_callback(tp_ol_packetdump_cb ol_tx_packetdump_cb,
+ tp_ol_packetdump_cb ol_rx_packetdump_cb);
void ol_deregister_packetdump_callback(void);
-typedef void (*tp_htt_packetdump_cb)(adf_nbuf_t netbuf,
- uint8_t status, uint8_t vdev_id, uint8_t type);
-
-void htt_register_packetdump_callback(tp_htt_packetdump_cb htt_packetdump_cb);
-void htt_deregister_packetdump_callback(void);
#endif /* _OL_TXRX_API__H_ */
diff --git a/CORE/SERVICES/COMMON/osapi_linux.h b/CORE/SERVICES/COMMON/osapi_linux.h
index 6a8517527b69..093c67781ea4 100644
--- a/CORE/SERVICES/COMMON/osapi_linux.h
+++ b/CORE/SERVICES/COMMON/osapi_linux.h
@@ -55,7 +55,9 @@
#include "a_types.h"
#ifdef __GNUC__
+#ifndef __ATTRIB_PACK
#define __ATTRIB_PACK __attribute__ ((packed))
+#endif
#define __ATTRIB_PRINTF __attribute__ ((format (printf, 1, 2)))
#define __ATTRIB_NORETURN __attribute__ ((noreturn))
#else /* Not GCC */
@@ -437,7 +439,9 @@ typedef struct ieee80211_cb wbuf_context;
#else /* __KERNEL__ */
#ifdef __GNUC__
+#ifndef __ATTRIB_PACK
#define __ATTRIB_PACK __attribute__ ((packed))
+#endif
#define __ATTRIB_PRINTF __attribute__ ((format (printf, 1, 2)))
#define __ATTRIB_NORETURN __attribute__ ((noreturn))
#ifndef INLINE
diff --git a/CORE/SVC/src/logging/wlan_logging_sock_svc.c b/CORE/SVC/src/logging/wlan_logging_sock_svc.c
index ba9a9fe138be..73cc314a6614 100644
--- a/CORE/SVC/src/logging/wlan_logging_sock_svc.c
+++ b/CORE/SVC/src/logging/wlan_logging_sock_svc.c
@@ -1344,7 +1344,6 @@ void wlan_deregister_txrx_packetdump(void)
if (gtx_count || grx_count) {
ol_deregister_packetdump_callback();
pe_deregister_packetdump_callback();
- htt_deregister_packetdump_callback();
send_packetdump_monitor(STOP_MONITOR);
csr_packetdump_timer_stop();
@@ -1444,9 +1443,9 @@ static void rx_packetdump_cb(adf_nbuf_t netbuf, uint8_t status,
*/
void wlan_register_txrx_packetdump(void)
{
- ol_register_packetdump_callback(tx_packetdump_cb);
+ ol_register_packetdump_callback(tx_packetdump_cb,
+ rx_packetdump_cb);
pe_register_packetdump_callback(rx_packetdump_cb);
- htt_register_packetdump_callback(rx_packetdump_cb);
send_packetdump_monitor(START_MONITOR);
gtx_count = 0;