Logo Search packages:      
Sourcecode: linux version File versions  Download package

mn10300-serial.h

/* MN10300 On-chip serial port driver definitions
 *
 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
 * Written by David Howells (dhowells@redhat.com)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public Licence
 * as published by the Free Software Foundation; either version
 * 2 of the Licence, or (at your option) any later version.
 */
#ifndef _MN10300_SERIAL_H
#define _MN10300_SERIAL_H

#ifndef __ASSEMBLY__
#include <linux/serial_core.h>
#include <linux/termios.h>
#endif

#include <asm/page.h>
#include <asm/serial-regs.h>

#define NR_PORTS        3           /* should be set 3 or 9 or 16 */

#define MNSC_BUFFER_SIZE      +(PAGE_SIZE / 2)

/* intr_flags bits */
#define MNSCx_RX_AVAIL        0x01
#define MNSCx_RX_OVERF        0x02
#define MNSCx_TX_SPACE        0x04
#define MNSCx_TX_EMPTY        0x08

#ifndef __ASSEMBLY__

struct mn10300_serial_port {
      char              *rx_buffer; /* reception buffer base */
      unsigned          rx_inp;           /* pointer to rx input offset */
      unsigned          rx_outp;    /* pointer to rx output offset */
      u8                tx_xchar;   /* high-priority XON/XOFF buffer */
      u8                tx_break;   /* transmit break request */
      u8                intr_flags; /* interrupt flags */
      volatile u16            *rx_icr;    /* Rx interrupt control register */
      volatile u16            *tx_icr;    /* Tx interrupt control register */
      int               rx_irq;           /* reception IRQ */
      int               tx_irq;           /* transmission IRQ */
      int               tm_irq;           /* timer IRQ */

      const char        *name;            /* name of serial port */
      const char        *rx_name;   /* Rx interrupt handler name of serial port */
      const char        *tx_name;   /* Tx interrupt handler name of serial port */
      const char        *tm_name;   /* Timer interrupt handler name */
      unsigned short          type;       /* type of serial port */
      unsigned char           isconsole;  /* T if it's a console */
      volatile void           *_iobase;   /* pointer to base of I/O control regs */
      volatile u16            *_control;  /* control register pointer */
      volatile u8       *_status;   /* status register pointer */
      volatile u8       *_intr;           /* interrupt register pointer */
      volatile void           *_rxb;            /* receive buffer register pointer */
      volatile void           *_txb;            /* transmit buffer register pointer */
      volatile u16            *_tmicr;    /* timer interrupt control register */
      volatile u8       *_tmxmd;    /* baud rate timer mode register */
      volatile u16            *_tmxbr;    /* baud rate timer base register */

      /* this must come down here so that assembly can use BSET to access the
       * above fields */
      struct uart_port  uart;

      unsigned short          rx_brk;           /* current break reception status */
      u16               tx_cts;           /* current CTS status */
      int               gdbstub;    /* preemptively stolen by GDB stub */

      u8                clock_src;  /* clock source */
#define MNSCx_CLOCK_SRC_IOCLK 0
#define MNSCx_CLOCK_SRC_IOBCLK      1

      u8                div_timer;  /* timer used as divisor */
#define MNSCx_DIV_TIMER_16BIT 0
#define MNSCx_DIV_TIMER_8BIT  1

      u16               options;    /* options */
#define MNSCx_OPT_CTS         0x0001

      unsigned long           ioclk;            /* base clock rate */
};

#ifdef CONFIG_MN10300_TTYSM0
extern struct mn10300_serial_port mn10300_serial_port_sif0;
#endif

#ifdef CONFIG_MN10300_TTYSM1
extern struct mn10300_serial_port mn10300_serial_port_sif1;
#endif

#ifdef CONFIG_MN10300_TTYSM2
extern struct mn10300_serial_port mn10300_serial_port_sif2;
#endif

extern struct mn10300_serial_port *mn10300_serial_ports[];

struct mn10300_serial_int {
      struct mn10300_serial_port *port;
      asmlinkage void (*vdma)(void);
};

extern struct mn10300_serial_int mn10300_serial_int_tbl[];

extern asmlinkage void mn10300_serial_vdma_interrupt(void);
extern asmlinkage void mn10300_serial_vdma_rx_handler(void);
extern asmlinkage void mn10300_serial_vdma_tx_handler(void);

#endif /* __ASSEMBLY__ */

#if defined(CONFIG_GDBSTUB_ON_TTYSM0)
#define SCgSTR SC0STR
#define SCgRXB SC0RXB
#define SCgRXIRQ SC0RXIRQ
#elif defined(CONFIG_GDBSTUB_ON_TTYSM1)
#define SCgSTR SC1STR
#define SCgRXB SC1RXB
#define SCgRXIRQ SC1RXIRQ
#elif defined(CONFIG_GDBSTUB_ON_TTYSM2)
#define SCgSTR SC2STR
#define SCgRXB SC2RXB
#define SCgRXIRQ SC2RXIRQ
#endif

#endif /* _MN10300_SERIAL_H */

Generated by  Doxygen 1.6.0   Back to index