[U-Boot] [RFC PATCH 1/3] serial: join stdio_dev and serial_device

Jean-Christophe PLAGNIOL-VILLARD plagnioj at jcrosoft.com
Sun Aug 23 15:26:57 CEST 2009


we use for the serail multi api the struct stdio_dev also which will reduce
and simplify the code and prepare the join of all serial APIs.

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
---
 board/esd/pmc440/pmc440.c        |    2 +-
 board/lwmon/lwmon.c              |    2 +-
 board/omap3/zoom2/zoom2_serial.h |   18 +++---
 board/trizepsiv/conxs.c          |    8 ++--
 common/serial.c                  |   89 +++++++++++++++----------------
 common/stdio.c                   |    3 -
 cpu/mpc5xxx/serial.c             |   36 ++++++------
 cpu/mpc8xx/serial.c              |   36 ++++++------
 cpu/ppc4xx/4xx_uart.c            |   38 +++++++-------
 drivers/serial/serial.c          |   24 ++++----
 drivers/serial/serial_pxa.c      |   54 +++++++++---------
 drivers/serial/serial_s3c24x0.c  |   22 ++++----
 include/serial.h                 |  109 ++++++++++++++++---------------------
 include/stdio_dev.h              |    9 +++-
 14 files changed, 218 insertions(+), 232 deletions(-)
 rewrite include/serial.h (65%)

diff --git a/board/esd/pmc440/pmc440.c b/board/esd/pmc440/pmc440.c
index 9ffb08e..de01e93 100644
--- a/board/esd/pmc440/pmc440.c
+++ b/board/esd/pmc440/pmc440.c
@@ -53,7 +53,7 @@ int is_monarch(void);
 int bootstrap_eeprom_read(unsigned dev_addr, unsigned offset,
 			  uchar *buffer, unsigned cnt);
 
-struct serial_device *default_serial_console(void)
+struct stdio_dev *default_serial_console(void)
 {
 	uchar buf[4];
 	ulong delay;
diff --git a/board/lwmon/lwmon.c b/board/lwmon/lwmon.c
index 75b3209..b380c6c 100644
--- a/board/lwmon/lwmon.c
+++ b/board/lwmon/lwmon.c
@@ -469,7 +469,7 @@ int board_postclk_init (void)
 	return (0);
 }
 
-struct serial_device * default_serial_console (void)
+struct stdio_dev * default_serial_console (void)
 {
 	return gd->do_mdm_init ? &serial_scc_device : &serial_smc_device;
 }
diff --git a/board/omap3/zoom2/zoom2_serial.h b/board/omap3/zoom2/zoom2_serial.h
index c98158f..c963dc2 100644
--- a/board/omap3/zoom2/zoom2_serial.h
+++ b/board/omap3/zoom2/zoom2_serial.h
@@ -60,16 +60,16 @@ int quad_tstc_##n(void)				\
 {						\
 	return quad_tstc_dev(QUAD_BASE_##n);	\
 }						\
-struct serial_device zoom2_serial_device##n =	\
+struct stdio_dev zoom2_serial_device##n =	\
 {						\
-	N(n),					\
-	U(n),					\
-	quad_init_##n,				\
-	quad_setbrg_##n,			\
-	quad_getc_##n,				\
-	quad_tstc_##n,				\
-	quad_putc_##n,				\
-	quad_puts_##n,				\
+	.name = N(n),				\
+	.ctlr = U(n),				\
+	.start = quad_init_##n,			\
+	.setbrg = quad_setbrg_##n,		\
+	.getc = quad_getc_##n,			\
+	.tstc = quad_tstc_##n,			\
+	.putc = quad_putc_##n,			\
+	.puts = quad_puts_##n,			\
 };
 
 #endif /* ZOOM2_SERIAL_H */
diff --git a/board/trizepsiv/conxs.c b/board/trizepsiv/conxs.c
index 8c11456..e88c86c 100644
--- a/board/trizepsiv/conxs.c
+++ b/board/trizepsiv/conxs.c
@@ -40,9 +40,9 @@ DECLARE_GLOBAL_DATA_PTR;
 #define		RH_A_PSM	(1 << 8)	/* power switching mode */
 #define		RH_A_NPS	(1 << 9)	/* no power switching */
 
-extern struct serial_device serial_ffuart_device;
-extern struct serial_device serial_btuart_device;
-extern struct serial_device serial_stuart_device;
+extern struct stdio_dev serial_ffuart_device;
+extern struct stdio_dev serial_btuart_device;
+extern struct stdio_dev serial_stuart_device;
 
 #if CONFIG_POLARIS
 #define BOOT_CONSOLE	"serial_stuart"
@@ -130,7 +130,7 @@ int board_late_init(void)
 	return 0;
 }
 
-struct serial_device *default_serial_console (void)
+struct stdio_dev *default_serial_console (void)
 {
 	return &serial_ffuart_device;
 }
diff --git a/common/serial.c b/common/serial.c
index 41a24c2..f85a52e 100644
--- a/common/serial.c
+++ b/common/serial.c
@@ -27,11 +27,10 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static struct serial_device *serial_devices = NULL;
-static struct serial_device *serial_current = NULL;
+static struct stdio_dev *serial_current = NULL;
 
 #if !defined(CONFIG_LWMON) && !defined(CONFIG_PXA27X)
-struct serial_device *__default_serial_console (void)
+struct stdio_dev *__default_serial_console (void)
 {
 #if defined(CONFIG_8xx_CONS_SMC1) || defined(CONFIG_8xx_CONS_SMC2)
 	return &serial_smc_device;
@@ -76,20 +75,20 @@ struct serial_device *__default_serial_console (void)
 #endif
 }
 
-struct serial_device *default_serial_console(void) __attribute__((weak, alias("__default_serial_console")));
+struct stdio_dev *default_serial_console(void) __attribute__((weak, alias("__default_serial_console")));
 #endif
 
-int serial_register (struct serial_device *dev)
+int serial_register (struct stdio_dev *dev)
 {
-	dev->init += gd->reloc_off;
+	dev->flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_SERIAL;
+	dev->start += gd->reloc_off;
 	dev->setbrg += gd->reloc_off;
 	dev->getc += gd->reloc_off;
 	dev->tstc += gd->reloc_off;
 	dev->putc += gd->reloc_off;
 	dev->puts += gd->reloc_off;
 
-	dev->next = serial_devices;
-	serial_devices = dev;
+	stdio_register(dev);
 
 	return 0;
 }
@@ -142,67 +141,65 @@ void serial_initialize (void)
 	serial_assign (default_serial_console ()->name);
 }
 
-void serial_stdio_init (void)
+static struct stdio_dev* serial_get_by_name(char* name)
 {
-	struct stdio_dev dev;
-	struct serial_device *s = serial_devices;
+	struct stdio_dev *dev = stdio_get_by_name(name);
 
-	while (s) {
-		memset (&dev, 0, sizeof (dev));
+	if (!dev || (dev->flags & DEV_FLAGS_SERIAL) != DEV_FLAGS_SERIAL)
+		return NULL;
 
-		strcpy (dev.name, s->name);
-		dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT;
-
-		dev.start = s->init;
-		dev.putc = s->putc;
-		dev.puts = s->puts;
-		dev.getc = s->getc;
-		dev.tstc = s->tstc;
-
-		stdio_register (&dev);
-
-		s = s->next;
-	}
+	return dev;
 }
 
 int serial_assign (char *name)
 {
-	struct serial_device *s;
+	struct stdio_dev *s = serial_get_by_name(name);
 
-	for (s = serial_devices; s; s = s->next) {
-		if (strcmp (s->name, name) == 0) {
-			serial_current = s;
-			return 0;
-		}
-	}
+	if (!s)
+		return 1;
 
-	return 1;
+	serial_current = s;
+	return 0;
 }
 
 void serial_reinit_all (void)
 {
-	struct serial_device *s;
-
-	for (s = serial_devices; s; s = s->next) {
-		s->init ();
+	struct list_head *pos;
+	struct stdio_dev *dev;
+	struct list_head *head = stdio_get_list();
+
+	list_for_each(pos, head) {
+		dev = list_entry(pos, struct stdio_dev, list);
+		if ((dev->flags & DEV_FLAGS_SERIAL) != DEV_FLAGS_SERIAL)
+			continue;
+		if (dev->stop)
+			dev->stop ();
+		if (dev->start)
+			dev->start ();
 	}
 }
 
 int serial_init (void)
 {
 	if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-		struct serial_device *dev = default_serial_console ();
+		struct stdio_dev *dev = default_serial_console ();
+
+		if (dev->start)
+			return dev->start ();
 
-		return dev->init ();
+		return 0;
 	}
 
-	return serial_current->init ();
+	if (serial_current->start)
+		return serial_current->start ();
+
+	return 0;
 }
 
 void serial_setbrg (void)
 {
 	if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-		struct serial_device *dev = default_serial_console ();
+		struct stdio_dev *dev = default_serial_console ();
 
 		dev->setbrg ();
 		return;
@@ -214,7 +211,7 @@ void serial_setbrg (void)
 int serial_getc (void)
 {
 	if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-		struct serial_device *dev = default_serial_console ();
+		struct stdio_dev *dev = default_serial_console ();
 
 		return dev->getc ();
 	}
@@ -225,7 +222,7 @@ int serial_getc (void)
 int serial_tstc (void)
 {
 	if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-		struct serial_device *dev = default_serial_console ();
+		struct stdio_dev *dev = default_serial_console ();
 
 		return dev->tstc ();
 	}
@@ -236,7 +233,7 @@ int serial_tstc (void)
 void serial_putc (const char c)
 {
 	if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-		struct serial_device *dev = default_serial_console ();
+		struct stdio_dev *dev = default_serial_console ();
 
 		dev->putc (c);
 		return;
@@ -248,7 +245,7 @@ void serial_putc (const char c)
 void serial_puts (const char *s)
 {
 	if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-		struct serial_device *dev = default_serial_console ();
+		struct stdio_dev *dev = default_serial_console ();
 
 		dev->puts (s);
 		return;
diff --git a/common/stdio.c b/common/stdio.c
index 697df5a..7de7d00 100644
--- a/common/stdio.c
+++ b/common/stdio.c
@@ -234,9 +234,6 @@ int stdio_init (void)
 	drv_logbuff_init ();
 #endif
 	drv_system_init ();
-#ifdef CONFIG_SERIAL_MULTI
-	serial_stdio_init ();
-#endif
 #ifdef CONFIG_USB_TTY
 	drv_usbtty_init ();
 #endif
diff --git a/cpu/mpc5xxx/serial.c b/cpu/mpc5xxx/serial.c
index a8a384a..ce543a6 100644
--- a/cpu/mpc5xxx/serial.c
+++ b/cpu/mpc5xxx/serial.c
@@ -352,28 +352,28 @@ int serial1_tstc(void)
 	return (serial_tstc_dev(PSC_BASE2));
 }
 
-struct serial_device serial0_device =
+struct stdio_dev serial0_device =
 {
-	"serial0",
-	"UART0",
-	serial0_init,
-	serial0_setbrg,
-	serial0_getc,
-	serial0_tstc,
-	serial0_putc,
-	serial0_puts,
+	.name = "serial0",
+	.ctlr = "UART0",
+	.start = serial0_init,
+	.setbrg = serial0_setbrg,
+	.getc = serial0_getc,
+	.tstc = serial0_tstc,
+	.putc = serial0_putc,
+	.puts = serial0_puts,
 };
 
-struct serial_device serial1_device =
+struct stdio_dev serial1_device =
 {
-	"serial1",
-	"UART1",
-	serial1_init,
-	serial1_setbrg,
-	serial1_getc,
-	serial1_tstc,
-	serial1_putc,
-	serial1_puts,
+	.name = "serial1",
+	.ctlr = "UART1",
+	.start = serial1_init,
+	.setbrg = serial1_setbrg,
+	.getc = serial1_getc,
+	.tstc = serial1_tstc,
+	.putc = serial1_putc,
+	.puts = serial1_puts,
 };
 #endif /* CONFIG_SERIAL_MULTI */
 
diff --git a/cpu/mpc8xx/serial.c b/cpu/mpc8xx/serial.c
index 664db65..7727013 100644
--- a/cpu/mpc8xx/serial.c
+++ b/cpu/mpc8xx/serial.c
@@ -387,16 +387,16 @@ smc_tstc(void)
 	return !(rtx->rxbd.cbd_sc & BD_SC_EMPTY);
 }
 
-struct serial_device serial_smc_device =
+struct stdio_dev serial_smc_device =
 {
-	"serial_smc",
-	"SMC",
-	smc_init,
-	smc_setbrg,
-	smc_getc,
-	smc_tstc,
-	smc_putc,
-	smc_puts,
+	.name = "serial_smc",
+	.ctlr = "SMC",
+	.start = smc_init,
+	.setbrg = smc_setbrg,
+	.getc = smc_getc,
+	.tstc = smc_tstc,
+	.putc = smc_putc,
+	.puts = smc_puts,
 };
 
 #endif /* CONFIG_8xx_CONS_SMC1 || CONFIG_8xx_CONS_SMC2 */
@@ -657,16 +657,16 @@ scc_tstc(void)
 	return(!(rbdf->cbd_sc & BD_SC_EMPTY));
 }
 
-struct serial_device serial_scc_device =
+struct stdio_dev serial_scc_device =
 {
-	"serial_scc",
-	"SCC",
-	scc_init,
-	scc_setbrg,
-	scc_getc,
-	scc_tstc,
-	scc_putc,
-	scc_puts,
+	.name = "serial_scc",
+	.ctlr = "SCC",
+	.start = scc_init,
+	.setbrg = scc_setbrg,
+	.getc = scc_getc,
+	.tstc = scc_tstc,
+	.putc = scc_putc,
+	.puts = scc_puts,
 };
 
 #endif	/* CONFIG_8xx_CONS_SCCx */
diff --git a/cpu/ppc4xx/4xx_uart.c b/cpu/ppc4xx/4xx_uart.c
index 0780624..9c21cce 100644
--- a/cpu/ppc4xx/4xx_uart.c
+++ b/cpu/ppc4xx/4xx_uart.c
@@ -817,28 +817,28 @@ int serial1_tstc(void)
 	return (serial_tstc_dev(UART1_BASE));
 }
 
-struct serial_device serial0_device =
-{
-	"serial0",
-	"UART0",
-	serial0_init,
-	serial0_setbrg,
-	serial0_getc,
-	serial0_tstc,
-	serial0_putc,
-	serial0_puts,
+struct stdio_dev serial0_device =
+{
+	.name = "serial0",
+	.ctlr = "UART0",
+	.start = serial0_init,
+	.setbrg = serial0_setbrg,
+	.getc = serial0_getc,
+	.tstc = serial0_tstc,
+	.putc = serial0_putc,
+	.puts = serial0_puts,
 };
 
-struct serial_device serial1_device =
+struct stdio_dev serial1_device =
 {
-	"serial1",
-	"UART1",
-	serial1_init,
-	serial1_setbrg,
-	serial1_getc,
-	serial1_tstc,
-	serial1_putc,
-	serial1_puts,
+	.name = "serial1",
+	.ctlr = "UART1",
+	.start = serial1_init,
+	.setbrg = serial1_setbrg,
+	.getc = serial1_getc,
+	.tstc = serial1_tstc,
+	.putc = serial1_putc,
+	.puts = serial1_puts,
 };
 #else
 /*
diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c
index dd5f332..d81a5b5 100644
--- a/drivers/serial/serial.c
+++ b/drivers/serial/serial.c
@@ -112,14 +112,14 @@ static NS16550_t serial_ports[4] = {
 
 /* Serial device descriptor */
 #define INIT_ESERIAL_STRUCTURE(port,name,bus) {\
-	name,\
-	bus,\
-	eserial##port##_init,\
-	eserial##port##_setbrg,\
-	eserial##port##_getc,\
-	eserial##port##_tstc,\
-	eserial##port##_putc,\
-	eserial##port##_puts, }
+	.name = name,\
+	.ctlr = bus,\
+	.start = eserial##port##_init,\
+	.setbrg = eserial##port##_setbrg,\
+	.getc = eserial##port##_getc,\
+	.tstc = eserial##port##_tstc,\
+	.putc = eserial##port##_putc,\
+	.puts = eserial##port##_puts, }
 
 #endif /* CONFIG_SERIAL_MULTI */
 
@@ -317,15 +317,15 @@ serial_setbrg(void)
 #if defined(CONFIG_SERIAL_MULTI)
 
 DECLARE_ESERIAL_FUNCTIONS(1);
-struct serial_device eserial1_device =
+struct stdio_dev eserial1_device =
 	INIT_ESERIAL_STRUCTURE(1,"eserial0","EUART1");
 DECLARE_ESERIAL_FUNCTIONS(2);
-struct serial_device eserial2_device =
+struct stdio_dev eserial2_device =
 	INIT_ESERIAL_STRUCTURE(2,"eserial1","EUART2");
 DECLARE_ESERIAL_FUNCTIONS(3);
-struct serial_device eserial3_device =
+struct stdio_dev eserial3_device =
 	INIT_ESERIAL_STRUCTURE(3,"eserial2","EUART3");
 DECLARE_ESERIAL_FUNCTIONS(4);
-struct serial_device eserial4_device =
+struct stdio_dev eserial4_device =
 	INIT_ESERIAL_STRUCTURE(4,"eserial3","EUART4");
 #endif /* CONFIG_SERIAL_MULTI */
diff --git a/drivers/serial/serial_pxa.c b/drivers/serial/serial_pxa.c
index 9ba457e..da3b292 100644
--- a/drivers/serial/serial_pxa.c
+++ b/drivers/serial/serial_pxa.c
@@ -261,16 +261,16 @@ static int ffuart_tstc(void)
 	return pxa_tstc_dev(FFUART_INDEX);
 }
 
-struct serial_device serial_ffuart_device =
+struct stdio_dev serial_ffuart_device =
 {
-	"serial_ffuart",
-	"PXA",
-	ffuart_init,
-	ffuart_setbrg,
-	ffuart_getc,
-	ffuart_tstc,
-	ffuart_putc,
-	ffuart_puts,
+	.name = "serial_ffuart",
+	.ctlr = "PXA",
+	.start = ffuart_init,
+	.setbrg = ffuart_setbrg,
+	.getc = ffuart_getc,
+	.tstc = ffuart_tstc,
+	.putc = ffuart_putc,
+	.puts = ffuart_puts,
 };
 #endif
 
@@ -305,16 +305,16 @@ static int btuart_tstc(void)
 	return pxa_tstc_dev(BTUART_INDEX);
 }
 
-struct serial_device serial_btuart_device =
+struct stdio_dev serial_btuart_device =
 {
-	"serial_btuart",
-	"PXA",
-	btuart_init,
-	btuart_setbrg,
-	btuart_getc,
-	btuart_tstc,
-	btuart_putc,
-	btuart_puts,
+	.name = "serial_btuart",
+	.ctlr = "PXA",
+	.start = btuart_init,
+	.setbrg = btuart_setbrg,
+	.getc = btuart_getc,
+	.tstc = btuart_tstc,
+	.putc = btuart_putc,
+	.puts = btuart_puts,
 };
 #endif
 
@@ -349,16 +349,16 @@ static int stuart_tstc(void)
 	return pxa_tstc_dev(STUART_INDEX);
 }
 
-struct serial_device serial_stuart_device =
+struct stdio_dev serial_stuart_device =
 {
-	"serial_stuart",
-	"PXA",
-	stuart_init,
-	stuart_setbrg,
-	stuart_getc,
-	stuart_tstc,
-	stuart_putc,
-	stuart_puts,
+	.name = "serial_stuart",
+	.ctlr = "PXA",
+	.start = stuart_init,
+	.setbrg = stuart_setbrg,
+	.getc = stuart_getc,
+	.tstc = stuart_tstc,
+	.putc = stuart_putc,
+	.puts = stuart_puts,
 };
 #endif
 
diff --git a/drivers/serial/serial_s3c24x0.c b/drivers/serial/serial_s3c24x0.c
index 6d69c43..dc27e00 100644
--- a/drivers/serial/serial_s3c24x0.c
+++ b/drivers/serial/serial_s3c24x0.c
@@ -65,14 +65,14 @@ DECLARE_GLOBAL_DATA_PTR;
 	serial_puts_dev(port, s);}
 
 #define INIT_S3C_SERIAL_STRUCTURE(port,name,bus) {\
-	name,\
-	bus,\
-	s3serial##port##_init,\
-	s3serial##port##_setbrg,\
-	s3serial##port##_getc,\
-	s3serial##port##_tstc,\
-	s3serial##port##_putc,\
-	s3serial##port##_puts, }
+	.name = name,\
+	.ctlr = bus,\
+	.start = s3serial##port##_init,\
+	.setbrg = s3serial##port##_setbrg,\
+	.getc = s3serial##port##_getc,\
+	.tstc = s3serial##port##_tstc,\
+	.putc = s3serial##port##_putc,\
+	.puts = s3serial##port##_puts, }
 
 #endif /* CONFIG_SERIAL_MULTI */
 
@@ -288,13 +288,13 @@ serial_puts (const char *s)
 
 #if defined(CONFIG_SERIAL_MULTI)
 DECLARE_S3C_SERIAL_FUNCTIONS(0);
-struct serial_device s3c24xx_serial0_device =
+struct stdio_dev s3c24xx_serial0_device =
 	INIT_S3C_SERIAL_STRUCTURE(0, "s3ser0", "S3UART1");
 DECLARE_S3C_SERIAL_FUNCTIONS(1);
-struct serial_device s3c24xx_serial1_device =
+struct stdio_dev s3c24xx_serial1_device =
 	INIT_S3C_SERIAL_STRUCTURE(1, "s3ser1", "S3UART2");
 DECLARE_S3C_SERIAL_FUNCTIONS(2);
-struct serial_device s3c24xx_serial2_device =
+struct stdio_dev s3c24xx_serial2_device =
 	INIT_S3C_SERIAL_STRUCTURE(2, "s3ser2", "S3UART3");
 
 #endif /* CONFIG_SERIAL_MULTI */
diff --git a/include/serial.h b/include/serial.h
dissimilarity index 65%
index 821b583..4e9c016 100644
--- a/include/serial.h
+++ b/include/serial.h
@@ -1,62 +1,47 @@
-#ifndef __SERIAL_H__
-#define __SERIAL_H__
-
-#define NAMESIZE 16
-#define CTLRSIZE 8
-
-struct serial_device {
-	char name[NAMESIZE];
-	char ctlr[CTLRSIZE];
-
-	int  (*init) (void);
-	void (*setbrg) (void);
-	int (*getc) (void);
-	int (*tstc) (void);
-	void (*putc) (const char c);
-	void (*puts) (const char *s);
-
-	struct serial_device *next;
-};
-
-extern struct serial_device serial_smc_device;
-extern struct serial_device serial_scc_device;
-extern struct serial_device * default_serial_console (void);
-
-#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_440) || \
-    defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX) || \
-    defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC83xx) || \
-    defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
-extern struct serial_device serial0_device;
-extern struct serial_device serial1_device;
-#if defined(CONFIG_SYS_NS16550_SERIAL)
-extern struct serial_device eserial1_device;
-extern struct serial_device eserial2_device;
-extern struct serial_device eserial3_device;
-extern struct serial_device eserial4_device;
-#endif /* CONFIG_SYS_NS16550_SERIAL */
-
-#endif
-
-#if defined(CONFIG_S3C2410)
-extern struct serial_device s3c24xx_serial0_device;
-extern struct serial_device s3c24xx_serial1_device;
-extern struct serial_device s3c24xx_serial2_device;
-#endif
-
-#if defined(CONFIG_OMAP3_ZOOM2)
-extern struct serial_device zoom2_serial_device0;
-extern struct serial_device zoom2_serial_device1;
-extern struct serial_device zoom2_serial_device2;
-extern struct serial_device zoom2_serial_device3;
-#endif
-
-extern struct serial_device serial_ffuart_device;
-extern struct serial_device serial_btuart_device;
-extern struct serial_device serial_stuart_device;
-
-extern void serial_initialize(void);
-extern void serial_stdio_init(void);
-extern int serial_assign(char * name);
-extern void serial_reinit_all(void);
-
-#endif
+#ifndef __SERIAL_H__
+#define __SERIAL_H__
+
+#include <stdio_dev.h>
+
+extern struct stdio_dev serial_smc_device;
+extern struct stdio_dev serial_scc_device;
+extern struct stdio_dev * default_serial_console (void);
+
+#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_440) || \
+    defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX) || \
+    defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC83xx) || \
+    defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
+extern struct stdio_dev serial0_device;
+extern struct stdio_dev serial1_device;
+#if defined(CONFIG_SYS_NS16550_SERIAL)
+extern struct stdio_dev eserial1_device;
+extern struct stdio_dev eserial2_device;
+extern struct stdio_dev eserial3_device;
+extern struct stdio_dev eserial4_device;
+#endif /* CONFIG_SYS_NS16550_SERIAL */
+
+#endif
+
+#if defined(CONFIG_S3C2410)
+extern struct stdio_dev s3c24xx_serial0_device;
+extern struct stdio_dev s3c24xx_serial1_device;
+extern struct stdio_dev s3c24xx_serial2_device;
+#endif
+
+#if defined(CONFIG_OMAP3_ZOOM2)
+extern struct stdio_dev zoom2_serial_device0;
+extern struct stdio_dev zoom2_serial_device1;
+extern struct stdio_dev zoom2_serial_device2;
+extern struct stdio_dev zoom2_serial_device3;
+#endif
+
+extern struct stdio_dev serial_ffuart_device;
+extern struct stdio_dev serial_btuart_device;
+extern struct stdio_dev serial_stuart_device;
+
+extern void serial_initialize(void);
+extern void serial_stdio_init(void);
+extern int serial_assign(char * name);
+extern void serial_reinit_all(void);
+
+#endif
diff --git a/include/stdio_dev.h b/include/stdio_dev.h
index 83da4cd..5bb2cad 100644
--- a/include/stdio_dev.h
+++ b/include/stdio_dev.h
@@ -32,14 +32,19 @@
 
 #define DEV_FLAGS_INPUT	 0x00000001	/* Device can be used as input	console */
 #define DEV_FLAGS_OUTPUT 0x00000002	/* Device can be used as output console */
+#define DEV_FLAGS_SERIAL 0x00000003	/* Device is a serial device		*/
 #define DEV_FLAGS_SYSTEM 0x80000000	/* Device is a system device		*/
 #define DEV_EXT_VIDEO	 0x00000001	/* Video extensions supported		*/
 
+#define NAMESIZE 16
+#define CTLRSIZE 8
+
 /* Device information */
 struct stdio_dev {
 	int	flags;			/* Device flags: input/output/system	*/
 	int	ext;			/* Supported extensions			*/
-	char	name[16];		/* Device name				*/
+	char	name[NAMESIZE];		/* Device name				*/
+	char	ctlr[CTLRSIZE];
 
 /* GENERAL functions */
 
@@ -57,6 +62,7 @@ struct stdio_dev {
 	int (*getc) (void);		/* To get that char			*/
 
 /* Other functions */
+	void (*setbrg) (void);		/* Set baudrate				*/
 
 	void *priv;			/* Private extensions			*/
 	struct list_head list;
@@ -96,6 +102,7 @@ void	stdio_print_current_devices(void);
 int	stdio_deregister(char *devname);
 #endif
 struct list_head* stdio_get_list(void);
+struct stdio_dev* stdio_get_devs(void);
 struct stdio_dev* stdio_get_by_name(char* name);
 struct stdio_dev* stdio_clone(struct stdio_dev *dev);
 
-- 
1.6.3.1



More information about the U-Boot mailing list