summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/broadcom/brcm80211/brcmfmac
diff options
context:
space:
mode:
authorWright Feng <wright.feng@cypress.com>2018-03-01 20:41:21 -0600
committerJason Liu <jason.hui.liu@nxp.com>2019-02-12 10:32:23 +0800
commit7d950e0ac551bc86e43f745d9757143817cc6ae8 (patch)
treea26b5c30932fa1a6fe014467bc5b56685ecee4c1 /drivers/net/wireless/broadcom/brcm80211/brcmfmac
parente20bdadc08bee689d73c857c92cb442c8f37856f (diff)
MLK-18675-18 brcmfmac: add a module parameter to set scheduling priority of sdio_dpc
To enhance RX throughput, we add a module parameter "sdio_dpc_prio" to let user can set scheduling priority for sdio_dpc. It can improve RX throughput by reducing the receiving time in sdio_dpc. Signed-off-by: Wright Feng <wright.feng@cypress.com> Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Diffstat (limited to 'drivers/net/wireless/broadcom/brcm80211/brcmfmac')
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c5
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h1
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c10
3 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
index 6a59d0609d30..87df226181d7 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
@@ -75,6 +75,10 @@ static int brcmf_roamoff;
module_param_named(roamoff, brcmf_roamoff, int, S_IRUSR);
MODULE_PARM_DESC(roamoff, "Do not use internal roaming engine");
+static int brcmf_sdio_dpc_prio;
+module_param_named(sdio_dpc_prio, brcmf_sdio_dpc_prio, int, S_IRUSR);
+MODULE_PARM_DESC(sdio_dpc_prio, "The scheduling priority of sdio_dpc thread");
+
#ifdef DEBUG
/* always succeed brcmf_bus_started() */
static int brcmf_ignore_probe_fail;
@@ -444,6 +448,7 @@ struct brcmf_mp_device *brcmf_get_module_param(struct device *dev,
settings->feature_disable = brcmf_feature_disable;
settings->fcmode = brcmf_fcmode;
settings->roamoff = !!brcmf_roamoff;
+ settings->sdio_dpc_prio = brcmf_sdio_dpc_prio;
#ifdef DEBUG
settings->ignore_probe_fail = !!brcmf_ignore_probe_fail;
#endif
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h
index a62f8e70b320..4b4dc16a8ba3 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h
@@ -58,6 +58,7 @@ struct brcmf_mp_device {
unsigned int feature_disable;
int fcmode;
bool roamoff;
+ int sdio_dpc_prio;
bool ignore_probe_fail;
struct brcmfmac_pd_cc *country_codes;
union {
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index c79493fdb44c..777163415839 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -33,6 +33,7 @@
#include <linux/bcma/bcma.h>
#include <linux/debugfs.h>
#include <linux/vmalloc.h>
+#include <uapi/linux/sched/types.h>
#include <asm/unaligned.h>
#include <defs.h>
#include <brcmu_wifi.h>
@@ -2703,9 +2704,18 @@ static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
uint txlimit = bus->txbound; /* Tx frames to send before resched */
uint framecnt; /* Temporary counter of tx/rx frames */
int err = 0;
+ struct sched_param param;
+ struct brcmf_pub *drvr = bus->sdiodev->bus_if->drvr;
+ int sdio_dpc_prio = drvr->settings->sdio_dpc_prio;
brcmf_dbg(TRACE, "Enter\n");
+ if (sdio_dpc_prio > 0) {
+ param.sched_priority = (sdio_dpc_prio < MAX_RT_PRIO) ?
+ sdio_dpc_prio : (MAX_RT_PRIO - 1);
+ sched_setscheduler(current, SCHED_FIFO, &param);
+ }
+
sdio_claim_host(bus->sdiodev->func[1]);
/* If waiting for HTAVAIL, check status */