Просмотр исходного кода

qcacmn: Register DP, HTC, HAL modules with Runtime PM module

With restructuring in HIF runtime PM module, modules are
required to register with the HIF runtime PM module. Also,
changes are done in functions of allowing and preventing
runtime PM suspend as part of restructuring.
This change registers DP, HTC and HAL internal modules
with runtime PM module and update HIF runtime PM function
calls with the restructured code of HIF runtime PM module.

Change-Id: I8899a1d3b92a90a05c5eaf4df7609f4008f739f8
CRs-Fixed: 3169372
Ananya Gupta 3 лет назад
Родитель
Сommit
8565e7029f

+ 1 - 1
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 */

+ 37 - 3
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)
+{
+	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)
 {
-	return qdf_atomic_init(&soc->dp_runtime_refcount);
+	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)

+ 2 - 0
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);

+ 2 - 4
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);
 }
 
 /**

+ 4 - 29
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);

+ 1 - 21
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 */

+ 3 - 1
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

+ 1 - 1
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 */

+ 10 - 8
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);

+ 2 - 9
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
 

+ 6 - 8
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);

+ 6 - 12
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);

+ 14 - 16
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
 

+ 1 - 0
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;

+ 44 - 87
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