diff options
author | Sujith <Sujith.Manoharan@atheros.com> | 2010-03-29 23:18:27 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-03-31 14:46:41 -0400 |
commit | 32fbccafed7e935432b601f0453c2b702a385a25 (patch) | |
tree | 212c7ba1e0fd15dcb2dabe5367c7029525c763b1 /drivers | |
parent | 29bffa96e9bef4fb84740a49e93d5bd6ca126bac (diff) |
ath9k_htc: Fix TKIP encryption
Set IEEE80211_HW_RX_INCLUDES_FCS to indicate that
the FCS is present in RX frames. Also, remove a redundant
assignment of skb length and include the FCS_LEN
when checking padding.
Fixing this issue makes TKIP work.
Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_init.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 3 |
2 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c index d8779b907131..90cfd9066abf 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c | |||
@@ -513,7 +513,8 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv, | |||
513 | hw->flags = IEEE80211_HW_SIGNAL_DBM | | 513 | hw->flags = IEEE80211_HW_SIGNAL_DBM | |
514 | IEEE80211_HW_AMPDU_AGGREGATION | | 514 | IEEE80211_HW_AMPDU_AGGREGATION | |
515 | IEEE80211_HW_SPECTRUM_MGMT | | 515 | IEEE80211_HW_SPECTRUM_MGMT | |
516 | IEEE80211_HW_HAS_RATE_CONTROL; | 516 | IEEE80211_HW_HAS_RATE_CONTROL | |
517 | IEEE80211_HW_RX_INCLUDES_FCS; | ||
517 | 518 | ||
518 | hw->wiphy->interface_modes = | 519 | hw->wiphy->interface_modes = |
519 | BIT(NL80211_IFTYPE_STATION) | | 520 | BIT(NL80211_IFTYPE_STATION) | |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c index befe5740e2b8..f1e3d830d7de 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | |||
@@ -450,7 +450,7 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv, | |||
450 | padpos = ath9k_cmn_padpos(fc); | 450 | padpos = ath9k_cmn_padpos(fc); |
451 | 451 | ||
452 | padsize = padpos & 3; | 452 | padsize = padpos & 3; |
453 | if (padsize && skb->len >= padpos+padsize) { | 453 | if (padsize && skb->len >= padpos+padsize+FCS_LEN) { |
454 | memmove(skb->data + padsize, skb->data, padpos); | 454 | memmove(skb->data + padsize, skb->data, padpos); |
455 | skb_pull(skb, padsize); | 455 | skb_pull(skb, padsize); |
456 | } | 456 | } |
@@ -646,7 +646,6 @@ void ath9k_htc_rxep(void *drv_priv, struct sk_buff *skb, | |||
646 | spin_lock(&priv->rx.rxbuflock); | 646 | spin_lock(&priv->rx.rxbuflock); |
647 | memcpy(&rxbuf->rxstatus, rxstatus, HTC_RX_FRAME_HEADER_SIZE); | 647 | memcpy(&rxbuf->rxstatus, rxstatus, HTC_RX_FRAME_HEADER_SIZE); |
648 | skb_pull(skb, HTC_RX_FRAME_HEADER_SIZE); | 648 | skb_pull(skb, HTC_RX_FRAME_HEADER_SIZE); |
649 | skb->len = rxstatus->rs_datalen; | ||
650 | rxbuf->skb = skb; | 649 | rxbuf->skb = skb; |
651 | rxbuf->in_process = true; | 650 | rxbuf->in_process = true; |
652 | spin_unlock(&priv->rx.rxbuflock); | 651 | spin_unlock(&priv->rx.rxbuflock); |