|
@@ -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
|