wil6210: support max aggregation window size 64
authorMaya Erez <merez@codeaurora.org>
Tue, 24 Jul 2018 07:44:33 +0000 (10:44 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 31 Jul 2018 08:01:08 +0000 (11:01 +0300)
FW can support BACK window size 64 for performance improvements.
A new FW capability is added for notifying the host on the increased
max BACK win size support.
Defining WIL_MAX_AGG_WSIZE_64 and WIL_MAX_AMPDU_SIZE_128 to be used
in this case.

Signed-off-by: Maya Erez <merez@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/wil6210/main.c
drivers/net/wireless/ath/wil6210/rx_reorder.c
drivers/net/wireless/ath/wil6210/wil6210.h
drivers/net/wireless/ath/wil6210/wmi.h

index 9495c6c..a949e91 100644 (file)
@@ -1141,6 +1141,15 @@ void wil_refresh_fw_capabilities(struct wil6210_priv *wil)
 
                wil->platform_ops.set_features(wil->platform_handle, features);
        }
+
+       if (test_bit(WMI_FW_CAPABILITY_BACK_WIN_SIZE_64,
+                    wil->fw_capabilities)) {
+               wil->max_agg_wsize = WIL_MAX_AGG_WSIZE_64;
+               wil->max_ampdu_size = WIL_MAX_AMPDU_SIZE_128;
+       } else {
+               wil->max_agg_wsize = WIL_MAX_AGG_WSIZE;
+               wil->max_ampdu_size = WIL_MAX_AMPDU_SIZE;
+       }
 }
 
 void wil_mbox_ring_le2cpus(struct wil6210_mbox_ring *r)
index ba4e93f..b608aa1 100644 (file)
@@ -297,7 +297,7 @@ void wil_tid_ampdu_rx_free(struct wil6210_priv *wil,
 /* ADDBA processing */
 static u16 wil_agg_size(struct wil6210_priv *wil, u16 req_agg_wsize)
 {
-       u16 max_agg_size = min_t(u16, WIL_MAX_AGG_WSIZE, WIL_MAX_AMPDU_SIZE /
+       u16 max_agg_size = min_t(u16, wil->max_agg_wsize, wil->max_ampdu_size /
                                 (mtu_max + WIL_MAX_MPDU_OVERHEAD));
 
        if (!req_agg_wsize)
@@ -364,11 +364,11 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock)
        if (status == WLAN_STATUS_SUCCESS) {
                if (req_agg_wsize == 0) {
                        wil_dbg_misc(wil, "Suggest BACK wsize %d\n",
-                                    WIL_MAX_AGG_WSIZE);
-                       agg_wsize = WIL_MAX_AGG_WSIZE;
+                                    wil->max_agg_wsize);
+                       agg_wsize = wil->max_agg_wsize;
                } else {
                        agg_wsize = min_t(u16,
-                                         WIL_MAX_AGG_WSIZE, req_agg_wsize);
+                                         wil->max_agg_wsize, req_agg_wsize);
                }
        }
 
index e87c889..b5d8ad2 100644 (file)
@@ -90,6 +90,8 @@ static inline u32 WIL_GET_BITS(u32 x, int b0, int b1)
 #define WIL6210_NAPI_BUDGET    (16) /* arbitrary */
 #define WIL_MAX_AMPDU_SIZE     (64 * 1024) /* FW/HW limit */
 #define WIL_MAX_AGG_WSIZE      (32) /* FW/HW limit */
+#define WIL_MAX_AMPDU_SIZE_128 (128 * 1024) /* FW/HW limit */
+#define WIL_MAX_AGG_WSIZE_64   (64) /* FW/HW limit */
 #define WIL6210_MAX_STATUS_RINGS       (8)
 
 /* Hardware offload block adds the following:
@@ -1013,6 +1015,9 @@ struct wil6210_priv {
        u8 boot_config;
 
        struct wil_fw_stats_global fw_stats_global;
+
+       u32 max_agg_wsize;
+       u32 max_ampdu_size;
 };
 
 #define wil_to_wiphy(i) (i->wiphy)
index 00cf3c4..719f310 100644 (file)
@@ -99,6 +99,7 @@ enum wmi_fw_capability {
        WMI_FW_CAPABILITY_AP_SME_OFFLOAD_NONE           = 19,
        WMI_FW_CAPABILITY_MULTI_VIFS                    = 20,
        WMI_FW_CAPABILITY_FT_ROAMING                    = 21,
+       WMI_FW_CAPABILITY_BACK_WIN_SIZE_64              = 22,
        WMI_FW_CAPABILITY_AMSDU                         = 23,
        WMI_FW_CAPABILITY_MAX,
 };