Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e4c05fc3 authored by Ian Molton's avatar Ian Molton Committed by Kalle Valo
Browse files

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: default avatarIan Molton <ian@mnementh.co.uk>
Reviewed-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
[arend: rename macro to SD_REG]
Signed-off-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent c900072b
Loading
Loading
Loading
Loading
+14 −21
Original line number Diff line number Diff line
@@ -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 brcmf_sdio *bus)
	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 brcmf_sdio *bus, bool abort, bool rtx)

	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 brcmf_sdio *bus, uint maxframes)
		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 device *dev)
		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 device *dev)
		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(struct brcmf_sdio *bus)
	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_sdio *bus)
	 */
	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(void *ctx, struct brcmf_chip *chip,

	/* 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(struct device *dev, int err,

	/* 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(struct device *dev, int err,
	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 {