5 * Copyright (C) 1994-1996 Bas Laarhoven,
6 * (C) 1996-1997 Claus-Justus Heine.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; see the file COPYING. If not, write to
20 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23 * $Source: /homes/cvs/ftape-stacked/include/linux/ftape.h,v $
24 * $Revision: 1.17.6.4 $
25 * $Date: 1997/11/25 01:52:54 $
27 * This file contains global definitions, typedefs and macro's
28 * for the QIC-40/80/3010/3020 floppy-tape driver for Linux.
31 #define FTAPE_VERSION "ftape v3.04d 25/11/97"
33 /* this makes the Kernel version numbers readable */
34 #define KERNEL_VER(major,minor,sublvl) (((major)<<16)+((minor)<<8)+(sublvl))
37 #include <linux/sched.h>
40 #include <linux/types.h>
41 #include <linux/version.h>
42 #include <linux/config.h>
43 #if LINUX_VERSION_CODE <= KERNEL_VER(1,2,13)
44 typedef daddr_t __kernel_daddr_t
; /* needed for mtio.h */
46 #include <linux/mtio.h>
48 #define FT_SECTOR(x) (x+1) /* sector offset into real sector */
49 #define FT_SECTOR_SIZE 1024
50 #define FT_SECTORS_PER_SEGMENT 32
51 #define FT_ECC_SECTORS 3
52 #define FT_SEGMENT_SIZE ((FT_SECTORS_PER_SEGMENT - FT_ECC_SECTORS) * FT_SECTOR_SIZE)
53 #define FT_BUFF_SIZE (FT_SECTORS_PER_SEGMENT * FT_SECTOR_SIZE)
56 * bits of the minor device number that define drive selection
57 * methods. Could be used one day to access multiple tape
58 * drives on the same controller.
64 #define FTAPE_SEL_MASK 3
65 #define FTAPE_SEL(unit) ((unit) & FTAPE_SEL_MASK)
66 #define FTAPE_NO_REWIND 4 /* mask for minor nr */
68 /* the following two may be reported when MTIOCGET is requested ... */
87 #define FT_RQM_DELAY 12
88 #define FT_MILLISECOND 1
89 #define FT_SECOND 1000
92 #error "HZ undefined."
94 #define FT_USPT (1000000/HZ) /* microseconds per tick */
96 /* This defines the number of retries that the driver will allow
97 * before giving up (and letting a higher level handle the error).
100 #define FT_SOFT_RETRIES 1 /* number of low level retries */
101 #define FT_RETRIES_ON_ECC_ERROR 3 /* ecc error when correcting segment */
103 #define FT_SOFT_RETRIES 6 /* number of low level retries (triple) */
104 #define FT_RETRIES_ON_ECC_ERROR 3 /* ecc error when correcting segment */
107 #ifndef THE_FTAPE_MAINTAINER
108 #define THE_FTAPE_MAINTAINER "the ftape maintainer"
111 /* Initialize missing configuration parameters.
113 #ifndef CONFIG_FT_NR_BUFFERS
114 # define CONFIG_FT_NR_BUFFERS 3
116 #ifndef CONFIG_FT_FDC_THR
117 # define CONFIG_FT_FDC_THR 8
119 #ifndef CONFIG_FT_FDC_MAX_RATE
120 # define CONFIG_FT_FDC_MAX_RATE 2000
122 #ifndef CONFIG_FT_FDC_BASE
123 # define CONFIG_FT_FDC_BASE 0
125 #ifndef CONFIG_FT_FDC_IRQ
126 # define CONFIG_FT_FDC_IRQ 0
128 #ifndef CONFIG_FT_FDC_DMA
129 # define CONFIG_FT_FDC_DMA 0
132 /* Turn some booleans into numbers.
134 #ifdef CONFIG_FT_PROBE_FC10
135 # undef CONFIG_FT_PROBE_FC10
136 # define CONFIG_FT_PROBE_FC10 1
138 # define CONFIG_FT_PROBE_FC10 0
140 #ifdef CONFIG_FT_MACH2
141 # undef CONFIG_FT_MACH2
142 # define CONFIG_FT_MACH2 1
144 # define CONFIG_FT_MACH2 0
147 /* Insert default settings
149 #if CONFIG_FT_PROBE_FC10 == 1
150 # if CONFIG_FT_FDC_BASE == 0
151 # undef CONFIG_FT_FDC_BASE
152 # define CONFIG_FT_FDC_BASE 0x180
154 # if CONFIG_FT_FDC_IRQ == 0
155 # undef CONFIG_FT_FDC_IRQ
156 # define CONFIG_FT_FDC_IRQ 9
158 # if CONFIG_FT_FDC_DMA == 0
159 # undef CONFIG_FT_FDC_DMA
160 # define CONFIG_FT_FDC_DMA 3
162 #elif CONFIG_FT_MACH2 == 1 /* CONFIG_FT_PROBE_FC10 == 1 */
163 # if CONFIG_FT_FDC_BASE == 0
164 # undef CONFIG_FT_FDC_BASE
165 # define CONFIG_FT_FDC_BASE 0x1E0
167 # if CONFIG_FT_FDC_IRQ == 0
168 # undef CONFIG_FT_FDC_IRQ
169 # define CONFIG_FT_FDC_IRQ 6
171 # if CONFIG_FT_FDC_DMA == 0
172 # undef CONFIG_FT_FDC_DMA
173 # define CONFIG_FT_FDC_DMA 2
175 #elif CONFIG_FT_ALT_FDC == 1 /* CONFIG_FT_MACH2 */
176 # if CONFIG_FT_FDC_BASE == 0
177 # undef CONFIG_FT_FDC_BASE
178 # define CONFIG_FT_FDC_BASE 0x370
180 # if CONFIG_FT_FDC_IRQ == 0
181 # undef CONFIG_FT_FDC_IRQ
182 # define CONFIG_FT_FDC_IRQ 6
184 # if CONFIG_FT_FDC_DMA == 0
185 # undef CONFIG_FT_FDC_DMA
186 # define CONFIG_FT_FDC_DMA 2
188 #else /* CONFIG_FT_ALT_FDC */
189 # if CONFIG_FT_FDC_BASE == 0
190 # undef CONFIG_FT_FDC_BASE
191 # define CONFIG_FT_FDC_BASE 0x3f0
193 # if CONFIG_FT_FDC_IRQ == 0
194 # undef CONFIG_FT_FDC_IRQ
195 # define CONFIG_FT_FDC_IRQ 6
197 # if CONFIG_FT_FDC_DMA == 0
198 # undef CONFIG_FT_FDC_DMA
199 # define CONFIG_FT_FDC_DMA 2
201 #endif /* standard FDC */
203 /* some useful macro's
205 #define ABS(a) ((a) < 0 ? -(a) : (a))
206 #define NR_ITEMS(x) (int)(sizeof(x)/ sizeof(*x))
208 extern int ftape_init(void);
210 #endif /* __KERNEL__ */