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

Commit 748d4510 authored by Luis R. Rodriguez's avatar Luis R. Rodriguez Committed by John W. Linville
Browse files

ath9k_common: clarify and correct jumbogram processing



Jumbograms are frames put together linked together through
more than one descriptor. For example ath9k_htc will use this
to send from the target a large frame split up into 2 or more
segments. The driver then would be in charge of putting the
frame back together.

When jumbograms are constructed the rx_stats->rs_more will
bet set and rx_stats->rs_status will not have any valid content
as the actual status will only be avialable at the end of
the chained descriptors.

Signed-off-by: default avatarLuis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 165864d0
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -53,16 +53,17 @@ static bool ath9k_rx_accept(struct ath_common *common,
	if (rx_stats->rs_datalen > common->rx_bufsize)
		return false;

	if (rx_stats->rs_more) {
	/*
		 * Frame spans multiple descriptors; this cannot happen yet
		 * as we don't support jumbograms. If not in monitor mode,
		 * discard the frame. Enable this if you want to see
		 * error frames in Monitor mode.
	 * rs_more indicates chained descriptors which can be used
	 * to link buffers together for a sort of scatter-gather
	 * operation.
	 *
	 * The rx_stats->rs_status will not be set until the end of the
	 * chained descriptors so it can be ignored if rs_more is set. The
	 * rs_more will be false at the last element of the chained
	 * descriptors.
	 */
		if (ah->opmode != NL80211_IFTYPE_MONITOR)
			return false;
	} else if (rx_stats->rs_status != 0) {
	if (!rx_stats->rs_more && rx_stats->rs_status != 0) {
		if (rx_stats->rs_status & ATH9K_RXERR_CRC)
			rxs->flag |= RX_FLAG_FAILED_FCS_CRC;
		if (rx_stats->rs_status & ATH9K_RXERR_PHY)