135 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
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 {
 |