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