aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath9k/main.c
diff options
context:
space:
mode:
authorSujith <Sujith.Manoharan@atheros.com>2008-10-29 00:49:01 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-11-10 15:17:32 -0500
commitdca3edb88ef567671886a85c5e40d491ccecf934 (patch)
tree14a8a876decc06313ba548080dbb9c2740b9358f /drivers/net/wireless/ath9k/main.c
parent7f959032bbee5eedaf4c606d11f0c5d41498644e (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.c36
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
486int 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);