diff options
| author | Himanshu Agarwal <himanaga@qti.qualcomm.com> | 2016-03-09 10:26:47 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-03-22 18:19:52 +0530 |
| commit | dd90bdb033beb011feba9be8cf66d650e14f24e8 (patch) | |
| tree | 9be8eb0bba18bc3ef6bdd44ef914f9285bdfad84 | |
| parent | 9684b3ccf1b7ff3a5247cf36597eb1737c8131d9 (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.c | 68 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/HTT/htt_types.h | 4 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_rx.c | 46 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_tx_send.c | 67 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_txrx.c | 5 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_txrx_types.h | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/ol_htt_api.h | 7 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/ol_txrx_api.h | 8 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/osapi_linux.h | 4 | ||||
| -rw-r--r-- | CORE/SVC/src/logging/wlan_logging_sock_svc.c | 5 |
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; |
