Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6d3fe6f authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge d0606448 on remote branch

Change-Id: I951bc4e0ce90d05941373810a007868f99ad5df3
parents 250df4b7 d0606448
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -365,7 +365,9 @@ enum WDI_EVENT {
	WDI_EVENT_PEER_QOS_STATS,
	WDI_EVENT_PKT_CAPTURE_TX_DATA,
	WDI_EVENT_PKT_CAPTURE_RX_DATA,
	WDI_EVENT_PKT_CAPTURE_RX_DATA_NO_PEER,
	WDI_EVENT_PKT_CAPTURE_OFFLOAD_TX_DATA,
	WDI_EVENT_PKT_CAPTURE_PPDU_STATS,
	/* End of new event items */
	WDI_EVENT_LAST
};
+48 −0
Original line number Diff line number Diff line
@@ -4094,6 +4094,45 @@ static struct ppdu_info *dp_htt_process_tlv(struct dp_pdev *pdev,
}
#endif /* FEATURE_PERPKT_INFO */

#ifdef WLAN_FEATURE_PKT_CAPTURE_V2
static void dp_htt_process_stats_tlv(struct dp_soc *soc,
				     qdf_nbuf_t htt_t2h_msg)
{
	uint32_t length;
	uint8_t tlv_type;
	uint32_t tlv_length, tlv_expected_size;
	uint8_t *tlv_buf;

	uint32_t *msg_word = (uint32_t *) qdf_nbuf_data(htt_t2h_msg);

	length = HTT_T2H_PPDU_STATS_PAYLOAD_SIZE_GET(*msg_word);

	msg_word = msg_word + 4;

	while (length > 0) {
		tlv_buf = (uint8_t *)msg_word;
		tlv_type = HTT_STATS_TLV_TAG_GET(*msg_word);
		tlv_length = HTT_STATS_TLV_LENGTH_GET(*msg_word);

		if (tlv_length == 0)
			break;

		tlv_length += HTT_TLV_HDR_LEN;

		if (tlv_type == HTT_PPDU_STATS_FOR_SMU_TLV) {
			tlv_expected_size = sizeof(htt_ppdu_stats_for_smu_tlv);

			if (tlv_length >= tlv_expected_size)
				dp_wdi_event_handler(
					WDI_EVENT_PKT_CAPTURE_PPDU_STATS,
					soc, msg_word, HTT_INVALID_VDEV,
					WDI_NO_VAL, 0);
		}
		msg_word = (uint32_t *)((uint8_t *)tlv_buf + tlv_length);
		length -= (tlv_length);
	}
}
#endif
/**
 * dp_txrx_ppdu_stats_handler() - Function to process HTT PPDU stats from FW
 * @soc: DP SOC handle
@@ -4140,6 +4179,15 @@ static bool dp_txrx_ppdu_stats_handler(struct dp_soc *soc,

	return free_buf;
}
#elif defined(WLAN_FEATURE_PKT_CAPTURE_V2)
static bool dp_txrx_ppdu_stats_handler(struct dp_soc *soc,
				       uint8_t pdev_id, qdf_nbuf_t htt_t2h_msg)
{
	if (wlan_cfg_get_pkt_capture_mode(soc->wlan_cfg_ctx))
		dp_htt_process_stats_tlv(soc, htt_t2h_msg);

	return true;
}
#else
static bool dp_txrx_ppdu_stats_handler(struct dp_soc *soc,
				       uint8_t pdev_id, qdf_nbuf_t htt_t2h_msg)
+12 −0
Original line number Diff line number Diff line
@@ -1837,8 +1837,20 @@ void dp_peer_stats_update_protocol_cnt(struct cdp_soc_t *soc,

#ifdef QCA_LL_TX_FLOW_CONTROL_V2
void dp_tx_dump_flow_pool_info(struct cdp_soc_t *soc_hdl);

/**
 * dp_tx_dump_flow_pool_info_compact() - dump flow pool info
 * @soc: DP soc context
 *
 * Return: none
 */
void dp_tx_dump_flow_pool_info_compact(struct dp_soc *soc);
int dp_tx_delete_flow_pool(struct dp_soc *soc, struct dp_tx_desc_pool_s *pool,
	bool force);
#else
static inline void dp_tx_dump_flow_pool_info_compact(struct dp_soc *soc)
{
}
#endif /* QCA_LL_TX_FLOW_CONTROL_V2 */

#ifdef QCA_OL_DP_SRNG_LOCK_LESS_ACCESS
+12 −5
Original line number Diff line number Diff line
@@ -7503,7 +7503,7 @@ QDF_STATUS dp_reset_monitor_mode(struct cdp_soc_t *soc_hdl,
 *
 * Return: outstanding tx
 */
static uint32_t dp_get_tx_pending(struct cdp_pdev *pdev_handle)
static int32_t dp_get_tx_pending(struct cdp_pdev *pdev_handle)
{
	struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;

@@ -10085,6 +10085,8 @@ static QDF_STATUS dp_txrx_dump_stats(struct cdp_soc_t *psoc, uint16_t value,
	case CDP_DUMP_TX_FLOW_POOL_INFO:
		if (level == QDF_STATS_VERBOSITY_LEVEL_HIGH)
			cdp_dump_flow_pool_info((struct cdp_soc_t *)soc);
		else
			dp_tx_dump_flow_pool_info_compact(soc);
		break;

	case CDP_DP_NAPI_STATS:
@@ -11559,6 +11561,7 @@ static QDF_STATUS dp_runtime_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
	struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
	struct dp_pdev *pdev;
	uint8_t i;
	int32_t tx_pending;

	pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
	if (!pdev) {
@@ -11567,9 +11570,11 @@ static QDF_STATUS dp_runtime_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
	}

	/* Abort if there are any pending TX packets */
	if (dp_get_tx_pending(dp_pdev_to_cdp_pdev(pdev)) > 0) {
	tx_pending = dp_get_tx_pending(dp_pdev_to_cdp_pdev(pdev));
	if (tx_pending) {
		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
			  FL("Abort suspend due to pending TX packets"));
			  FL("Abort suspend due to pending TX packets %d"),
			  tx_pending);

		/* perform a force flush if tx is pending */
		for (i = 0; i < soc->num_tcl_data_rings; i++) {
@@ -12042,6 +12047,7 @@ static QDF_STATUS dp_bus_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
	struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
	int timeout = SUSPEND_DRAIN_WAIT;
	int drain_wait_delay = 50; /* 50 ms */
	int32_t tx_pending;

	if (qdf_unlikely(!pdev)) {
		dp_err("pdev is NULL");
@@ -12049,10 +12055,11 @@ static QDF_STATUS dp_bus_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
	}

	/* Abort if there are any pending TX packets */
	while (dp_get_tx_pending((struct cdp_pdev *)pdev) > 0) {
	while ((tx_pending = dp_get_tx_pending((struct cdp_pdev *)pdev))) {
		qdf_sleep(drain_wait_delay);
		if (timeout <= 0) {
			dp_err("TX frames are pending, abort suspend");
			dp_info("TX frames are pending %d, abort suspend",
				tx_pending);
			return QDF_STATUS_E_TIMEOUT;
		}
		timeout = timeout - drain_wait_delay;
+7 −24
Original line number Diff line number Diff line
@@ -2250,6 +2250,7 @@ void dp_rx_deliver_to_pkt_capture(struct dp_soc *soc, struct dp_pdev *pdev,
				  uint16_t peer_id, uint32_t is_offload,
				  qdf_nbuf_t netbuf)
{
	if (wlan_cfg_get_pkt_capture_mode(soc->wlan_cfg_ctx))
		dp_wdi_event_handler(WDI_EVENT_PKT_CAPTURE_RX_DATA, soc, netbuf,
				     peer_id, is_offload, pdev->pdev_id);
}
@@ -2257,28 +2258,10 @@ void dp_rx_deliver_to_pkt_capture(struct dp_soc *soc, struct dp_pdev *pdev,
void dp_rx_deliver_to_pkt_capture_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf,
					  uint32_t is_offload)
{
	uint16_t msdu_len = 0;
	uint16_t peer_id, vdev_id;
	uint32_t pkt_len = 0;
	uint8_t *rx_tlv_hdr;
	struct hal_rx_msdu_metadata msdu_metadata;

	peer_id = QDF_NBUF_CB_RX_PEER_ID(nbuf);
	vdev_id = QDF_NBUF_CB_RX_VDEV_ID(nbuf);
	rx_tlv_hdr = qdf_nbuf_data(nbuf);
	hal_rx_msdu_metadata_get(soc->hal_soc, rx_tlv_hdr, &msdu_metadata);
	msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf);
	pkt_len = msdu_len + msdu_metadata.l3_hdr_pad +
		  RX_PKT_TLVS_LEN;

	qdf_nbuf_set_pktlen(nbuf, pkt_len);
	dp_rx_skip_tlvs(nbuf, msdu_metadata.l3_hdr_pad);

	dp_wdi_event_handler(WDI_EVENT_PKT_CAPTURE_RX_DATA, soc, nbuf,
			     HTT_INVALID_VDEV, is_offload, 0);

	qdf_nbuf_push_head(nbuf, msdu_metadata.l3_hdr_pad +
			   RX_PKT_TLVS_LEN);
	if (wlan_cfg_get_pkt_capture_mode(soc->wlan_cfg_ctx))
		dp_wdi_event_handler(WDI_EVENT_PKT_CAPTURE_RX_DATA_NO_PEER,
				     soc, nbuf, HTT_INVALID_VDEV,
				     is_offload, 0);
}

#endif
Loading