2005-04-17 02:20:36 +04:00
/*
* ppc64 " iomap " interface implementation .
*
* ( C ) Copyright 2004 Linus Torvalds
*/
# include <linux/pci.h>
# include <linux/mm.h>
2011-07-29 10:19:31 +04:00
# include <linux/export.h>
2005-04-17 02:20:36 +04:00
# include <asm/io.h>
2007-07-26 08:07:13 +04:00
# include <asm/pci-bridge.h>
2005-04-17 02:20:36 +04:00
/*
* Here comes the ppc64 implementation of the IOMAP
* interfaces .
*/
2007-01-26 10:52:27 +03:00
unsigned int ioread8 ( void __iomem * addr )
2005-04-17 02:20:36 +04:00
{
return readb ( addr ) ;
}
2007-01-26 10:52:27 +03:00
unsigned int ioread16 ( void __iomem * addr )
2005-04-17 02:20:36 +04:00
{
return readw ( addr ) ;
}
2007-01-26 10:52:27 +03:00
unsigned int ioread16be ( void __iomem * addr )
2005-08-21 05:48:47 +04:00
{
2014-06-23 04:56:22 +04:00
return readw_be ( addr ) ;
2005-08-21 05:48:47 +04:00
}
2007-01-26 10:52:27 +03:00
unsigned int ioread32 ( void __iomem * addr )
2005-04-17 02:20:36 +04:00
{
return readl ( addr ) ;
}
2007-01-26 10:52:27 +03:00
unsigned int ioread32be ( void __iomem * addr )
2005-08-21 05:48:47 +04:00
{
2014-06-23 04:56:22 +04:00
return readl_be ( addr ) ;
2005-08-21 05:48:47 +04:00
}
2005-04-17 02:20:36 +04:00
EXPORT_SYMBOL ( ioread8 ) ;
EXPORT_SYMBOL ( ioread16 ) ;
2005-08-21 05:48:47 +04:00
EXPORT_SYMBOL ( ioread16be ) ;
2005-04-17 02:20:36 +04:00
EXPORT_SYMBOL ( ioread32 ) ;
2005-08-21 05:48:47 +04:00
EXPORT_SYMBOL ( ioread32be ) ;
2016-05-19 18:11:10 +03:00
# ifdef __powerpc64__
u64 ioread64 ( void __iomem * addr )
{
return readq ( addr ) ;
}
u64 ioread64be ( void __iomem * addr )
{
return readq_be ( addr ) ;
}
EXPORT_SYMBOL ( ioread64 ) ;
EXPORT_SYMBOL ( ioread64be ) ;
# endif /* __powerpc64__ */
2005-04-17 02:20:36 +04:00
2007-01-26 10:52:27 +03:00
void iowrite8 ( u8 val , void __iomem * addr )
2005-04-17 02:20:36 +04:00
{
writeb ( val , addr ) ;
}
2007-01-26 10:52:27 +03:00
void iowrite16 ( u16 val , void __iomem * addr )
2005-04-17 02:20:36 +04:00
{
writew ( val , addr ) ;
}
2007-01-26 10:52:27 +03:00
void iowrite16be ( u16 val , void __iomem * addr )
2005-08-21 05:48:47 +04:00
{
2014-06-23 04:56:22 +04:00
writew_be ( val , addr ) ;
2005-08-21 05:48:47 +04:00
}
2007-01-26 10:52:27 +03:00
void iowrite32 ( u32 val , void __iomem * addr )
2005-04-17 02:20:36 +04:00
{
writel ( val , addr ) ;
}
2007-01-26 10:52:27 +03:00
void iowrite32be ( u32 val , void __iomem * addr )
2005-08-21 05:48:47 +04:00
{
2014-06-23 04:56:22 +04:00
writel_be ( val , addr ) ;
2005-08-21 05:48:47 +04:00
}
2005-04-17 02:20:36 +04:00
EXPORT_SYMBOL ( iowrite8 ) ;
EXPORT_SYMBOL ( iowrite16 ) ;
2005-08-21 05:48:47 +04:00
EXPORT_SYMBOL ( iowrite16be ) ;
2005-04-17 02:20:36 +04:00
EXPORT_SYMBOL ( iowrite32 ) ;
2005-08-21 05:48:47 +04:00
EXPORT_SYMBOL ( iowrite32be ) ;
2016-05-19 18:11:10 +03:00
# ifdef __powerpc64__
void iowrite64 ( u64 val , void __iomem * addr )
{
writeq ( val , addr ) ;
}
void iowrite64be ( u64 val , void __iomem * addr )
{
writeq_be ( val , addr ) ;
}
EXPORT_SYMBOL ( iowrite64 ) ;
EXPORT_SYMBOL ( iowrite64be ) ;
# endif /* __powerpc64__ */
2005-04-17 02:20:36 +04:00
/*
* These are the " repeat read/write " functions . Note the
* non - CPU byte order . We do things in " IO byteorder "
* here .
*
* FIXME ! We could make these do EEH handling if we really
* wanted . Not clear if we do .
*/
void ioread8_rep ( void __iomem * addr , void * dst , unsigned long count )
{
2014-06-23 04:56:22 +04:00
readsb ( addr , dst , count ) ;
2005-04-17 02:20:36 +04:00
}
void ioread16_rep ( void __iomem * addr , void * dst , unsigned long count )
{
2014-06-23 04:56:22 +04:00
readsw ( addr , dst , count ) ;
2005-04-17 02:20:36 +04:00
}
void ioread32_rep ( void __iomem * addr , void * dst , unsigned long count )
{
2014-06-23 04:56:22 +04:00
readsl ( addr , dst , count ) ;
2005-04-17 02:20:36 +04:00
}
EXPORT_SYMBOL ( ioread8_rep ) ;
EXPORT_SYMBOL ( ioread16_rep ) ;
EXPORT_SYMBOL ( ioread32_rep ) ;
void iowrite8_rep ( void __iomem * addr , const void * src , unsigned long count )
{
2014-06-23 04:56:22 +04:00
writesb ( addr , src , count ) ;
2005-04-17 02:20:36 +04:00
}
void iowrite16_rep ( void __iomem * addr , const void * src , unsigned long count )
{
2014-06-23 04:56:22 +04:00
writesw ( addr , src , count ) ;
2005-04-17 02:20:36 +04:00
}
void iowrite32_rep ( void __iomem * addr , const void * src , unsigned long count )
{
2014-06-23 04:56:22 +04:00
writesl ( addr , src , count ) ;
2005-04-17 02:20:36 +04:00
}
EXPORT_SYMBOL ( iowrite8_rep ) ;
EXPORT_SYMBOL ( iowrite16_rep ) ;
EXPORT_SYMBOL ( iowrite32_rep ) ;
void __iomem * ioport_map ( unsigned long port , unsigned int len )
{
2006-11-13 01:27:39 +03:00
return ( void __iomem * ) ( port + _IO_BASE ) ;
2005-04-17 02:20:36 +04:00
}
void ioport_unmap ( void __iomem * addr )
{
/* Nothing to do */
}
EXPORT_SYMBOL ( ioport_map ) ;
EXPORT_SYMBOL ( ioport_unmap ) ;
2011-08-05 10:01:20 +04:00
# ifdef CONFIG_PCI
2005-04-17 02:20:36 +04:00
void pci_iounmap ( struct pci_dev * dev , void __iomem * addr )
{
2007-07-26 08:07:13 +04:00
if ( isa_vaddr_is_ioport ( addr ) )
return ;
if ( pcibios_vaddr_is_ioport ( addr ) )
return ;
iounmap ( addr ) ;
2005-04-17 02:20:36 +04:00
}
2007-07-26 08:07:13 +04:00
2005-04-17 02:20:36 +04:00
EXPORT_SYMBOL ( pci_iounmap ) ;
2011-08-10 19:15:44 +04:00
# endif /* CONFIG_PCI */