#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/module.h>
#include <linux/console.h>
#include <linux/clk.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/sysrq.h>
#include <linux/serial.h>
#include <linux/serial_core.h>
#include <linux/serial_bcm63xx.h>
#include <linux/io.h>
#include <linux/of.h>
#define BCM63XX_NR_UARTS …
static struct uart_port ports[BCM63XX_NR_UARTS];
#define UART_RX_INT_MASK …
#define UART_RX_INT_STAT …
#define UART_TX_INT_MASK …
#define UART_TX_INT_STAT …
#define UART_EXTINP_INT_MASK …
static inline unsigned int bcm_uart_readl(struct uart_port *port,
unsigned int offset)
{ … }
static inline void bcm_uart_writel(struct uart_port *port,
unsigned int value, unsigned int offset)
{ … }
static unsigned int bcm_uart_tx_empty(struct uart_port *port)
{ … }
static void bcm_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
{ … }
static unsigned int bcm_uart_get_mctrl(struct uart_port *port)
{ … }
static void bcm_uart_stop_tx(struct uart_port *port)
{ … }
static void bcm_uart_start_tx(struct uart_port *port)
{ … }
static void bcm_uart_stop_rx(struct uart_port *port)
{ … }
static void bcm_uart_enable_ms(struct uart_port *port)
{ … }
static void bcm_uart_break_ctl(struct uart_port *port, int ctl)
{ … }
static const char *bcm_uart_type(struct uart_port *port)
{ … }
static void bcm_uart_do_rx(struct uart_port *port)
{ … }
static void bcm_uart_do_tx(struct uart_port *port)
{ … }
static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id)
{ … }
static void bcm_uart_enable(struct uart_port *port)
{ … }
static void bcm_uart_disable(struct uart_port *port)
{ … }
static void bcm_uart_flush(struct uart_port *port)
{ … }
static int bcm_uart_startup(struct uart_port *port)
{ … }
static void bcm_uart_shutdown(struct uart_port *port)
{ … }
static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new,
const struct ktermios *old)
{ … }
static int bcm_uart_request_port(struct uart_port *port)
{ … }
static void bcm_uart_release_port(struct uart_port *port)
{ … }
static void bcm_uart_config_port(struct uart_port *port, int flags)
{ … }
static int bcm_uart_verify_port(struct uart_port *port,
struct serial_struct *serinfo)
{ … }
#ifdef CONFIG_CONSOLE_POLL
static bool bcm_uart_tx_full(struct uart_port *port)
{ … }
static int bcm_uart_poll_get_char(struct uart_port *port)
{ … }
static void bcm_uart_poll_put_char(struct uart_port *port, unsigned char c)
{ … }
#endif
static const struct uart_ops bcm_uart_ops = …;
#ifdef CONFIG_SERIAL_BCM63XX_CONSOLE
static void wait_for_xmitr(struct uart_port *port)
{ … }
static void bcm_console_putchar(struct uart_port *port, unsigned char ch)
{ … }
static void bcm_console_write(struct console *co, const char *s,
unsigned int count)
{ … }
static int bcm_console_setup(struct console *co, char *options)
{ … }
static struct uart_driver bcm_uart_driver;
static struct console bcm63xx_console = …;
static int __init bcm63xx_console_init(void)
{ … }
console_initcall(bcm63xx_console_init);
static void bcm_early_write(struct console *con, const char *s, unsigned n)
{ … }
static int __init bcm_early_console_setup(struct earlycon_device *device,
const char *opt)
{ … }
OF_EARLYCON_DECLARE(…);
#define BCM63XX_CONSOLE …
#else
#define BCM63XX_CONSOLE …
#endif
static struct uart_driver bcm_uart_driver = …;
static int bcm_uart_probe(struct platform_device *pdev)
{ … }
static void bcm_uart_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id bcm63xx_of_match[] = …;
MODULE_DEVICE_TABLE(of, bcm63xx_of_match);
static struct platform_driver bcm_uart_platform_driver = …;
static int __init bcm_uart_init(void)
{ … }
static void __exit bcm_uart_exit(void)
{ … }
module_init(…) …;
module_exit(bcm_uart_exit);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;