qcacmn: Use converged packetdump API to avoid corrupting dp_pdev
Packetdump invokes legacy data path API directly without considering underlying HW: 1. ol_register_packetdump_callback 2. ol_deregister_packetdump_callback Global pointer pdev_txrx_ctx will be casted to struct ol_txrx_pdev_t always even Lithium (use struct dp_pdev) underlying, that leads to struct dp_pdev be overwritten unexpectly. Wrap with cdp API to avoid. About packet-dump feature: It is one debug feature/requirement for Android N, to track/dump TX/RX data/mgmt. packets during connection. This enhancement can help in debugging connection related issues. This change only touches its data packet callback register API. Change-Id: Ie63fd2dfa909f89741ccf0c5131f6d3305093a3e CRs-Fixed: 2366334
このコミットが含まれているのは:
@@ -570,4 +570,51 @@ static inline int cdp_get_num_rx_contexts(ol_txrx_soc_handle soc)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* cdp_register_packetdump_cb() - API to register packetdump callback
|
||||
*
|
||||
* Register TX/RX callback for data packets, during connection. And per packet
|
||||
* stats will be passed to user-space by @tx_cb/@rx_cb.
|
||||
*
|
||||
* @soc: soc handle
|
||||
* @tx_cb: tx packet callback
|
||||
* @rx_cb: rx packet callback
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void cdp_register_packetdump_cb(ol_txrx_soc_handle soc,
|
||||
ol_txrx_pktdump_cb tx_cb,
|
||||
ol_txrx_pktdump_cb rx_cb)
|
||||
{
|
||||
if (!soc || !soc->ops || !soc->ops->misc_ops) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s invalid instance", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (soc->ops->misc_ops->register_pktdump_cb)
|
||||
return soc->ops->misc_ops->register_pktdump_cb(tx_cb, rx_cb);
|
||||
}
|
||||
|
||||
/**
|
||||
* cdp_deregister_packetdump_cb() - API to unregister packetdump callback
|
||||
*
|
||||
* Deregister callback for TX/RX data packets.
|
||||
*
|
||||
* @soc: soc handle
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void cdp_deregister_packetdump_cb(ol_txrx_soc_handle soc)
|
||||
{
|
||||
if (!soc || !soc->ops || !soc->ops->misc_ops) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s invalid instance", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (soc->ops->misc_ops->unregister_pktdump_cb)
|
||||
return soc->ops->misc_ops->unregister_pktdump_cb();
|
||||
}
|
||||
#endif /* _CDP_TXRX_MISC_H_ */
|
||||
|
新しいイシューから参照
ユーザーをブロックする