www.pudn.com > ST16C554-linux2.6.14.rar > ST16C554.h
#ifndef _ST16C554_H
#define _ST16C554_H
/** ************************************************************************* **
** includes
** ************************************************************************* **/
/** ************************************************************************* **
** defines
** ************************************************************************* **/
struct st16c554_uart_port{
struct uart_port port;
struct timer_list timer; /* "no irq" timer */
struct list_head list; /* ports on this IRQ */
unsigned short capabilities; /* port capabilities */
unsigned short bugs; /* port bugs */
unsigned int tx_loadsz; /* transmit fifo load size */
unsigned char acr;
unsigned char ier;
unsigned char lcr;
unsigned char mcr;
unsigned char mcr_mask; /* mask of user bits */
unsigned char mcr_force; /* mask of forced bits */
unsigned char lsr_break_flag;
/*
* We provide a per-port pm hook.
*/
void (*pm)(struct uart_port *port,
unsigned int state, unsigned int old);
};
#define UART_16C554_NR 4
#define UART_16C554_NUM 4
#define ST16C554_MAJOR 4
#define ST16C554_MINOR 70
#define ST16C554_CONSOLE NULL
//#define ST16C554_CONSOLE &st16c554_cons
#define ST16C554_DRIVER_NAME "ST16C554-Serial"
#define ST16C554_DEVFS_NAME "tttb/"
#define ST16C554_DEV_NAME "ttyB"
#define ST16C554_PHY_ADDRESS 0xf0000000
#define ST16C554_REMAP_SIZE 0x100000
#define ST16C554_IRQ 26
/*-------- PPC405EP Registers-----------*/
#define CFG_EBC_PB1AP 0x7f8ffe40 //
#define CFG_EBC_PB1CR 0xF0018000 //BAS:0xf00 BS:000 BU:11 BW:00
/*-------- ST16C554 Registers-----------*/
//port = 0--3
#define UART_URXH(port) (*((volatile unsigned char *)((port)->membase + 0x00)))
#define UART_UTXH(port) (*((volatile unsigned char *)((port)->membase + 0x00)))
#define UART_UIER(port) (*((volatile unsigned char *)((port)->membase + 0x01)))
#define UART_UISTAT(port) (*((volatile unsigned char *)((port)->membase + 0x02)))
#define UART_UFCON(port) (*((volatile unsigned char *)((port)->membase + 0x02)))
#define UART_ULCON(port) (*((volatile unsigned char *)((port)->membase + 0x03)))
#define UART_UMCON(port) (*((volatile unsigned char *)((port)->membase + 0x04)))
#define UART_ULSTAT(port) (*((volatile unsigned char *)((port)->membase + 0x05)))
#define UART_UMSTAT(port) (*((volatile unsigned char *)((port)->membase + 0x06)))
#define UART_URSCRR(port) (*((volatile unsigned char *)((port)->membase + 0x07)))
#define UART_UWSCRR(port) (*((volatile unsigned char *)((port)->membase + 0x07)))
#define UART_UBRDIVL(port) (*((volatile unsigned char *)((port)->membase + 0x00)))
#define UART_UBRDIVM(port) (*((volatile unsigned char *)((port)->membase + 0x01)))
#define UART_CAP_FIFO (1 << 8) /* UART has FIFO */
#define UART_CAP_EFR (1 << 9) /* UART has EFR */
#define UART_CAP_SLEEP (1 << 10) /* UART has IER sleep */
#define UART_CAP_AFE (1 << 11) /* MCR-based hw flow control */
#define UART_CAP_UUE (1 << 12) /* UART needs IER bit 6 set (Xscale) */
#define UART_BUG_QUOT (1 << 0) /* UART has buggy quot LSB */
#define UART_BUG_TXEN (1 << 1) /* UART has buggy TX IIR status */
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
/** ************************************************************************* **
** function prototypes
** ************************************************************************* **/
unsigned int st16c554_tx_empty(struct uart_port *port);
void st16c554_set_mctrl(struct uart_port *port, unsigned int mctrl);
unsigned int st16c554_get_mctrl(struct uart_port *port);
void st16c554_stop_tx(struct uart_port *port);
void st16c554_start_tx(struct uart_port *port);
void st16c554_stop_rx(struct uart_port *port);
void st16c554_enable_ms(struct uart_port *port);
void st16c554_break_ctl(struct uart_port *port, int break_state);
int st16c554_startup(struct uart_port *port);
void st16c554_shutdown(struct uart_port *port);
void st16c554_set_termios(struct uart_port *port, struct termios *termios, struct termios *old);
void st16c554_pm(struct uart_port *port, unsigned int state, unsigned int oldstate);
const char * st16c554_type(struct uart_port *port);
void st16c554_release_port(struct uart_port *port);
int st16c554_request_port(struct uart_port *port);
void st16c554_config_port(struct uart_port *port, int flags);
int st16c554_verify_port(struct uart_port *port, struct serial_struct *ser);
static void tx_interrupt(struct uart_info *info, struct uart_port *port) ;
static void err_interrupt( struct uart_port *port, struct pt_regs *regs);
//static void err_interrupt( struct uart_info *info,struct tty_struct *tty,struct uart_port *port);
//static void rx_interrupt(struct uart_info *info, struct tty_struct *tty, struct uart_port *port);
static void rx_interrupt(struct uart_port *port, struct pt_regs *regs);
static unsigned int st16c554_get_divisor(struct uart_port *port, unsigned int baud);
static void serial16c554_timeout(unsigned long data);
int st16c554_AddressMap(void);
int st16c554_InitUARTPort( struct st16c554_uart_port * pPort);
int st16c554_InitReg( void);
static int serial16c554_register_ports(struct uart_driver *drv, struct device *dev);
//static void check_modem_status(struct uart_info *info, struct uart_port *port);
static void check_modem_status(struct uart_port *port, struct pt_regs *regs);
#endif /* _ST16C554_H*/