2005-04-17 02:20:36 +04:00
/*
2013-03-26 00:05:40 +04: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-17 02:20:36 +04:00
*
* Display routines for display messages in MIPS boards ascii display .
2013-03-26 00:05:40 +04:00
*
* Copyright ( C ) 1999 , 2000 , 2012 MIPS Technologies , Inc .
* All rights reserved .
* Authors : Carsten Langgaard < carstenl @ mips . com >
* Steven J . Hill < sjhill @ mips . com >
2005-04-17 02:20:36 +04:00
*/
# include <linux/compiler.h>
2007-05-16 19:54:08 +04:00
# include <linux/timer.h>
2013-03-26 00:05:40 +04:00
# include <linux/io.h>
2005-04-17 02:20:36 +04:00
# include <asm/mips-boards/generic.h>
2007-05-16 19:54:08 +04:00
extern const char display_string [ ] ;
static unsigned int display_count ;
static unsigned int max_display_count ;
2005-04-17 02:20:36 +04:00
void mips_display_message ( const char * str )
{
2007-04-26 18:46:24 +04:00
static unsigned int __iomem * display = NULL ;
2005-04-17 02:20:36 +04:00
int i ;
if ( unlikely ( display = = NULL ) )
2007-04-26 18:46:24 +04:00
display = ioremap ( ASCII_DISPLAY_POS_BASE , 16 * sizeof ( int ) ) ;
2005-04-17 02:20:36 +04:00
2013-03-26 00:05:40 +04:00
for ( i = 0 ; i < = 14 ; i + = 2 ) {
if ( * str )
__raw_writel ( * str + + , display + i ) ;
else
__raw_writel ( ' ' , display + i ) ;
2005-04-17 02:20:36 +04:00
}
}
2007-05-16 19:54:08 +04:00
static void scroll_display_message ( unsigned long data ) ;
static DEFINE_TIMER ( mips_scroll_timer , scroll_display_message , HZ , 0 ) ;
static void scroll_display_message ( unsigned long data )
{
mips_display_message ( & display_string [ display_count + + ] ) ;
if ( display_count = = max_display_count )
display_count = 0 ;
mod_timer ( & mips_scroll_timer , jiffies + HZ ) ;
}
void mips_scroll_message ( void )
{
del_timer_sync ( & mips_scroll_timer ) ;
max_display_count = strlen ( display_string ) + 1 - 8 ;
mod_timer ( & mips_scroll_timer , jiffies + 1 ) ;
}