diff options
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.patch | 134 |
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 { |