diff --git a/dp/inc/cdp_txrx_cmn_reg.h b/dp/inc/cdp_txrx_cmn_reg.h index f127145cc1..cb0b4a42f9 100644 --- a/dp/inc/cdp_txrx_cmn_reg.h +++ b/dp/inc/cdp_txrx_cmn_reg.h @@ -61,6 +61,7 @@ static inline ol_txrx_soc_handle cdp_soc_attach(u_int16_t devid, switch (devid) { case LITHIUM_DP: /*FIXME Add lithium devide IDs */ case QCA8074_DEVICE_ID: /* Hawekeye */ + case QCA6290_DEVICE_ID: case RUMIM2M_DEVICE_ID_NODE0: /*lithium emulation */ case RUMIM2M_DEVICE_ID_NODE1: /*lithium emulation */ case RUMIM2M_DEVICE_ID_NODE2: /*lithium emulation */ diff --git a/hif/inc/hif.h b/hif/inc/hif.h index 2316724d0c..3df076e4fe 100644 --- a/hif/inc/hif.h +++ b/hif/inc/hif.h @@ -490,6 +490,9 @@ QDF_STATUS hif_diag_write_mem(struct hif_opaque_softc *hif_ctx, typedef void (*fastpath_msg_handler)(void *, qdf_nbuf_t *, uint32_t); +void hif_enable_polled_mode(struct hif_opaque_softc *hif_ctx); +bool hif_is_polled_mode_enabled(struct hif_opaque_softc *hif_ctx); + /* * Set the FASTPATH_mode_on flag in sc, for use by data path */ diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c index 002580389b..483ddf19b9 100644 --- a/hif/src/ce/ce_main.c +++ b/hif/src/ce/ce_main.c @@ -1214,7 +1214,8 @@ struct CE_handle *ce_init(struct hif_softc *scn, /* epping */ /* poll timer */ - if ((CE_state->attr_flags & CE_ATTR_ENABLE_POLL)) { + if ((CE_state->attr_flags & CE_ATTR_ENABLE_POLL) || + scn->polled_mode_on) { qdf_timer_init(scn->qdf_dev, &CE_state->poll_timer, ce_poll_timeout, @@ -1274,6 +1275,14 @@ void hif_enable_fastpath(struct hif_opaque_softc *hif_ctx) scn->fastpath_mode_on = true; } +void hif_enable_polled_mode(struct hif_opaque_softc *hif_ctx) +{ + struct hif_softc *scn = HIF_GET_SOFTC(hif_ctx); + HIF_DBG("%s, Enabling polled mode", __func__); + + scn->polled_mode_on = true; +} + /** * hif_is_fastpath_mode_enabled - API to query if fasthpath mode is enabled * @hif_ctx: HIF Context @@ -1289,6 +1298,13 @@ bool hif_is_fastpath_mode_enabled(struct hif_opaque_softc *hif_ctx) return scn->fastpath_mode_on; } +bool hif_is_polled_mode_enabled(struct hif_opaque_softc *hif_ctx) +{ + struct hif_softc *scn = HIF_GET_SOFTC(hif_ctx); + + return scn->polled_mode_on; +} + /** * hif_get_ce_handle - API to get CE handle for FastPath mode * @hif_ctx: HIF Context diff --git a/hif/src/hif_main.h b/hif/src/hif_main.h index 0e2e5cf74d..c61ac2006f 100644 --- a/hif/src/hif_main.h +++ b/hif/src/hif_main.h @@ -168,6 +168,7 @@ struct hif_softc { qdf_dma_addr_t paddr_rri_on_ddr; int linkstate_vote; bool fastpath_mode_on; + bool polled_mode_on; atomic_t tasklet_from_intr; int htc_htt_tx_endpoint; qdf_dma_addr_t mem_pa; diff --git a/hif/src/pcie/if_pci.c b/hif/src/pcie/if_pci.c index 5f336184b0..55b7f1b900 100644 --- a/hif/src/pcie/if_pci.c +++ b/hif/src/pcie/if_pci.c @@ -3689,6 +3689,10 @@ int hif_configure_irq(struct hif_softc *scn) struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(scn); HIF_TRACE("%s: E", __func__); + if (scn->polled_mode_on) { + scn->request_irq_done = false; + return 0; + } hif_init_reschedule_tasklet_work(sc);