@ -329,6 +329,39 @@ int tstc(void)
return serial_tstc ( ) ;
}
# ifdef CONFIG_PRE_CONSOLE_BUFFER
# define CIRC_BUF_IDX(idx) ((idx) % (unsigned long)CONFIG_PRE_CON_BUF_SZ)
static void pre_console_putc ( const char c )
{
char * buffer = ( char * ) CONFIG_PRE_CON_BUF_ADDR ;
buffer [ CIRC_BUF_IDX ( gd - > precon_buf_idx + + ) ] = c ;
}
static void pre_console_puts ( const char * s )
{
while ( * s )
pre_console_putc ( * s + + ) ;
}
static void print_pre_console_buffer ( void )
{
unsigned long i = 0 ;
char * buffer = ( char * ) CONFIG_PRE_CON_BUF_ADDR ;
if ( gd - > precon_buf_idx > CONFIG_PRE_CON_BUF_SZ )
i = gd - > precon_buf_idx - CONFIG_PRE_CON_BUF_SZ ;
while ( i < gd - > precon_buf_idx )
putc ( buffer [ CIRC_BUF_IDX ( i + + ) ] ) ;
}
# else
static inline void pre_console_putc ( const char c ) { }
static inline void pre_console_puts ( const char * s ) { }
static inline void print_pre_console_buffer ( void ) { }
# endif
void putc ( const char c )
{
# ifdef CONFIG_SILENT_CONSOLE
@ -342,7 +375,7 @@ void putc(const char c)
# endif
if ( ! gd - > have_console )
return ;
return pre_console_putc ( c ) ;
if ( gd - > flags & GD_FLG_DEVINIT ) {
/* Send to the standard output */
@ -366,7 +399,7 @@ void puts(const char *s)
# endif
if ( ! gd - > have_console )
return ;
return pre_console_puts ( s ) ;
if ( gd - > flags & GD_FLG_DEVINIT ) {
/* Send to the standard output */
@ -383,8 +416,10 @@ int printf(const char *fmt, ...)
uint i ;
char printbuffer [ CONFIG_SYS_PBSIZE ] ;
# ifndef CONFIG_PRE_CONSOLE_BUFFER
if ( ! gd - > have_console )
return 0 ;
# endif
va_start ( args , fmt ) ;
@ -404,8 +439,10 @@ int vprintf(const char *fmt, va_list args)
uint i ;
char printbuffer [ CONFIG_SYS_PBSIZE ] ;
# ifndef CONFIG_PRE_CONSOLE_BUFFER
if ( ! gd - > have_console )
return 0 ;
# endif
/* For this to work, printbuffer must be larger than
* anything we ever want to print .
@ -547,6 +584,8 @@ int console_init_f(void)
gd - > flags | = GD_FLG_SILENT ;
# endif
print_pre_console_buffer ( ) ;
return 0 ;
}