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

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

Merge 8c4a382b on remote branch

Change-Id: Idfca7c184c4ccc600eeb4e86998436284253ddc9
parents d12f9720 8c4a382b
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
/*
 * Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
 * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
 * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
@@ -1138,8 +1139,6 @@ enum cdp_pdev_param_type {
 *
 * @cdp_psoc_param_en_rate_stats: set rate stats enable/disable
 * @cdp_psoc_param_en_nss_cfg: set nss cfg
 *
 * @cdp_enable_tx_checksum: Flag to specify if HW Tx checksum enabled
 */
typedef union cdp_config_param_t {
	/* peer params */
@@ -1209,7 +1208,6 @@ typedef union cdp_config_param_t {
	int cdp_psoc_param_preferred_hw_mode;
	bool cdp_psoc_param_pext_stats;

	bool cdp_enable_tx_checksum;
} cdp_config_param_type;

/**
@@ -1307,7 +1305,6 @@ enum cdp_vdev_param_type {
#endif
	CDP_SAFEMODE,
	CDP_DROP_UNENC,
	CDP_ENABLE_CSUM,
	CDP_ENABLE_IGMP_MCAST_EN,
	CDP_ENABLE_HLOS_TID_OVERRIDE,
#ifdef QCA_SUPPORT_WDS_EXTENDED
+2 −0
Original line number Diff line number Diff line
@@ -914,6 +914,7 @@ struct protocol_trace_count {
 * @stbc: Packets in STBC
 * @ldpc: Packets in LDPC
 * @retries: Packet retries
 * @retries_mpdu: mpdu number of successfully transmitted after retries
 * @non_amsdu_cnt: Number of MSDUs with no MSDU level aggregation
 * @amsdu_cnt: Number of MSDUs part of AMSDU
 * @tx_rate: Tx Rate
@@ -995,6 +996,7 @@ struct cdp_tx_stats {
	uint32_t stbc;
	uint32_t ldpc;
	uint32_t retries;
	uint32_t retries_mpdu;
	uint32_t non_amsdu_cnt;
	uint32_t amsdu_cnt;
	uint32_t tx_rate;
+1 −0
Original line number Diff line number Diff line
@@ -853,6 +853,7 @@ static inline void dp_update_vdev_stats(struct dp_soc *soc,
	tgtobj->tx.ldpc += srcobj->stats.tx.ldpc;
	tgtobj->tx.pream_punct_cnt += srcobj->stats.tx.pream_punct_cnt;
	tgtobj->tx.retries += srcobj->stats.tx.retries;
	tgtobj->tx.retries_mpdu += srcobj->stats.tx.retries_mpdu;
	tgtobj->tx.non_amsdu_cnt += srcobj->stats.tx.non_amsdu_cnt;
	tgtobj->tx.amsdu_cnt += srcobj->stats.tx.amsdu_cnt;
	tgtobj->tx.non_ampdu_cnt += srcobj->stats.tx.non_ampdu_cnt;
+0 −5
Original line number Diff line number Diff line
@@ -9324,11 +9324,6 @@ dp_set_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
				      val.cdp_vdev_param_mesh_mode);
		break;
#endif
	case CDP_ENABLE_CSUM:
		dp_info("vdev_id %d enable Checksum %d", vdev_id,
			val.cdp_enable_tx_checksum);
		vdev->csum_enabled = val.cdp_enable_tx_checksum;
		break;
	case CDP_ENABLE_HLOS_TID_OVERRIDE:
		dp_info("vdev_id %d enable hlod tid override %d", vdev_id,
			val.cdp_vdev_param_hlos_tid_override);
+142 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
 * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
 * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
@@ -1624,6 +1625,124 @@ void dp_rx_process_mic_error(struct dp_soc *soc, qdf_nbuf_t nbuf,
	return;
}

/**
 * dp_rx_err_route_hdl() - Function to send EAPOL frames to stack
 *                            Free any other packet which comes in
 *                            this path.
 *
 * @soc: core DP main context
 * @nbuf: buffer pointer
 * @peer: peer handle
 * @rx_tlv_hdr: start of rx tlv header
 * @err_src: rxdma/reo
 *
 * This function indicates EAPOL frame received in wbm error ring to stack.
 * Any other frame should be dropped.
 *
 * Return: SUCCESS if delivered to stack
 */
static void
dp_rx_err_route_hdl(struct dp_soc *soc, qdf_nbuf_t nbuf,
		    struct dp_peer *peer, uint8_t *rx_tlv_hdr,
		    enum hal_rx_wbm_error_source err_src)
{
	uint32_t pkt_len;
	uint16_t msdu_len;
	struct dp_vdev *vdev;
	struct hal_rx_msdu_metadata msdu_metadata;
	bool is_eapol;

	hal_rx_msdu_metadata_get(soc->hal_soc, rx_tlv_hdr, &msdu_metadata);
	msdu_len = hal_rx_msdu_start_msdu_len_get(rx_tlv_hdr);
	pkt_len = msdu_len + msdu_metadata.l3_hdr_pad + RX_PKT_TLVS_LEN;

	if (qdf_likely(!qdf_nbuf_is_frag(nbuf))) {
		if (dp_rx_check_pkt_len(soc, pkt_len))
			goto drop_nbuf;

		/* Set length in nbuf */
		qdf_nbuf_set_pktlen(
			nbuf, qdf_min(pkt_len, (uint32_t)RX_DATA_BUFFER_SIZE));
		qdf_assert_always(nbuf->data == rx_tlv_hdr);
	}

	/*
	 * Check if DMA completed -- msdu_done is the last bit
	 * to be written
	 */
	if (!hal_rx_attn_msdu_done_get(rx_tlv_hdr)) {
		dp_err_rl("MSDU DONE failure");
		hal_rx_dump_pkt_tlvs(soc->hal_soc, rx_tlv_hdr,
				     QDF_TRACE_LEVEL_INFO);
		qdf_assert(0);
	}

	if (!peer)
		goto drop_nbuf;

	vdev = peer->vdev;
	if (!vdev) {
		dp_err_rl("Null vdev!");
		DP_STATS_INC(soc, rx.err.invalid_vdev, 1);
		goto drop_nbuf;
	}

	/*
	 * Advance the packet start pointer by total size of
	 * pre-header TLV's
	 */
	if (qdf_nbuf_is_frag(nbuf))
		qdf_nbuf_pull_head(nbuf, RX_PKT_TLVS_LEN);
	else
		qdf_nbuf_pull_head(nbuf, (msdu_metadata.l3_hdr_pad +
					  RX_PKT_TLVS_LEN));

	dp_vdev_peer_stats_update_protocol_cnt(vdev, nbuf, NULL, 0, 1);

	/*
	 * Indicate EAPOL frame to stack only when vap mac address
	 * matches the destination address.
	 */
	is_eapol = qdf_nbuf_is_ipv4_eapol_pkt(nbuf);
	if (is_eapol || qdf_nbuf_is_ipv4_wapi_pkt(nbuf)) {
		qdf_ether_header_t *eh =
			(qdf_ether_header_t *)qdf_nbuf_data(nbuf);
		if (qdf_mem_cmp(eh->ether_dhost, &vdev->mac_addr.raw[0],
				QDF_MAC_ADDR_SIZE) == 0) {
			DP_STATS_INC_PKT(vdev, rx.to_stack, 1,
					 qdf_nbuf_len(nbuf));

			/*
			 * Update the protocol tag in SKB based on
			 * CCE metadata.
			 */
			dp_rx_update_protocol_tag(soc, vdev, nbuf, rx_tlv_hdr,
						  EXCEPTION_DEST_RING_ID,
						  true, true);
			/* Update the flow tag in SKB based on FSE metadata */
			dp_rx_update_flow_tag(soc, vdev, nbuf, rx_tlv_hdr,
					      true);
			DP_STATS_INC_PKT(peer, rx.to_stack, 1,
					 qdf_nbuf_len(nbuf));
			qdf_nbuf_set_exc_frame(nbuf, 1);
			qdf_nbuf_set_next(nbuf, NULL);

			dp_rx_deliver_to_stack(soc, vdev, peer, nbuf, NULL);

			return;
		}
	}

drop_nbuf:

	DP_STATS_INCC(soc, rx.reo2rel_route_drop, 1,
		      err_src == HAL_RX_WBM_ERR_SRC_REO);
	DP_STATS_INCC(soc, rx.rxdma2rel_route_drop, 1,
		      err_src == HAL_RX_WBM_ERR_SRC_RXDMA);

	qdf_nbuf_free(nbuf);
}

#ifdef DP_RX_DESC_COOKIE_INVALIDATE
/**
 * dp_rx_link_cookie_check() - Validate link desc cookie
@@ -2466,6 +2585,17 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
						   wbm_err_info.reo_err_code);
					qdf_nbuf_free(nbuf);
				}
			} else if (wbm_err_info.reo_psh_rsn
					== HAL_RX_WBM_REO_PSH_RSN_ROUTE) {
				dp_rx_err_route_hdl(soc, nbuf, peer,
						    rx_tlv_hdr,
						    HAL_RX_WBM_ERR_SRC_REO);
			} else {
				/* should not enter here */
				dp_alert("invalid reo push reason %u",
					 wbm_err_info.reo_psh_rsn);
				qdf_nbuf_free(nbuf);
				qdf_assert_always(0);
			}
		} else if (wbm_err_info.wbm_err_src ==
					HAL_RX_WBM_ERR_SRC_RXDMA) {
@@ -2530,6 +2660,17 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
					dp_err_rl("RXDMA error %d",
						  wbm_err_info.rxdma_err_code);
				}
			} else if (wbm_err_info.rxdma_psh_rsn
					== HAL_RX_WBM_RXDMA_PSH_RSN_ROUTE) {
				dp_rx_err_route_hdl(soc, nbuf, peer,
						    rx_tlv_hdr,
						    HAL_RX_WBM_ERR_SRC_RXDMA);
			} else {
				/* should not enter here */
				dp_alert("invalid rxdma push reason %u",
					 wbm_err_info.rxdma_psh_rsn);
				qdf_nbuf_free(nbuf);
				qdf_assert_always(0);
			}
		} else {
			/* Should not come here */
Loading