| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  *      linux/drivers/char/specialix_io8.h  --  | 
 | 3 |  *                                   Specialix IO8+ multiport serial driver. | 
 | 4 |  * | 
 | 5 |  *      Copyright (C) 1997 Roger Wolff (R.E.Wolff@BitWizard.nl) | 
 | 6 |  *      Copyright (C) 1994-1996  Dmitry Gorodchanin (pgmdsg@ibi.com) | 
 | 7 |  * | 
 | 8 |  * | 
 | 9 |  *      Specialix pays for the development and support of this driver. | 
 | 10 |  *      Please DO contact io8-linux@specialix.co.uk if you require | 
 | 11 |  *      support. | 
 | 12 |  * | 
 | 13 |  *      This driver was developped in the BitWizard linux device | 
 | 14 |  *      driver service. If you require a linux device driver for your | 
 | 15 |  *      product, please contact devices@BitWizard.nl for a quote. | 
 | 16 |  * | 
 | 17 |  *      This code is firmly based on the riscom/8 serial driver, | 
 | 18 |  *      written by Dmitry Gorodchanin. The specialix IO8+ card | 
 | 19 |  *      programming information was obtained from the CL-CD1865 Data | 
 | 20 |  *      Book, and Specialix document number 6200059: IO8+ Hardware | 
 | 21 |  *      Functional Specification. | 
 | 22 |  * | 
 | 23 |  *      This program is free software; you can redistribute it and/or | 
 | 24 |  *      modify it under the terms of the GNU General Public License as | 
 | 25 |  *      published by the Free Software Foundation; either version 2 of | 
 | 26 |  *      the License, or (at your option) any later version. | 
 | 27 |  * | 
 | 28 |  *      This program is distributed in the hope that it will be | 
 | 29 |  *      useful, but WITHOUT ANY WARRANTY; without even the implied | 
 | 30 |  *      warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR | 
 | 31 |  *      PURPOSE.  See the GNU General Public License for more details. | 
 | 32 |  * | 
 | 33 |  *      You should have received a copy of the GNU General Public | 
 | 34 |  *      License along with this program; if not, write to the Free | 
 | 35 |  *      Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, | 
 | 36 |  *      USA. | 
 | 37 |  * */ | 
 | 38 |  | 
 | 39 | #ifndef __LINUX_SPECIALIX_H | 
 | 40 | #define __LINUX_SPECIALIX_H | 
 | 41 |  | 
 | 42 | #include <linux/serial.h> | 
 | 43 |  | 
 | 44 | #ifdef __KERNEL__ | 
 | 45 |  | 
 | 46 | /* You can have max 4 ISA cards in one PC, and I recommend not much  | 
 | 47 | more than a few  PCI versions of the card. */ | 
 | 48 |  | 
 | 49 | #define SX_NBOARD		8 | 
 | 50 |  | 
 | 51 | /* NOTE: Specialix decoder recognizes 4 addresses, but only two are used.... */ | 
 | 52 | #define SX_IO_SPACE             4 | 
 | 53 | /* The PCI version decodes 8 addresses, but still only 2 are used. */ | 
 | 54 | #define SX_PCI_IO_SPACE         8 | 
 | 55 |  | 
 | 56 | /* eight ports per board. */ | 
 | 57 | #define SX_NPORT        	8 | 
 | 58 | #define SX_BOARD(line)		((line) / SX_NPORT) | 
 | 59 | #define SX_PORT(line)		((line) & (SX_NPORT - 1)) | 
 | 60 |  | 
 | 61 |  | 
 | 62 | #define SX_DATA_REG 0     /* Base+0 : Data register */ | 
 | 63 | #define SX_ADDR_REG 1     /* base+1 : Address register. */ | 
 | 64 |  | 
 | 65 | #define MHz *1000000	/* I'm ashamed of myself. */ | 
 | 66 |  | 
 | 67 | /* On-board oscillator frequency */ | 
 | 68 | #define SX_OSCFREQ      (25 MHz/2) | 
 | 69 | /* There is a 25MHz crystal on the board, but the chip is in /2 mode */ | 
 | 70 |  | 
 | 71 |  | 
 | 72 | /* Ticks per sec. Used for setting receiver timeout and break length */ | 
 | 73 | #define SPECIALIX_TPS		4000 | 
 | 74 |  | 
 | 75 | /* Yeah, after heavy testing I decided it must be 6. | 
 | 76 |  * Sure, You can change it if needed. | 
 | 77 |  */ | 
 | 78 | #define SPECIALIX_RXFIFO	6	/* Max. receiver FIFO size (1-8) */ | 
 | 79 |  | 
 | 80 | #define SPECIALIX_MAGIC		0x0907 | 
 | 81 |  | 
 | 82 | #define SX_CCR_TIMEOUT 10000   /* CCR timeout. You may need to wait upto | 
 | 83 |                                   10 milliseconds before the internal | 
 | 84 |                                   processor is available again after | 
 | 85 |                                   you give it a command */ | 
 | 86 |  | 
 | 87 | #define SX_IOBASE1	0x100 | 
 | 88 | #define SX_IOBASE2	0x180 | 
 | 89 | #define SX_IOBASE3	0x250 | 
 | 90 | #define SX_IOBASE4	0x260 | 
 | 91 |  | 
 | 92 | struct specialix_board { | 
 | 93 | 	unsigned long   flags; | 
 | 94 | 	unsigned short	base; | 
 | 95 | 	unsigned char 	irq; | 
 | 96 | 	//signed   char	count; | 
 | 97 | 	int count; | 
 | 98 | 	unsigned char	DTR; | 
 | 99 |         int reg; | 
 | 100 | 	spinlock_t lock; | 
 | 101 | }; | 
 | 102 |  | 
 | 103 | #define SX_BOARD_PRESENT	0x00000001 | 
 | 104 | #define SX_BOARD_ACTIVE		0x00000002 | 
 | 105 | #define SX_BOARD_IS_PCI		0x00000004 | 
 | 106 |  | 
 | 107 |  | 
 | 108 | struct specialix_port { | 
 | 109 | 	int			magic; | 
 | 110 | 	int			baud_base; | 
 | 111 | 	int			flags; | 
 | 112 | 	struct tty_struct 	* tty; | 
 | 113 | 	int			count; | 
 | 114 | 	int			blocked_open; | 
 | 115 | 	ulong			event; | 
 | 116 | 	int			timeout; | 
 | 117 | 	int			close_delay; | 
 | 118 | 	unsigned char 		* xmit_buf; | 
 | 119 | 	int			custom_divisor; | 
 | 120 | 	int			xmit_head; | 
 | 121 | 	int			xmit_tail; | 
 | 122 | 	int			xmit_cnt; | 
 | 123 | 	wait_queue_head_t	open_wait; | 
 | 124 | 	wait_queue_head_t	close_wait; | 
 | 125 | 	struct work_struct	tqueue; | 
 | 126 | 	struct work_struct	tqueue_hangup; | 
 | 127 | 	short			wakeup_chars; | 
 | 128 | 	short			break_length; | 
 | 129 | 	unsigned short		closing_wait; | 
 | 130 | 	unsigned char		mark_mask; | 
 | 131 | 	unsigned char		IER; | 
 | 132 | 	unsigned char		MSVR; | 
 | 133 | 	unsigned char		COR2; | 
 | 134 | 	unsigned long		overrun; | 
 | 135 | 	unsigned long		hits[10]; | 
 | 136 | 	spinlock_t lock; | 
 | 137 | }; | 
 | 138 |  | 
 | 139 | #endif /* __KERNEL__ */ | 
 | 140 | #endif /* __LINUX_SPECIALIX_H */ | 
 | 141 |  | 
 | 142 |  | 
 | 143 |  | 
 | 144 |  | 
 | 145 |  | 
 | 146 |  | 
 | 147 |  | 
 | 148 |  | 
 | 149 |  |