@ -199,6 +199,20 @@ static void console_putc(int file, const char c)
}
}
}
}
# ifdef CONFIG_PRE_CONSOLE_BUFFER
static void console_putc_noserial ( int file , const char c )
{
int i ;
struct stdio_dev * dev ;
for ( i = 0 ; i < cd_count [ file ] ; i + + ) {
dev = console_devices [ file ] [ i ] ;
if ( dev - > putc ! = NULL & & strcmp ( dev - > name , " serial " ) ! = 0 )
dev - > putc ( dev , c ) ;
}
}
# endif
static void console_puts ( int file , const char * s )
static void console_puts ( int file , const char * s )
{
{
int i ;
int i ;
@ -236,6 +250,14 @@ static inline void console_putc(int file, const char c)
stdio_devices [ file ] - > putc ( stdio_devices [ file ] , c ) ;
stdio_devices [ file ] - > putc ( stdio_devices [ file ] , c ) ;
}
}
# ifdef CONFIG_PRE_CONSOLE_BUFFER
static inline void console_putc_noserial ( int file , const char c )
{
if ( strcmp ( stdio_devices [ file ] - > name , " serial " ) ! = 0 )
stdio_devices [ file ] - > putc ( stdio_devices [ file ] , c ) ;
}
# endif
static inline void console_puts ( int file , const char * s )
static inline void console_puts ( int file , const char * s )
{
{
stdio_devices [ file ] - > puts ( stdio_devices [ file ] , s ) ;
stdio_devices [ file ] - > puts ( stdio_devices [ file ] , s ) ;
@ -382,6 +404,9 @@ int tstc(void)
return serial_tstc ( ) ;
return serial_tstc ( ) ;
}
}
# define PRE_CONSOLE_FLUSHPOINT1_SERIAL 0
# define PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL 1
# ifdef CONFIG_PRE_CONSOLE_BUFFER
# ifdef CONFIG_PRE_CONSOLE_BUFFER
# define CIRC_BUF_IDX(idx) ((idx) % (unsigned long)CONFIG_PRE_CON_BUF_SZ)
# define CIRC_BUF_IDX(idx) ((idx) % (unsigned long)CONFIG_PRE_CON_BUF_SZ)
@ -398,7 +423,7 @@ static void pre_console_puts(const char *s)
pre_console_putc ( * s + + ) ;
pre_console_putc ( * s + + ) ;
}
}
static void print_pre_console_buffer ( void )
static void print_pre_console_buffer ( int flushpoint )
{
{
unsigned long i = 0 ;
unsigned long i = 0 ;
char * buffer = ( char * ) CONFIG_PRE_CON_BUF_ADDR ;
char * buffer = ( char * ) CONFIG_PRE_CON_BUF_ADDR ;
@ -407,12 +432,20 @@ static void print_pre_console_buffer(void)
i = 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 )
while ( i < gd - > precon_buf_idx )
putc ( buffer [ CIRC_BUF_IDX ( i + + ) ] ) ;
switch ( flushpoint ) {
case PRE_CONSOLE_FLUSHPOINT1_SERIAL :
putc ( buffer [ CIRC_BUF_IDX ( i + + ) ] ) ;
break ;
case PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL :
console_putc_noserial ( stdout ,
buffer [ CIRC_BUF_IDX ( i + + ) ] ) ;
break ;
}
}
}
# else
# else
static inline void pre_console_putc ( const char c ) { }
static inline void pre_console_putc ( const char c ) { }
static inline void pre_console_puts ( const char * s ) { }
static inline void pre_console_puts ( const char * s ) { }
static inline void print_pre_console_buffer ( void ) { }
static inline void print_pre_console_buffer ( int flushpoint ) { }
# endif
# endif
void putc ( const char c )
void putc ( const char c )
@ -441,6 +474,7 @@ void putc(const char c)
fputc ( stdout , c ) ;
fputc ( stdout , c ) ;
} else {
} else {
/* Send directly to the handler */
/* Send directly to the handler */
pre_console_putc ( c ) ;
serial_putc ( c ) ;
serial_putc ( c ) ;
}
}
}
}
@ -472,6 +506,7 @@ void puts(const char *s)
fputs ( stdout , s ) ;
fputs ( stdout , s ) ;
} else {
} else {
/* Send directly to the handler */
/* Send directly to the handler */
pre_console_puts ( s ) ;
serial_puts ( s ) ;
serial_puts ( s ) ;
}
}
}
}
@ -679,7 +714,7 @@ int console_init_f(void)
gd - > flags | = GD_FLG_SILENT ;
gd - > flags | = GD_FLG_SILENT ;
# endif
# endif
print_pre_console_buffer ( ) ;
print_pre_console_buffer ( PRE_CONSOLE_FLUSHPOINT1_SERIAL ) ;
return 0 ;
return 0 ;
}
}
@ -794,6 +829,7 @@ done:
if ( ( stdio_devices [ stdin ] = = NULL ) & & ( stdio_devices [ stdout ] = = NULL ) )
if ( ( stdio_devices [ stdin ] = = NULL ) & & ( stdio_devices [ stdout ] = = NULL ) )
return 0 ;
return 0 ;
# endif
# endif
print_pre_console_buffer ( PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL ) ;
return 0 ;
return 0 ;
}
}
@ -869,7 +905,7 @@ int console_init_r(void)
if ( ( stdio_devices [ stdin ] = = NULL ) & & ( stdio_devices [ stdout ] = = NULL ) )
if ( ( stdio_devices [ stdin ] = = NULL ) & & ( stdio_devices [ stdout ] = = NULL ) )
return 0 ;
return 0 ;
# endif
# endif
print_pre_console_buffer ( PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL ) ;
return 0 ;
return 0 ;
}
}