diff --git a/dp/inc/cdp_txrx_ctrl.h b/dp/inc/cdp_txrx_ctrl.h index cf2a599611..206436d42c 100644 --- a/dp/inc/cdp_txrx_ctrl.h +++ b/dp/inc/cdp_txrx_ctrl.h @@ -616,9 +616,15 @@ cdp_set_mgmt_tx_power(ol_txrx_soc_handle soc, subtype, tx_power); } +/** + * cdp_get_pldev() - function to get pktlog device handle + * @soc: datapath soc handle + * @pdev_id: physical device id + * + * Return: pktlog device handle or NULL + */ static inline void * -cdp_get_pldev(ol_txrx_soc_handle soc, - struct cdp_pdev *pdev) +cdp_get_pldev(ol_txrx_soc_handle soc, uint8_t pdev_id) { if (!soc || !soc->ops) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL, @@ -630,7 +636,7 @@ cdp_get_pldev(ol_txrx_soc_handle soc, if (!soc->ops->ctrl_ops || !soc->ops->ctrl_ops->txrx_get_pldev) return NULL; - return soc->ops->ctrl_ops->txrx_get_pldev(pdev); + return soc->ops->ctrl_ops->txrx_get_pldev(soc, pdev_id); } #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE) diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 4e3d4ffa4c..4284e16c51 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -612,7 +612,7 @@ struct cdp_ctrl_ops { enum cdp_peer_param_type param, cdp_config_param_type *val); - void * (*txrx_get_pldev)(struct cdp_pdev *pdev); + void * (*txrx_get_pldev)(struct cdp_soc_t *soc, uint8_t pdev_id); #ifdef ATH_SUPPORT_NAC_RSSI QDF_STATUS (*txrx_vdev_config_for_nac_rssi)(struct cdp_soc_t *cdp_soc, diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index a73cef3684..22ac79292e 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -1403,7 +1403,15 @@ int dp_wdi_event_attach(struct dp_pdev *txrx_pdev); int dp_wdi_event_detach(struct dp_pdev *txrx_pdev); int dp_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event, bool enable); -void *dp_get_pldev(struct cdp_pdev *txrx_pdev); + +/** + * dp_get_pldev() - function to get pktlog device handle + * @soc_hdl: datapath soc handle + * @pdev_id: physical device id + * + * Return: pktlog device handle or NULL + */ +void *dp_get_pldev(struct cdp_soc_t *soc_hdl, uint8_t pdev_id); void dp_pkt_log_init(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, void *scn); static inline void diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index c28a0b6f06..c748262c66 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -385,6 +385,7 @@ void dp_pkt_log_init(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, void *scn) } pktlog_sethandle(&handle->pl_dev, scn); + pktlog_set_pdev_id(handle->pl_dev, pdev_id); pktlog_set_callback_regtype(PKTLOG_DEFAULT_CALLBACK_REGISTRATION); if (pktlogmod_init(scn)) { diff --git a/dp/wifi3.0/dp_wdi_event.c b/dp/wifi3.0/dp_wdi_event.c index 91614b3d0d..697a570ac5 100644 --- a/dp/wifi3.0/dp_wdi_event.c +++ b/dp/wifi3.0/dp_wdi_event.c @@ -21,9 +21,14 @@ #include "qdf_mem.h" /* qdf_mem_malloc,free */ #ifdef WDI_EVENT_ENABLE -void *dp_get_pldev(struct cdp_pdev *txrx_pdev) +void *dp_get_pldev(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) { - struct dp_pdev *pdev = (struct dp_pdev *)txrx_pdev; + struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl); + struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id); + + if (!pdev) + return NULL; + return pdev->pl_dev; } /* diff --git a/utils/pktlog/include/pktlog_ac.h b/utils/pktlog/include/pktlog_ac.h index 7dc1eaffe9..a7d46b728a 100644 --- a/utils/pktlog/include/pktlog_ac.h +++ b/utils/pktlog/include/pktlog_ac.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2020 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 @@ -61,7 +61,15 @@ extern void pktlog_release_buf(struct hif_opaque_softc *scn); ssize_t pktlog_read_proc_entry(char *buf, size_t nbytes, loff_t *ppos, struct ath_pktlog_info *pl_info, bool *read_complete); -A_STATUS wdi_pktlog_unsubscribe(struct cdp_pdev *txrx_pdev, uint32_t log_state); + +/** + * wdi_pktlog_unsubscribe() - Unsubscribe pktlog callbacks + * @pdev_id: pdev id + * @log_state: Pktlog registration + * + * Return: zero on success, non-zero on failure + */ +A_STATUS wdi_pktlog_unsubscribe(uint8_t pdev_id, uint32_t log_state); struct ol_pl_arch_dep_funcs { void (*pktlog_init)(struct hif_opaque_softc *scn); @@ -93,6 +101,7 @@ struct pktlog_dev_t { struct ol_pl_arch_dep_funcs *pl_funcs; struct ath_pktlog_info *pl_info; ol_ath_generic_softc_handle scn; + uint8_t pdev_id; char *name; bool tgt_pktlog_alloced; bool is_pktlog_cb_subscribed; @@ -141,7 +150,17 @@ int pktlog_disable(struct hif_opaque_softc *scn); int pktlogmod_init(void *context); void pktlogmod_exit(void *context); int pktlog_htc_attach(void); -void pktlog_process_fw_msg(uint32_t *msg_word, uint32_t msg_len); + +/** + * pktlog_process_fw_msg() - process packetlog message + * @pdev_id: physical device instance id + * @msg_word: message buffer + * @msg_len: message length + * + * Return: None + */ +void pktlog_process_fw_msg(uint8_t pdev_id, uint32_t *msg_word, + uint32_t msg_len); void lit_pktlog_callback(void *context, enum WDI_EVENT event, void *log_data, u_int16_t peer_id, uint32_t status); @@ -204,7 +223,8 @@ static inline int pktlog_htc_attach(void) return 0; } -static inline void pktlog_process_fw_msg(uint32_t *msg_word, uint32_t msg_len) +static inline void pktlog_process_fw_msg(uint8_t pdev_id, uint32_t *msg_word, + uint32_t msg_len) { } #endif /* REMOVE_PKT_LOG */ #endif /* _PKTLOG_AC_H_ */ diff --git a/utils/pktlog/include/pktlog_ac_api.h b/utils/pktlog/include/pktlog_ac_api.h index 60226922ff..bc75425b93 100644 --- a/utils/pktlog/include/pktlog_ac_api.h +++ b/utils/pktlog/include/pktlog_ac_api.h @@ -1,5 +1,6 @@ /* - * Copyright (c) 2012-2014, 2016-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2014, 2016-2018, 2020 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 @@ -54,6 +55,7 @@ struct pktlog_dev_t; void pktlog_sethandle(struct pktlog_dev_t **pl_handle, hif_opaque_softc_handle scn); +void pktlog_set_pdev_id(struct pktlog_dev_t *pl_dev, uint8_t pdev_id); void *get_txrx_context(void); @@ -129,6 +131,12 @@ struct ath_pktlog_info { #endif /* _PKTLOG_INFO */ #else /* REMOVE_PKT_LOG */ typedef void *pktlog_dev_handle; +#define pktlog_set_pdev_id(pl_dev, pdev_id) \ + do { \ + (void)pl_dev; \ + (void)pdev_id; \ + } while (0) + #define pktlog_sethandle(pl_handle, scn) \ do { \ (void)pl_handle; \ diff --git a/utils/pktlog/pktlog_ac.c b/utils/pktlog/pktlog_ac.c index 3dcd09a9bc..157581f915 100644 --- a/utils/pktlog/pktlog_ac.c +++ b/utils/pktlog/pktlog_ac.c @@ -75,6 +75,11 @@ void pktlog_sethandle(struct pktlog_dev_t **pl_handle, *pl_handle = &pl_dev; } +void pktlog_set_pdev_id(struct pktlog_dev_t *pl_dev, uint8_t pdev_id) +{ + pl_dev->pdev_id = pdev_id; +} + void pktlog_set_callback_regtype( enum pktlog_callback_regtype callback_type) { @@ -90,19 +95,10 @@ void pktlog_set_callback_regtype( struct pktlog_dev_t *get_pktlog_handle(void) { - struct cdp_pdev *pdev_txrx_handle = - cds_get_context(QDF_MODULE_ID_TXRX); + uint8_t pdev_id = WMI_PDEV_ID_SOC; void *soc = cds_get_context(QDF_MODULE_ID_SOC); - return cdp_get_pldev(soc, pdev_txrx_handle); -} - -/* - * Get current txrx context - */ -void *get_txrx_context(void) -{ - return cds_get_context(QDF_MODULE_ID_TXRX); + return cdp_get_pldev(soc, pdev_id); } static A_STATUS pktlog_wma_post_msg(WMI_PKTLOG_EVENT event_types, @@ -170,56 +166,56 @@ pktlog_enable_tgt(struct hif_opaque_softc *_scn, uint32_t log_state, #ifdef PKTLOG_LEGACY /** * wdi_pktlog_subscribe() - Subscribe pktlog callbacks - * @cdp_pdev: abstract pdev handle + * @pdev_id: pdev id * @log_state: Pktlog registration * * Return: zero on success, non-zero on failure */ static inline A_STATUS -wdi_pktlog_subscribe(struct cdp_pdev *cdp_pdev, int32_t log_state) +wdi_pktlog_subscribe(uint8_t pdev_id, int32_t log_state) { void *soc = cds_get_context(QDF_MODULE_ID_SOC); - if (!cdp_pdev) { + if (pdev_id < 0) { qdf_print("Invalid pdev in %s", __func__); return A_ERROR; } if (log_state & ATH_PKTLOG_TX) { - if (cdp_wdi_event_sub(soc, cdp_pdev, &PKTLOG_TX_SUBSCRIBER, - WDI_EVENT_TX_STATUS)) { + if (cdp_wdi_event_sub(soc, pdev_id, &PKTLOG_TX_SUBSCRIBER, + WDI_EVENT_TX_STATUS)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_RX) { - if (cdp_wdi_event_sub(soc, cdp_pdev, &PKTLOG_RX_SUBSCRIBER, - WDI_EVENT_RX_DESC)) { + if (cdp_wdi_event_sub(soc, pdev_id, &PKTLOG_RX_SUBSCRIBER, + WDI_EVENT_RX_DESC)) { return A_ERROR; } - if (cdp_wdi_event_sub(soc, cdp_pdev, - &PKTLOG_RX_REMOTE_SUBSCRIBER, - WDI_EVENT_RX_DESC_REMOTE)) { + if (cdp_wdi_event_sub(soc, pdev_id, + &PKTLOG_RX_REMOTE_SUBSCRIBER, + WDI_EVENT_RX_DESC_REMOTE)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_RCFIND) { - if (cdp_wdi_event_sub(soc, cdp_pdev, - &PKTLOG_RCFIND_SUBSCRIBER, - WDI_EVENT_RATE_FIND)) { + if (cdp_wdi_event_sub(soc, pdev_id, + &PKTLOG_RCFIND_SUBSCRIBER, + WDI_EVENT_RATE_FIND)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_RCUPDATE) { - if (cdp_wdi_event_sub(soc, cdp_pdev, - &PKTLOG_RCUPDATE_SUBSCRIBER, - WDI_EVENT_RATE_UPDATE)) { + if (cdp_wdi_event_sub(soc, pdev_id, + &PKTLOG_RCUPDATE_SUBSCRIBER, + WDI_EVENT_RATE_UPDATE)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_SW_EVENT) { - if (cdp_wdi_event_sub(soc, cdp_pdev, - &PKTLOG_SW_EVENT_SUBSCRIBER, - WDI_EVENT_SW_EVENT)) { + if (cdp_wdi_event_sub(soc, pdev_id, + &PKTLOG_SW_EVENT_SUBSCRIBER, + WDI_EVENT_SW_EVENT)) { return A_ERROR; } } @@ -228,11 +224,11 @@ wdi_pktlog_subscribe(struct cdp_pdev *cdp_pdev, int32_t log_state) } #else static inline A_STATUS -wdi_pktlog_subscribe(struct cdp_pdev *cdp_pdev, int32_t log_state) +wdi_pktlog_subscribe(uint8_t pdev_id, int32_t log_state) { void *soc = cds_get_context(QDF_MODULE_ID_SOC); - if (!cdp_pdev) { + if (pdev_id < 0) { qdf_print("Invalid pdev in %s", __func__); return A_ERROR; } @@ -242,7 +238,7 @@ wdi_pktlog_subscribe(struct cdp_pdev *cdp_pdev, int32_t log_state) (log_state & ATH_PKTLOG_RCUPDATE) || (log_state & ATH_PKTLOG_SW_EVENT)) { if (cdp_wdi_event_sub(soc, - cdp_pdev, + pdev_id, &PKTLOG_OFFLOAD_SUBSCRIBER, WDI_EVENT_OFFLOAD_ALL)) { return A_ERROR; @@ -250,15 +246,15 @@ wdi_pktlog_subscribe(struct cdp_pdev *cdp_pdev, int32_t log_state) } if (log_state & ATH_PKTLOG_RX) { - if (cdp_wdi_event_sub(soc, cdp_pdev, - &PKTLOG_RX_SUBSCRIBER, - WDI_EVENT_RX_DESC)) { + if (cdp_wdi_event_sub(soc, pdev_id, + &PKTLOG_RX_SUBSCRIBER, + WDI_EVENT_RX_DESC)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_SW_EVENT) { - if (cdp_wdi_event_sub(soc, cdp_pdev, + if (cdp_wdi_event_sub(soc, pdev_id, &PKTLOG_SW_EVENT_SUBSCRIBER, WDI_EVENT_SW_EVENT)) { return A_ERROR; @@ -266,7 +262,7 @@ wdi_pktlog_subscribe(struct cdp_pdev *cdp_pdev, int32_t log_state) } if (log_state & ATH_PKTLOG_LITE_T2H) { - if (cdp_wdi_event_sub(soc, cdp_pdev, + if (cdp_wdi_event_sub(soc, pdev_id, &PKTLOG_LITE_T2H_SUBSCRIBER, WDI_EVENT_LITE_T2H)) { return A_ERROR; @@ -274,7 +270,7 @@ wdi_pktlog_subscribe(struct cdp_pdev *cdp_pdev, int32_t log_state) } if (log_state & ATH_PKTLOG_LITE_RX) { - if (cdp_wdi_event_sub(soc, cdp_pdev, + if (cdp_wdi_event_sub(soc, pdev_id, &PKTLOG_LITE_RX_SUBSCRIBER, WDI_EVENT_LITE_RX)) { return A_ERROR; @@ -405,56 +401,50 @@ lit_pktlog_callback(void *context, enum WDI_EVENT event, void *log_data, } #ifdef PKTLOG_LEGACY -/** - * wdi_pktlog_unsubscribe() - Unsubscribe pktlog callbacks - * @cdp_pdev: abstract pdev handle - * @log_state: Pktlog registration - * - * Return: zero on success, non-zero on failure - */ A_STATUS -wdi_pktlog_unsubscribe(struct cdp_pdev *pdev, uint32_t log_state) +wdi_pktlog_unsubscribe(uint8_t pdev_id, uint32_t log_state) { void *soc = cds_get_context(QDF_MODULE_ID_SOC); /* TODO: WIN implementation to get soc */ if (log_state & ATH_PKTLOG_TX) { - if (cdp_wdi_event_unsub(soc, pdev, - &PKTLOG_TX_SUBSCRIBER, - WDI_EVENT_TX_STATUS)) { + if (cdp_wdi_event_unsub(soc, pdev_id, + &PKTLOG_TX_SUBSCRIBER, + WDI_EVENT_TX_STATUS)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_RX) { - if (cdp_wdi_event_unsub(soc, pdev, - &PKTLOG_RX_SUBSCRIBER, WDI_EVENT_RX_DESC)) { + if (cdp_wdi_event_unsub(soc, pdev_id, + &PKTLOG_RX_SUBSCRIBER, + WDI_EVENT_RX_DESC)) { return A_ERROR; } - if (cdp_wdi_event_unsub(soc, pdev, - &PKTLOG_RX_REMOTE_SUBSCRIBER, - WDI_EVENT_RX_DESC_REMOTE)) { + if (cdp_wdi_event_unsub(soc, pdev_id, + &PKTLOG_RX_REMOTE_SUBSCRIBER, + WDI_EVENT_RX_DESC_REMOTE)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_RCFIND) { - if (cdp_wdi_event_unsub(soc, pdev, - &PKTLOG_RCFIND_SUBSCRIBER, - WDI_EVENT_RATE_FIND)) { + if (cdp_wdi_event_unsub(soc, pdev_id, + &PKTLOG_RCFIND_SUBSCRIBER, + WDI_EVENT_RATE_FIND)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_RCUPDATE) { - if (cdp_wdi_event_unsub(soc, pdev, - &PKTLOG_RCUPDATE_SUBSCRIBER, - WDI_EVENT_RATE_UPDATE)) { + if (cdp_wdi_event_unsub(soc, pdev_id, + &PKTLOG_RCUPDATE_SUBSCRIBER, + WDI_EVENT_RATE_UPDATE)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_RCUPDATE) { - if (cdp_wdi_event_unsub(soc, pdev, - &PKTLOG_SW_EVENT_SUBSCRIBER, - WDI_EVENT_SW_EVENT)) { + if (cdp_wdi_event_unsub(soc, pdev_id, + &PKTLOG_SW_EVENT_SUBSCRIBER, + WDI_EVENT_SW_EVENT)) { return A_ERROR; } } @@ -463,7 +453,7 @@ wdi_pktlog_unsubscribe(struct cdp_pdev *pdev, uint32_t log_state) } #else A_STATUS -wdi_pktlog_unsubscribe(struct cdp_pdev *pdev, uint32_t log_state) +wdi_pktlog_unsubscribe(uint8_t pdev_id, uint32_t log_state) { void *soc = cds_get_context(QDF_MODULE_ID_SOC); @@ -472,28 +462,28 @@ wdi_pktlog_unsubscribe(struct cdp_pdev *pdev, uint32_t log_state) (log_state & ATH_PKTLOG_RCUPDATE) || (log_state & ATH_PKTLOG_SW_EVENT)) { if (cdp_wdi_event_unsub(soc, - pdev, + pdev_id, &PKTLOG_OFFLOAD_SUBSCRIBER, WDI_EVENT_OFFLOAD_ALL)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_RX) { - if (cdp_wdi_event_unsub(soc, pdev, + if (cdp_wdi_event_unsub(soc, pdev_id, &PKTLOG_RX_SUBSCRIBER, WDI_EVENT_RX_DESC)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_LITE_T2H) { - if (cdp_wdi_event_unsub(soc, pdev, + if (cdp_wdi_event_unsub(soc, pdev_id, &PKTLOG_LITE_T2H_SUBSCRIBER, WDI_EVENT_LITE_T2H)) { return A_ERROR; } } if (log_state & ATH_PKTLOG_LITE_RX) { - if (cdp_wdi_event_unsub(soc, pdev, + if (cdp_wdi_event_unsub(soc, pdev_id, &PKTLOG_LITE_RX_SUBSCRIBER, WDI_EVENT_LITE_RX)) { return A_ERROR; @@ -509,7 +499,7 @@ int pktlog_disable(struct hif_opaque_softc *scn) struct pktlog_dev_t *pl_dev; struct ath_pktlog_info *pl_info; uint8_t save_pktlog_state; - struct cdp_pdev *txrx_pdev = get_txrx_context(); + uint8_t pdev_id = WMI_PDEV_ID_SOC; pl_dev = get_pktlog_handle(); @@ -525,8 +515,8 @@ int pktlog_disable(struct hif_opaque_softc *scn) return -EINVAL; } - if (!txrx_pdev) { - qdf_print("Invalid cdp_pdev"); + if (pdev_id < 0) { + qdf_print("Invalid pdev"); return -EINVAL; } @@ -548,7 +538,7 @@ int pktlog_disable(struct hif_opaque_softc *scn) } if (pl_dev->is_pktlog_cb_subscribed && - wdi_pktlog_unsubscribe(txrx_pdev, pl_info->log_state)) { + wdi_pktlog_unsubscribe(pdev_id, pl_info->log_state)) { pl_info->curr_pkt_state = PKTLOG_OPR_NOT_IN_PROGRESS; qdf_print("Cannot unsubscribe pktlog from the WDI"); return -EINVAL; @@ -636,7 +626,7 @@ int __pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state, { struct pktlog_dev_t *pl_dev; struct ath_pktlog_info *pl_info; - struct cdp_pdev *cdp_pdev; + uint8_t pdev_id; int error; if (!scn) { @@ -652,8 +642,8 @@ int __pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state, return -EINVAL; } - cdp_pdev = get_txrx_context(); - if (!cdp_pdev) { + pdev_id = WMI_PDEV_ID_SOC; + if (pdev_id < 0) { qdf_print("%s: Invalid txrx context", __func__); ASSERT(0); return -EINVAL; @@ -724,7 +714,7 @@ int __pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state, if (log_state != 0) { /* WDI subscribe */ if (!pl_dev->is_pktlog_cb_subscribed) { - error = wdi_pktlog_subscribe(cdp_pdev, log_state); + error = wdi_pktlog_subscribe(pdev_id, log_state); if (error) { pl_info->curr_pkt_state = PKTLOG_OPR_NOT_IN_PROGRESS; @@ -797,7 +787,7 @@ static int __pktlog_setsize(struct hif_opaque_softc *scn, int32_t size) { struct pktlog_dev_t *pl_dev; struct ath_pktlog_info *pl_info; - struct cdp_pdev *pdev; + uint8_t pdev_id = WMI_PDEV_ID_SOC; pl_dev = get_pktlog_handle(); @@ -813,10 +803,8 @@ static int __pktlog_setsize(struct hif_opaque_softc *scn, int32_t size) return -EINVAL; } - pdev = get_txrx_context(); - - if (!pdev) { - qdf_print("%s: invalid pdev handle", __func__); + if (pdev_id < 0) { + qdf_print("%s: invalid pdev", __func__); return -EINVAL; } @@ -853,7 +841,7 @@ static int __pktlog_setsize(struct hif_opaque_softc *scn, int32_t size) qdf_spin_lock_bh(&pl_info->log_lock); if (pl_info->buf) { if (pl_dev->is_pktlog_cb_subscribed && - wdi_pktlog_unsubscribe(pdev, pl_info->log_state)) { + wdi_pktlog_unsubscribe(pdev_id, pl_info->log_state)) { pl_info->curr_pkt_state = PKTLOG_OPR_NOT_IN_PROGRESS; qdf_spin_unlock_bh(&pl_info->log_lock); @@ -968,21 +956,14 @@ int pktlog_clearbuff(struct hif_opaque_softc *scn, bool clear_buff) return 0; } -/** - * pktlog_process_fw_msg() - process packetlog message - * @buff: buffer - * - * Return: None - */ -void pktlog_process_fw_msg(uint32_t *buff, uint32_t len) +void pktlog_process_fw_msg(uint8_t pdev_id, uint32_t *buff, uint32_t len) { uint32_t *pl_hdr; uint32_t log_type; - struct cdp_pdev *pdev = get_txrx_context(); struct ol_fw_data pl_fw_data; - if (!pdev) { - qdf_print("%s: txrx_pdev is NULL", __func__); + if (pdev_id == OL_TXRX_INVALID_PDEV_ID) { + qdf_print("%s: txrx pdev_id is invalid", __func__); return; } pl_hdr = buff; @@ -999,19 +980,19 @@ void pktlog_process_fw_msg(uint32_t *buff, uint32_t len) || (log_type == PKTLOG_TYPE_TX_FRM_HDR) || (log_type == PKTLOG_TYPE_TX_VIRT_ADDR)) wdi_event_handler(WDI_EVENT_TX_STATUS, - pdev, &pl_fw_data); + pdev_id, &pl_fw_data); else if (log_type == PKTLOG_TYPE_RC_FIND) wdi_event_handler(WDI_EVENT_RATE_FIND, - pdev, &pl_fw_data); + pdev_id, &pl_fw_data); else if (log_type == PKTLOG_TYPE_RC_UPDATE) wdi_event_handler(WDI_EVENT_RATE_UPDATE, - pdev, &pl_fw_data); + pdev_id, &pl_fw_data); else if (log_type == PKTLOG_TYPE_RX_STAT) wdi_event_handler(WDI_EVENT_RX_DESC, - pdev, &pl_fw_data); + pdev_id, &pl_fw_data); else if (log_type == PKTLOG_TYPE_SW_EVENT) wdi_event_handler(WDI_EVENT_SW_EVENT, - pdev, &pl_fw_data); + pdev_id, &pl_fw_data); } #if defined(QCA_WIFI_3_0_ADRASTEA) @@ -1062,7 +1043,7 @@ static void pktlog_t2h_msg_handler(void *context, HTC_PACKET *pkt) msg_word = (uint32_t *) qdf_nbuf_data(pktlog_t2h_msg); msg_len = qdf_nbuf_len(pktlog_t2h_msg); - pktlog_process_fw_msg(msg_word, msg_len); + pktlog_process_fw_msg(pdev->pdev_id, msg_word, msg_len); qdf_nbuf_free(pktlog_t2h_msg); }