diff options
Diffstat (limited to 'arch/sparc')
| -rw-r--r-- | arch/sparc/cpu/leon3/serial.c | 83 | 
1 files changed, 69 insertions, 14 deletions
| diff --git a/arch/sparc/cpu/leon3/serial.c b/arch/sparc/cpu/leon3/serial.c index 4b2fcb866..a110244c9 100644 --- a/arch/sparc/cpu/leon3/serial.c +++ b/arch/sparc/cpu/leon3/serial.c @@ -27,6 +27,8 @@  #include <asm/processor.h>  #include <asm/leon.h>  #include <ambapp.h> +#include <serial.h> +#include <linux/compiler.h>  DECLARE_GLOBAL_DATA_PTR; @@ -42,7 +44,7 @@ DECLARE_GLOBAL_DATA_PTR;  ambapp_dev_apbuart *leon3_apbuart = NULL; -int serial_init(void) +static int leon3_serial_init(void)  {  	ambapp_apbdev apbdev;  	unsigned int tmp; @@ -72,15 +74,7 @@ int serial_init(void)  	return -1;		/* didn't find hardware */  } -void serial_putc(const char c) -{ -	if (c == '\n') -		serial_putc_raw('\r'); - -	serial_putc_raw(c); -} - -void serial_putc_raw(const char c) +static void leon3_serial_putc_raw(const char c)  {  	if (!leon3_apbuart)  		return; @@ -97,14 +91,22 @@ void serial_putc_raw(const char c)  #endif  } -void serial_puts(const char *s) +static void leon3_serial_putc(const char c) +{ +	if (c == '\n') +		leon3_serial_putc_raw('\r'); + +	leon3_serial_putc_raw(c); +} + +static void leon3_serial_puts(const char *s)  {  	while (*s) {  		serial_putc(*s++);  	}  } -int serial_getc(void) +static int leon3_serial_getc(void)  {  	if (!leon3_apbuart)  		return 0; @@ -116,7 +118,7 @@ int serial_getc(void)  	return READ_WORD(leon3_apbuart->data);  } -int serial_tstc(void) +static int leon3_serial_tstc(void)  {  	if (leon3_apbuart)  		return (READ_WORD(leon3_apbuart->status) & @@ -125,7 +127,7 @@ int serial_tstc(void)  }  /* set baud rate for uart */ -void serial_setbrg(void) +static void leon3_serial_setbrg(void)  {  	/* update baud rate settings, read it from gd->baudrate */  	unsigned int scaler; @@ -137,3 +139,56 @@ void serial_setbrg(void)  	}  	return;  } + +#ifdef CONFIG_SERIAL_MULTI +static struct serial_device leon3_serial_drv = { +	.name	= "leon3_serial", +	.start	= leon3_serial_init, +	.stop	= NULL, +	.setbrg	= leon3_serial_setbrg, +	.putc	= leon3_serial_putc, +	.puts	= leon3_serial_puts, +	.getc	= leon3_serial_getc, +	.tstc	= leon3_serial_tstc, +}; + +void leon3_serial_initialize(void) +{ +	serial_register(&leon3_serial_drv); +} + +__weak struct serial_device *default_serial_console(void) +{ +	return &leon3_serial_drv; +} +#else +int serial_init(void) +{ +	return leon3_serial_init(); +} + +void serial_setbrg(void) +{ +	leon3_serial_setbrg(); +} + +void serial_putc(const char c) +{ +	leon3_serial_putc(c); +} + +void serial_puts(const char *s) +{ +	leon3_serial_puts(s); +} + +int serial_getc(void) +{ +	return leon3_serial_getc(); +} + +int serial_tstc(void) +{ +	return leon3_serial_tstc(); +} +#endif |