diff options
author | Sujith <Sujith.Manoharan@atheros.com> | 2008-10-29 00:49:01 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-11-10 15:17:32 -0500 |
commit | dca3edb88ef567671886a85c5e40d491ccecf934 (patch) | |
tree | 14a8a876decc06313ba548080dbb9c2740b9358f /drivers/net/wireless/ath9k/main.c | |
parent | 7f959032bbee5eedaf4c606d11f0c5d41498644e (diff) |
ath9k: Remove internal RX A-MPDU processing
mac80211 has RX A-MPDU reordering support.
Use that and remove redundant RX processing within the driver.
Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath9k/main.c')
-rw-r--r-- | drivers/net/wireless/ath9k/main.c | 36 |
1 files changed, 2 insertions, 34 deletions
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index e177de47e3e0..65a532e08ecd 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c | |||
@@ -444,12 +444,10 @@ int _ath_rx_indicate(struct ath_softc *sc, | |||
444 | u16 keyix) | 444 | u16 keyix) |
445 | { | 445 | { |
446 | struct ieee80211_hw *hw = sc->hw; | 446 | struct ieee80211_hw *hw = sc->hw; |
447 | struct ath_node *an = NULL; | ||
448 | struct ieee80211_rx_status rx_status; | 447 | struct ieee80211_rx_status rx_status; |
449 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; | 448 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; |
450 | int hdrlen = ieee80211_get_hdrlen_from_skb(skb); | 449 | int hdrlen = ieee80211_get_hdrlen_from_skb(skb); |
451 | int padsize; | 450 | int padsize; |
452 | enum ATH_RX_TYPE st; | ||
453 | 451 | ||
454 | /* see if any padding is done by the hw and remove it */ | 452 | /* see if any padding is done by the hw and remove it */ |
455 | if (hdrlen & 3) { | 453 | if (hdrlen & 3) { |
@@ -473,28 +471,6 @@ int _ath_rx_indicate(struct ath_softc *sc, | |||
473 | rx_status.flag |= RX_FLAG_DECRYPTED; | 471 | rx_status.flag |= RX_FLAG_DECRYPTED; |
474 | } | 472 | } |
475 | 473 | ||
476 | if (an) { | ||
477 | ath_rx_input(sc, an, | ||
478 | skb, status, &st); | ||
479 | } | ||
480 | if (!an || (st != ATH_RX_CONSUMED)) | ||
481 | __ieee80211_rx(hw, skb, &rx_status); | ||
482 | |||
483 | return 0; | ||
484 | } | ||
485 | |||
486 | int ath_rx_subframe(struct ath_node *an, struct sk_buff *skb, | ||
487 | struct ath_recv_status *status) | ||
488 | { | ||
489 | struct ath_softc *sc = an->an_sc; | ||
490 | struct ieee80211_hw *hw = sc->hw; | ||
491 | struct ieee80211_rx_status rx_status; | ||
492 | |||
493 | /* Prepare rx status */ | ||
494 | ath9k_rx_prepare(sc, skb, status, &rx_status); | ||
495 | if (!(status->flags & ATH_RX_DECRYPT_ERROR)) | ||
496 | rx_status.flag |= RX_FLAG_DECRYPTED; | ||
497 | |||
498 | __ieee80211_rx(hw, skb, &rx_status); | 474 | __ieee80211_rx(hw, skb, &rx_status); |
499 | 475 | ||
500 | return 0; | 476 | return 0; |
@@ -1483,18 +1459,10 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw, | |||
1483 | 1459 | ||
1484 | switch (action) { | 1460 | switch (action) { |
1485 | case IEEE80211_AMPDU_RX_START: | 1461 | case IEEE80211_AMPDU_RX_START: |
1486 | ret = ath_rx_aggr_start(sc, sta, tid, ssn); | 1462 | if (!(sc->sc_flags & SC_OP_RXAGGR)) |
1487 | if (ret < 0) | 1463 | ret = -ENOTSUPP; |
1488 | DPRINTF(sc, ATH_DBG_FATAL, | ||
1489 | "%s: Unable to start RX aggregation\n", | ||
1490 | __func__); | ||
1491 | break; | 1464 | break; |
1492 | case IEEE80211_AMPDU_RX_STOP: | 1465 | case IEEE80211_AMPDU_RX_STOP: |
1493 | ret = ath_rx_aggr_stop(sc, sta, tid); | ||
1494 | if (ret < 0) | ||
1495 | DPRINTF(sc, ATH_DBG_FATAL, | ||
1496 | "%s: Unable to stop RX aggregation\n", | ||
1497 | __func__); | ||
1498 | break; | 1466 | break; |
1499 | case IEEE80211_AMPDU_TX_START: | 1467 | case IEEE80211_AMPDU_TX_START: |
1500 | ret = ath_tx_aggr_start(sc, sta, tid, ssn); | 1468 | ret = ath_tx_aggr_start(sc, sta, tid, ssn); |