mac80211: backport some brcmfmac patches
There are two important patches in this patchset: updating read pointer quicker & rework of .get_station(). There are few more upstream patches that are p2p-related and weren't backported in this commit. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 46084
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
From: Hante Meuleman <meuleman@broadcom.com>
|
||||
Date: Mon, 8 Jun 2015 14:38:32 +0200
|
||||
Subject: [PATCH] brcmfmac: Update msgbuf read pointer quicker.
|
||||
|
||||
On device to host data using msgbuf the read pointer gets updated
|
||||
once all data is processed. Updating this pointer more frequently
|
||||
allows the firmware to add more data quicker. This will result in
|
||||
slightly higher and more stable throughput on CPU bounded host
|
||||
processors.
|
||||
|
||||
Reviewed-by: Arend Van Spriel <arend@broadcom.com>
|
||||
Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
|
||||
Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/commonring.c
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/commonring.c
|
||||
@@ -223,8 +223,6 @@ void brcmf_commonring_write_cancel(struc
|
||||
void *brcmf_commonring_get_read_ptr(struct brcmf_commonring *commonring,
|
||||
u16 *n_items)
|
||||
{
|
||||
- void *ret_addr;
|
||||
-
|
||||
if (commonring->cr_update_wptr)
|
||||
commonring->cr_update_wptr(commonring->cr_ctx);
|
||||
|
||||
@@ -235,19 +233,18 @@ void *brcmf_commonring_get_read_ptr(stru
|
||||
if (*n_items == 0)
|
||||
return NULL;
|
||||
|
||||
- ret_addr = commonring->buf_addr +
|
||||
- (commonring->r_ptr * commonring->item_len);
|
||||
-
|
||||
- commonring->r_ptr += *n_items;
|
||||
- if (commonring->r_ptr == commonring->depth)
|
||||
- commonring->r_ptr = 0;
|
||||
-
|
||||
- return ret_addr;
|
||||
+ return commonring->buf_addr +
|
||||
+ (commonring->r_ptr * commonring->item_len);
|
||||
}
|
||||
|
||||
|
||||
-int brcmf_commonring_read_complete(struct brcmf_commonring *commonring)
|
||||
+int brcmf_commonring_read_complete(struct brcmf_commonring *commonring,
|
||||
+ u16 n_items)
|
||||
{
|
||||
+ commonring->r_ptr += n_items;
|
||||
+ if (commonring->r_ptr == commonring->depth)
|
||||
+ commonring->r_ptr = 0;
|
||||
+
|
||||
if (commonring->cr_write_rptr)
|
||||
return commonring->cr_write_rptr(commonring->cr_ctx);
|
||||
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/commonring.h
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/commonring.h
|
||||
@@ -62,7 +62,8 @@ void brcmf_commonring_write_cancel(struc
|
||||
u16 n_items);
|
||||
void *brcmf_commonring_get_read_ptr(struct brcmf_commonring *commonring,
|
||||
u16 *n_items);
|
||||
-int brcmf_commonring_read_complete(struct brcmf_commonring *commonring);
|
||||
+int brcmf_commonring_read_complete(struct brcmf_commonring *commonring,
|
||||
+ u16 n_items);
|
||||
|
||||
#define brcmf_commonring_n_items(commonring) (commonring->depth)
|
||||
#define brcmf_commonring_len_item(commonring) (commonring->item_len)
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -75,6 +75,8 @@
|
||||
|
||||
#define BRCMF_MSGBUF_DELAY_TXWORKER_THRS 96
|
||||
#define BRCMF_MSGBUF_TRICKLE_TXWORKER_THRS 32
|
||||
+#define BRCMF_MSGBUF_UPDATE_RX_PTR_THRS 48
|
||||
+
|
||||
|
||||
struct msgbuf_common_hdr {
|
||||
u8 msgtype;
|
||||
@@ -1257,19 +1259,27 @@ static void brcmf_msgbuf_process_rx(stru
|
||||
{
|
||||
void *buf;
|
||||
u16 count;
|
||||
+ u16 processed;
|
||||
|
||||
again:
|
||||
buf = brcmf_commonring_get_read_ptr(commonring, &count);
|
||||
if (buf == NULL)
|
||||
return;
|
||||
|
||||
+ processed = 0;
|
||||
while (count) {
|
||||
brcmf_msgbuf_process_msgtype(msgbuf,
|
||||
buf + msgbuf->rx_dataoffset);
|
||||
buf += brcmf_commonring_len_item(commonring);
|
||||
+ processed++;
|
||||
+ if (processed == BRCMF_MSGBUF_UPDATE_RX_PTR_THRS) {
|
||||
+ brcmf_commonring_read_complete(commonring, processed);
|
||||
+ processed = 0;
|
||||
+ }
|
||||
count--;
|
||||
}
|
||||
- brcmf_commonring_read_complete(commonring);
|
||||
+ if (processed)
|
||||
+ brcmf_commonring_read_complete(commonring, processed);
|
||||
|
||||
if (commonring->r_ptr == 0)
|
||||
goto again;
|
||||
Reference in New Issue
Block a user