ath9k_htc: Fix max A-MPDU size handling
authorSujith Manoharan <Sujith.Manoharan@atheros.com>
Wed, 20 Apr 2011 05:31:00 +0000 (11:01 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 25 Apr 2011 18:50:14 +0000 (14:50 -0400)
Set the maximum ampdu size of a station correctly
in the target by using the ampdu_factor.

Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/htc_drv_main.c

index a6402681d58d09771a0fe9c4fa9fed37287e5cf1..fbc238a0b203d5bd420bada9f08d2682a4822703 100644 (file)
@@ -467,6 +467,7 @@ static int ath9k_htc_add_station(struct ath9k_htc_priv *priv,
        struct ath9k_htc_sta *ista;
        int ret, sta_idx;
        u8 cmd_rsp;
+       u16 maxampdu;
 
        if (priv->nstations >= ATH9K_HTC_MAX_STA)
                return -ENOBUFS;
@@ -490,7 +491,15 @@ static int ath9k_htc_add_station(struct ath9k_htc_priv *priv,
 
        tsta.sta_index = sta_idx;
        tsta.vif_index = avp->index;
-       tsta.maxampdu = cpu_to_be16(0xffff);
+
+       if (!sta) {
+               tsta.maxampdu = cpu_to_be16(0xffff);
+       } else {
+               maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
+                                sta->ht_cap.ampdu_factor);
+               tsta.maxampdu = cpu_to_be16(maxampdu);
+       }
+
        if (sta && sta->ht_cap.ht_supported)
                tsta.flags = cpu_to_be16(ATH_HTC_STA_HT);