Re: [PATCH 4/7] staging: gpib: make port I/O code conditional

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Arnd,

On Wed, Oct 16, 2024 at 11:15:18AM +0000, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@xxxxxxxx>
> 
> A few of the helper modules contain functions for both IORESOURCE_MEM
> and IORESOURCE_IO type access, with the latter not being supported
> on all architectures but also not used by all the drivers.
> 
> Add #ifdef checks around these to allow building the library code
> and use it on MMIO-only configurations.
> 
> Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
> ---
>  drivers/staging/gpib/common/gpib_os.c  |  2 ++
>  drivers/staging/gpib/nec7210/nec7210.c | 38 ++++++++++++++------------
>  drivers/staging/gpib/tms9914/tms9914.c |  2 ++
>  3 files changed, 24 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/staging/gpib/common/gpib_os.c b/drivers/staging/gpib/common/gpib_os.c
> index e9dd7b2d1569..e93a45132a40 100644
> --- a/drivers/staging/gpib/common/gpib_os.c
> +++ b/drivers/staging/gpib/common/gpib_os.c
> @@ -140,6 +140,7 @@ unsigned int readw_wrapper(void *address)
>  };
>  EXPORT_SYMBOL(readw_wrapper);
>  
> +#ifdef CONFIG_HAS_IOPORT
>  void outb_wrapper(unsigned int value, void *address)
>  {
>  	outb(value, (unsigned long)(address));
> @@ -163,6 +164,7 @@ unsigned int inw_wrapper(void *address)
>  	return inw((unsigned long)(address));
>  };
>  EXPORT_SYMBOL(inw_wrapper);
> +#endif
>  
>  /* this is a function instead of a constant because of Suse
>   * defining HZ to be a function call to get_hz()
> diff --git a/drivers/staging/gpib/nec7210/nec7210.c b/drivers/staging/gpib/nec7210/nec7210.c
> index 632322799ed2..1330743d05fd 100644
> --- a/drivers/staging/gpib/nec7210/nec7210.c
> +++ b/drivers/staging/gpib/nec7210/nec7210.c
> @@ -1031,6 +1031,7 @@ void nec7210_board_online(struct nec7210_priv *priv, const gpib_board_t *board)
>  }
>  EXPORT_SYMBOL(nec7210_board_online);
>  
> +#ifdef CONFIG_HAS_IOPORT
>  /* wrappers for io */
>  uint8_t nec7210_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num)
>  {
> @@ -1050,24 +1051,6 @@ void nec7210_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned
>  }
>  EXPORT_SYMBOL(nec7210_ioport_write_byte);
>  
> -uint8_t nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num)
> -{
> -	return readb(priv->iobase + register_num * priv->offset);
> -}
> -EXPORT_SYMBOL(nec7210_iomem_read_byte);
> -
> -void nec7210_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num)
> -{
> -	if (register_num == AUXMR)
> -		/* locking makes absolutely sure noone accesses the
> -		 * AUXMR register faster than once per microsecond
> -		 */
> -		nec7210_locking_iomem_write_byte(priv, data, register_num);
> -	else
> -		writeb(data, priv->iobase + register_num * priv->offset);
> -}
> -EXPORT_SYMBOL(nec7210_iomem_write_byte);
> -
>  /* locking variants of io wrappers, for chips that page-in registers */
>  uint8_t nec7210_locking_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num)
>  {
> @@ -1093,6 +1076,25 @@ void nec7210_locking_ioport_write_byte(struct nec7210_priv *priv, uint8_t data,
>  	spin_unlock_irqrestore(&priv->register_page_lock, flags);
>  }
>  EXPORT_SYMBOL(nec7210_locking_ioport_write_byte);
> +#endif
> +
> +uint8_t nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num)
> +{
> +	return readb(priv->iobase + register_num * priv->offset);
> +}
> +EXPORT_SYMBOL(nec7210_iomem_read_byte);
> +
> +void nec7210_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num)
> +{
> +	if (register_num == AUXMR)
> +		/* locking makes absolutely sure noone accesses the
> +		 * AUXMR register faster than once per microsecond
> +		 */
> +		nec7210_locking_iomem_write_byte(priv, data, register_num);
> +	else
> +		writeb(data, priv->iobase + register_num * priv->offset);
> +}
> +EXPORT_SYMBOL(nec7210_iomem_write_byte);
>  
>  uint8_t nec7210_locking_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num)
>  {
> diff --git a/drivers/staging/gpib/tms9914/tms9914.c b/drivers/staging/gpib/tms9914/tms9914.c
> index a85a796de024..b4a8ab55c5ec 100644
> --- a/drivers/staging/gpib/tms9914/tms9914.c
> +++ b/drivers/staging/gpib/tms9914/tms9914.c
> @@ -862,6 +862,7 @@ void tms9914_online(gpib_board_t *board, struct tms9914_priv *priv)
>  }
>  EXPORT_SYMBOL_GPL(tms9914_online);
>  
> +#ifdef CONFIG_HAS_IOPORT
>  // wrapper for inb
>  uint8_t tms9914_ioport_read_byte(struct tms9914_priv *priv, unsigned int register_num)
>  {
> @@ -877,6 +878,7 @@ void tms9914_ioport_write_byte(struct tms9914_priv *priv, uint8_t data, unsigned
>  		udelay(1);
>  }
>  EXPORT_SYMBOL_GPL(tms9914_ioport_write_byte);
> +#endif
>  
>  // wrapper for readb
>  uint8_t tms9914_iomem_read_byte(struct tms9914_priv *priv, unsigned int register_num)
> -- 
> 2.39.5
> 

Now that this change is in -next, I think it might be incorrect or
incomplete, as hexagon and s390 allmodconfig error with

  ERROR: modpost: "inb_wrapper" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined!
  ERROR: modpost: "inw_wrapper" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined!
  ERROR: modpost: "nec7210_locking_ioport_write_byte" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined!
  ERROR: modpost: "nec7210_locking_ioport_read_byte" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined!
  ERROR: modpost: "outb_wrapper" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined!
  ERROR: modpost: "outw_wrapper" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined!

and it is not immediately obvious to me what the fix is.

Cheers,
Nathan




[Index of Archives]     [Linux Driver Development]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux