diff --git a/dp/wifi3.0/be/dp_be_rx.c b/dp/wifi3.0/be/dp_be_rx.c index 9ef34b3676..11e1809a4d 100644 --- a/dp/wifi3.0/be/dp_be_rx.c +++ b/dp/wifi3.0/be/dp_be_rx.c @@ -205,9 +205,9 @@ uint32_t dp_rx_process_be(struct dp_intr *int_ctx, qdf_assert_always(hal_soc); scn = soc->hif_handle; - hif_pm_runtime_mark_dp_rx_busy(scn); intr_id = int_ctx->dp_intr_id; num_entries = hal_srng_get_num_entries(hal_soc, hal_ring_hdl); + dp_runtime_pm_mark_last_busy(soc); more_data: /* reset local variables here to be re-used in the function */ diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index e19949f705..5675d2f4c4 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -3390,14 +3390,40 @@ static inline int32_t dp_runtime_get_refcount(struct dp_soc *soc) } /** - * dp_runtime_init() - Init dp runtime refcount when dp soc init + * dp_runtime_init() - Init DP related runtime PM clients and runtime refcount * @soc: Datapath soc handle * * Return: QDF_STATUS */ -static inline QDF_STATUS dp_runtime_init(struct dp_soc *soc) +static inline void dp_runtime_init(struct dp_soc *soc) { - return qdf_atomic_init(&soc->dp_runtime_refcount); + hif_rtpm_register(HIF_RTPM_ID_DP, NULL); + hif_rtpm_register(HIF_RTPM_ID_DP_RING_STATS, NULL); + qdf_atomic_init(&soc->dp_runtime_refcount); +} + +/** + * dp_runtime_deinit() - Deinit DP related runtime PM clients + * + * Return: None + */ +static inline void dp_runtime_deinit(void) +{ + hif_rtpm_deregister(HIF_RTPM_ID_DP); + hif_rtpm_deregister(HIF_RTPM_ID_DP_RING_STATS); +} + +/** + * dp_runtime_pm_mark_last_busy() - Mark last busy when rx path in use + * @soc: Datapath soc handle + * + * Return: None + */ +static inline void dp_runtime_pm_mark_last_busy(struct dp_soc *soc) +{ + soc->rx_last_busy = qdf_get_log_timestamp_usecs(); + + hif_rtpm_mark_last_busy(HIF_RTPM_ID_DP); } #else static inline int32_t dp_runtime_get(struct dp_soc *soc) @@ -3414,6 +3440,14 @@ static inline QDF_STATUS dp_runtime_init(struct dp_soc *soc) { return QDF_STATUS_SUCCESS; } + +static inline void dp_runtime_deinit(void) +{ +} + +static inline void dp_runtime_pm_mark_last_busy(struct dp_soc *soc) +{ +} #endif static inline enum QDF_GLOBAL_MODE dp_soc_get_con_mode(struct dp_soc *soc) diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 4464652207..d841324183 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -5916,6 +5916,8 @@ static void dp_soc_detach(struct cdp_soc_t *txrx_soc) soc->arch_ops.txrx_soc_detach(soc); + dp_runtime_deinit(); + dp_sysfs_deinitialize_stats(soc); dp_soc_swlm_detach(soc); dp_soc_tx_desc_sw_pools_free(soc); diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index 47e80ffe00..8715527362 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -5594,8 +5594,7 @@ dp_print_ring_stats(struct dp_pdev *pdev) int mac_id; int lmac_id; - if (hif_pm_runtime_get_sync(pdev->soc->hif_handle, - RTPM_ID_DP_PRINT_RING_STATS)) + if (hif_rtpm_get(HIF_RTPM_GET_SYNC, HIF_RTPM_ID_DP_RING_STATS)) return; dp_print_ring_stat_from_hal(pdev->soc, @@ -5680,8 +5679,7 @@ dp_print_ring_stats(struct dp_pdev *pdev) [lmac_id], RXDMA_DST); } - hif_pm_runtime_put(pdev->soc->hif_handle, - RTPM_ID_DP_PRINT_RING_STATS); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_DP_RING_STATS); } /** diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 0ce9aee303..b46040288a 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -1548,10 +1548,8 @@ dp_tx_ring_access_end_wrapper(struct dp_soc *soc, return; } - ret = hif_pm_runtime_get(soc->hif_handle, - RTPM_ID_DW_TX_HW_ENQUEUE, true); - switch (ret) { - case 0: + ret = hif_rtpm_get(HIF_RTPM_GET_ASYNC, HIF_RTPM_ID_DP); + if (QDF_IS_STATUS_SUCCESS(ret)) { if (hif_system_pm_state_check(soc->hif_handle)) { dp_tx_hal_ring_access_end_reap(soc, hal_ring_hdl); hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT); @@ -1559,31 +1557,8 @@ dp_tx_ring_access_end_wrapper(struct dp_soc *soc, } else { dp_tx_ring_access_end(soc, hal_ring_hdl, coalesce); } - hif_pm_runtime_put(soc->hif_handle, - RTPM_ID_DW_TX_HW_ENQUEUE); - break; - /* - * If hif_pm_runtime_get returns -EBUSY or -EINPROGRESS, - * take the dp runtime refcount using dp_runtime_get, - * check link state,if up, write TX ring HP, else just set flush event. - * In dp_runtime_resume, wait until dp runtime refcount becomes - * zero or time out, then flush pending tx. - */ - case -EBUSY: - case -EINPROGRESS: - dp_runtime_get(soc); - if (hif_pm_get_link_state(soc->hif_handle) == - HIF_PM_LINK_STATE_UP) { - dp_tx_ring_access_end(soc, hal_ring_hdl, coalesce); - } else { - dp_tx_hal_ring_access_end_reap(soc, hal_ring_hdl); - hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT); - qdf_atomic_inc(&soc->tx_pending_rtpm); - hal_srng_inc_flush_cnt(hal_ring_hdl); - } - dp_runtime_put(soc); - break; - default: + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_DP); + } else { dp_runtime_get(soc); dp_tx_hal_ring_access_end_reap(soc, hal_ring_hdl); hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT); diff --git a/dp/wifi3.0/dp_tx_desc.h b/dp/wifi3.0/dp_tx_desc.h index c10dc8b9d2..91403c1db7 100644 --- a/dp/wifi3.0/dp_tx_desc.h +++ b/dp/wifi3.0/dp_tx_desc.h @@ -530,17 +530,6 @@ dp_tx_desc_alloc(struct dp_soc *soc, uint8_t desc_pool_id) } else { qdf_spin_unlock_bh(&pool->flow_pool_lock); } - - /* - * If one packet is going to be sent, PM usage count - * needs to be incremented by one to prevent future - * runtime suspend. This should be tied with the - * success of allocating one descriptor. It will be - * decremented after the packet has been sent. - */ - hif_pm_runtime_get_noresume( - soc->hif_handle, - RTPM_ID_DP_TX_DESC_ALLOC_FREE); } else { pool->pkt_drop_no_desc++; qdf_spin_unlock_bh(&pool->flow_pool_lock); @@ -549,7 +538,6 @@ dp_tx_desc_alloc(struct dp_soc *soc, uint8_t desc_pool_id) soc->pool_stats.pkt_drop_no_pool++; } - return tx_desc; } @@ -590,7 +578,7 @@ dp_tx_desc_free(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc, qdf_spin_unlock_bh(&pool->flow_pool_lock); qdf_print("%s %d pool is freed!!", __func__, __LINE__); - goto out; + return; } break; @@ -603,14 +591,6 @@ dp_tx_desc_free(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc, }; qdf_spin_unlock_bh(&pool->flow_pool_lock); - -out: - /** - * Decrement PM usage count if the packet has been sent. This - * should be tied with the success of freeing one descriptor. - */ - hif_pm_runtime_put(soc->hif_handle, - RTPM_ID_DP_TX_DESC_ALLOC_FREE); } #endif /* QCA_AC_BASED_FLOW_CONTROL */ diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index deede7c657..2f15f8c7dc 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -2307,10 +2307,12 @@ struct dp_soc { #ifdef WLAN_DP_FEATURE_SW_LATENCY_MGR struct dp_swlm swlm; #endif + #ifdef FEATURE_RUNTIME_PM + /* DP Rx timestamp */ + qdf_time_t rx_last_busy; /* Dp runtime refcount */ qdf_atomic_t dp_runtime_refcount; - /* Dp tx pending count in RTPM */ qdf_atomic_t tx_pending_rtpm; #endif diff --git a/dp/wifi3.0/li/dp_li_rx.c b/dp/wifi3.0/li/dp_li_rx.c index 96cbbe29ff..c7b925705d 100644 --- a/dp/wifi3.0/li/dp_li_rx.c +++ b/dp/wifi3.0/li/dp_li_rx.c @@ -264,9 +264,9 @@ uint32_t dp_rx_process_li(struct dp_intr *int_ctx, qdf_assert_always(hal_soc); scn = soc->hif_handle; - hif_pm_runtime_mark_dp_rx_busy(scn); intr_id = int_ctx->dp_intr_id; num_entries = hal_srng_get_num_entries(hal_soc, hal_ring_hdl); + dp_runtime_pm_mark_last_busy(soc); more_data: /* reset local variables here to be re-used in the function */ diff --git a/hal/wifi3.0/be/hal_be_reo.c b/hal/wifi3.0/be/hal_be_reo.c index e10f46865e..440f6205ac 100644 --- a/hal/wifi3.0/be/hal_be_reo.c +++ b/hal/wifi3.0/be/hal_be_reo.c @@ -360,8 +360,8 @@ hal_reo_cmd_queue_stats_be(hal_ring_handle_t hal_ring_hdl, HAL_DESC_64_SET_FIELD(reo_desc, REO_GET_QUEUE_STATS, CLEAR_STATS, cmd->u.stats_params.clear); - hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, RTPM_ID_HAL_REO_CMD, - true); + hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, + HIF_RTPM_ID_HAL_REO_CMD); val = reo_desc[CMD_HEADER_DW_OFFSET]; return HAL_GET_FIELD(UNIFORM_REO_CMD_HEADER, REO_CMD_NUMBER, @@ -412,8 +412,9 @@ hal_reo_cmd_flush_queue_be(hal_ring_handle_t hal_ring_hdl, cmd->u.fl_queue_params.index); } - hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, RTPM_ID_HAL_REO_CMD, - false); + hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, + HIF_RTPM_ID_HAL_REO_CMD); + val = reo_desc[CMD_HEADER_DW_OFFSET]; return HAL_GET_FIELD(UNIFORM_REO_CMD_HEADER, REO_CMD_NUMBER, val); @@ -496,8 +497,8 @@ hal_reo_cmd_flush_cache_be(hal_ring_handle_t hal_ring_hdl, HAL_DESC_64_SET_FIELD(reo_desc, REO_FLUSH_CACHE, FLUSH_ENTIRE_CACHE, cp->flush_entire_cache); - hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, RTPM_ID_HAL_REO_CMD, - false); + hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, + HIF_RTPM_ID_HAL_REO_CMD); val = reo_desc[CMD_HEADER_DW_OFFSET]; return HAL_GET_FIELD(UNIFORM_REO_CMD_HEADER, REO_CMD_NUMBER, @@ -812,8 +813,9 @@ hal_reo_cmd_update_rx_queue_be(hal_ring_handle_t hal_ring_hdl, HAL_DESC_64_SET_FIELD(reo_desc, REO_UPDATE_RX_REO_QUEUE, PN_127_96, p->pn_127_96); - hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, RTPM_ID_HAL_REO_CMD, - false); + hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, + HIF_RTPM_ID_HAL_REO_CMD); + val = reo_desc[CMD_HEADER_DW_OFFSET]; return HAL_GET_FIELD(UNIFORM_REO_CMD_HEADER, REO_CMD_NUMBER, val); diff --git a/hal/wifi3.0/hal_api.h b/hal/wifi3.0/hal_api.h index ad79666641..a510fbfa06 100644 --- a/hal/wifi3.0/hal_api.h +++ b/hal/wifi3.0/hal_api.h @@ -2217,11 +2217,6 @@ hal_srng_access_end(void *hal_soc, hal_ring_handle_t hal_ring_hdl) SRNG_UNLOCK(&(srng->lock)); } -void hal_srng_access_end_v1(hal_soc_handle_t hal_soc_hdl, - hal_ring_handle_t hal_ring_hdl, - wlan_rtpm_dbgid rtpm_dbgid, - bool is_critical_ctx); - #ifdef FEATURE_RUNTIME_PM #define hal_srng_access_end_v1 hal_srng_rtpm_access_end @@ -2243,11 +2238,9 @@ void hal_srng_access_end_v1(hal_soc_handle_t hal_soc_hdl, void hal_srng_rtpm_access_end(hal_soc_handle_t hal_soc_hdl, hal_ring_handle_t hal_ring_hdl, - wlan_rtpm_dbgid rtpm_dbgid, - bool is_critical_ctx); + uint32_t rtpm_id); #else -#define hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, rtpm_dbgid, \ - is_critical_ctx)\ +#define hal_srng_access_end_v1(hal_soc_hdl, hal_ring_hdl, rtpm_id) \ hal_srng_access_end(hal_soc_hdl, hal_ring_hdl) #endif diff --git a/hal/wifi3.0/hal_srng.c b/hal/wifi3.0/hal_srng.c index d0ecae2bc3..26200a84aa 100644 --- a/hal/wifi3.0/hal_srng.c +++ b/hal/wifi3.0/hal_srng.c @@ -1102,6 +1102,8 @@ void *hal_attach(struct hif_opaque_softc *hif_handle, qdf_device_t qdf_dev) hal_reo_shared_qaddr_setup((hal_soc_handle_t)hal); + hif_rtpm_register(HIF_RTPM_ID_HAL_REO_CMD, NULL); + return (void *)hal; fail3: qdf_mem_free_consistent(qdf_dev, qdf_dev->dev, @@ -1156,6 +1158,7 @@ extern void hal_detach(void *hal_soc) { struct hal_soc *hal = (struct hal_soc *)hal_soc; + hif_rtpm_deregister(HIF_RTPM_ID_HAL_REO_CMD); hal_delayed_reg_write_deinit(hal); hal_reo_shared_qaddr_detach((hal_soc_handle_t)hal); qdf_mem_free(hal->ops); @@ -1788,21 +1791,16 @@ qdf_export_symbol(hal_set_low_threshold); void hal_srng_rtpm_access_end(hal_soc_handle_t hal_soc_hdl, hal_ring_handle_t hal_ring_hdl, - wlan_rtpm_dbgid rtpm_dbgid, - bool is_critical_ctx) + uint32_t rtpm_id) { - struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl; - if (qdf_unlikely(!hal_ring_hdl)) { qdf_print("Error: Invalid hal_ring\n"); return; } - if (hif_pm_runtime_get(hal_soc->hif_handle, - rtpm_dbgid, is_critical_ctx) == 0) { + if (hif_rtpm_get(HIF_RTPM_GET_ASYNC, rtpm_id) == 0) { hal_srng_access_end(hal_soc_hdl, hal_ring_hdl); - hif_pm_runtime_put(hal_soc->hif_handle, - rtpm_dbgid); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, rtpm_id); } else { hal_srng_access_end_reap(hal_soc_hdl, hal_ring_hdl); hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT); diff --git a/hal/wifi3.0/li/hal_li_reo.c b/hal/wifi3.0/li/hal_li_reo.c index b536c67920..c39b73c43d 100644 --- a/hal/wifi3.0/li/hal_li_reo.c +++ b/hal/wifi3.0/li/hal_li_reo.c @@ -356,11 +356,9 @@ hal_reo_cmd_queue_stats_li(hal_ring_handle_t hal_ring_hdl, HAL_DESC_SET_FIELD(reo_desc, REO_GET_QUEUE_STATS_2, CLEAR_STATS, cmd->u.stats_params.clear); - if (hif_pm_runtime_get(hal_soc->hif_handle, - RTPM_ID_HAL_REO_CMD, false) == 0) { + if (hif_rtpm_get(HIF_RTPM_GET_ASYNC, HIF_RTPM_ID_HAL_REO_CMD) == 0) { hal_srng_access_end(hal_soc_hdl, hal_ring_hdl); - hif_pm_runtime_put(hal_soc->hif_handle, - RTPM_ID_HAL_REO_CMD); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_HAL_REO_CMD); } else { hal_srng_access_end_reap(hal_soc_hdl, hal_ring_hdl); hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT); @@ -499,11 +497,9 @@ hal_reo_cmd_flush_cache_li(hal_ring_handle_t hal_ring_hdl, HAL_DESC_SET_FIELD(reo_desc, REO_FLUSH_CACHE_2, FLUSH_ENTIRE_CACHE, cp->flush_entire_cache); - if (hif_pm_runtime_get(hal_soc->hif_handle, - RTPM_ID_HAL_REO_CMD, false) == 0) { + if (hif_rtpm_get(HIF_RTPM_GET_ASYNC, HIF_RTPM_ID_HAL_REO_CMD) == 0) { hal_srng_access_end(hal_soc_hdl, hal_ring_hdl); - hif_pm_runtime_put(hal_soc->hif_handle, - RTPM_ID_HAL_REO_CMD); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_HAL_REO_CMD); } else { hal_srng_access_end_reap(hal_soc_hdl, hal_ring_hdl); hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT); @@ -822,11 +818,9 @@ hal_reo_cmd_update_rx_queue_li(hal_ring_handle_t hal_ring_hdl, HAL_DESC_SET_FIELD(reo_desc, REO_UPDATE_RX_REO_QUEUE_8, PN_127_96, p->pn_127_96); - if (hif_pm_runtime_get(hal_soc->hif_handle, - RTPM_ID_HAL_REO_CMD, false) == 0) { + if (hif_rtpm_get(HIF_RTPM_GET_ASYNC, HIF_RTPM_ID_HAL_REO_CMD) == 0) { hal_srng_access_end(hal_soc_hdl, hal_ring_hdl); - hif_pm_runtime_put(hal_soc->hif_handle, - RTPM_ID_HAL_REO_CMD); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_HAL_REO_CMD); } else { hal_srng_access_end_reap(hal_soc_hdl, hal_ring_hdl); hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT); diff --git a/htc/htc.c b/htc/htc.c index 9992d01978..c9dbf386d2 100644 --- a/htc/htc.c +++ b/htc/htc.c @@ -154,11 +154,8 @@ static void htc_cleanup(HTC_TARGET *target) HTC_PACKET_QUEUE *pkt_queue; qdf_nbuf_t netbuf; - while (htc_dec_return_runtime_cnt((void *)target) >= 0) { - hif_pm_runtime_put(target->hif_dev, RTPM_ID_HTC); - hif_pm_runtime_update_stats(target->hif_dev, RTPM_ID_HTC, - HIF_PM_HTC_STATS_PUT_HTC_CLEANUP); - } + while (htc_dec_return_runtime_cnt((void *)target) >= 0) + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_HTT); if (target->hif_dev) { hif_detach_htc(target->hif_dev); @@ -490,6 +487,9 @@ HTC_HANDLE htc_create(void *ol_sc, struct htc_init_info *pInfo, htc_init_link_vote_ids(); + hif_rtpm_register(HIF_RTPM_ID_WMI, NULL); + hif_rtpm_register(HIF_RTPM_ID_HTT, NULL); + return (HTC_HANDLE) target; } @@ -499,10 +499,15 @@ void htc_destroy(HTC_HANDLE HTCHandle) AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+htc_destroy .. Destroying :0x%pK\n", target)); + htc_hang_event_notifier_unregister(); - hif_stop(htc_get_hif_device(HTCHandle)); - if (target) + + if (target) { + hif_rtpm_deregister(HIF_RTPM_ID_HTT); + hif_rtpm_deregister(HIF_RTPM_ID_WMI); + hif_stop(htc_get_hif_device(HTCHandle)); htc_cleanup(target); + } AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-htc_destroy\n")); htc_credit_history_deinit(); } @@ -1216,19 +1221,12 @@ bool htc_can_suspend_link(HTC_HANDLE htc_handle) #ifdef FEATURE_RUNTIME_PM int htc_pm_runtime_get(HTC_HANDLE htc_handle) { - HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(htc_handle); - - return hif_pm_runtime_get(target->hif_dev, - RTPM_ID_HTC, false); + return hif_rtpm_get(HIF_RTPM_GET_ASYNC, HIF_RTPM_ID_HTT); } int htc_pm_runtime_put(HTC_HANDLE htc_handle) { - HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(htc_handle); - - hif_pm_runtime_update_stats(target->hif_dev, RTPM_ID_HTC, - HIF_PM_HTC_STATS_PUT_HTT_RESPONSE); - return hif_pm_runtime_put(target->hif_dev, RTPM_ID_HTC); + return hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_HTT); } #endif diff --git a/htc/htc_internal.h b/htc/htc_internal.h index 9db8847daa..9710bd4f73 100644 --- a/htc/htc_internal.h +++ b/htc/htc_internal.h @@ -198,6 +198,7 @@ enum ol_ath_htc_pkt_ecodes { HTC_PKT_Q_EMPTY, HTC_SEND_Q_EMPTY }; + /* our HTC target state */ typedef struct _HTC_TARGET { struct hif_opaque_softc *hif_dev; diff --git a/htc/htc_send.c b/htc/htc_send.c index 8afc1de7cf..95085b7f7c 100644 --- a/htc/htc_send.c +++ b/htc/htc_send.c @@ -870,16 +870,10 @@ static QDF_STATUS htc_issue_packets(HTC_TARGET *target, */ if (pPacket->PktInfo.AsTx.Tag == HTC_TX_PACKET_TAG_RUNTIME_PUT) { rt_put = true; - hif_pm_runtime_update_stats( - target->hif_dev, RTPM_ID_HTC, - HIF_PM_HTC_STATS_GET_HTT_NO_RESPONSE); } else if (pPacket->PktInfo.AsTx.Tag == HTC_TX_PACKET_TAG_RTPM_PUT_RC) { rt_put_in_resp = true; htc_inc_runtime_cnt(target); - hif_pm_runtime_update_stats( - target->hif_dev, RTPM_ID_HTC, - HIF_PM_HTC_STATS_GET_HTT_RESPONSE); } #if DEBUG_BUNDLE @@ -971,11 +965,7 @@ static QDF_STATUS htc_issue_packets(HTC_TARGET *target, break; } if (rt_put) { - hif_pm_runtime_put(target->hif_dev, - RTPM_ID_HTC); - hif_pm_runtime_update_stats( - target->hif_dev, RTPM_ID_HTC, - HIF_PM_HTC_STATS_PUT_HTT_NO_RESPONSE); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_HTT); rt_put = false; } } @@ -1050,7 +1040,7 @@ static void queue_htc_pm_packets(HTC_ENDPOINT *endpoint, #endif /** - * htc_send_pkts_rtpm_dbgid_get() - get runtime pm dbgid by service_id + * htc_send_pkts_get_rtpm_id() - get runtime pm dbgid by service_id * @service_id: service for endpoint * * For service_id HTT_DATA_MSG_SVC, HTT message donot have a tx complete @@ -1068,19 +1058,15 @@ static void queue_htc_pm_packets(HTC_ENDPOINT *endpoint, * put/get. * * - * Return: rtpm_dbgid to trace who use it + * Return: rtpm id to trace who used it */ -static wlan_rtpm_dbgid -htc_send_pkts_rtpm_dbgid_get(HTC_SERVICE_ID service_id) +static unsigned int +htc_send_pkts_get_rtpm_id(HTC_SERVICE_ID service_id) { - wlan_rtpm_dbgid rtpm_dbgid; - if (service_id == HTT_DATA_MSG_SVC) - rtpm_dbgid = RTPM_ID_HTC; + return HIF_RTPM_ID_HTT; else - rtpm_dbgid = RTPM_ID_WMI; - - return rtpm_dbgid; + return HIF_RTPM_ID_WMI; } #ifdef SYSTEM_PM_CHECK @@ -1141,7 +1127,7 @@ static void get_htc_send_packets_credit_based(HTC_TARGET *target, HTC_PACKET_QUEUE *tx_queue; HTC_PACKET_QUEUE pm_queue; bool do_pm_get = false; - wlan_rtpm_dbgid rtpm_dbgid = 0; + unsigned int rtpm_code = 0; int ret; HTC_PACKET_QUEUE sys_pm_queue; bool sys_pm_check = false; @@ -1170,20 +1156,16 @@ static void get_htc_send_packets_credit_based(HTC_TARGET *target, /* loop until we can grab as many packets out of the queue as we can */ while (true) { if (do_pm_get) { - rtpm_dbgid = - htc_send_pkts_rtpm_dbgid_get( - pEndpoint->service_id); - ret = hif_pm_runtime_get(target->hif_dev, - rtpm_dbgid, false); + rtpm_code = htc_send_pkts_get_rtpm_id( + pEndpoint->service_id); + ret = hif_rtpm_get(HIF_RTPM_GET_ASYNC, rtpm_code); if (ret) { /* bus suspended, runtime resume issued */ QDF_ASSERT(HTC_PACKET_QUEUE_DEPTH(pQueue) == 0); - if (ret == -EAGAIN) { - pPacket = htc_get_pkt_at_head(tx_queue); - if (!pPacket) - break; - log_packet_info(target, pPacket); - } + pPacket = htc_get_pkt_at_head(tx_queue); + if (!pPacket) + break; + log_packet_info(target, pPacket); break; } } @@ -1193,15 +1175,14 @@ static void get_htc_send_packets_credit_based(HTC_TARGET *target, pPacket = htc_get_pkt_at_head(tx_queue); if (!pPacket) { if (do_pm_get) - hif_pm_runtime_put(target->hif_dev, - rtpm_dbgid); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, rtpm_code); break; } if (sys_pm_check && hif_system_pm_state_check(target->hif_dev)) { if (do_pm_get) - hif_pm_runtime_put(target->hif_dev, rtpm_dbgid); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, rtpm_code); break; } @@ -1245,8 +1226,9 @@ static void get_htc_send_packets_credit_based(HTC_TARGET *target, creditsRequired)); #endif if (do_pm_get) - hif_pm_runtime_put(target->hif_dev, - rtpm_dbgid); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, + rtpm_code); + break; } @@ -1308,7 +1290,7 @@ static void get_htc_send_packets(HTC_TARGET *target, HTC_PACKET_QUEUE *tx_queue; HTC_PACKET_QUEUE pm_queue; bool do_pm_get = false; - wlan_rtpm_dbgid rtpm_dbgid = 0; + unsigned int rtpm_code = 0; int ret; /*** NOTE : the TX lock is held when this function is called ***/ @@ -1329,34 +1311,26 @@ static void get_htc_send_packets(HTC_TARGET *target, int num_frags; if (do_pm_get) { - rtpm_dbgid = - htc_send_pkts_rtpm_dbgid_get( - pEndpoint->service_id); - ret = hif_pm_runtime_get(target->hif_dev, - rtpm_dbgid, false); + rtpm_code = + htc_send_pkts_get_rtpm_id( + pEndpoint->service_id); + ret = hif_rtpm_get(HIF_RTPM_GET_ASYNC, rtpm_code); if (ret) { /* bus suspended, runtime resume issued */ QDF_ASSERT(HTC_PACKET_QUEUE_DEPTH(pQueue) == 0); - if (ret == -EAGAIN) { - pPacket = htc_get_pkt_at_head(tx_queue); - if (!pPacket) - break; - log_packet_info(target, pPacket); - } + pPacket = htc_get_pkt_at_head(tx_queue); + if (!pPacket) + break; + log_packet_info(target, pPacket); break; } - hif_pm_runtime_update_stats( - target->hif_dev, rtpm_dbgid, - HIF_PM_HTC_STATS_GET_HTT_FETCH_PKTS); + } ret = hif_system_pm_state_check(target->hif_dev); if (ret) { if (do_pm_get) { - hif_pm_runtime_put(target->hif_dev, rtpm_dbgid); - hif_pm_runtime_update_stats( - target->hif_dev, rtpm_dbgid, - HIF_PM_HTC_STATS_PUT_HTT_FETCH_PKTS); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, rtpm_code); } break; } @@ -1364,10 +1338,7 @@ static void get_htc_send_packets(HTC_TARGET *target, pPacket = htc_packet_dequeue(tx_queue); if (!pPacket) { if (do_pm_get) { - hif_pm_runtime_put(target->hif_dev, rtpm_dbgid); - hif_pm_runtime_update_stats( - target->hif_dev, rtpm_dbgid, - HIF_PM_HTC_STATS_PUT_HTT_FETCH_PKTS); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, rtpm_code); } break; } @@ -1696,7 +1667,7 @@ static enum HTC_SEND_QUEUE_RESULT htc_try_send(HTC_TARGET *target, status = htc_issue_packets(target, pEndpoint, &sendQueue); if (status) { int i; - wlan_rtpm_dbgid rtpm_dbgid; + unsigned int rtpm_code; result = HTC_SEND_QUEUE_DROP; @@ -1719,15 +1690,10 @@ static enum HTC_SEND_QUEUE_RESULT htc_try_send(HTC_TARGET *target, break; } - rtpm_dbgid = - htc_send_pkts_rtpm_dbgid_get( - pEndpoint->service_id); + rtpm_code = htc_send_pkts_get_rtpm_id( + pEndpoint->service_id); for (i = HTC_PACKET_QUEUE_DEPTH(&sendQueue); i > 0; i--) { - hif_pm_runtime_put(target->hif_dev, - rtpm_dbgid); - hif_pm_runtime_update_stats( - target->hif_dev, rtpm_dbgid, - HIF_PM_HTC_STATS_PUT_HTT_ERROR); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, rtpm_code); } if (!pEndpoint->async_update) { @@ -2017,7 +1983,7 @@ QDF_STATUS htc_send_data_pkt(HTC_HANDLE htc_hdl, qdf_nbuf_t netbuf, int ep_id, int tx_resources; uint32_t data_attr = 0; int htc_payload_len = actual_length; - wlan_rtpm_dbgid rtpm_dbgid; + unsigned int rtpm_code; pEndpoint = &target->endpoint[ep_id]; @@ -2036,9 +2002,9 @@ QDF_STATUS htc_send_data_pkt(HTC_HANDLE htc_hdl, qdf_nbuf_t netbuf, int ep_id, return QDF_STATUS_E_FAILURE; } - rtpm_dbgid = - htc_send_pkts_rtpm_dbgid_get(pEndpoint->service_id); - if (hif_pm_runtime_get(target->hif_dev, rtpm_dbgid, false)) + rtpm_code = htc_send_pkts_get_rtpm_id( + pEndpoint->service_id); + if (hif_rtpm_get(HIF_RTPM_GET_ASYNC, rtpm_code)) return QDF_STATUS_E_FAILURE; p_htc_hdr = (HTC_FRAME_HDR *)qdf_nbuf_get_frag_vaddr(netbuf, 0); @@ -2483,8 +2449,8 @@ QDF_STATUS htc_tx_completion_handler(void *Context, if (pPacket->PktInfo.AsTx.Tag != HTC_TX_PACKET_TAG_AUTO_PM && pPacket->PktInfo.AsTx.Tag != HTC_TX_PACKET_TAG_RUNTIME_PUT && pPacket->PktInfo.AsTx.Tag != HTC_TX_PACKET_TAG_RTPM_PUT_RC) - hif_pm_runtime_put(target->hif_dev, - RTPM_ID_WMI); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_WMI); + if (pPacket->PktInfo.AsTx.Tag == HTC_TX_PACKET_TAG_BUNDLED) { HTC_PACKET *pPacketTemp; @@ -2592,13 +2558,9 @@ void htc_kick_queues(void *context) HTC_TARGET *target = (HTC_TARGET *)context; HTC_ENDPOINT *endpoint = NULL; - if (hif_pm_runtime_get_sync(target->hif_dev, RTPM_ID_HTC)) + if (hif_rtpm_get(HIF_RTPM_GET_SYNC, HIF_RTPM_ID_HTT)) return; - hif_pm_runtime_update_stats( - target->hif_dev, RTPM_ID_HTC, - HIF_PM_HTC_STATS_GET_HTC_KICK_QUEUES); - for (i = 0; i < ENDPOINT_MAX; i++) { endpoint = &target->endpoint[i]; @@ -2614,12 +2576,7 @@ void htc_kick_queues(void *context) hif_fastpath_resume(target->hif_dev); - if (hif_pm_runtime_put(target->hif_dev, RTPM_ID_HTC)) - return; - - hif_pm_runtime_update_stats( - target->hif_dev, RTPM_ID_HTC, - HIF_PM_HTC_STATS_PUT_HTC_KICK_QUEUES); + hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_HTT); } #endif