+#if defined(CONFIG_SERIAL_MULTI)
+/* Multi serial device functions */
+#define DECLARE_ESERIAL_FUNCTIONS(port) \
+ int userial##port##_init(void) \
+ { return(0); } \
+ void userial##port##_setbrg(void) {} \
+ int userial##port##_getc(void) \
+ { return uartlite_serial_getc(port); } \
+ int userial##port##_tstc(void) \
+ { return uartlite_serial_tstc(port); } \
+ void userial##port##_putc(const char c) \
+ { uartlite_serial_putc(c, port); } \
+ void userial##port##_puts(const char *s) \
+ { uartlite_serial_puts(s, port); }
+
+/* Serial device descriptor */
+#define INIT_ESERIAL_STRUCTURE(port, name) {\
+ name,\
+ userial##port##_init,\
+ NULL,\
+ userial##port##_setbrg,\
+ userial##port##_getc,\
+ userial##port##_tstc,\
+ userial##port##_putc,\
+ userial##port##_puts, }
+
+DECLARE_ESERIAL_FUNCTIONS(0);
+struct serial_device uartlite_serial0_device =
+ INIT_ESERIAL_STRUCTURE(0, "ttyUL0");
+DECLARE_ESERIAL_FUNCTIONS(1);
+struct serial_device uartlite_serial1_device =
+ INIT_ESERIAL_STRUCTURE(1, "ttyUL1");
+DECLARE_ESERIAL_FUNCTIONS(2);
+struct serial_device uartlite_serial2_device =
+ INIT_ESERIAL_STRUCTURE(2, "ttyUL2");
+DECLARE_ESERIAL_FUNCTIONS(3);
+struct serial_device uartlite_serial3_device =
+ INIT_ESERIAL_STRUCTURE(3, "ttyUL3");
+
+__weak struct serial_device *default_serial_console(void)
+{
+# ifdef XILINX_UARTLITE_BASEADDR
+ return &uartlite_serial0_device;
+# endif /* XILINX_UARTLITE_BASEADDR */
+# ifdef XILINX_UARTLITE_BASEADDR1
+ return &uartlite_serial1_device;
+# endif /* XILINX_UARTLITE_BASEADDR1 */
+# ifdef XILINX_UARTLITE_BASEADDR2
+ return &uartlite_serial2_device;
+# endif /* XILINX_UARTLITE_BASEADDR2 */
+# ifdef XILINX_UARTLITE_BASEADDR3
+ return &uartlite_serial3_device;
+# endif /* XILINX_UARTLITE_BASEADDR3 */
+}
+#endif /* CONFIG_SERIAL_MULTI */