2005-04-16 15:20:36 -07:00
/*
* linux / arch / sh / kernel / io . c
*
* Copyright ( C ) 2000 Stuart Menefy
2006-01-16 22:14:15 -08:00
* Copyright ( C ) 2005 Paul Mundt
2005-04-16 15:20:36 -07:00
*
* Provide real functions which expand to whatever the header file defined .
* Also definitions of machine independent IO functions .
2006-01-16 22:14:15 -08:00
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
2005-04-16 15:20:36 -07:00
*/
# include <linux/module.h>
2006-01-16 22:14:15 -08:00
# include <asm/machvec.h>
# include <asm/io.h>
2005-04-16 15:20:36 -07:00
/*
* Copy data from IO memory space to " real " memory space .
* This needs to be optimized .
*/
2006-01-16 22:14:15 -08:00
void memcpy_fromio ( void * to , volatile void __iomem * from , unsigned long count )
2005-04-16 15:20:36 -07:00
{
char * p = to ;
while ( count ) {
count - - ;
2006-01-16 22:14:15 -08:00
* p = readb ( ( void __iomem * ) from ) ;
2005-04-16 15:20:36 -07:00
p + + ;
from + + ;
}
}
2006-01-16 22:14:15 -08:00
EXPORT_SYMBOL ( memcpy_fromio ) ;
2005-04-16 15:20:36 -07:00
/*
* Copy data from " real " memory space to IO memory space .
* This needs to be optimized .
*/
2006-01-16 22:14:15 -08:00
void memcpy_toio ( volatile void __iomem * to , const void * from , unsigned long count )
2005-04-16 15:20:36 -07:00
{
const char * p = from ;
while ( count ) {
count - - ;
2006-01-16 22:14:15 -08:00
writeb ( * p , ( void __iomem * ) to ) ;
2005-04-16 15:20:36 -07:00
p + + ;
to + + ;
}
}
2006-01-16 22:14:15 -08:00
EXPORT_SYMBOL ( memcpy_toio ) ;
2005-04-16 15:20:36 -07:00
/*
* " memset " on IO memory space .
* This needs to be optimized .
*/
2006-01-16 22:14:15 -08:00
void memset_io ( volatile void __iomem * dst , int c , unsigned long count )
2005-04-16 15:20:36 -07:00
{
while ( count ) {
count - - ;
2006-01-16 22:14:15 -08:00
writeb ( c , ( void __iomem * ) dst ) ;
2005-04-16 15:20:36 -07:00
dst + + ;
}
}
EXPORT_SYMBOL ( memset_io ) ;
2006-01-16 22:14:15 -08:00
void __iomem * ioport_map ( unsigned long port , unsigned int nr )
{
return sh_mv . mv_ioport_map ( port , nr ) ;
}
EXPORT_SYMBOL ( ioport_map ) ;
void ioport_unmap ( void __iomem * addr )
{
sh_mv . mv_ioport_unmap ( addr ) ;
}
EXPORT_SYMBOL ( ioport_unmap ) ;