wil6210: enlarge TX/RX buffer length
authorVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Wed, 10 Sep 2014 13:34:45 +0000 (16:34 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 11 Sep 2014 19:27:38 +0000 (15:27 -0400)
HW supports upto 2304 packet size on the air.
HW is responsible for adding (Tx) or removing (Rx) the following headers:
802.11 hdr: 26B
SNAP: 8B
CRC: 4B
Security (optional): 24B
HW adds max 62B to the payload passed from driver. It means driver can use
max packet size of 2304-62 = 2242B

Signed-off-by: Dedy Lansky <qca_dlansky@qca.qualcomm.com>
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/wil6210/netdev.c
drivers/net/wireless/ath/wil6210/txrx.c
drivers/net/wireless/ath/wil6210/txrx.h

index a995d9d59cb58743fb369c3b6674552cc6c41d91..1c0c77d9a14f01281ff57db1f97b1eaf507a90fe 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/etherdevice.h>
 
 #include "wil6210.h"
+#include "txrx.h"
 
 static int wil_open(struct net_device *ndev)
 {
@@ -40,8 +41,10 @@ static int wil_change_mtu(struct net_device *ndev, int new_mtu)
 {
        struct wil6210_priv *wil = ndev_to_wil(ndev);
 
-       if (new_mtu < 68 || new_mtu > IEEE80211_MAX_DATA_LEN_DMG)
+       if (new_mtu < 68 || new_mtu > (TX_BUF_LEN - ETH_HLEN)) {
+               wil_err(wil, "invalid MTU %d\n", new_mtu);
                return -EINVAL;
+       }
 
        wil_dbg_misc(wil, "change MTU %d -> %d\n", ndev->mtu, new_mtu);
        ndev->mtu = new_mtu;
index 02fd43d264e4495dcd04cb0ce1a7f9e3c968a83b..2936ef0c18cbc700003760e5a93a9f504b9d8840 100644 (file)
@@ -668,7 +668,8 @@ int wil_vring_init_tx(struct wil6210_priv *wil, int id, int size,
        struct vring *vring = &wil->vring_tx[id];
        struct vring_tx_data *txdata = &wil->vring_tx_data[id];
 
-       wil_dbg_misc(wil, "%s()\n", __func__);
+       wil_dbg_misc(wil, "%s() max_mpdu_size %d\n", __func__,
+                    cmd.vring_cfg.tx_sw_ring.max_mpdu_size);
 
        if (vring->va) {
                wil_err(wil, "Tx ring [%d] already allocated\n", id);
index 979edf221dd3f3157f4c68ffe5a14af9763abecc..de046716d2b7e2de3c96e2f8aaff266796c78967 100644 (file)
@@ -20,9 +20,9 @@
 #define BUF_SW_OWNED    (1)
 #define BUF_HW_OWNED    (0)
 
-/* size of max. Rx packet */
-#define RX_BUF_LEN      (2048)
-#define TX_BUF_LEN      (2048)
+/* size of max. Tx/Rx buffers, as supported by FW */
+#define RX_BUF_LEN      (2242)
+#define TX_BUF_LEN      (2242)
 /* how many bytes to reserve for rtap header? */
 #define WIL6210_RTAP_SIZE (128)