aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/312-v4.16-0008-brcmfmac-Cleanup-offsetof.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/312-v4.16-0008-brcmfmac-Cleanup-offsetof.patch')
-rw-r--r--package/kernel/mac80211/patches/312-v4.16-0008-brcmfmac-Cleanup-offsetof.patch134
1 files changed, 134 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/312-v4.16-0008-brcmfmac-Cleanup-offsetof.patch b/package/kernel/mac80211/patches/312-v4.16-0008-brcmfmac-Cleanup-offsetof.patch
new file mode 100644
index 0000000000..f9e5df550f
--- /dev/null
+++ b/package/kernel/mac80211/patches/312-v4.16-0008-brcmfmac-Cleanup-offsetof.patch
@@ -0,0 +1,134 @@
+From e4c05fc3c0a6c79376f72f17d08014477e962ada Mon Sep 17 00:00:00 2001
+From: Ian Molton <ian@mnementh.co.uk>
+Date: Fri, 8 Dec 2017 13:10:33 +0100
+Subject: [PATCH] brcmfmac: Cleanup offsetof()
+
+Create a macro to make the code a bit more readable, whilst we're stuck
+with using struct element offsets as register offsets.
+
+Signed-off-by: Ian Molton <ian@mnementh.co.uk>
+Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+[arend: rename macro to SD_REG]
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 35 +++++++++-------------
+ 1 file changed, 14 insertions(+), 21 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+@@ -161,6 +161,8 @@ struct rte_console {
+
+ #define CORE_BUS_REG(base, field) \
+ (base + offsetof(struct sdpcmd_regs, field))
++#define SD_REG(field) \
++ (offsetof(struct sdpcmd_regs, field))
+
+ /* SDIO function 1 register CHIPCLKCSR */
+ /* Force ALP request to backplane */
+@@ -1087,12 +1089,10 @@ static u32 brcmf_sdio_hostmail(struct br
+ brcmf_dbg(SDIO, "Enter\n");
+
+ /* Read mailbox data and ack that we did so */
+- ret = r_sdreg32(bus, &hmb_data,
+- offsetof(struct sdpcmd_regs, tohostmailboxdata));
++ ret = r_sdreg32(bus, &hmb_data, SD_REG(tohostmailboxdata));
+
+ if (ret == 0)
+- w_sdreg32(bus, SMB_INT_ACK,
+- offsetof(struct sdpcmd_regs, tosbmailbox));
++ w_sdreg32(bus, SMB_INT_ACK, SD_REG(tosbmailbox));
+ bus->sdcnt.f1regdata += 2;
+
+ /* dongle indicates the firmware has halted/crashed */
+@@ -1207,8 +1207,7 @@ static void brcmf_sdio_rxfail(struct brc
+
+ if (rtx) {
+ bus->sdcnt.rxrtx++;
+- err = w_sdreg32(bus, SMB_NAK,
+- offsetof(struct sdpcmd_regs, tosbmailbox));
++ err = w_sdreg32(bus, SMB_NAK, SD_REG(tosbmailbox));
+
+ bus->sdcnt.f1regdata++;
+ if (err == 0)
+@@ -2333,9 +2332,7 @@ static uint brcmf_sdio_sendfromq(struct
+ if (!bus->intr) {
+ /* Check device status, signal pending interrupt */
+ sdio_claim_host(bus->sdiodev->func[1]);
+- ret = r_sdreg32(bus, &intstatus,
+- offsetof(struct sdpcmd_regs,
+- intstatus));
++ ret = r_sdreg32(bus, &intstatus, SD_REG(intstatus));
+ sdio_release_host(bus->sdiodev->func[1]);
+ bus->sdcnt.f2txdata++;
+ if (ret != 0)
+@@ -2441,7 +2438,7 @@ static void brcmf_sdio_bus_stop(struct d
+ brcmf_sdio_bus_sleep(bus, false, false);
+
+ /* Disable and clear interrupts at the chip level also */
+- w_sdreg32(bus, 0, offsetof(struct sdpcmd_regs, hostintmask));
++ w_sdreg32(bus, 0, SD_REG(hostintmask));
+ local_hostintmask = bus->hostintmask;
+ bus->hostintmask = 0;
+
+@@ -2460,8 +2457,7 @@ static void brcmf_sdio_bus_stop(struct d
+ sdio_disable_func(sdiodev->func[SDIO_FUNC_2]);
+
+ /* Clear any pending interrupts now that F2 is disabled */
+- w_sdreg32(bus, local_hostintmask,
+- offsetof(struct sdpcmd_regs, intstatus));
++ w_sdreg32(bus, local_hostintmask, SD_REG(intstatus));
+
+ sdio_release_host(sdiodev->func[1]);
+ }
+@@ -2507,7 +2503,7 @@ static int brcmf_sdio_intr_rstatus(struc
+ int ret;
+
+ buscore = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
+- addr = buscore->base + offsetof(struct sdpcmd_regs, intstatus);
++ addr = buscore->base + SD_REG(intstatus);
+
+ val = brcmf_sdiod_readl(bus->sdiodev, addr, &ret);
+ bus->sdcnt.f1regdata++;
+@@ -2584,11 +2580,9 @@ static void brcmf_sdio_dpc(struct brcmf_
+ */
+ if (intstatus & I_HMB_FC_CHANGE) {
+ intstatus &= ~I_HMB_FC_CHANGE;
+- err = w_sdreg32(bus, I_HMB_FC_CHANGE,
+- offsetof(struct sdpcmd_regs, intstatus));
++ err = w_sdreg32(bus, I_HMB_FC_CHANGE, SD_REG(intstatus));
+
+- err = r_sdreg32(bus, &newstatus,
+- offsetof(struct sdpcmd_regs, intstatus));
++ err = r_sdreg32(bus, &newstatus, SD_REG(intstatus));
+ bus->sdcnt.f1regdata += 2;
+ atomic_set(&bus->fcstate,
+ !!(newstatus & (I_HMB_FC_STATE | I_HMB_FC_CHANGE)));
+@@ -3771,7 +3765,7 @@ static void brcmf_sdio_buscore_activate(
+
+ /* clear all interrupts */
+ core = brcmf_chip_get_core(chip, BCMA_CORE_SDIO_DEV);
+- reg_addr = core->base + offsetof(struct sdpcmd_regs, intstatus);
++ reg_addr = core->base + SD_REG(intstatus);
+ brcmf_sdiod_writel(sdiodev, reg_addr, 0xFFFFFFFF, NULL);
+
+ if (rstvec)
+@@ -4067,7 +4061,7 @@ static void brcmf_sdio_firmware_callback
+
+ /* Enable function 2 (frame transfers) */
+ w_sdreg32(bus, SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT,
+- offsetof(struct sdpcmd_regs, tosbmailboxdata));
++ SD_REG(tosbmailboxdata));
+ err = sdio_enable_func(sdiodev->func[SDIO_FUNC_2]);
+
+
+@@ -4077,8 +4071,7 @@ static void brcmf_sdio_firmware_callback
+ if (!err) {
+ /* Set up the interrupt mask and enable interrupts */
+ bus->hostintmask = HOSTINTMASK;
+- w_sdreg32(bus, bus->hostintmask,
+- offsetof(struct sdpcmd_regs, hostintmask));
++ w_sdreg32(bus, bus->hostintmask, SD_REG(hostintmask));
+
+ brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
+ } else {