rtl8xxxu: add support for rtl8188eu
[openwrt/staging/rmilecki.git] / package / kernel / mac80211 / patches / 650-0017-rtl8xxxu-gen1-Add-module-parameters-to-adjust-DMA-ag.patch
1 From 3dc0c72274876ad9612b12ab9fce553ec7e21d20 Mon Sep 17 00:00:00 2001
2 From: Jes Sorensen <Jes.Sorensen@redhat.com>
3 Date: Wed, 22 Jun 2016 23:17:37 -0400
4 Subject: [PATCH] rtl8xxxu: gen1: Add module parameters to adjust DMA
5 aggregation parameters
6
7 This allows the user to specify DMA aggregation timout and block
8 count. Blocks are presumably always 512 bytes, so the minimum block
9 count is 6 for 802.11 packets.
10
11 Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
12 ---
13 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 28 ++++++++++++++++++++++
14 1 file changed, 28 insertions(+)
15
16 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
17 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
18 @@ -45,6 +45,8 @@
19 int rtl8xxxu_debug = RTL8XXXU_DEBUG_EFUSE;
20 static bool rtl8xxxu_ht40_2g;
21 static bool rtl8xxxu_dma_aggregation;
22 +static int rtl8xxxu_dma_agg_timeout = -1;
23 +static int rtl8xxxu_dma_agg_pages = -1;
24
25 MODULE_AUTHOR("Jes Sorensen <Jes.Sorensen@redhat.com>");
26 MODULE_DESCRIPTION("RTL8XXXu USB mac80211 Wireless LAN Driver");
27 @@ -65,6 +67,10 @@ module_param_named(ht40_2g, rtl8xxxu_ht4
28 MODULE_PARM_DESC(ht40_2g, "Enable HT40 support on the 2.4GHz band");
29 module_param_named(dma_aggregation, rtl8xxxu_dma_aggregation, bool, 0600);
30 MODULE_PARM_DESC(dma_aggregation, "Enable DMA packet aggregation");
31 +module_param_named(dma_agg_timeout, rtl8xxxu_dma_agg_timeout, int, 0600);
32 +MODULE_PARM_DESC(dma_agg_timeout, "Set DMA aggregation timeout (range 1-127)");
33 +module_param_named(dma_agg_pages, rtl8xxxu_dma_agg_pages, int, 0600);
34 +MODULE_PARM_DESC(dma_agg_pages, "Set DMA aggregation pages (range 1-127, 0 to disable)");
35
36 #define USB_VENDOR_ID_REALTEK 0x0bda
37 #define RTL8XXXU_RX_URBS 32
38 @@ -4441,6 +4447,18 @@ void rtl8xxxu_gen1_init_aggregation(stru
39 */
40
41 page_thresh = (priv->fops->rx_agg_buf_size / 512);
42 + if (rtl8xxxu_dma_agg_pages >= 0) {
43 + if (rtl8xxxu_dma_agg_pages <= page_thresh)
44 + timeout = page_thresh;
45 + else if (rtl8xxxu_dma_agg_pages <= 6)
46 + dev_err(&priv->udev->dev,
47 + "%s: dma_agg_pages=%i too small, minium is 6\n",
48 + __func__, rtl8xxxu_dma_agg_pages);
49 + else
50 + dev_err(&priv->udev->dev,
51 + "%s: dma_agg_pages=%i larger than limit %i\n",
52 + __func__, rtl8xxxu_dma_agg_pages, page_thresh);
53 + }
54 rtl8xxxu_write8(priv, REG_RXDMA_AGG_PG_TH, page_thresh);
55 /*
56 * REG_RXDMA_AGG_PG_TH + 1 seems to be the timeout register on
57 @@ -4448,6 +4466,16 @@ void rtl8xxxu_gen1_init_aggregation(stru
58 * don't set it, so better set both.
59 */
60 timeout = 4;
61 +
62 + if (rtl8xxxu_dma_agg_timeout >= 0) {
63 + if (rtl8xxxu_dma_agg_timeout <= 127)
64 + timeout = rtl8xxxu_dma_agg_timeout;
65 + else
66 + dev_err(&priv->udev->dev,
67 + "%s: Invalid dma_agg_timeout: %i\n",
68 + __func__, rtl8xxxu_dma_agg_timeout);
69 + }
70 +
71 rtl8xxxu_write8(priv, REG_RXDMA_AGG_PG_TH + 1, timeout);
72 rtl8xxxu_write8(priv, REG_USB_DMA_AGG_TO, timeout);
73 priv->rx_buf_aggregation = 1;