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.
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
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>
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,
27 if (commonring->cr_update_wptr)
28 commonring->cr_update_wptr(commonring->cr_ctx);
30 @@ -235,19 +233,18 @@ void *brcmf_commonring_get_read_ptr(stru
34 - ret_addr = commonring->buf_addr +
35 - (commonring->r_ptr * commonring->item_len);
37 - commonring->r_ptr += *n_items;
38 - if (commonring->r_ptr == commonring->depth)
39 - commonring->r_ptr = 0;
42 + return commonring->buf_addr +
43 + (commonring->r_ptr * commonring->item_len);
47 -int brcmf_commonring_read_complete(struct brcmf_commonring *commonring)
48 +int brcmf_commonring_read_complete(struct brcmf_commonring *commonring,
51 + commonring->r_ptr += n_items;
52 + if (commonring->r_ptr == commonring->depth)
53 + commonring->r_ptr = 0;
55 if (commonring->cr_write_rptr)
56 return commonring->cr_write_rptr(commonring->cr_ctx);
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
62 void *brcmf_commonring_get_read_ptr(struct brcmf_commonring *commonring,
64 -int brcmf_commonring_read_complete(struct brcmf_commonring *commonring);
65 +int brcmf_commonring_read_complete(struct brcmf_commonring *commonring,
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
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
79 struct msgbuf_common_hdr {
81 @@ -1257,19 +1259,27 @@ static void brcmf_msgbuf_process_rx(stru
88 buf = brcmf_commonring_get_read_ptr(commonring, &count);
94 brcmf_msgbuf_process_msgtype(msgbuf,
95 buf + msgbuf->rx_dataoffset);
96 buf += brcmf_commonring_len_item(commonring);
98 + if (processed == BRCMF_MSGBUF_UPDATE_RX_PTR_THRS) {
99 + brcmf_commonring_read_complete(commonring, processed);
104 - brcmf_commonring_read_complete(commonring);
106 + brcmf_commonring_read_complete(commonring, processed);
108 if (commonring->r_ptr == 0)