uboot/include/serial.h
<<
>>
Prefs
   1#ifndef __SERIAL_H__
   2#define __SERIAL_H__
   3
   4#include <post.h>
   5
   6struct serial_device {
   7        /* enough bytes to match alignment of following func pointer */
   8        char    name[16];
   9
  10        int     (*start)(void);
  11        int     (*stop)(void);
  12        void    (*setbrg)(void);
  13        int     (*getc)(void);
  14        int     (*tstc)(void);
  15        void    (*putc)(const char c);
  16        void    (*puts)(const char *s);
  17#if CONFIG_POST & CONFIG_SYS_POST_UART
  18        void    (*loop)(int);
  19#endif
  20        struct serial_device    *next;
  21};
  22
  23void default_serial_puts(const char *s);
  24
  25extern struct serial_device serial_smc_device;
  26extern struct serial_device serial_scc_device;
  27extern struct serial_device *default_serial_console(void);
  28
  29#if     defined(CONFIG_405GP) || \
  30        defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
  31        defined(CONFIG_405EX) || defined(CONFIG_440) || \
  32        defined(CONFIG_MPC5xxx) || \
  33        defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
  34        defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
  35        defined(CONFIG_TEGRA) || defined(CONFIG_SYS_COREBOOT) || \
  36        defined(CONFIG_MICROBLAZE)
  37extern struct serial_device serial0_device;
  38extern struct serial_device serial1_device;
  39#endif
  40
  41extern struct serial_device eserial1_device;
  42extern struct serial_device eserial2_device;
  43
  44extern void serial_register(struct serial_device *);
  45extern void serial_initialize(void);
  46extern void serial_stdio_init(void);
  47extern int serial_assign(const char *name);
  48extern void serial_reinit_all(void);
  49
  50/* For usbtty */
  51#ifdef CONFIG_USB_TTY
  52
  53extern int usbtty_getc(void);
  54extern void usbtty_putc(const char c);
  55extern void usbtty_puts(const char *str);
  56extern int usbtty_tstc(void);
  57
  58#else
  59
  60/* stubs */
  61#define usbtty_getc() 0
  62#define usbtty_putc(a)
  63#define usbtty_puts(a)
  64#define usbtty_tstc() 0
  65
  66#endif /* CONFIG_USB_TTY */
  67
  68#if defined(CONFIG_MPC512X)
  69extern struct stdio_dev *open_port(int num, int baudrate);
  70extern int close_port(int num);
  71extern int write_port(struct stdio_dev *port, char *buf);
  72extern int read_port(struct stdio_dev *port, char *buf, int size);
  73#endif
  74
  75struct udevice;
  76
  77/**
  78 * struct struct dm_serial_ops - Driver model serial operations
  79 *
  80 * The uclass interface is implemented by all serial devices which use
  81 * driver model.
  82 */
  83struct dm_serial_ops {
  84        /**
  85         * setbrg() - Set up the baud rate generator
  86         *
  87         * Adjust baud rate divisors to set up a new baud rate for this
  88         * device. Not all devices will support all rates. If the rate
  89         * cannot be supported, the driver is free to select the nearest
  90         * available rate. or return -EINVAL if this is not possible.
  91         *
  92         * @dev: Device pointer
  93         * @baudrate: New baud rate to use
  94         * @return 0 if OK, -ve on error
  95         */
  96        int (*setbrg)(struct udevice *dev, int baudrate);
  97        /**
  98         * getc() - Read a character and return it
  99         *
 100         * If no character is available, this should return -EAGAIN without
 101         * waiting.
 102         *
 103         * @dev: Device pointer
 104         * @return character (0..255), -ve on error
 105         */
 106        int (*getc)(struct udevice *dev);
 107        /**
 108         * putc() - Write a character
 109         *
 110         * @dev: Device pointer
 111         * @ch: character to write
 112         * @return 0 if OK, -ve on error
 113         */
 114        int (*putc)(struct udevice *dev, const char ch);
 115        /**
 116         * pending() - Check if input/output characters are waiting
 117         *
 118         * This can be used to return an indication of the number of waiting
 119         * characters if the driver knows this (e.g. by looking at the FIFO
 120         * level). It is acceptable to return 1 if an indeterminant number
 121         * of characters is waiting.
 122         *
 123         * This method is optional.
 124         *
 125         * @dev: Device pointer
 126         * @input: true to check input characters, false for output
 127         * @return number of waiting characters, 0 for none, -ve on error
 128         */
 129        int (*pending)(struct udevice *dev, bool input);
 130        /**
 131         * clear() - Clear the serial FIFOs/holding registers
 132         *
 133         * This method is optional.
 134         *
 135         * This quickly clears any input/output characters from the UART.
 136         * If this is not possible, but characters still exist, then it
 137         * is acceptable to return -EAGAIN (try again) or -EINVAL (not
 138         * supported).
 139         *
 140         * @dev: Device pointer
 141         * @return 0 if OK, -ve on error
 142         */
 143        int (*clear)(struct udevice *dev);
 144#if CONFIG_POST & CONFIG_SYS_POST_UART
 145        /**
 146         * loop() - Control serial device loopback mode
 147         *
 148         * @dev: Device pointer
 149         * @on: 1 to turn loopback on, 0 to turn if off
 150         */
 151        int (*loop)(struct udevice *dev, int on);
 152#endif
 153};
 154
 155/**
 156 * struct serial_dev_priv - information about a device used by the uclass
 157 *
 158 * @sdev: stdio device attached to this uart
 159 */
 160struct serial_dev_priv {
 161        struct stdio_dev *sdev;
 162};
 163
 164/* Access the serial operations for a device */
 165#define serial_get_ops(dev)     ((struct dm_serial_ops *)(dev)->driver->ops)
 166
 167void amirix_serial_initialize(void);
 168void arc_serial_initialize(void);
 169void arm_dcc_initialize(void);
 170void asc_serial_initialize(void);
 171void atmel_serial_initialize(void);
 172void au1x00_serial_initialize(void);
 173void bfin_jtag_initialize(void);
 174void bfin_serial_initialize(void);
 175void bmw_serial_initialize(void);
 176void clps7111_serial_initialize(void);
 177void cogent_serial_initialize(void);
 178void cpci750_serial_initialize(void);
 179void evb64260_serial_initialize(void);
 180void imx_serial_initialize(void);
 181void iop480_serial_initialize(void);
 182void jz_serial_initialize(void);
 183void leon2_serial_initialize(void);
 184void leon3_serial_initialize(void);
 185void lh7a40x_serial_initialize(void);
 186void lpc32xx_serial_initialize(void);
 187void marvell_serial_initialize(void);
 188void max3100_serial_initialize(void);
 189void mcf_serial_initialize(void);
 190void ml2_serial_initialize(void);
 191void mpc512x_serial_initialize(void);
 192void mpc5xx_serial_initialize(void);
 193void mpc8260_scc_serial_initialize(void);
 194void mpc8260_smc_serial_initialize(void);
 195void mpc85xx_serial_initialize(void);
 196void mpc8xx_serial_initialize(void);
 197void mxc_serial_initialize(void);
 198void mxs_auart_initialize(void);
 199void ns16550_serial_initialize(void);
 200void oc_serial_initialize(void);
 201void p3mx_serial_initialize(void);
 202void pl01x_serial_initialize(void);
 203void pxa_serial_initialize(void);
 204void s3c24xx_serial_initialize(void);
 205void s5p_serial_initialize(void);
 206void sa1100_serial_initialize(void);
 207void sandbox_serial_initialize(void);
 208void sconsole_serial_initialize(void);
 209void sh_serial_initialize(void);
 210void uartlite_serial_initialize(void);
 211void zynq_serial_initialize(void);
 212
 213#endif
 214