177accbf505a073beecf32e60265697517e203beaJesper Nilsson/* 277accbf505a073beecf32e60265697517e203beaJesper Nilsson * serial.h: Arch-dep definitions for the Etrax100 serial driver. 377accbf505a073beecf32e60265697517e203beaJesper Nilsson * 477accbf505a073beecf32e60265697517e203beaJesper Nilsson * Copyright (C) 1998-2007 Axis Communications AB 577accbf505a073beecf32e60265697517e203beaJesper Nilsson */ 677accbf505a073beecf32e60265697517e203beaJesper Nilsson 777accbf505a073beecf32e60265697517e203beaJesper Nilsson#ifndef _ETRAX_SERIAL_H 877accbf505a073beecf32e60265697517e203beaJesper Nilsson#define _ETRAX_SERIAL_H 977accbf505a073beecf32e60265697517e203beaJesper Nilsson 1077accbf505a073beecf32e60265697517e203beaJesper Nilsson#include <linux/circ_buf.h> 1177accbf505a073beecf32e60265697517e203beaJesper Nilsson#include <asm/termios.h> 1277accbf505a073beecf32e60265697517e203beaJesper Nilsson#include <asm/dma.h> 13556dcee7b829e5c350c3ffdbdb87a8b15aa3c5d3Jesper Nilsson#include <arch/io_interface_mux.h> 1477accbf505a073beecf32e60265697517e203beaJesper Nilsson 1577accbf505a073beecf32e60265697517e203beaJesper Nilsson/* Software state per channel */ 1677accbf505a073beecf32e60265697517e203beaJesper Nilsson 1777accbf505a073beecf32e60265697517e203beaJesper Nilsson#ifdef __KERNEL__ 1877accbf505a073beecf32e60265697517e203beaJesper Nilsson/* 1977accbf505a073beecf32e60265697517e203beaJesper Nilsson * This is our internal structure for each serial port's state. 2077accbf505a073beecf32e60265697517e203beaJesper Nilsson * 2177accbf505a073beecf32e60265697517e203beaJesper Nilsson * Many fields are paralleled by the structure used by the serial_struct 2277accbf505a073beecf32e60265697517e203beaJesper Nilsson * structure. 2377accbf505a073beecf32e60265697517e203beaJesper Nilsson * 2477accbf505a073beecf32e60265697517e203beaJesper Nilsson * For definitions of the flags field, see tty.h 2577accbf505a073beecf32e60265697517e203beaJesper Nilsson */ 2677accbf505a073beecf32e60265697517e203beaJesper Nilsson 2777accbf505a073beecf32e60265697517e203beaJesper Nilsson#define SERIAL_RECV_DESCRIPTORS 8 2877accbf505a073beecf32e60265697517e203beaJesper Nilsson 2977accbf505a073beecf32e60265697517e203beaJesper Nilssonstruct etrax_recv_buffer { 3077accbf505a073beecf32e60265697517e203beaJesper Nilsson struct etrax_recv_buffer *next; 3177accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned short length; 3277accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned char error; 3377accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned char pad; 3477accbf505a073beecf32e60265697517e203beaJesper Nilsson 3577accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned char buffer[0]; 3677accbf505a073beecf32e60265697517e203beaJesper Nilsson}; 3777accbf505a073beecf32e60265697517e203beaJesper Nilsson 3877accbf505a073beecf32e60265697517e203beaJesper Nilssonstruct e100_serial { 39d7283353221e73a793847252d063ff9186885160Alan Cox struct tty_port port; 4077accbf505a073beecf32e60265697517e203beaJesper Nilsson int baud; 41d7283353221e73a793847252d063ff9186885160Alan Cox volatile u8 *ioport; /* R_SERIALx_CTRL */ 4277accbf505a073beecf32e60265697517e203beaJesper Nilsson u32 irq; /* bitnr in R_IRQ_MASK2 for dmaX_descr */ 4377accbf505a073beecf32e60265697517e203beaJesper Nilsson 4477accbf505a073beecf32e60265697517e203beaJesper Nilsson /* Output registers */ 4577accbf505a073beecf32e60265697517e203beaJesper Nilsson volatile u8 *oclrintradr; /* adr to R_DMA_CHx_CLR_INTR */ 4677accbf505a073beecf32e60265697517e203beaJesper Nilsson volatile u32 *ofirstadr; /* adr to R_DMA_CHx_FIRST */ 4777accbf505a073beecf32e60265697517e203beaJesper Nilsson volatile u8 *ocmdadr; /* adr to R_DMA_CHx_CMD */ 4877accbf505a073beecf32e60265697517e203beaJesper Nilsson const volatile u8 *ostatusadr; /* adr to R_DMA_CHx_STATUS */ 4977accbf505a073beecf32e60265697517e203beaJesper Nilsson 5077accbf505a073beecf32e60265697517e203beaJesper Nilsson /* Input registers */ 5177accbf505a073beecf32e60265697517e203beaJesper Nilsson volatile u8 *iclrintradr; /* adr to R_DMA_CHx_CLR_INTR */ 5277accbf505a073beecf32e60265697517e203beaJesper Nilsson volatile u32 *ifirstadr; /* adr to R_DMA_CHx_FIRST */ 5377accbf505a073beecf32e60265697517e203beaJesper Nilsson volatile u8 *icmdadr; /* adr to R_DMA_CHx_CMD */ 5477accbf505a073beecf32e60265697517e203beaJesper Nilsson volatile u32 *idescradr; /* adr to R_DMA_CHx_DESCR */ 5577accbf505a073beecf32e60265697517e203beaJesper Nilsson 5677accbf505a073beecf32e60265697517e203beaJesper Nilsson int flags; /* defined in tty.h */ 5777accbf505a073beecf32e60265697517e203beaJesper Nilsson 5877accbf505a073beecf32e60265697517e203beaJesper Nilsson u8 rx_ctrl; /* shadow for R_SERIALx_REC_CTRL */ 5977accbf505a073beecf32e60265697517e203beaJesper Nilsson u8 tx_ctrl; /* shadow for R_SERIALx_TR_CTRL */ 6077accbf505a073beecf32e60265697517e203beaJesper Nilsson u8 iseteop; /* bit number for R_SET_EOP for the input dma */ 6177accbf505a073beecf32e60265697517e203beaJesper Nilsson int enabled; /* Set to 1 if the port is enabled in HW config */ 6277accbf505a073beecf32e60265697517e203beaJesper Nilsson 6377accbf505a073beecf32e60265697517e203beaJesper Nilsson u8 dma_out_enabled; /* Set to 1 if DMA should be used */ 6477accbf505a073beecf32e60265697517e203beaJesper Nilsson u8 dma_in_enabled; /* Set to 1 if DMA should be used */ 6577accbf505a073beecf32e60265697517e203beaJesper Nilsson 6677accbf505a073beecf32e60265697517e203beaJesper Nilsson /* end of fields defined in rs_table[] in .c-file */ 6777accbf505a073beecf32e60265697517e203beaJesper Nilsson int dma_owner; 6877accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned int dma_in_nbr; 6977accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned int dma_out_nbr; 7077accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned int dma_in_irq_nbr; 7177accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned int dma_out_irq_nbr; 7277accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long dma_in_irq_flags; 7377accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long dma_out_irq_flags; 7477accbf505a073beecf32e60265697517e203beaJesper Nilsson char *dma_in_irq_description; 7577accbf505a073beecf32e60265697517e203beaJesper Nilsson char *dma_out_irq_description; 7677accbf505a073beecf32e60265697517e203beaJesper Nilsson 7777accbf505a073beecf32e60265697517e203beaJesper Nilsson enum cris_io_interface io_if; 7877accbf505a073beecf32e60265697517e203beaJesper Nilsson char *io_if_description; 7977accbf505a073beecf32e60265697517e203beaJesper Nilsson 8077accbf505a073beecf32e60265697517e203beaJesper Nilsson u8 uses_dma_in; /* Set to 1 if DMA is used */ 8177accbf505a073beecf32e60265697517e203beaJesper Nilsson u8 uses_dma_out; /* Set to 1 if DMA is used */ 8277accbf505a073beecf32e60265697517e203beaJesper Nilsson u8 forced_eop; /* a fifo eop has been forced */ 8377accbf505a073beecf32e60265697517e203beaJesper Nilsson int baud_base; /* For special baudrates */ 8477accbf505a073beecf32e60265697517e203beaJesper Nilsson int custom_divisor; /* For special baudrates */ 8577accbf505a073beecf32e60265697517e203beaJesper Nilsson struct etrax_dma_descr tr_descr; 8677accbf505a073beecf32e60265697517e203beaJesper Nilsson struct etrax_dma_descr rec_descr[SERIAL_RECV_DESCRIPTORS]; 8777accbf505a073beecf32e60265697517e203beaJesper Nilsson int cur_rec_descr; 8877accbf505a073beecf32e60265697517e203beaJesper Nilsson 8977accbf505a073beecf32e60265697517e203beaJesper Nilsson volatile int tr_running; /* 1 if output is running */ 9077accbf505a073beecf32e60265697517e203beaJesper Nilsson 9177accbf505a073beecf32e60265697517e203beaJesper Nilsson struct tty_struct *tty; 9277accbf505a073beecf32e60265697517e203beaJesper Nilsson int read_status_mask; 9377accbf505a073beecf32e60265697517e203beaJesper Nilsson int ignore_status_mask; 9477accbf505a073beecf32e60265697517e203beaJesper Nilsson int x_char; /* xon/xoff character */ 9577accbf505a073beecf32e60265697517e203beaJesper Nilsson int close_delay; 9677accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned short closing_wait; 9777accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned short closing_wait2; 9877accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long event; 9977accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long last_active; 10077accbf505a073beecf32e60265697517e203beaJesper Nilsson int line; 10177accbf505a073beecf32e60265697517e203beaJesper Nilsson int type; /* PORT_ETRAX */ 10277accbf505a073beecf32e60265697517e203beaJesper Nilsson int count; /* # of fd on device */ 10377accbf505a073beecf32e60265697517e203beaJesper Nilsson int blocked_open; /* # of blocked opens */ 10477accbf505a073beecf32e60265697517e203beaJesper Nilsson struct circ_buf xmit; 10577accbf505a073beecf32e60265697517e203beaJesper Nilsson struct etrax_recv_buffer *first_recv_buffer; 10677accbf505a073beecf32e60265697517e203beaJesper Nilsson struct etrax_recv_buffer *last_recv_buffer; 10777accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned int recv_cnt; 10877accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned int max_recv_cnt; 10977accbf505a073beecf32e60265697517e203beaJesper Nilsson 11077accbf505a073beecf32e60265697517e203beaJesper Nilsson struct work_struct work; 11177accbf505a073beecf32e60265697517e203beaJesper Nilsson struct async_icount icount; /* error-statistics etc.*/ 11277accbf505a073beecf32e60265697517e203beaJesper Nilsson struct ktermios normal_termios; 11377accbf505a073beecf32e60265697517e203beaJesper Nilsson struct ktermios callout_termios; 11477accbf505a073beecf32e60265697517e203beaJesper Nilsson wait_queue_head_t open_wait; 11577accbf505a073beecf32e60265697517e203beaJesper Nilsson wait_queue_head_t close_wait; 11677accbf505a073beecf32e60265697517e203beaJesper Nilsson 11777accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long char_time_usec; /* The time for 1 char, in usecs */ 11877accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long flush_time_usec; /* How often we should flush */ 11977accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long last_tx_active_usec; /* Last tx usec in the jiffies */ 12077accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long last_tx_active; /* Last tx time in jiffies */ 12177accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long last_rx_active_usec; /* Last rx usec in the jiffies */ 12277accbf505a073beecf32e60265697517e203beaJesper Nilsson unsigned long last_rx_active; /* Last rx time in jiffies */ 12377accbf505a073beecf32e60265697517e203beaJesper Nilsson 12477accbf505a073beecf32e60265697517e203beaJesper Nilsson int break_detected_cnt; 12577accbf505a073beecf32e60265697517e203beaJesper Nilsson int errorcode; 12677accbf505a073beecf32e60265697517e203beaJesper Nilsson 12777accbf505a073beecf32e60265697517e203beaJesper Nilsson#ifdef CONFIG_ETRAX_RS485 1286fd1af4cf98936f4034caf8f132c7826a6ffd0faClaudio Scordino struct serial_rs485 rs485; /* RS-485 support */ 12977accbf505a073beecf32e60265697517e203beaJesper Nilsson#endif 13077accbf505a073beecf32e60265697517e203beaJesper Nilsson}; 13177accbf505a073beecf32e60265697517e203beaJesper Nilsson 13277accbf505a073beecf32e60265697517e203beaJesper Nilsson/* this PORT is not in the standard serial.h. it's not actually used for 13377accbf505a073beecf32e60265697517e203beaJesper Nilsson * anything since we only have one type of async serial-port anyway in this 13477accbf505a073beecf32e60265697517e203beaJesper Nilsson * system. 13577accbf505a073beecf32e60265697517e203beaJesper Nilsson */ 13677accbf505a073beecf32e60265697517e203beaJesper Nilsson 13777accbf505a073beecf32e60265697517e203beaJesper Nilsson#define PORT_ETRAX 1 13877accbf505a073beecf32e60265697517e203beaJesper Nilsson 13977accbf505a073beecf32e60265697517e203beaJesper Nilsson/* 14077accbf505a073beecf32e60265697517e203beaJesper Nilsson * Events are used to schedule things to happen at timer-interrupt 14177accbf505a073beecf32e60265697517e203beaJesper Nilsson * time, instead of at rs interrupt time. 14277accbf505a073beecf32e60265697517e203beaJesper Nilsson */ 14377accbf505a073beecf32e60265697517e203beaJesper Nilsson#define RS_EVENT_WRITE_WAKEUP 0 14477accbf505a073beecf32e60265697517e203beaJesper Nilsson 14577accbf505a073beecf32e60265697517e203beaJesper Nilsson#endif /* __KERNEL__ */ 14677accbf505a073beecf32e60265697517e203beaJesper Nilsson 14777accbf505a073beecf32e60265697517e203beaJesper Nilsson#endif /* !_ETRAX_SERIAL_H */ 148