mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 16:41:58 +00:00
carl9170: common error path for bad frames
This patch replaces several identical frame drop paths with a single shared rx frame error handler. Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
12eec2cc0d
commit
c8a16c68ef
@ -598,18 +598,14 @@ static void carl9170_handle_mpdu(struct ar9170 *ar, u8 *buf, int len)
|
||||
if (!IS_STARTED(ar))
|
||||
return;
|
||||
|
||||
if (unlikely(len < sizeof(*mac))) {
|
||||
ar->rx_dropped++;
|
||||
return;
|
||||
}
|
||||
if (unlikely(len < sizeof(*mac)))
|
||||
goto drop;
|
||||
|
||||
mpdu_len = len - sizeof(*mac);
|
||||
|
||||
mac = (void *)(buf + mpdu_len);
|
||||
if (unlikely(mac->error & AR9170_RX_ERROR_FATAL)) {
|
||||
ar->rx_dropped++;
|
||||
return;
|
||||
}
|
||||
if (unlikely(mac->error & AR9170_RX_ERROR_FATAL))
|
||||
goto drop;
|
||||
|
||||
switch (mac->status & AR9170_RX_STATUS_MPDU) {
|
||||
case AR9170_RX_STATUS_MPDU_FIRST:
|
||||
@ -638,8 +634,7 @@ static void carl9170_handle_mpdu(struct ar9170 *ar, u8 *buf, int len)
|
||||
"is clipped.\n");
|
||||
}
|
||||
|
||||
ar->rx_dropped++;
|
||||
return;
|
||||
goto drop;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -659,8 +654,7 @@ static void carl9170_handle_mpdu(struct ar9170 *ar, u8 *buf, int len)
|
||||
"is clipped.\n");
|
||||
}
|
||||
|
||||
ar->rx_dropped++;
|
||||
return;
|
||||
goto drop;
|
||||
}
|
||||
|
||||
case AR9170_RX_STATUS_MPDU_MIDDLE:
|
||||
@ -672,8 +666,7 @@ static void carl9170_handle_mpdu(struct ar9170 *ar, u8 *buf, int len)
|
||||
wiphy_err(ar->hw->wiphy, "rx stream does not start "
|
||||
"with a first_mpdu frame tag.\n");
|
||||
|
||||
ar->rx_dropped++;
|
||||
return;
|
||||
goto drop;
|
||||
}
|
||||
|
||||
head = &ar->rx_plcp;
|
||||
@ -696,16 +689,12 @@ static void carl9170_handle_mpdu(struct ar9170 *ar, u8 *buf, int len)
|
||||
}
|
||||
|
||||
/* FC + DU + RA + FCS */
|
||||
if (unlikely(mpdu_len < (2 + 2 + 6 + FCS_LEN))) {
|
||||
ar->rx_dropped++;
|
||||
return;
|
||||
}
|
||||
if (unlikely(mpdu_len < (2 + 2 + ETH_ALEN + FCS_LEN)))
|
||||
goto drop;
|
||||
|
||||
memset(&status, 0, sizeof(status));
|
||||
if (unlikely(carl9170_rx_mac_status(ar, head, mac, &status))) {
|
||||
ar->rx_dropped++;
|
||||
return;
|
||||
}
|
||||
if (unlikely(carl9170_rx_mac_status(ar, head, mac, &status)))
|
||||
goto drop;
|
||||
|
||||
if (phy)
|
||||
carl9170_rx_phy_status(ar, phy, &status);
|
||||
@ -713,12 +702,15 @@ static void carl9170_handle_mpdu(struct ar9170 *ar, u8 *buf, int len)
|
||||
carl9170_ps_beacon(ar, buf, mpdu_len);
|
||||
|
||||
skb = carl9170_rx_copy_data(buf, mpdu_len);
|
||||
if (likely(skb)) {
|
||||
memcpy(IEEE80211_SKB_RXCB(skb), &status, sizeof(status));
|
||||
ieee80211_rx(ar->hw, skb);
|
||||
} else {
|
||||
ar->rx_dropped++;
|
||||
}
|
||||
if (!skb)
|
||||
goto drop;
|
||||
|
||||
memcpy(IEEE80211_SKB_RXCB(skb), &status, sizeof(status));
|
||||
ieee80211_rx(ar->hw, skb);
|
||||
return;
|
||||
|
||||
drop:
|
||||
ar->rx_dropped++;
|
||||
}
|
||||
|
||||
static void carl9170_rx_untie_cmds(struct ar9170 *ar, const u8 *respbuf,
|
||||
|
Loading…
Reference in New Issue
Block a user