1 /* 2 * serial.h: Arch-dep definitions for the Etrax100 serial driver. 3 * 4 * Copyright (C) 1998, 1999, 2000 Axis Communications AB 5 */ 6 7 #ifndef _ETRAX_SERIAL_H 8 #define _ETRAX_SERIAL_H 9 10 #include <linux/config.h> 11 #include <linux/circ_buf.h> 12 #include <asm/termios.h> 13 14 /* Software state per channel */ 15 16 #ifdef __KERNEL__ 17 /* 18 * This is our internal structure for each serial port's state. 19 * 20 * Many fields are paralleled by the structure used by the serial_struct 21 * structure. 22 * 23 * For definitions of the flags field, see tty.h 24 */ 25 26 #define SERIAL_RECV_DESCRIPTORS 16 27 28 struct etrax_recv_buffer { 29 struct etrax_recv_buffer *next; 30 unsigned short length; 31 unsigned char error; 32 unsigned char pad; 33 34 unsigned char buffer[0]; 35 }; 36 37 struct e100_serial { 38 int baud; 39 volatile u8 *port; /* R_SERIALx_CTRL */ 40 u32 irq; /* bitnr in R_IRQ_MASK2 for dmaX_descr */ 41 42 /* Output registers */ 43 volatile u8 *oclrintradr; /* adr to R_DMA_CHx_CLR_INTR */ 44 volatile u32 *ofirstadr; /* adr to R_DMA_CHx_FIRST */ 45 volatile u8 *ocmdadr; /* adr to R_DMA_CHx_CMD */ 46 const volatile u8 *ostatusadr; /* adr to R_DMA_CHx_STATUS */ 47 48 /* Input registers */ 49 volatile u8 *iclrintradr; /* adr to R_DMA_CHx_CLR_INTR */ 50 volatile u32 *ifirstadr; /* adr to R_DMA_CHx_FIRST */ 51 volatile u8 *icmdadr; /* adr to R_DMA_CHx_CMD */ 52 volatile u32 *idescradr; /* adr to R_DMA_CHx_DESCR */ 53 54 int flags; /* defined in tty.h */ 55 56 u8 rx_ctrl; /* shadow for R_SERIALx_REC_CTRL */ 57 u8 tx_ctrl; /* shadow for R_SERIALx_TR_CTRL */ 58 u8 iseteop; /* bit number for R_SET_EOP for the input dma */ 59 u8 enabled; /* Set to 1 if the port is enabled in HW config */ 60 61 u8 dma_out_enabled:1; /* Set to 1 if DMA should be used */ 62 u8 dma_in_enabled:1; /* Set to 1 if DMA should be used */ 63 64 /* end of fields defined in rs_table[] in .c-file */ 65 u8 uses_dma_in; /* Set to 1 if DMA is used */ 66 u8 uses_dma_out; /* Set to 1 if DMA is used */ 67 u8 forced_eop; /* a fifo eop has been forced */ 68 int baud_base; /* For special baudrates */ 69 int custom_divisor; /* For special baudrates */ 70 struct etrax_dma_descr tr_descr; 71 struct etrax_dma_descr rec_descr[SERIAL_RECV_DESCRIPTORS]; 72 int cur_rec_descr; 73 74 volatile int tr_running; /* 1 if output is running */ 75 76 struct tty_struct *tty; 77 int read_status_mask; 78 int ignore_status_mask; 79 int x_char; /* xon/xoff character */ 80 int close_delay; 81 unsigned short closing_wait; 82 unsigned short closing_wait2; 83 unsigned long event; 84 unsigned long last_active; 85 int line; 86 int type; /* PORT_ETRAX */ 87 int count; /* # of fd on device */ 88 int blocked_open; /* # of blocked opens */ 89 long session; /* Session of opening process */ 90 long pgrp; /* pgrp of opening process */ 91 struct circ_buf xmit; 92 struct etrax_recv_buffer *first_recv_buffer; 93 struct etrax_recv_buffer *last_recv_buffer; 94 unsigned int recv_cnt; 95 unsigned int max_recv_cnt; 96 97 struct tq_struct tqueue; 98 struct async_icount icount; /* error-statistics etc.*/ 99 struct termios normal_termios; 100 struct termios callout_termios; 101 #ifdef DECLARE_WAITQUEUE 102 wait_queue_head_t open_wait; 103 wait_queue_head_t close_wait; 104 #else 105 struct wait_queue *open_wait; 106 struct wait_queue *close_wait; 107 #endif 108 109 unsigned long char_time_usec; /* The time for 1 char, in usecs */ 110 unsigned long flush_time_usec; /* How often we should flush */ 111 unsigned long last_tx_active_usec; /* Last tx usec in the jiffies */ 112 unsigned long last_tx_active; /* Last tx time in jiffies */ 113 unsigned long last_rx_active_usec; /* Last rx usec in the jiffies */ 114 unsigned long last_rx_active; /* Last rx time in jiffies */ 115 116 int break_detected_cnt; 117 int errorcode; 118 119 #ifdef CONFIG_ETRAX_RS485 120 struct rs485_control rs485; /* RS-485 support */ 121 #endif 122 }; 123 124 /* this PORT is not in the standard serial.h. it's not actually used for 125 * anything since we only have one type of async serial-port anyway in this 126 * system. 127 */ 128 129 #define PORT_ETRAX 1 130 131 /* 132 * Events are used to schedule things to happen at timer-interrupt 133 * time, instead of at rs interrupt time. 134 */ 135 #define RS_EVENT_WRITE_WAKEUP 0 136 137 #endif /* __KERNEL__ */ 138 139 #endif /* !_ETRAX_SERIAL_H */ 140