Commit baf8855c authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Greg Kroah-Hartman
Browse files

staging: gpib: fix address space mixup



Throughout the gpib drivers, a 'void *' struct member is used in place
of either port numbers or __iomem pointers, which leads to lots of extra
type casts, sparse warnings and less portable code.

Split the struct member in two separate ones with the correct types,
so each driver can pick which one to use.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/all/f10e976e-7a04-4454-b38d-39cd18f142da@roeck-us.net/
Link: https://lore.kernel.org/r/20241213064959.1045243-3-arnd@kernel.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent fec866a0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -700,7 +700,7 @@ static int agilent_82350b_generic_attach(gpib_board_t *board, const gpib_board_c
							     GPIB_82350A_REGION));
		dev_dbg(board->gpib_dev, "%s: gpib base address remapped to 0x%p\n",
			driver_name, a_priv->gpib_base);
		tms_priv->iobase = a_priv->gpib_base + TMS9914_BASE_REG;
		tms_priv->mmiobase = a_priv->gpib_base + TMS9914_BASE_REG;
		a_priv->sram_base = ioremap(pci_resource_start(a_priv->pci_device,
							       SRAM_82350A_REGION),
					    pci_resource_len(a_priv->pci_device,
@@ -724,7 +724,7 @@ static int agilent_82350b_generic_attach(gpib_board_t *board, const gpib_board_c
					    pci_resource_len(a_priv->pci_device, GPIB_REGION));
		dev_dbg(board->gpib_dev, "%s: gpib base address remapped to 0x%p\n",
			driver_name, a_priv->gpib_base);
		tms_priv->iobase = a_priv->gpib_base + TMS9914_BASE_REG;
		tms_priv->mmiobase = a_priv->gpib_base + TMS9914_BASE_REG;
		a_priv->sram_base = ioremap(pci_resource_start(a_priv->pci_device, SRAM_REGION),
					    pci_resource_len(a_priv->pci_device, SRAM_REGION));
		dev_dbg(board->gpib_dev, "%s: sram base address remapped to 0x%p\n",
+6 −6
Original line number Diff line number Diff line
@@ -971,12 +971,12 @@ int cb_pci_attach(gpib_board_t *board, const gpib_board_config_t *config)
	switch (cb_priv->pci_chip) {
	case PCI_CHIP_AMCC_S5933:
		cb_priv->amcc_iobase = pci_resource_start(cb_priv->pci_device, 0);
		nec_priv->iobase = (void *)(pci_resource_start(cb_priv->pci_device, 1));
		nec_priv->iobase = pci_resource_start(cb_priv->pci_device, 1);
		cb_priv->fifo_iobase = pci_resource_start(cb_priv->pci_device, 2);
		break;
	case PCI_CHIP_QUANCOM:
		nec_priv->iobase = (void *)(pci_resource_start(cb_priv->pci_device, 0));
		cb_priv->fifo_iobase = (unsigned long)nec_priv->iobase;
		nec_priv->iobase = pci_resource_start(cb_priv->pci_device, 0);
		cb_priv->fifo_iobase = nec_priv->iobase;
		break;
	default:
		pr_err("cb7210: bug! unhandled pci_chip=%i\n", cb_priv->pci_chip);
@@ -1040,8 +1040,8 @@ int cb_isa_attach(gpib_board_t *board, const gpib_board_config_t *config)
		return retval;
	cb_priv = board->private_data;
	nec_priv = &cb_priv->nec7210_priv;
	if (request_region((unsigned long)config->ibbase, cb7210_iosize, "cb7210") == 0) {
		pr_err("gpib: ioports starting at 0x%p are already in use\n", config->ibbase);
	if (request_region(config->ibbase, cb7210_iosize, "cb7210") == 0) {
		pr_err("gpib: ioports starting at 0x%u are already in use\n", config->ibbase);
		return -EIO;
	}
	nec_priv->iobase = config->ibbase;
@@ -1471,7 +1471,7 @@ int cb_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config)
		       (unsigned long)curr_dev->resource[0]->start);
		return -EIO;
	}
	nec_priv->iobase = (void *)(unsigned long)curr_dev->resource[0]->start;
	nec_priv->iobase = curr_dev->resource[0]->start;
	cb_priv->fifo_iobase = curr_dev->resource[0]->start;

	if (request_irq(curr_dev->irq, cb7210_interrupt, IRQF_SHARED,
+2 −2
Original line number Diff line number Diff line
@@ -113,9 +113,9 @@ enum hs_regs {
	HS_STATUS = 0x8,	/* HS_STATUS register */
};

static inline unsigned long nec7210_iobase(const struct cb7210_priv *cb_priv)
static inline u32 nec7210_iobase(const struct cb7210_priv *cb_priv)
{
	return (unsigned long)(cb_priv->nec7210_priv.iobase);
	return cb_priv->nec7210_priv.iobase;
}

static inline int cb7210_page_in_bits(unsigned int page)
+2 −2
Original line number Diff line number Diff line
@@ -297,8 +297,8 @@ int cec_pci_attach(gpib_board_t *board, const gpib_board_config_t *config)

	cec_priv->plx_iobase = pci_resource_start(cec_priv->pci_device, 1);
	pr_info(" plx9050 base address 0x%lx\n", cec_priv->plx_iobase);
	nec_priv->iobase = (void *)(pci_resource_start(cec_priv->pci_device, 3));
	pr_info(" nec7210 base address 0x%p\n", nec_priv->iobase);
	nec_priv->iobase = pci_resource_start(cec_priv->pci_device, 3);
	pr_info(" nec7210 base address 0x%x\n", nec_priv->iobase);

	isr_flags |= IRQF_SHARED;
	if (request_irq(cec_priv->pci_device->irq, cec_interrupt, isr_flags, "pci-gpib", board)) {
+1 −1
Original line number Diff line number Diff line
@@ -1573,7 +1573,7 @@ static int iobase_ioctl(gpib_board_config_t *config, unsigned long arg)

	if (WARN_ON_ONCE(sizeof(void *) > sizeof(base_addr)))
		return -EFAULT;
	config->ibbase = (void *)(unsigned long)(base_addr);
	config->ibbase = base_addr;

	return 0;
}
Loading