[U-Boot] [RFC] Serial API cleanup

Hi,
currenlty we have 3 api for stdio device : stdio_dev, serial_device (multi-serial) and the serial_getc/putc...
this cleanup will join them in one api the stdio_dev which will support the multi-serial for before and after relocation
this will also pass the current device to the driver to allow it to have base address and other information to simplify the implementation and avoid workarround as done for ns16550 on the omap3 zoom or ppc4xx as example
Best Regards, J.

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

to allow it to have base address and other information to simplify the implementation and avoid workarround as done for ns16550 on the omap3 zoom or ppc4xx as example
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com --- board/MAI/AmigaOneG3SE/video.c | 10 +++--- board/bf527-ezkit/video.c | 4 +- board/bf548-ezkit/video.c | 4 +- board/cm-bf548/video.c | 4 +- board/omap3/zoom2/zoom2_serial.h | 70 +++++++++++++++++++------------------- board/rbc823/kbd.c | 4 +- common/cmd_log.c | 16 ++++++--- common/console.c | 18 +++++----- common/lcd.c | 21 +++++++++-- common/serial.c | 28 +++++++------- common/stdio.c | 58 ++++++++++++++++++++++++------- common/usb_kbd.c | 4 +- cpu/blackfin/jtag-console.c | 8 ++-- cpu/mpc5xxx/serial.c | 24 ++++++------ cpu/mpc8xx/serial.c | 32 +++++++++--------- cpu/mpc8xx/video.c | 6 ++-- cpu/ppc4xx/4xx_uart.c | 24 ++++++------ drivers/input/i8042.c | 4 +- drivers/net/netconsole.c | 10 +++--- drivers/serial/arm_dcc.c | 39 ++++++++++++++------- drivers/serial/serial.c | 12 +++--- drivers/serial/serial_pxa.c | 36 ++++++++++---------- drivers/serial/serial_s3c24x0.c | 12 +++--- drivers/serial/usbtty.c | 8 ++-- drivers/video/cfb_console.c | 6 ++-- include/i8042.h | 4 +- include/stdio_dev.h | 14 ++++---- lib_i386/video.c | 4 +- 28 files changed, 273 insertions(+), 211 deletions(-)
diff --git a/board/MAI/AmigaOneG3SE/video.c b/board/MAI/AmigaOneG3SE/video.c index e24e28b..4827f50 100644 --- a/board/MAI/AmigaOneG3SE/video.c +++ b/board/MAI/AmigaOneG3SE/video.c @@ -46,8 +46,8 @@ unsigned int video_scrolls = 0; #define VIDEO_NAME "vga"
void video_test(void); -void video_putc(char ch); -void video_puts(char *string); +void video_putc(struct stdio_dev *dev, char ch); +void video_puts(struct stdio_dev *dev, char *string); void video_scroll(int rows); void video_banner(void); int video_init(void); @@ -163,7 +163,7 @@ void video_test(void)
}
-void video_putc(char ch) +void video_putc(struct stdio_dev *dev, char ch) { switch(ch) { @@ -224,11 +224,11 @@ void video_scroll(int rows) cursor_col=0; }
-void video_puts(char *string) +void video_puts(struct stdio_dev *dev, char *string) { while (*string) { - video_putc(*string); + video_putc(dev, *string); string++; } } diff --git a/board/bf527-ezkit/video.c b/board/bf527-ezkit/video.c index 0b6b7b2..1c10d04 100644 --- a/board/bf527-ezkit/video.c +++ b/board/bf527-ezkit/video.c @@ -261,11 +261,11 @@ static void dma_bitblit(void *dst, fastimage_t *logo, int x, int y)
}
-void video_putc(const char c) +void video_putc(struct stdio_dev *dev, const char c) { }
-void video_puts(const char *s) +void video_puts(struct stdio_dev *dev, const char *s) { }
diff --git a/board/bf548-ezkit/video.c b/board/bf548-ezkit/video.c index f4f1bec..2d1ca7c 100644 --- a/board/bf548-ezkit/video.c +++ b/board/bf548-ezkit/video.c @@ -271,11 +271,11 @@ static void dma_bitblit(void *dst, fastimage_t *logo, int x, int y)
}
-void video_putc(const char c) +void video_putc(struct stdio_dev *dev, const char c) { }
-void video_puts(const char *s) +void video_puts(struct stdio_dev *dev, const char *s) { }
diff --git a/board/cm-bf548/video.c b/board/cm-bf548/video.c index 49dbe77..f963257 100644 --- a/board/cm-bf548/video.c +++ b/board/cm-bf548/video.c @@ -280,11 +280,11 @@ static void dma_bitblit(void *dst, fastimage_t *logo, int x, int y)
}
-void video_putc(const char c) +void video_putc(struct stdio_dev *dev, const char c) { }
-void video_puts(const char *s) +void video_puts(struct stdio_dev *dev, const char *s) { }
diff --git a/board/omap3/zoom2/zoom2_serial.h b/board/omap3/zoom2/zoom2_serial.h index c963dc2..76a84a4 100644 --- a/board/omap3/zoom2/zoom2_serial.h +++ b/board/omap3/zoom2/zoom2_serial.h @@ -35,41 +35,41 @@ extern int zoom2_debug_board_connected (void); #define N(a) S(quad##a) #define U(a) S(UART##a)
-#define QUAD_INIT(n) \ -int quad_init_##n(void) \ -{ \ - return quad_init_dev(QUAD_BASE_##n); \ -} \ -void quad_setbrg_##n(void) \ -{ \ - quad_setbrg_dev(QUAD_BASE_##n); \ -} \ -void quad_putc_##n(const char c) \ -{ \ - quad_putc_dev(QUAD_BASE_##n, c); \ -} \ -void quad_puts_##n(const char *s) \ -{ \ - quad_puts_dev(QUAD_BASE_##n, s); \ -} \ -int quad_getc_##n(void) \ -{ \ - return quad_getc_dev(QUAD_BASE_##n); \ -} \ -int quad_tstc_##n(void) \ -{ \ - return quad_tstc_dev(QUAD_BASE_##n); \ -} \ -struct stdio_dev zoom2_serial_device##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, \ +#define QUAD_INIT(n) \ +int quad_init_##n(struct stdio_dev *dev) \ +{ \ + return quad_init_dev(QUAD_BASE_##n); \ +} \ +void quad_setbrg_##n(struct stdio_dev *dev) \ +{ \ + quad_setbrg_dev(QUAD_BASE_##n); \ +} \ +void quad_putc_##n(struct stdio_dev *dev, const char c) \ +{ \ + quad_putc_dev(QUAD_BASE_##n, c); \ +} \ +void quad_puts_##n(struct stdio_dev *dev, const char *s)\ +{ \ + quad_puts_dev(QUAD_BASE_##n, s); \ +} \ +int quad_getc_##n(struct stdio_dev *dev) \ +{ \ + return quad_getc_dev(QUAD_BASE_##n); \ +} \ +int quad_tstc_##n(struct stdio_dev *dev) \ +{ \ + return quad_tstc_dev(QUAD_BASE_##n); \ +} \ +struct stdio_dev zoom2_serial_device##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/rbc823/kbd.c b/board/rbc823/kbd.c index 853cbde..d404362 100644 --- a/board/rbc823/kbd.c +++ b/board/rbc823/kbd.c @@ -205,7 +205,7 @@ void smc1_putc(const char c) } }
-int smc1_getc(void) +int smc1_getc(struct stdio_dev *dev) { volatile cbd_t *rbdf; volatile unsigned char *buf; @@ -231,7 +231,7 @@ int smc1_getc(void) return(c); }
-int smc1_tstc(void) +int smc1_tstc(struct stdio_dev *dev) { volatile cbd_t *rbdf; volatile smc_uart_t *up; diff --git a/common/cmd_log.c b/common/cmd_log.c index 3653fe1..b1803dc 100644 --- a/common/cmd_log.c +++ b/common/cmd_log.c @@ -49,8 +49,9 @@ DECLARE_GLOBAL_DATA_PTR;
/* Local prototypes */ -static void logbuff_putc (const char c); -static void logbuff_puts (const char *s); +static void stdio_logbuff_putc (struct stdio_dev *dev, const char c); +static void stdio_logbuff_puts (struct stdio_dev *dev, const char *s); +static void logbuff_putc (const char c) static int logbuff_printk(const char *line);
static char buf[1024]; @@ -151,14 +152,19 @@ int drv_logbuff_init (void) strcpy (logdev.name, "logbuff"); logdev.ext = 0; /* No extensions */ logdev.flags = DEV_FLAGS_OUTPUT; /* Output only */ - logdev.putc = logbuff_putc; /* 'putc' function */ - logdev.puts = logbuff_puts; /* 'puts' function */ + logdev.putc = stdio_logbuff_putc; /* 'putc' function */ + logdev.puts = stdio_logbuff_puts; /* 'puts' function */
rc = stdio_register (&logdev);
return (rc == 0) ? 1 : rc; }
+static void stdio_logbuff_putc (struct stdio_dev *dev, const char c) +{ + logbuff_putc(c); +} + static void logbuff_putc (const char c) { char buf[2]; @@ -167,7 +173,7 @@ static void logbuff_putc (const char c) logbuff_printk (buf); }
-static void logbuff_puts (const char *s) +static void stdio_logbuff_puts (struct stdio_dev *dev, const char *s) { logbuff_printk (s); } diff --git a/common/console.c b/common/console.c index 867c12c..af59b58 100644 --- a/common/console.c +++ b/common/console.c @@ -61,7 +61,7 @@ static int console_setfile(int file, struct stdio_dev * dev) case stderr: /* Start new device */ if (dev->start) { - error = dev->start(); + error = dev->start(dev); /* If it's not started dont use it */ if (error < 0) break; @@ -111,7 +111,7 @@ static int console_getc(int file) unsigned char ret;
/* This is never called with testcdev == NULL */ - ret = tstcdev->getc(); + ret = tstcdev->getc(tstcdev); tstcdev = NULL; return ret; } @@ -125,7 +125,7 @@ static int console_tstc(int file) for (i = 0; i < cd_count[file]; i++) { dev = console_devices[file][i]; if (dev->tstc != NULL) { - ret = dev->tstc(); + ret = dev->tstc(dev); if (ret > 0) { tstcdev = dev; disable_ctrlc(0); @@ -146,7 +146,7 @@ static void console_putc(int file, const char c) for (i = 0; i < cd_count[file]; i++) { dev = console_devices[file][i]; if (dev->putc != NULL) - dev->putc(c); + dev->putc(dev, c); } }
@@ -158,7 +158,7 @@ static void console_puts(int file, const char *s) for (i = 0; i < cd_count[file]; i++) { dev = console_devices[file][i]; if (dev->puts != NULL) - dev->puts(s); + dev->puts(dev, s); } }
@@ -174,22 +174,22 @@ static inline void console_doenv(int file, struct stdio_dev *dev) #else static inline int console_getc(int file) { - return stdio_devices[file]->getc(); + return stdio_devices[file]->getc(stdio_devices[file]); }
static inline int console_tstc(int file) { - return stdio_devices[file]->tstc(); + return stdio_devices[file]->tstc(stdio_devices[file]); }
static inline void console_putc(int file, const char c) { - stdio_devices[file]->putc(c); + stdio_devices[file]->putc(stdio_devices[file], c); }
static inline void console_puts(int file, const char *s) { - stdio_devices[file]->puts(s); + stdio_devices[file]->puts(stdio_devices[file], s); }
static inline void console_printdevs(int file) diff --git a/common/lcd.c b/common/lcd.c index dc8fea6..6da4f9d 100644 --- a/common/lcd.c +++ b/common/lcd.c @@ -69,6 +69,7 @@ #endif
DECLARE_GLOBAL_DATA_PTR; +struct stdio_dev lcddev;
ulong lcd_setmem (ulong addr);
@@ -76,6 +77,9 @@ static void lcd_drawchars (ushort x, ushort y, uchar *str, int count); static inline void lcd_puts_xy (ushort x, ushort y, uchar *s); static inline void lcd_putc_xy (ushort x, ushort y, uchar c);
+static void dev_lcd_putc (struct stdio_dev *dev, const char c); +static void dev_lcd_puts (struct stdio_dev *dev, const char *s); + static int lcd_init (void *lcdbase);
static int lcd_clear (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]); @@ -162,6 +166,11 @@ static inline void console_newline (void)
void lcd_putc (const char c) { + dev_lcd_putc(&lcddev, c); +} + +static void dev_lcd_putc (struct stdio_dev *dev, const char c) +{ if (!lcd_is_enabled) { serial_putc(c); return; @@ -201,13 +210,18 @@ void lcd_putc (const char c)
void lcd_puts (const char *s) { + dev_lcd_puts(&lcddev, s); +} + +static void dev_lcd_puts (struct stdio_dev *dev, const char *s) +{ if (!lcd_is_enabled) { serial_puts (s); return; }
while (*s) { - lcd_putc (*s++); + dev_lcd_putc (dev, *s++); } }
@@ -343,7 +357,6 @@ static void test_pattern (void)
int drv_lcd_init (void) { - struct stdio_dev lcddev; int rc;
lcd_base = (void *)(gd->fb_base); @@ -358,8 +371,8 @@ int drv_lcd_init (void) strcpy (lcddev.name, "lcd"); lcddev.ext = 0; /* No extensions */ lcddev.flags = DEV_FLAGS_OUTPUT; /* Output only */ - lcddev.putc = lcd_putc; /* 'putc' function */ - lcddev.puts = lcd_puts; /* 'puts' function */ + lcddev.putc = dev_lcd_putc; /* 'putc' function */ + lcddev.puts = dev_lcd_puts; /* 'puts' function */
rc = stdio_register (&lcddev);
diff --git a/common/serial.c b/common/serial.c index f85a52e..a4171be 100644 --- a/common/serial.c +++ b/common/serial.c @@ -173,9 +173,9 @@ void serial_reinit_all (void) if ((dev->flags & DEV_FLAGS_SERIAL) != DEV_FLAGS_SERIAL) continue; if (dev->stop) - dev->stop (); + dev->stop (dev); if (dev->start) - dev->start (); + dev->start (dev); } }
@@ -185,13 +185,13 @@ int serial_init (void) struct stdio_dev *dev = default_serial_console ();
if (dev->start) - return dev->start (); + return dev->start (dev);
return 0; }
if (serial_current->start) - return serial_current->start (); + return serial_current->start (serial_current);
return 0; } @@ -201,11 +201,11 @@ void serial_setbrg (void) if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { struct stdio_dev *dev = default_serial_console ();
- dev->setbrg (); + dev->setbrg (dev); return; }
- serial_current->setbrg (); + serial_current->setbrg (serial_current); }
int serial_getc (void) @@ -213,10 +213,10 @@ int serial_getc (void) if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { struct stdio_dev *dev = default_serial_console ();
- return dev->getc (); + return dev->getc (dev); }
- return serial_current->getc (); + return serial_current->getc (serial_current); }
int serial_tstc (void) @@ -224,10 +224,10 @@ int serial_tstc (void) if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { struct stdio_dev *dev = default_serial_console ();
- return dev->tstc (); + return dev->tstc (dev); }
- return serial_current->tstc (); + return serial_current->tstc (serial_current); }
void serial_putc (const char c) @@ -235,11 +235,11 @@ void serial_putc (const char c) if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { struct stdio_dev *dev = default_serial_console ();
- dev->putc (c); + dev->putc (dev, c); return; }
- serial_current->putc (c); + serial_current->putc (serial_current, c); }
void serial_puts (const char *s) @@ -247,9 +247,9 @@ void serial_puts (const char *s) if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { struct stdio_dev *dev = default_serial_console ();
- dev->puts (s); + dev->puts (dev, s); return; }
- serial_current->puts (s); + serial_current->puts (serial_current, s); } diff --git a/common/stdio.c b/common/stdio.c index 7de7d00..8590e5b 100644 --- a/common/stdio.c +++ b/common/stdio.c @@ -46,17 +46,17 @@ char *stdio_names[MAX_FILES] = { "stdin", "stdout", "stderr" };
#ifdef CONFIG_SYS_DEVICE_NULLDEV -void nulldev_putc(const char c) +void nulldev_putc(struct stdio_dev *dev, const char c) { /* nulldev is empty! */ }
-void nulldev_puts(const char *s) +void nulldev_puts(struct stdio_dev *dev, const char *s) { /* nulldev is empty! */ }
-int nulldev_input(void) +int nulldev_input(struct stdio_dev *dev) { /* nulldev is empty! */ return 0; @@ -68,6 +68,43 @@ int nulldev_input(void) ************************************************************************** */
+static void stdio_serial_putc(struct stdio_dev *dev, const char c) +{ +#ifdef CONFIG_SERIAL_SOFTWARE_FIFO + serial_buffered_putc(c); +#else + serial_putc(c); +#endif + +} + +static void stdio_serial_puts(struct stdio_dev *dev, const char *s) +{ +#ifdef CONFIG_SERIAL_SOFTWARE_FIFO + serial_buffered_puts(s); +#else + serial_puts(s); +#endif +} + +static int stdio_serial_getc(struct stdio_dev *dev) +{ +#ifdef CONFIG_SERIAL_SOFTWARE_FIFO + return serial_buffered_getc(); +#else + return serial_getc(); +#endif +} + +static int stdio_serial_tstc(struct stdio_dev *dev) +{ +#ifdef CONFIG_SERIAL_SOFTWARE_FIFO + return serial_buffered_tstc(); +#else + return serial_tstc(); +#endif +} + static void drv_system_init (void) { struct stdio_dev dev; @@ -76,17 +113,10 @@ static void drv_system_init (void)
strcpy (dev.name, "serial"); dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM; -#ifdef CONFIG_SERIAL_SOFTWARE_FIFO - dev.putc = serial_buffered_putc; - dev.puts = serial_buffered_puts; - dev.getc = serial_buffered_getc; - dev.tstc = serial_buffered_tstc; -#else - dev.putc = serial_putc; - dev.puts = serial_puts; - dev.getc = serial_getc; - dev.tstc = serial_tstc; -#endif + dev.putc = stdio_serial_putc; + dev.puts = stdio_serial_puts; + dev.getc = stdio_serial_getc; + dev.tstc = stdio_serial_tstc;
stdio_register (&dev);
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index b458d77..638605e 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -118,7 +118,7 @@ static void usb_kbd_put_queue(char data) }
/* test if a character is in the queue */ -static int usb_kbd_testc(void) +static int usb_kbd_testc(struct stdio_dev *dev) { #ifdef CONFIG_SYS_USB_EVENT_POLL usb_event_poll(); @@ -129,7 +129,7 @@ static int usb_kbd_testc(void) return(1); } /* gets the character from the queue */ -static int usb_kbd_getc(void) +static int usb_kbd_getc(struct stdio_dev *dev) { char c; while(usb_in_pointer==usb_out_pointer) { diff --git a/cpu/blackfin/jtag-console.c b/cpu/blackfin/jtag-console.c index 1cd619f..1c51b3e 100644 --- a/cpu/blackfin/jtag-console.c +++ b/cpu/blackfin/jtag-console.c @@ -45,11 +45,11 @@ static void jtag_send(const char *c, uint32_t len) for (i = 0; i < len; i += 4) jtag_write_emudat((c[i] << 0) | (c[i+1] << 8) | (c[i+2] << 16) | (c[i+3] << 24)); } -static void jtag_putc(const char c) +static void jtag_putc(struct stdio_dev *dev, const char c) { jtag_send(&c, 1); } -static void jtag_puts(const char *s) +static void jtag_puts(struct stdio_dev *dev, const char *s) { jtag_send(s, strlen(s)); } @@ -63,7 +63,7 @@ static int jtag_tstc_dbg(void) }
/* Higher layers want to know when any data is available */ -static int jtag_tstc(void) +static int jtag_tstc(struct stdio_dev *dev) { return jtag_tstc_dbg() || leftovers_len; } @@ -72,7 +72,7 @@ static int jtag_tstc(void) * [32bit length][actual data] */ static uint32_t leftovers; -static int jtag_getc(void) +static int jtag_getc(struct stdio_dev *dev) { int ret; uint32_t emudat; diff --git a/cpu/mpc5xxx/serial.c b/cpu/mpc5xxx/serial.c index ce543a6..8112412 100644 --- a/cpu/mpc5xxx/serial.c +++ b/cpu/mpc5xxx/serial.c @@ -296,58 +296,58 @@ int serial_getcts(void) }
#if defined(CONFIG_SERIAL_MULTI) -int serial0_init(void) +int serial0_init(struct stdio_dev *dev) { return (serial_init_dev(PSC_BASE)); }
-int serial1_init(void) +int serial1_init(struct stdio_dev *dev) { return (serial_init_dev(PSC_BASE2)); } -void serial0_setbrg (void) +void serial0_setbrg (struct stdio_dev *dev) { serial_setbrg_dev(PSC_BASE); } -void serial1_setbrg (void) +void serial1_setbrg (struct stdio_dev *dev) { serial_setbrg_dev(PSC_BASE2); }
-void serial0_putc(const char c) +void serial0_putc(struct stdio_dev *dev, const char c) { serial_putc_dev(PSC_BASE,c); }
-void serial1_putc(const char c) +void serial1_putc(struct stdio_dev *dev, const char c) { serial_putc_dev(PSC_BASE2, c); } -void serial0_puts(const char *s) +void serial0_puts(struct stdio_dev *dev, const char *s) { serial_puts_dev(PSC_BASE, s); }
-void serial1_puts(const char *s) +void serial1_puts(struct stdio_dev *dev, const char *s) { serial_puts_dev(PSC_BASE2, s); }
-int serial0_getc(void) +int serial0_getc(struct stdio_dev *dev) { return(serial_getc_dev(PSC_BASE)); }
-int serial1_getc(void) +int serial1_getc(struct stdio_dev *dev) { return(serial_getc_dev(PSC_BASE2)); } -int serial0_tstc(void) +int serial0_tstc(struct stdio_dev *dev) { return (serial_tstc_dev(PSC_BASE)); }
-int serial1_tstc(void) +int serial1_tstc(struct stdio_dev *dev) { return (serial_tstc_dev(PSC_BASE2)); } diff --git a/cpu/mpc8xx/serial.c b/cpu/mpc8xx/serial.c index 7727013..533f6e7 100644 --- a/cpu/mpc8xx/serial.c +++ b/cpu/mpc8xx/serial.c @@ -109,7 +109,7 @@ static void serial_setdivisor(volatile cpm8xx_t *cp) * as serial console interface. */
-static void smc_setbrg (void) +static void smc_setbrg (struct stdio_dev *dev) { volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; volatile cpm8xx_t *cp = &(im->im_cpm); @@ -125,7 +125,7 @@ static void smc_setbrg (void) serial_setdivisor(cp); }
-static int smc_init (void) +static int smc_init (struct stdio_dev *dev) { volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; volatile smc_t *sp; @@ -266,7 +266,7 @@ static int smc_init (void) cp->cp_simode = ((cp->cp_simode & ~0xf000) | 0x7000); #else /* Set up the baud rate generator */ - smc_setbrg (); + smc_setbrg (dev); #endif
/* Make the first buffer the only buffer. */ @@ -294,7 +294,7 @@ static int smc_init (void) }
static void -smc_putc(const char c) +smc_putc(struct stdio_dev *dev, const char c) { volatile smc_uart_t *up; volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; @@ -307,7 +307,7 @@ smc_putc(const char c) #endif
if (c == '\n') - smc_putc ('\r'); + smc_putc (dev, '\r');
up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC]; #ifdef CONFIG_SYS_SMC_UCODE_PATCH @@ -329,15 +329,15 @@ smc_putc(const char c) }
static void -smc_puts (const char *s) +smc_puts (struct stdio_dev *dev, const char *s) { while (*s) { - smc_putc (*s++); + smc_putc (dev, *s++); } }
static int -smc_getc(void) +smc_getc(struct stdio_dev *dev) { volatile smc_uart_t *up; volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; @@ -370,7 +370,7 @@ smc_getc(void) }
static int -smc_tstc(void) +smc_tstc(struct stdio_dev *dev) { volatile smc_uart_t *up; volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; @@ -405,7 +405,7 @@ struct stdio_dev serial_smc_device = defined(CONFIG_8xx_CONS_SCC3) || defined(CONFIG_8xx_CONS_SCC4)
static void -scc_setbrg (void) +scc_setbrg (struct stdio_dev *dev) { volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; volatile cpm8xx_t *cp = &(im->im_cpm); @@ -421,7 +421,7 @@ scc_setbrg (void) serial_setdivisor(cp); }
-static int scc_init (void) +static int scc_init (struct stdio_dev *dev) { volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; volatile scc_t *sp; @@ -502,7 +502,7 @@ static int scc_init (void) tbdf->cbd_sc = 0;
/* Set up the baud rate generator. */ - scc_setbrg (); + scc_setbrg (dev);
/* Set up the uart parameters in the parameter ram. */ up->scc_genscc.scc_rbase = dpaddr; @@ -573,7 +573,7 @@ static int scc_init (void) }
static void -scc_putc(const char c) +scc_putc(struct stdio_dev *dev, const char c) { volatile cbd_t *tbdf; volatile char *buf; @@ -609,7 +609,7 @@ scc_putc(const char c) }
static void -scc_puts (const char *s) +scc_puts (struct stdio_dev *dev, const char *s) { while (*s) { scc_putc (*s++); @@ -617,7 +617,7 @@ scc_puts (const char *s) }
static int -scc_getc(void) +scc_getc(struct stdio_dev *dev) { volatile cbd_t *rbdf; volatile unsigned char *buf; @@ -643,7 +643,7 @@ scc_getc(void) }
static int -scc_tstc(void) +scc_tstc(struct stdio_dev *dev) { volatile cbd_t *rbdf; volatile scc_uart_t *up; diff --git a/cpu/mpc8xx/video.c b/cpu/mpc8xx/video.c index c79c499..61212a6 100644 --- a/cpu/mpc8xx/video.c +++ b/cpu/mpc8xx/video.c @@ -996,7 +996,7 @@ static inline void console_newline (void) } }
-void video_putc (const char c) +void video_putc (struct stdio_dev *dev, const char c) { if (!video_enable) { serial_putc (c); @@ -1033,7 +1033,7 @@ void video_putc (const char c) } }
-void video_puts (const char *s) +void video_puts (struct stdio_dev *dev, const char *s) { int count = strlen (s);
@@ -1042,7 +1042,7 @@ void video_puts (const char *s) serial_putc (*s++); else while (count--) - video_putc (*s++); + video_putc (dev, *s++); }
/************************************************************************/ diff --git a/cpu/ppc4xx/4xx_uart.c b/cpu/ppc4xx/4xx_uart.c index 9c21cce..a7e056b 100644 --- a/cpu/ppc4xx/4xx_uart.c +++ b/cpu/ppc4xx/4xx_uart.c @@ -757,62 +757,62 @@ void kgdb_interruptible (int yes)
#if defined(CONFIG_SERIAL_MULTI) -int serial0_init(void) +int serial0_init(struct stdio_dev *dev) { return (serial_init_dev(UART0_BASE)); }
-int serial1_init(void) +int serial1_init(struct stdio_dev *dev) { return (serial_init_dev(UART1_BASE)); }
-void serial0_setbrg (void) +void serial0_setbrg (struct stdio_dev *dev) { serial_setbrg_dev(UART0_BASE); }
-void serial1_setbrg (void) +void serial1_setbrg (struct stdio_dev *dev) { serial_setbrg_dev(UART1_BASE); }
-void serial0_putc(const char c) +void serial0_putc(struct stdio_dev *dev, const char c) { serial_putc_dev(UART0_BASE,c); }
-void serial1_putc(const char c) +void serial1_putc(struct stdio_dev *dev, const char c) { serial_putc_dev(UART1_BASE, c); }
-void serial0_puts(const char *s) +void serial0_puts(struct stdio_dev *dev, const char *s) { serial_puts_dev(UART0_BASE, s); }
-void serial1_puts(const char *s) +void serial1_puts(struct stdio_dev *dev, const char *s) { serial_puts_dev(UART1_BASE, s); }
-int serial0_getc(void) +int serial0_getc(struct stdio_dev *dev) { return(serial_getc_dev(UART0_BASE)); }
-int serial1_getc(void) +int serial1_getc(struct stdio_dev *dev) { return(serial_getc_dev(UART1_BASE)); }
-int serial0_tstc(void) +int serial0_tstc(struct stdio_dev *dev) { return (serial_tstc_dev(UART0_BASE)); }
-int serial1_tstc(void) +int serial1_tstc(struct stdio_dev *dev) { return (serial_tstc_dev(UART1_BASE)); } diff --git a/drivers/input/i8042.c b/drivers/input/i8042.c index 58094c9..2520021 100644 --- a/drivers/input/i8042.c +++ b/drivers/input/i8042.c @@ -359,7 +359,7 @@ int i8042_kbd_init (void) * i8042_tstc - test if keyboard input is available * option: cursor blinking if called in a loop */ -int i8042_tstc (void) +int i8042_tstc (struct stdio_dev *dev) { unsigned char scan_code = 0;
@@ -395,7 +395,7 @@ int i8042_tstc (void) * i8042_getc - wait till keyboard input is available * option: turn on/off cursor while waiting */ -int i8042_getc (void) +int i8042_getc (struct stdio_dev *dev) { int ret_chr; unsigned char scan_code; diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index f5329a5..428d86d 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -139,7 +139,7 @@ static void nc_send_packet (const char *buf, int len) eth_halt (); }
-int nc_start (void) +int nc_start (struct stdio_dev *dev) { int netmask, our_ip;
@@ -169,7 +169,7 @@ int nc_start (void) return 0; }
-void nc_putc (char c) +void nc_putc (struct stdio_dev *dev, char c) { if (output_recursion) return; @@ -180,7 +180,7 @@ void nc_putc (char c) output_recursion = 0; }
-void nc_puts (const char *s) +void nc_puts (struct stdio_dev *dev, const char *s) { int len;
@@ -196,7 +196,7 @@ void nc_puts (const char *s) output_recursion = 0; }
-int nc_getc (void) +int nc_getc (struct stdio_dev *dev) { uchar c;
@@ -217,7 +217,7 @@ int nc_getc (void) return c; }
-int nc_tstc (void) +int nc_tstc (struct stdio_dev *dev) { struct eth_device *eth;
diff --git a/drivers/serial/arm_dcc.c b/drivers/serial/arm_dcc.c index 7b5ecb5..9c88d03 100644 --- a/drivers/serial/arm_dcc.c +++ b/drivers/serial/arm_dcc.c @@ -90,20 +90,21 @@ #define TIMEOUT_COUNT 0x4000000
#ifndef CONFIG_ARM_DCC_MULTI -#define arm_dcc_init serial_init -void serial_setbrg(void) {} -#define arm_dcc_getc serial_getc -#define arm_dcc_putc serial_putc -#define arm_dcc_puts serial_puts -#define arm_dcc_tstc serial_tstc -#endif - -int arm_dcc_init(void) +int serial_init(void) { return 0; }
-int arm_dcc_getc(void) +void serial_setbrg(void) +{ +} +#endif + +#ifndef CONFIG_ARM_DCC_MULTI +int arm_dcc_getc(struct stdio_dev *dev) +#else +int serial_getc(void) +#endif { int ch; register unsigned int reg; @@ -116,7 +117,11 @@ int arm_dcc_getc(void) return ch; }
-void arm_dcc_putc(char ch) +#ifndef CONFIG_ARM_DCC_MULTI +int arm_dcc_putc(struct stdio_dev *dev, char ch) +#else +void serial_putc(char ch) +#endif { register unsigned int reg; unsigned int timeout_count = TIMEOUT_COUNT; @@ -132,13 +137,21 @@ void arm_dcc_putc(char ch) write_dcc(ch); }
-void arm_dcc_puts(const char *s) +#ifndef CONFIG_ARM_DCC_MULTI +int arm_dcc_puts(struct stdio_dev *dev, const char *s) +#else +void serial_puts(const char *s) +#endif { while (*s) arm_dcc_putc(*s++); }
-int arm_dcc_tstc(void) +#ifndef CONFIG_ARM_DCC_MULTI +int arm_dcc_tstc(struct stdio_dev *dev) +#else +int serial_tstc(void) +#endif { register unsigned int reg;
diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c index d81a5b5..363c24d 100644 --- a/drivers/serial/serial.c +++ b/drivers/serial/serial.c @@ -94,20 +94,20 @@ static NS16550_t serial_ports[4] = {
/* Multi serial device functions */ #define DECLARE_ESERIAL_FUNCTIONS(port) \ - int eserial##port##_init (void) {\ + int eserial##port##_init (struct stdio_dev *dev) {\ int clock_divisor; \ clock_divisor = calc_divisor(serial_ports[port-1]); \ NS16550_init(serial_ports[port-1], clock_divisor); \ return(0);}\ - void eserial##port##_setbrg (void) {\ + void eserial##port##_setbrg (struct stdio_dev *dev) {\ serial_setbrg_dev(port);}\ - int eserial##port##_getc (void) {\ + int eserial##port##_getc (struct stdio_dev *dev) {\ return serial_getc_dev(port);}\ - int eserial##port##_tstc (void) {\ + int eserial##port##_tstc (struct stdio_dev *dev) {\ return serial_tstc_dev(port);}\ - void eserial##port##_putc (const char c) {\ + void eserial##port##_putc (struct stdio_dev *dev, const char c) {\ serial_putc_dev(port, c);}\ - void eserial##port##_puts (const char *s) {\ + void eserial##port##_puts (struct stdio_dev *dev, const char *s) {\ serial_puts_dev(port, s);}
/* Serial device descriptor */ diff --git a/drivers/serial/serial_pxa.c b/drivers/serial/serial_pxa.c index da3b292..c43f7a6 100644 --- a/drivers/serial/serial_pxa.c +++ b/drivers/serial/serial_pxa.c @@ -231,32 +231,32 @@ pxa_puts_dev (unsigned int uart_index,const char *s) }
#if defined (CONFIG_FFUART) -static int ffuart_init(void) +static int ffuart_init(struct stdio_dev *dev) { return pxa_init_dev(FFUART_INDEX); }
-static void ffuart_setbrg(void) +static void ffuart_setbrg(struct stdio_dev *dev) { return pxa_setbrg_dev(FFUART_INDEX); }
-static void ffuart_putc(const char c) +static void ffuart_putc(struct stdio_dev *dev, const char c) { return pxa_putc_dev(FFUART_INDEX,c); }
-static void ffuart_puts(const char *s) +static void ffuart_puts(struct stdio_dev *dev, const char *s) { return pxa_puts_dev(FFUART_INDEX,s); }
-static int ffuart_getc(void) +static int ffuart_getc(struct stdio_dev *dev) { return pxa_getc_dev(FFUART_INDEX); }
-static int ffuart_tstc(void) +static int ffuart_tstc(struct stdio_dev *dev) { return pxa_tstc_dev(FFUART_INDEX); } @@ -275,32 +275,32 @@ struct stdio_dev serial_ffuart_device = #endif
#if defined (CONFIG_BTUART) -static int btuart_init(void) +static int btuart_init(struct stdio_dev *dev) { return pxa_init_dev(BTUART_INDEX); }
-static void btuart_setbrg(void) +static void btuart_setbrg(struct stdio_dev *dev) { return pxa_setbrg_dev(BTUART_INDEX); }
-static void btuart_putc(const char c) +static void btuart_putc(struct stdio_dev *dev, const char c) { return pxa_putc_dev(BTUART_INDEX,c); }
-static void btuart_puts(const char *s) +static void btuart_puts(struct stdio_dev *dev, const char *s) { return pxa_puts_dev(BTUART_INDEX,s); }
-static int btuart_getc(void) +static int btuart_getc(struct stdio_dev *dev) { return pxa_getc_dev(BTUART_INDEX); }
-static int btuart_tstc(void) +static int btuart_tstc(struct stdio_dev *dev) { return pxa_tstc_dev(BTUART_INDEX); } @@ -319,32 +319,32 @@ struct stdio_dev serial_btuart_device = #endif
#if defined (CONFIG_STUART) -static int stuart_init(void) +static int stuart_init(struct stdio_dev *dev) { return pxa_init_dev(STUART_INDEX); }
-static void stuart_setbrg(void) +static void stuart_setbrg(struct stdio_dev *dev) { return pxa_setbrg_dev(STUART_INDEX); }
-static void stuart_putc(const char c) +static void stuart_putc(struct stdio_dev *dev, const char c) { return pxa_putc_dev(STUART_INDEX,c); }
-static void stuart_puts(const char *s) +static void stuart_puts(struct stdio_dev *dev, const char *s) { return pxa_puts_dev(STUART_INDEX,s); }
-static int stuart_getc(void) +static int stuart_getc(struct stdio_dev *dev) { return pxa_getc_dev(STUART_INDEX); }
-static int stuart_tstc(void) +static int stuart_tstc(struct stdio_dev *dev) { return pxa_tstc_dev(STUART_INDEX); } diff --git a/drivers/serial/serial_s3c24x0.c b/drivers/serial/serial_s3c24x0.c index dc27e00..61e30d7 100644 --- a/drivers/serial/serial_s3c24x0.c +++ b/drivers/serial/serial_s3c24x0.c @@ -51,17 +51,17 @@ DECLARE_GLOBAL_DATA_PTR;
/* Multi serial device functions */ #define DECLARE_S3C_SERIAL_FUNCTIONS(port) \ - int s3serial##port##_init (void) {\ + int s3serial##port##_init (struct stdio_dev *dev) {\ return serial_init_dev(port);}\ - void s3serial##port##_setbrg (void) {\ + void s3serial##port##_setbrg (struct stdio_dev *dev) {\ serial_setbrg_dev(port);}\ - int s3serial##port##_getc (void) {\ + int s3serial##port##_getc (struct stdio_dev *dev) {\ return serial_getc_dev(port);}\ - int s3serial##port##_tstc (void) {\ + int s3serial##port##_tstc (struct stdio_dev *dev) {\ return serial_tstc_dev(port);}\ - void s3serial##port##_putc (const char c) {\ + void s3serial##port##_putc (struct stdio_dev *dev, const char c) {\ serial_putc_dev(port, c);}\ - void s3serial##port##_puts (const char *s) {\ + void s3serial##port##_puts (struct stdio_dev *dev, const char *s) {\ serial_puts_dev(port, s);}
#define INIT_S3C_SERIAL_STRUCTURE(port,name,bus) {\ diff --git a/drivers/serial/usbtty.c b/drivers/serial/usbtty.c index cffd5a2..0b4cc17 100644 --- a/drivers/serial/usbtty.c +++ b/drivers/serial/usbtty.c @@ -388,7 +388,7 @@ static void str2wide (char *str, u16 * wide) * Test whether a character is in the RX buffer */
-int usbtty_tstc (void) +int usbtty_tstc (struct stdio_dev *dev) { struct usb_endpoint_instance *endpoint = &endpoint_instance[rx_endpoint]; @@ -408,7 +408,7 @@ int usbtty_tstc (void) * written into its argument c. */
-int usbtty_getc (void) +int usbtty_getc (struct stdio_dev *dev) { char c; struct usb_endpoint_instance *endpoint = @@ -428,7 +428,7 @@ int usbtty_getc (void) /* * Output a single byte to the usb client port. */ -void usbtty_putc (const char c) +void usbtty_putc (struct stdio_dev *dev, const char c) { if (!usbtty_configured ()) return; @@ -483,7 +483,7 @@ static void __usbtty_puts (const char *str, int len) } }
-void usbtty_puts (const char *str) +void usbtty_puts (struct stdio_dev *dev, const char *str) { int n; int len; diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index fbc4df9..b4d90fd 100644 --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -693,7 +693,7 @@ static void console_cr (void)
/*****************************************************************************/
-void video_putc (const char c) +void video_putc (struct stdio_dev *dev, const char c) { static int nl = 1;
@@ -737,12 +737,12 @@ CURSOR_SET}
/*****************************************************************************/
-void video_puts (const char *s) +void video_puts (struct stdio_dev *dev, const char *s) { int count = strlen (s);
while (count--) - video_putc (*s++); + video_putc (dev, *s++); }
/*****************************************************************************/ diff --git a/include/i8042.h b/include/i8042.h index 1395289..ed16d76 100644 --- a/include/i8042.h +++ b/include/i8042.h @@ -70,7 +70,7 @@ /* exports */
int i8042_kbd_init(void); -int i8042_tstc(void); -int i8042_getc(void); +int i8042_tstc(struct stdio_dev *dev); +int i8042_getc(struct stdio_dev *dev);
#endif /* _I8042_H_ */ diff --git a/include/stdio_dev.h b/include/stdio_dev.h index 5bb2cad..ba653ce 100644 --- a/include/stdio_dev.h +++ b/include/stdio_dev.h @@ -48,21 +48,21 @@ struct stdio_dev {
/* GENERAL functions */
- int (*start) (void); /* To start the device */ - int (*stop) (void); /* To stop the device */ + int (*start) (struct stdio_dev *dev); /* To start the device */ + int (*stop) (struct stdio_dev *dev); /* To stop the device */
/* OUTPUT functions */
- void (*putc) (const char c); /* To put a char */ - void (*puts) (const char *s); /* To put a string (accelerator) */ + void (*putc) (struct stdio_dev *dev, const char c); /* To put a char */ + void (*puts) (struct stdio_dev *dev, const char *s); /* To put a string */
/* INPUT functions */
- int (*tstc) (void); /* To test if a char is ready... */ - int (*getc) (void); /* To get that char */ + int (*tstc) (struct stdio_dev *dev); /* To test if a char is ready.. */ + int (*getc) (struct stdio_dev *dev); /* To get that char */
/* Other functions */ - void (*setbrg) (void); /* Set baudrate */ + void (*setbrg) (struct stdio_dev *dev); /* Set baudrate */
void *priv; /* Private extensions */ struct list_head list; diff --git a/lib_i386/video.c b/lib_i386/video.c index c58ed10..2c91bd2 100644 --- a/lib_i386/video.c +++ b/lib_i386/video.c @@ -123,7 +123,7 @@ static void __video_putc(const char c, int *x, int *y) } }
-static void video_putc(const char c) +static void video_putc(struct stdio_dev *dev, const char c) { int x,y,pos;
@@ -142,7 +142,7 @@ static void video_putc(const char c) outb_p(0xff & (pos >> 1), vidport+1); }
-static void video_puts(const char *s) +static void video_puts(struct stdio_dev *dev, const char *s) { int x,y,pos; char c;

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com --- common/serial.c | 62 +++++++++++++++++------------------------------------- 1 files changed, 20 insertions(+), 42 deletions(-)
diff --git a/common/serial.c b/common/serial.c index a4171be..7d764f2 100644 --- a/common/serial.c +++ b/common/serial.c @@ -179,77 +179,55 @@ void serial_reinit_all (void) } }
-int serial_init (void) +struct stdio_dev * serial_get_current_device(void) { - if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { - struct stdio_dev *dev = default_serial_console (); + if (!(gd->flags & GD_FLG_RELOC) || !serial_current) + return default_serial_console ();
- if (dev->start) - return dev->start (dev); + return serial_current; +}
- return 0; - } +int serial_init (void) +{ + struct stdio_dev *dev = serial_get_current_device();
- if (serial_current->start) - return serial_current->start (serial_current); + if (dev->start) + return dev->start (dev);
return 0; }
void serial_setbrg (void) { - if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { - struct stdio_dev *dev = default_serial_console (); - - dev->setbrg (dev); - return; - } + struct stdio_dev *dev = serial_get_current_device();
- serial_current->setbrg (serial_current); + dev->setbrg (dev); }
int serial_getc (void) { - if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { - struct stdio_dev *dev = default_serial_console (); + struct stdio_dev *dev = serial_get_current_device();
- return dev->getc (dev); - } - - return serial_current->getc (serial_current); + return dev->getc (dev); }
int serial_tstc (void) { - if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { - struct stdio_dev *dev = default_serial_console (); - - return dev->tstc (dev); - } + struct stdio_dev *dev = serial_get_current_device();
- return serial_current->tstc (serial_current); + return dev->tstc (dev); }
void serial_putc (const char c) { - if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { - struct stdio_dev *dev = default_serial_console (); + struct stdio_dev *dev = serial_get_current_device();
- dev->putc (dev, c); - return; - } - - serial_current->putc (serial_current, c); + dev->putc (dev, c); }
void serial_puts (const char *s) { - if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { - struct stdio_dev *dev = default_serial_console (); - - dev->puts (dev, s); - return; - } + struct stdio_dev *dev = serial_get_current_device();
- serial_current->puts (serial_current, s); + dev->puts (dev, s); }

Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 1251034019-10787-3-git-send-email-plagnioj@jcrosoft.com you wrote:
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com
Please add a commit message that exaplains what you are doing. Your Subject: line is not sufficient.
+int serial_init (void) +{
- struct stdio_dev *dev = serial_get_current_device();
- if (serial_current->start)
return serial_current->start (serial_current);
- if (dev->start)
return dev->start (dev);
What happens if dev == NULL ?
void serial_setbrg (void) {
- if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
struct stdio_dev *dev = default_serial_console ();
dev->setbrg (dev);
return;
- }
- struct stdio_dev *dev = serial_get_current_device();
- serial_current->setbrg (serial_current);
- dev->setbrg (dev);
What happens if dev == NULL ?
etc.
Best regards,
Wolfgang Denk

Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 1251034019-10787-2-git-send-email-plagnioj@jcrosoft.com you wrote:
to allow it to have base address and other information to simplify the implementation and avoid workarround as done for ns16550 on the omap3 zoom or ppc4xx as example
Can you please explain what you mean?
Sorry, but I do not understand your commit message. Please use complete sentences.
If I understood your patch 1/3 correctly, you introduces a current device; if this is correct, then why do we need to add allt he additional function arguments?
Isn't this only adding to the memory footprint?
Best regards,
Wolfgang Denk

Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 1251034019-10787-1-git-send-email-plagnioj@jcrosoft.com you wrote:
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@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)
I don't think the renaming of "serial" into "stdio" is a good idea.
"stdio" is a more specific term, which can only be applied to the standard input/output channes (sdin, stdout and stderr); in other words, this is restricted to the serial ports used as console interface.
However, "serial" is a more general term - in addition to the stdio devices this may be used for example for additional serial ports controlling other things.
...
-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;
Please see comment below about DEV_FLAGS_SERIAL.
-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);
Here it becomes clear that your renaming of serial into stdio is not consistent; to me it makes no sense.
Why is it serial_get_by_name() [note: "serial"], when it actually returns a "struct stdio_dev*"?
You call stdio_get_by_name() internally?
That does not amke sense. How can you get a device from a wider class (serial devices), when you consider only a smaller selection (stio devices)?
Hmmm... What is a "stdio device" by the way?
When we use a USB keyboard and assign it as stdin, it is a stdio device, right? when we assing a LCD outpout as stdout and stderr, it is a stdio device, right?
--- 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 */
No.
This makes no sense at all. DEV_FLAGS_* are bit names. DEV_FLAGS_SERIAL migfht be 4, but in no case it makes sense to use 3 here, which is "DEV_FLAGS_INPUT | DEV_FLAGS_OUTPUT".
/* 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];
Comment? What's ctlr[CTLRSIZE] supposed to mean?
NAK.
Best regards,
Wolfgang Denk
participants (2)
-
Jean-Christophe PLAGNIOL-VILLARD
-
Wolfgang Denk