1#ifndef HAYESESP_H
2#define HAYESESP_H
3
4struct hayes_esp_config {
5	short flow_on;
6	short flow_off;
7	short rx_trigger;
8	short tx_trigger;
9	short pio_threshold;
10	unsigned char rx_timeout;
11	char dma_channel;
12};
13
14#ifdef __KERNEL__
15
16#define ESP_DMA_CHANNEL   0
17#define ESP_RX_TRIGGER    768
18#define ESP_TX_TRIGGER    768
19#define ESP_FLOW_OFF      1016
20#define ESP_FLOW_ON       944
21#define ESP_RX_TMOUT      128
22#define ESP_PIO_THRESHOLD 32
23
24#define ESP_IN_MAJOR	57	/* major dev # for dial in */
25#define ESP_OUT_MAJOR	58	/* major dev # for dial out */
26#define ESPC_SCALE 	3
27#define UART_ESI_BASE	0x00
28#define UART_ESI_SID	0x01
29#define UART_ESI_RX	0x02
30#define UART_ESI_TX	0x02
31#define UART_ESI_CMD1	0x04
32#define UART_ESI_CMD2	0x05
33#define UART_ESI_STAT1	0x04
34#define UART_ESI_STAT2	0x05
35#define UART_ESI_RWS	0x07
36
37#define UART_IER_DMA_TMOUT	0x80
38#define UART_IER_DMA_TC		0x08
39
40#define ESI_SET_IRQ		0x04
41#define ESI_SET_DMA_TMOUT	0x05
42#define ESI_SET_SRV_MASK	0x06
43#define ESI_SET_ERR_MASK	0x07
44#define ESI_SET_FLOW_CNTL	0x08
45#define ESI_SET_FLOW_CHARS	0x09
46#define ESI_SET_FLOW_LVL	0x0a
47#define ESI_SET_TRIGGER		0x0b
48#define ESI_SET_RX_TIMEOUT	0x0c
49#define ESI_SET_FLOW_TMOUT	0x0d
50#define ESI_WRITE_UART		0x0e
51#define ESI_READ_UART		0x0f
52#define ESI_SET_MODE		0x10
53#define ESI_GET_ERR_STAT	0x12
54#define ESI_GET_UART_STAT	0x13
55#define ESI_GET_RX_AVAIL	0x14
56#define ESI_GET_TX_AVAIL	0x15
57#define ESI_START_DMA_RX	0x16
58#define ESI_START_DMA_TX	0x17
59#define ESI_ISSUE_BREAK		0x1a
60#define ESI_FLUSH_RX		0x1b
61#define ESI_FLUSH_TX		0x1c
62#define ESI_SET_BAUD		0x1d
63#define ESI_SET_ENH_IRQ		0x1f
64#define ESI_SET_REINTR		0x20
65#define ESI_SET_PRESCALAR	0x23
66#define ESI_NO_COMMAND		0xff
67
68#define ESP_STAT_RX_TIMEOUT	0x01
69#define ESP_STAT_DMA_RX		0x02
70#define ESP_STAT_DMA_TX		0x04
71#define ESP_STAT_NEVER_DMA      0x08
72#define ESP_STAT_USE_PIO        0x10
73
74#define ESP_EVENT_WRITE_WAKEUP	0
75#define ESP_MAGIC		0x53ee
76#define ESP_XMIT_SIZE		4096
77
78struct esp_struct {
79	int			magic;
80	spinlock_t		lock;
81	int			port;
82	int			irq;
83	int			flags; 		/* defined in tty.h */
84	struct tty_struct 	*tty;
85	int			read_status_mask;
86	int			ignore_status_mask;
87	int			timeout;
88	int			stat_flags;
89	int			custom_divisor;
90	int			close_delay;
91	unsigned short		closing_wait;
92	unsigned short		closing_wait2;
93	int			IER; 	/* Interrupt Enable Register */
94	int			MCR; 	/* Modem control register */
95	unsigned long		event;
96	unsigned long		last_active;
97	int			line;
98	int			count;	    /* # of fd on device */
99	int			blocked_open; /* # of blocked opens */
100	unsigned char 		*xmit_buf;
101	int			xmit_head;
102	int			xmit_tail;
103	int			xmit_cnt;
104	struct work_struct	tqueue;
105	struct work_struct	tqueue_hangup;
106	wait_queue_head_t	open_wait;
107	wait_queue_head_t	close_wait;
108	wait_queue_head_t	delta_msr_wait;
109	wait_queue_head_t	break_wait;
110	struct async_icount	icount;	/* kernel counters for the 4 input interrupts */
111	struct hayes_esp_config config; /* port configuration */
112	struct esp_struct	*next_port; /* For the linked list */
113};
114
115struct esp_pio_buffer {
116	unsigned char data[1024];
117	struct esp_pio_buffer *next;
118};
119
120#endif /* __KERNEL__ */
121
122
123#endif /* ESP_H */
124