|
@@ -26,6 +26,8 @@
|
|
|
#include <common.h>
|
|
|
#include <asm/processor.h>
|
|
|
#include <asm/leon.h>
|
|
|
+#include <serial.h>
|
|
|
+#include <linux/compiler.h>
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
@@ -39,7 +41,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
|
|
#define READ_DWORD(var) SPARC_NOCACHE_READ_DWORD((unsigned int)&(var))
|
|
|
#endif
|
|
|
|
|
|
-int serial_init(void)
|
|
|
+static int leon2_serial_init(void)
|
|
|
{
|
|
|
LEON2_regs *leon2 = (LEON2_regs *) LEON2_PREGS;
|
|
|
LEON2_Uart_regs *regs;
|
|
@@ -72,15 +74,7 @@ int serial_init(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-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 leon2_serial_putc_raw(const char c)
|
|
|
{
|
|
|
LEON2_regs *leon2 = (LEON2_regs *) LEON2_PREGS;
|
|
|
LEON2_Uart_regs *regs;
|
|
@@ -103,14 +97,22 @@ void serial_putc_raw(const char c)
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-void serial_puts(const char *s)
|
|
|
+static void leon2_serial_putc(const char c)
|
|
|
+{
|
|
|
+ if (c == '\n')
|
|
|
+ leon2_serial_putc_raw('\r');
|
|
|
+
|
|
|
+ leon2_serial_putc_raw(c);
|
|
|
+}
|
|
|
+
|
|
|
+static void leon2_serial_puts(const char *s)
|
|
|
{
|
|
|
while (*s) {
|
|
|
serial_putc(*s++);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-int serial_getc(void)
|
|
|
+static int leon2_serial_getc(void)
|
|
|
{
|
|
|
LEON2_regs *leon2 = (LEON2_regs *) LEON2_PREGS;
|
|
|
LEON2_Uart_regs *regs;
|
|
@@ -128,7 +130,7 @@ int serial_getc(void)
|
|
|
return READ_WORD(regs->UART_Channel);
|
|
|
}
|
|
|
|
|
|
-int serial_tstc(void)
|
|
|
+static int leon2_serial_tstc(void)
|
|
|
{
|
|
|
LEON2_regs *leon2 = (LEON2_regs *) LEON2_PREGS;
|
|
|
LEON2_Uart_regs *regs;
|
|
@@ -143,7 +145,7 @@ int serial_tstc(void)
|
|
|
}
|
|
|
|
|
|
/* set baud rate for uart */
|
|
|
-void serial_setbrg(void)
|
|
|
+static void leon2_serial_setbrg(void)
|
|
|
{
|
|
|
/* update baud rate settings, read it from gd->baudrate */
|
|
|
unsigned int scaler;
|
|
@@ -163,3 +165,56 @@ void serial_setbrg(void)
|
|
|
regs->UART_Scaler = scaler;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+#ifdef CONFIG_SERIAL_MULTI
|
|
|
+static struct serial_device leon2_serial_drv = {
|
|
|
+ .name = "leon2_serial",
|
|
|
+ .start = leon2_serial_init,
|
|
|
+ .stop = NULL,
|
|
|
+ .setbrg = leon2_serial_setbrg,
|
|
|
+ .putc = leon2_serial_putc,
|
|
|
+ .puts = leon2_serial_puts,
|
|
|
+ .getc = leon2_serial_getc,
|
|
|
+ .tstc = leon2_serial_tstc,
|
|
|
+};
|
|
|
+
|
|
|
+void leon2_serial_initialize(void)
|
|
|
+{
|
|
|
+ serial_register(&leon2_serial_drv);
|
|
|
+}
|
|
|
+
|
|
|
+__weak struct serial_device *default_serial_console(void)
|
|
|
+{
|
|
|
+ return &leon2_serial_drv;
|
|
|
+}
|
|
|
+#else
|
|
|
+int serial_init(void)
|
|
|
+{
|
|
|
+ return leon2_serial_init();
|
|
|
+}
|
|
|
+
|
|
|
+void serial_setbrg(void)
|
|
|
+{
|
|
|
+ leon2_serial_setbrg();
|
|
|
+}
|
|
|
+
|
|
|
+void serial_putc(const char c)
|
|
|
+{
|
|
|
+ leon2_serial_putc(c);
|
|
|
+}
|
|
|
+
|
|
|
+void serial_puts(const char *s)
|
|
|
+{
|
|
|
+ leon2_serial_puts(s);
|
|
|
+}
|
|
|
+
|
|
|
+int serial_getc(void)
|
|
|
+{
|
|
|
+ return leon2_serial_getc();
|
|
|
+}
|
|
|
+
|
|
|
+int serial_tstc(void)
|
|
|
+{
|
|
|
+ return leon2_serial_tstc();
|
|
|
+}
|
|
|
+#endif
|