mac80211: update rtl8xxxu patches
[openwrt/staging/dedeckeh.git] / package / kernel / mac80211 / patches / 660-0054-rtl8xxxu-Handle-devices-with-a-smaller-LLT-buffer.patch
1 From 5dd3f1799baf4683c0161f7e49d65bee17f3e35d Mon Sep 17 00:00:00 2001
2 From: Jes Sorensen <Jes.Sorensen@redhat.com>
3 Date: Wed, 31 Aug 2016 16:31:38 -0400
4 Subject: [PATCH] rtl8xxxu: Handle devices with a smaller LLT buffer
5
6 The 8188e (except for I cut parts) seem to have a smaller LLT buffer
7 than all other known devices.
8
9 Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
10 ---
11 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h | 1 +
12 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c | 1 +
13 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 11 ++++++++---
14 3 files changed, 10 insertions(+), 3 deletions(-)
15
16 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
17 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
18 @@ -1411,6 +1411,7 @@ struct rtl8xxxu_fileops {
19 u8 page_num_hi;
20 u8 page_num_lo;
21 u8 page_num_norm;
22 + u8 last_llt_entry;
23 };
24
25 extern int rtl8xxxu_debug;
26 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
27 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
28 @@ -1454,4 +1454,5 @@ struct rtl8xxxu_fileops rtl8188eu_fops =
29 .page_num_hi = TX_PAGE_NUM_HI_PQ_8188E,
30 .page_num_lo = TX_PAGE_NUM_LO_PQ_8188E,
31 .page_num_norm = TX_PAGE_NUM_NORM_PQ_8188E,
32 + .last_llt_entry = 176,
33 };
34 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
35 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
36 @@ -2485,11 +2485,16 @@ static int rtl8xxxu_llt_write(struct rtl
37 int rtl8xxxu_init_llt_table(struct rtl8xxxu_priv *priv)
38 {
39 int ret;
40 - int i;
41 + int i, last_entry;
42 u8 last_tx_page;
43
44 last_tx_page = priv->fops->total_page_num;
45
46 + if (priv->fops->last_llt_entry)
47 + last_entry = priv->fops->last_llt_entry;
48 + else
49 + last_entry = 255;
50 +
51 for (i = 0; i < last_tx_page; i++) {
52 ret = rtl8xxxu_llt_write(priv, i, i + 1);
53 if (ret)
54 @@ -2501,14 +2506,14 @@ int rtl8xxxu_init_llt_table(struct rtl8x
55 goto exit;
56
57 /* Mark remaining pages as a ring buffer */
58 - for (i = last_tx_page + 1; i < 0xff; i++) {
59 + for (i = last_tx_page + 1; i < last_entry; i++) {
60 ret = rtl8xxxu_llt_write(priv, i, (i + 1));
61 if (ret)
62 goto exit;
63 }
64
65 /* Let last entry point to the start entry of ring buffer */
66 - ret = rtl8xxxu_llt_write(priv, 0xff, last_tx_page + 1);
67 + ret = rtl8xxxu_llt_write(priv, last_entry, last_tx_page + 1);
68 if (ret)
69 goto exit;
70