linux/drivers/tty/serial/samsung.h
<<
>>
Prefs
   1/*
   2 * Driver for Samsung SoC onboard UARTs.
   3 *
   4 * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
   5 *      http://armlinux.simtec.co.uk/
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License version 2 as
   9 * published by the Free Software Foundation.
  10*/
  11
  12struct s3c24xx_uart_info {
  13        char                    *name;
  14        unsigned int            type;
  15        unsigned int            fifosize;
  16        unsigned long           rx_fifomask;
  17        unsigned long           rx_fifoshift;
  18        unsigned long           rx_fifofull;
  19        unsigned long           tx_fifomask;
  20        unsigned long           tx_fifoshift;
  21        unsigned long           tx_fifofull;
  22        unsigned int            def_clk_sel;
  23        unsigned long           num_clks;
  24        unsigned long           clksel_mask;
  25        unsigned long           clksel_shift;
  26
  27        /* uart port features */
  28
  29        unsigned int            has_divslot:1;
  30
  31        /* uart controls */
  32        int (*reset_port)(struct uart_port *, struct s3c2410_uartcfg *);
  33};
  34
  35struct s3c24xx_serial_drv_data {
  36        struct s3c24xx_uart_info        *info;
  37        struct s3c2410_uartcfg          *def_cfg;
  38        unsigned int                    fifosize[CONFIG_SERIAL_SAMSUNG_UARTS];
  39};
  40
  41struct s3c24xx_uart_port {
  42        unsigned char                   rx_claimed;
  43        unsigned char                   tx_claimed;
  44        unsigned int                    pm_level;
  45        unsigned long                   baudclk_rate;
  46
  47        unsigned int                    rx_irq;
  48        unsigned int                    tx_irq;
  49
  50        struct s3c24xx_uart_info        *info;
  51        struct clk                      *clk;
  52        struct clk                      *baudclk;
  53        struct uart_port                port;
  54        struct s3c24xx_serial_drv_data  *drv_data;
  55
  56        /* reference to platform data */
  57        struct s3c2410_uartcfg          *cfg;
  58
  59#ifdef CONFIG_CPU_FREQ
  60        struct notifier_block           freq_transition;
  61#endif
  62};
  63
  64/* conversion functions */
  65
  66#define s3c24xx_dev_to_port(__dev) (struct uart_port *)dev_get_drvdata(__dev)
  67
  68/* register access controls */
  69
  70#define portaddr(port, reg) ((port)->membase + (reg))
  71#define portaddrl(port, reg) \
  72        ((unsigned long *)(unsigned long)((port)->membase + (reg)))
  73
  74#define rd_regb(port, reg) (__raw_readb(portaddr(port, reg)))
  75#define rd_regl(port, reg) (__raw_readl(portaddr(port, reg)))
  76
  77#define wr_regb(port, reg, val) __raw_writeb(val, portaddr(port, reg))
  78#define wr_regl(port, reg, val) __raw_writel(val, portaddr(port, reg))
  79
  80#if defined(CONFIG_SERIAL_SAMSUNG_DEBUG) && \
  81    defined(CONFIG_DEBUG_LL) && \
  82    !defined(MODULE)
  83
  84extern void printascii(const char *);
  85
  86static void dbg(const char *fmt, ...)
  87{
  88        va_list va;
  89        char buff[256];
  90
  91        va_start(va, fmt);
  92        vsprintf(buff, fmt, va);
  93        va_end(va);
  94
  95        printascii(buff);
  96}
  97
  98#else
  99#define dbg(x...) do { } while (0)
 100#endif
 101