ath10k: remove support for the obsolete STA firmware
[openwrt/staging/chunkeey.git] / package / kernel / mac80211 / patches / 385-brcmfmac-Update-msgbuf-read-pointer-quicker.patch
1 From: Hante Meuleman <meuleman@broadcom.com>
2 Date: Mon, 8 Jun 2015 14:38:32 +0200
3 Subject: [PATCH] brcmfmac: Update msgbuf read pointer quicker.
4
5 On device to host data using msgbuf the read pointer gets updated
6 once all data is processed. Updating this pointer more frequently
7 allows the firmware to add more data quicker. This will result in
8 slightly higher and more stable throughput on CPU bounded host
9 processors.
10
11 Reviewed-by: Arend Van Spriel <arend@broadcom.com>
12 Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
13 Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
14 Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
15 Signed-off-by: Arend van Spriel <arend@broadcom.com>
16 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
17 ---
18
19 --- a/drivers/net/wireless/brcm80211/brcmfmac/commonring.c
20 +++ b/drivers/net/wireless/brcm80211/brcmfmac/commonring.c
21 @@ -223,8 +223,6 @@ void brcmf_commonring_write_cancel(struc
22 void *brcmf_commonring_get_read_ptr(struct brcmf_commonring *commonring,
23 u16 *n_items)
24 {
25 - void *ret_addr;
26 -
27 if (commonring->cr_update_wptr)
28 commonring->cr_update_wptr(commonring->cr_ctx);
29
30 @@ -235,19 +233,18 @@ void *brcmf_commonring_get_read_ptr(stru
31 if (*n_items == 0)
32 return NULL;
33
34 - ret_addr = commonring->buf_addr +
35 - (commonring->r_ptr * commonring->item_len);
36 -
37 - commonring->r_ptr += *n_items;
38 - if (commonring->r_ptr == commonring->depth)
39 - commonring->r_ptr = 0;
40 -
41 - return ret_addr;
42 + return commonring->buf_addr +
43 + (commonring->r_ptr * commonring->item_len);
44 }
45
46
47 -int brcmf_commonring_read_complete(struct brcmf_commonring *commonring)
48 +int brcmf_commonring_read_complete(struct brcmf_commonring *commonring,
49 + u16 n_items)
50 {
51 + commonring->r_ptr += n_items;
52 + if (commonring->r_ptr == commonring->depth)
53 + commonring->r_ptr = 0;
54 +
55 if (commonring->cr_write_rptr)
56 return commonring->cr_write_rptr(commonring->cr_ctx);
57
58 --- a/drivers/net/wireless/brcm80211/brcmfmac/commonring.h
59 +++ b/drivers/net/wireless/brcm80211/brcmfmac/commonring.h
60 @@ -62,7 +62,8 @@ void brcmf_commonring_write_cancel(struc
61 u16 n_items);
62 void *brcmf_commonring_get_read_ptr(struct brcmf_commonring *commonring,
63 u16 *n_items);
64 -int brcmf_commonring_read_complete(struct brcmf_commonring *commonring);
65 +int brcmf_commonring_read_complete(struct brcmf_commonring *commonring,
66 + u16 n_items);
67
68 #define brcmf_commonring_n_items(commonring) (commonring->depth)
69 #define brcmf_commonring_len_item(commonring) (commonring->item_len)
70 --- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
71 +++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
72 @@ -75,6 +75,8 @@
73
74 #define BRCMF_MSGBUF_DELAY_TXWORKER_THRS 96
75 #define BRCMF_MSGBUF_TRICKLE_TXWORKER_THRS 32
76 +#define BRCMF_MSGBUF_UPDATE_RX_PTR_THRS 48
77 +
78
79 struct msgbuf_common_hdr {
80 u8 msgtype;
81 @@ -1257,19 +1259,27 @@ static void brcmf_msgbuf_process_rx(stru
82 {
83 void *buf;
84 u16 count;
85 + u16 processed;
86
87 again:
88 buf = brcmf_commonring_get_read_ptr(commonring, &count);
89 if (buf == NULL)
90 return;
91
92 + processed = 0;
93 while (count) {
94 brcmf_msgbuf_process_msgtype(msgbuf,
95 buf + msgbuf->rx_dataoffset);
96 buf += brcmf_commonring_len_item(commonring);
97 + processed++;
98 + if (processed == BRCMF_MSGBUF_UPDATE_RX_PTR_THRS) {
99 + brcmf_commonring_read_complete(commonring, processed);
100 + processed = 0;
101 + }
102 count--;
103 }
104 - brcmf_commonring_read_complete(commonring);
105 + if (processed)
106 + brcmf_commonring_read_complete(commonring, processed);
107
108 if (commonring->r_ptr == 0)
109 goto again;