qcacmn: Enable Pktlog Support

Retrieve pktlog handle through cdp api.
Register proper callbacks for handling WMI
responses from fw.

Change-Id: Iaa3dca5ba95e41d09c99f6d0bef12880ef8f72c0
CRs-Fixed: 2185217
This commit is contained in:
Venkata Sharath Chandra Manchala
2018-01-18 14:22:07 -08:00
committed by snandini
parent 3beed81ef5
commit 78e6478d29
4 changed files with 14 additions and 48 deletions

View File

@@ -612,6 +612,7 @@ static inline int
cdp_wdi_event_sub(ol_txrx_soc_handle soc, cdp_wdi_event_sub(ol_txrx_soc_handle soc,
struct cdp_pdev *pdev, void *event_cb_sub, uint32_t event) struct cdp_pdev *pdev, void *event_cb_sub, uint32_t event)
{ {
if (!soc || !soc->ops) { if (!soc || !soc->ops) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG, QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s invalid instance", __func__); "%s invalid instance", __func__);
@@ -645,6 +646,7 @@ static inline int
cdp_wdi_event_unsub(ol_txrx_soc_handle soc, cdp_wdi_event_unsub(ol_txrx_soc_handle soc,
struct cdp_pdev *pdev, void *event_cb_sub, uint32_t event) struct cdp_pdev *pdev, void *event_cb_sub, uint32_t event)
{ {
if (!soc || !soc->ops) { if (!soc || !soc->ops) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG, QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s invalid instance", __func__); "%s invalid instance", __func__);
@@ -715,35 +717,6 @@ static inline int cdp_set_mgmt_tx_power(ol_txrx_soc_handle soc,
subtype, tx_power); subtype, tx_power);
return 0; return 0;
} }
/**
* @brief WDI event handler
* @details
* This function handles in the events posted by the packet logger.
* This function shall only be called if there was a successful prior call
* to event_sub() on the same wdi_event_subscribe object.
*
* @param soc - pointer to the soc
* @param pdev - the data physical device object
* @param event - which event is being handled
* @param event - data for the event
* @return - int
*/
static inline A_STATUS
cdp_wdi_event_handler(ol_txrx_soc_handle soc,
struct cdp_pdev *pdev, uint32_t event, void *evt_data)
{
if (!soc || !soc->ops || !soc->ops->ctrl_ops) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
"%s invalid instance", __func__);
return A_ERROR;
}
if (soc->ops->ctrl_ops->txrx_wdi_event_handler)
return soc->ops->ctrl_ops->txrx_wdi_event_handler
(pdev, event, evt_data);
return A_OK;
}
static inline void * static inline void *
cdp_get_pldev(ol_txrx_soc_handle soc, cdp_get_pldev(ol_txrx_soc_handle soc,

View File

@@ -507,8 +507,6 @@ struct cdp_ctrl_ops {
void (*txrx_set_pdev_param)(struct cdp_pdev *pdev, void (*txrx_set_pdev_param)(struct cdp_pdev *pdev,
enum cdp_pdev_param_type type, uint8_t val); enum cdp_pdev_param_type type, uint8_t val);
int (*txrx_wdi_event_handler)(struct cdp_pdev *pdev,
uint32_t event, void *evt_data);
void * (*txrx_get_pldev)(struct cdp_pdev *pdev); void * (*txrx_get_pldev)(struct cdp_pdev *pdev);
#ifdef ATH_SUPPORT_NAC_RSSI #ifdef ATH_SUPPORT_NAC_RSSI

View File

@@ -233,10 +233,11 @@ qdf_sysctl_decl(ath_sysctl_pktlog_enable, ctl, write, filp, buffer, lenp, ppos)
if (write) { if (write) {
ret = QDF_SYSCTL_PROC_DOINTVEC(ctl, write, filp, buffer, ret = QDF_SYSCTL_PROC_DOINTVEC(ctl, write, filp, buffer,
lenp, ppos); lenp, ppos);
if (ret == 0) if (ret == 0) {
ret = pl_dev->pl_funcs->pktlog_enable( ret = pl_dev->pl_funcs->pktlog_enable(
(struct hif_opaque_softc *)scn, enable, (struct hif_opaque_softc *)scn, enable,
cds_is_packet_log_enabled(), 0, 1); cds_is_packet_log_enabled(), 0, 1);
}
else else
QDF_TRACE(QDF_MODULE_ID_SYS, QDF_TRACE_LEVEL_DEBUG, QDF_TRACE(QDF_MODULE_ID_SYS, QDF_TRACE_LEVEL_DEBUG,
"Line:%d %s:proc_dointvec failed reason %d", "Line:%d %s:proc_dointvec failed reason %d",

View File

@@ -616,7 +616,6 @@ static int __pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state,
pl_dev->tgt_pktlog_alloced = true; pl_dev->tgt_pktlog_alloced = true;
} }
if (log_state != 0) { if (log_state != 0) {
/* WDI subscribe */ /* WDI subscribe */
if (!pl_dev->is_pktlog_cb_subscribed) { if (!pl_dev->is_pktlog_cb_subscribed) {
@@ -871,11 +870,6 @@ void pktlog_process_fw_msg(uint32_t *buff)
uint32_t *pl_hdr; uint32_t *pl_hdr;
uint32_t log_type; uint32_t log_type;
struct cdp_pdev *pdev = get_txrx_context(); struct cdp_pdev *pdev = get_txrx_context();
#ifdef CONFIG_MCL
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
#else
/*TODO: WIN implementation to get soc */
#endif
if (!pdev) { if (!pdev) {
qdf_print("%s: txrx_pdev is NULL", __func__); qdf_print("%s: txrx_pdev is NULL", __func__);
@@ -892,20 +886,20 @@ void pktlog_process_fw_msg(uint32_t *buff)
|| (log_type == PKTLOG_TYPE_TX_MSDU_ID) || (log_type == PKTLOG_TYPE_TX_MSDU_ID)
|| (log_type == PKTLOG_TYPE_TX_FRM_HDR) || (log_type == PKTLOG_TYPE_TX_FRM_HDR)
|| (log_type == PKTLOG_TYPE_TX_VIRT_ADDR)) || (log_type == PKTLOG_TYPE_TX_VIRT_ADDR))
cdp_wdi_event_handler(soc, pdev, wdi_event_handler(WDI_EVENT_TX_STATUS,
WDI_EVENT_TX_STATUS, pl_hdr); pdev, pl_hdr);
else if (log_type == PKTLOG_TYPE_RC_FIND) else if (log_type == PKTLOG_TYPE_RC_FIND)
cdp_wdi_event_handler(soc, pdev, wdi_event_handler(WDI_EVENT_RATE_FIND,
WDI_EVENT_RATE_FIND, pl_hdr); pdev, pl_hdr);
else if (log_type == PKTLOG_TYPE_RC_UPDATE) else if (log_type == PKTLOG_TYPE_RC_UPDATE)
cdp_wdi_event_handler(soc, pdev, wdi_event_handler(WDI_EVENT_RATE_UPDATE,
WDI_EVENT_RATE_UPDATE, pl_hdr); pdev, pl_hdr);
else if (log_type == PKTLOG_TYPE_RX_STAT) else if (log_type == PKTLOG_TYPE_RX_STAT)
cdp_wdi_event_handler(soc, pdev, wdi_event_handler(WDI_EVENT_RX_DESC,
WDI_EVENT_RX_DESC, pl_hdr); pdev, pl_hdr);
else if (log_type == PKTLOG_TYPE_SW_EVENT) else if (log_type == PKTLOG_TYPE_SW_EVENT)
cdp_wdi_event_handler(soc, pdev, wdi_event_handler(WDI_EVENT_SW_EVENT,
WDI_EVENT_SW_EVENT, pl_hdr); pdev, pl_hdr);
} }
#if defined(QCA_WIFI_3_0_ADRASTEA) #if defined(QCA_WIFI_3_0_ADRASTEA)