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

Commit a5b4bc9b authored by Jinwei Chen's avatar Jinwei Chen Committed by nshrivas
Browse files

qcacmn: add exception frame flag for non-regular RX delivery

  FISA RX aggregation is not necessary for non-regular RX delivery
as it requires extra FISA flush and also may impact regular
dp_rx_process() RX FISA aggregation.
  Add exception frame flag for non-regular RX delivery, so that
FISA path can identify this frame and bypass FISA RX.

Change-Id: Ic06cb72b516221754b124a673ab6c4f392947897
CRs-Fixed: 2680255
parent c87c2f33
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1776,7 +1776,10 @@ void dp_rx_deliver_to_stack_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf)
			   l2_hdr_offset);

	if (dp_rx_is_special_frame(nbuf, frame_mask)) {
		vdev->osif_rx(vdev->osif_vdev, nbuf);
		qdf_nbuf_set_exc_frame(nbuf, 1);
		if (QDF_STATUS_SUCCESS !=
		    vdev->osif_rx(vdev->osif_vdev, nbuf))
			goto deliver_fail;
		DP_STATS_INC(soc, rx.err.pkt_delivered_no_peer, 1);
		return;
	}
@@ -2879,6 +2882,7 @@ bool dp_rx_deliver_special_frame(struct dp_soc *soc, struct dp_peer *peer,
	qdf_nbuf_pull_head(nbuf, skip_len);

	if (dp_rx_is_special_frame(nbuf, frame_mask)) {
		qdf_nbuf_set_exc_frame(nbuf, 1);
		dp_rx_deliver_to_stack(soc, peer->vdev, peer,
				       nbuf, NULL);
		return true;
+27 −33
Original line number Diff line number Diff line
@@ -1047,7 +1047,6 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, qdf_nbuf_t nbuf,
		qdf_nbuf_set_next(nbuf, NULL);
		dp_rx_deliver_raw(vdev, nbuf, peer);
	} else {
		if (vdev->osif_rx) {
		qdf_nbuf_set_next(nbuf, NULL);
		DP_STATS_INC_PKT(peer, rx.to_stack, 1,
				 qdf_nbuf_len(nbuf));
@@ -1069,22 +1068,16 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, qdf_nbuf_t nbuf,
				 (vdev->rx_decap_type ==
				  htt_cmn_pkt_type_ethernet))) {
			eh = (qdf_ether_header_t *)qdf_nbuf_data(nbuf);

			DP_STATS_INC_PKT(peer, rx.multicast, 1,
					 qdf_nbuf_len(nbuf));
				if (QDF_IS_ADDR_BROADCAST(eh->ether_dhost)) {

			if (QDF_IS_ADDR_BROADCAST(eh->ether_dhost))
				DP_STATS_INC_PKT(peer, rx.bcast, 1,
						 qdf_nbuf_len(nbuf));
		}
			}

			vdev->osif_rx(vdev->osif_vdev, nbuf);

		} else {
			dp_err_rl("INVALID osif_rx. vdev %pK", vdev);
			DP_STATS_INC(soc, rx.err.invalid_vdev, 1);
			goto drop_nbuf;
		}
		qdf_nbuf_set_exc_frame(nbuf, 1);
		dp_rx_deliver_to_stack(soc, vdev, peer, nbuf, NULL);
	}
	return QDF_STATUS_SUCCESS;

@@ -1253,6 +1246,7 @@ dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
		/* 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(peer, rx.to_stack.num, 1);
		qdf_nbuf_set_exc_frame(nbuf, 1);
		dp_rx_deliver_to_stack(soc, vdev, peer, nbuf, NULL);
	}