![Mike Frysinger](/assets/img/avatar_default.png)
The current arch/driver specific UART posts basically boil down to setting the UART to loop back mode, then reading and writing data. If we ignore the loop back part, the rest can be built upon the existing common serial API. So let's do just that. First add a call back for serial drivers to implement loop back control. Then write a post test that walks all of the serial drivers, puts them into loop back mode, and verifies that reading/writing at all the diff baud rates is OK. If a serial driver doesn't support loop back mode (either it can't or it hasn't done so yet), then skip it. This should allow for people to easily migrate to the new post test with existing serial drivers. I haven't touched the few already existing uart post tests as I don't the hardware or knowledge of converting them over. So I've marked the new test as weak which will allow the existing tests to override the default until they are converted. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
108 lines
3 KiB
C
108 lines
3 KiB
C
#ifndef __SERIAL_H__
|
|
#define __SERIAL_H__
|
|
|
|
#include <post.h>
|
|
|
|
#define NAMESIZE 16
|
|
|
|
struct serial_device {
|
|
char name[NAMESIZE];
|
|
|
|
int (*init) (void);
|
|
int (*uninit) (void);
|
|
void (*setbrg) (void);
|
|
int (*getc) (void);
|
|
int (*tstc) (void);
|
|
void (*putc) (const char c);
|
|
void (*puts) (const char *s);
|
|
#if CONFIG_POST & CONFIG_SYS_POST_UART
|
|
void (*loop) (int);
|
|
#endif
|
|
|
|
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_MB86R0x) || defined(CONFIG_MPC5xxx) || \
|
|
defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
|
|
defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
|
|
defined(CONFIG_TEGRA2)
|
|
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_MPC512X)
|
|
extern struct serial_device serial1_device;
|
|
extern struct serial_device serial3_device;
|
|
extern struct serial_device serial4_device;
|
|
extern struct serial_device serial6_device;
|
|
#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_S5P)
|
|
extern struct serial_device s5p_serial0_device;
|
|
extern struct serial_device s5p_serial1_device;
|
|
extern struct serial_device s5p_serial2_device;
|
|
extern struct serial_device s5p_serial3_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);
|
|
|
|
/* For usbtty */
|
|
#ifdef CONFIG_USB_TTY
|
|
|
|
extern int usbtty_getc(void);
|
|
extern void usbtty_putc(const char c);
|
|
extern void usbtty_puts(const char *str);
|
|
extern int usbtty_tstc(void);
|
|
|
|
#else
|
|
|
|
/* stubs */
|
|
#define usbtty_getc() 0
|
|
#define usbtty_putc(a)
|
|
#define usbtty_puts(a)
|
|
#define usbtty_tstc() 0
|
|
|
|
#endif /* CONFIG_USB_TTY */
|
|
|
|
#if defined(CONFIG_MPC512X) && defined(CONFIG_SERIAL_MULTI)
|
|
extern struct stdio_dev *open_port(int num, int baudrate);
|
|
extern int close_port(int num);
|
|
extern int write_port(struct stdio_dev *port, char *buf);
|
|
extern int read_port(struct stdio_dev *port, char *buf, int size);
|
|
#endif
|
|
|
|
#endif
|