|  | #ifndef _FTAPE_H | 
|  | #define _FTAPE_H | 
|  |  | 
|  | /* | 
|  | * Copyright (C) 1994-1996 Bas Laarhoven, | 
|  | *           (C) 1996-1997 Claus-Justus Heine. | 
|  |  | 
|  | 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, 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; see the file COPYING.  If not, write to | 
|  | the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | 
|  |  | 
|  | * | 
|  | * $Source: /homes/cvs/ftape-stacked/include/linux/ftape.h,v $ | 
|  | * $Revision: 1.17.6.4 $ | 
|  | * $Date: 1997/11/25 01:52:54 $ | 
|  | * | 
|  | *      This file contains global definitions, typedefs and macro's | 
|  | *      for the QIC-40/80/3010/3020 floppy-tape driver for Linux. | 
|  | */ | 
|  |  | 
|  | #define FTAPE_VERSION "ftape v3.04d 25/11/97" | 
|  |  | 
|  | #ifdef __KERNEL__ | 
|  | #include <linux/interrupt.h> | 
|  | #include <linux/mm.h> | 
|  | #endif | 
|  | #include <linux/types.h> | 
|  | #include <linux/mtio.h> | 
|  |  | 
|  | #define FT_SECTOR(x)		(x+1)	/* sector offset into real sector */ | 
|  | #define FT_SECTOR_SIZE		1024 | 
|  | #define FT_SECTORS_PER_SEGMENT	  32 | 
|  | #define FT_ECC_SECTORS		   3 | 
|  | #define FT_SEGMENT_SIZE		((FT_SECTORS_PER_SEGMENT - FT_ECC_SECTORS) * FT_SECTOR_SIZE) | 
|  | #define FT_BUFF_SIZE    (FT_SECTORS_PER_SEGMENT * FT_SECTOR_SIZE) | 
|  |  | 
|  | /* | 
|  | *   bits of the minor device number that define drive selection | 
|  | *   methods. Could be used one day to access multiple tape | 
|  | *   drives on the same controller. | 
|  | */ | 
|  | #define FTAPE_SEL_A     0 | 
|  | #define FTAPE_SEL_B     1 | 
|  | #define FTAPE_SEL_C     2 | 
|  | #define FTAPE_SEL_D     3 | 
|  | #define FTAPE_SEL_MASK     3 | 
|  | #define FTAPE_SEL(unit) ((unit) & FTAPE_SEL_MASK) | 
|  | #define FTAPE_NO_REWIND 4	/* mask for minor nr */ | 
|  |  | 
|  | /* the following two may be reported when MTIOCGET is requested ... */ | 
|  | typedef union { | 
|  | struct { | 
|  | __u8 error; | 
|  | __u8 command; | 
|  | } error; | 
|  | long space; | 
|  | } ft_drive_error; | 
|  | typedef union { | 
|  | struct { | 
|  | __u8 drive_status; | 
|  | __u8 drive_config; | 
|  | __u8 tape_status; | 
|  | } status; | 
|  | long space; | 
|  | } ft_drive_status; | 
|  |  | 
|  | #ifdef __KERNEL__ | 
|  |  | 
|  | #define FT_RQM_DELAY    12 | 
|  | #define FT_MILLISECOND  1 | 
|  | #define FT_SECOND       1000 | 
|  | #define FT_FOREVER      -1 | 
|  | #ifndef HZ | 
|  | #error "HZ undefined." | 
|  | #endif | 
|  | #define FT_USPT         (1000000/HZ) /* microseconds per tick */ | 
|  |  | 
|  | /* This defines the number of retries that the driver will allow | 
|  | * before giving up (and letting a higher level handle the error). | 
|  | */ | 
|  | #ifdef TESTING | 
|  | #define FT_SOFT_RETRIES 1	   /* number of low level retries */ | 
|  | #define FT_RETRIES_ON_ECC_ERROR 3  /* ecc error when correcting segment */ | 
|  | #else | 
|  | #define FT_SOFT_RETRIES 6	   /* number of low level retries (triple) */ | 
|  | #define FT_RETRIES_ON_ECC_ERROR 3  /* ecc error when correcting segment */ | 
|  | #endif | 
|  |  | 
|  | #ifndef THE_FTAPE_MAINTAINER | 
|  | #define THE_FTAPE_MAINTAINER "the ftape maintainer" | 
|  | #endif | 
|  |  | 
|  | /* Initialize missing configuration parameters. | 
|  | */ | 
|  | #ifndef CONFIG_FT_NR_BUFFERS | 
|  | # define CONFIG_FT_NR_BUFFERS 3 | 
|  | #endif | 
|  | #ifndef CONFIG_FT_FDC_THR | 
|  | # define CONFIG_FT_FDC_THR 8 | 
|  | #endif | 
|  | #ifndef CONFIG_FT_FDC_MAX_RATE | 
|  | # define CONFIG_FT_FDC_MAX_RATE 2000 | 
|  | #endif | 
|  | #ifndef CONFIG_FT_FDC_BASE | 
|  | # define CONFIG_FT_FDC_BASE 0 | 
|  | #endif | 
|  | #ifndef CONFIG_FT_FDC_IRQ | 
|  | # define CONFIG_FT_FDC_IRQ  0 | 
|  | #endif | 
|  | #ifndef CONFIG_FT_FDC_DMA | 
|  | # define CONFIG_FT_FDC_DMA  0 | 
|  | #endif | 
|  |  | 
|  | /* Turn some booleans into numbers. | 
|  | */ | 
|  | #ifdef CONFIG_FT_PROBE_FC10 | 
|  | # undef CONFIG_FT_PROBE_FC10 | 
|  | # define CONFIG_FT_PROBE_FC10 1 | 
|  | #else | 
|  | # define CONFIG_FT_PROBE_FC10 0 | 
|  | #endif | 
|  | #ifdef CONFIG_FT_MACH2 | 
|  | # undef CONFIG_FT_MACH2 | 
|  | # define CONFIG_FT_MACH2 1 | 
|  | #else | 
|  | # define CONFIG_FT_MACH2 0 | 
|  | #endif | 
|  |  | 
|  | /* Insert default settings | 
|  | */ | 
|  | #if CONFIG_FT_PROBE_FC10 == 1 | 
|  | # if CONFIG_FT_FDC_BASE == 0 | 
|  | #  undef  CONFIG_FT_FDC_BASE | 
|  | #  define CONFIG_FT_FDC_BASE 0x180 | 
|  | # endif | 
|  | # if CONFIG_FT_FDC_IRQ == 0 | 
|  | #  undef  CONFIG_FT_FDC_IRQ | 
|  | #  define CONFIG_FT_FDC_IRQ 9 | 
|  | # endif | 
|  | # if CONFIG_FT_FDC_DMA == 0 | 
|  | #  undef  CONFIG_FT_FDC_DMA | 
|  | #  define CONFIG_FT_FDC_DMA 3 | 
|  | # endif | 
|  | #elif CONFIG_FT_MACH2 == 1    /* CONFIG_FT_PROBE_FC10 == 1 */ | 
|  | # if CONFIG_FT_FDC_BASE == 0 | 
|  | #  undef  CONFIG_FT_FDC_BASE | 
|  | #  define CONFIG_FT_FDC_BASE 0x1E0 | 
|  | # endif | 
|  | # if CONFIG_FT_FDC_IRQ == 0 | 
|  | #  undef  CONFIG_FT_FDC_IRQ | 
|  | #  define CONFIG_FT_FDC_IRQ 6 | 
|  | # endif | 
|  | # if CONFIG_FT_FDC_DMA == 0 | 
|  | #  undef  CONFIG_FT_FDC_DMA | 
|  | #  define CONFIG_FT_FDC_DMA 2 | 
|  | # endif | 
|  | #elif defined(CONFIG_FT_ALT_FDC)  /* CONFIG_FT_MACH2 */ | 
|  | # if CONFIG_FT_FDC_BASE == 0 | 
|  | #  undef  CONFIG_FT_FDC_BASE | 
|  | #  define CONFIG_FT_FDC_BASE 0x370 | 
|  | # endif | 
|  | # if CONFIG_FT_FDC_IRQ == 0 | 
|  | #  undef  CONFIG_FT_FDC_IRQ | 
|  | #  define CONFIG_FT_FDC_IRQ 6 | 
|  | # endif | 
|  | # if CONFIG_FT_FDC_DMA == 0 | 
|  | #  undef  CONFIG_FT_FDC_DMA | 
|  | #  define CONFIG_FT_FDC_DMA 2 | 
|  | # endif | 
|  | #else                          /* CONFIG_FT_ALT_FDC */ | 
|  | # if CONFIG_FT_FDC_BASE == 0 | 
|  | #  undef  CONFIG_FT_FDC_BASE | 
|  | #  define CONFIG_FT_FDC_BASE 0x3f0 | 
|  | # endif | 
|  | # if CONFIG_FT_FDC_IRQ == 0 | 
|  | #  undef  CONFIG_FT_FDC_IRQ | 
|  | #  define CONFIG_FT_FDC_IRQ 6 | 
|  | # endif | 
|  | # if CONFIG_FT_FDC_DMA == 0 | 
|  | #  undef  CONFIG_FT_FDC_DMA | 
|  | #  define CONFIG_FT_FDC_DMA 2 | 
|  | # endif | 
|  | #endif                         /* standard FDC */ | 
|  |  | 
|  | /*      some useful macro's | 
|  | */ | 
|  | #define NR_ITEMS(x)     (int)(sizeof(x)/ sizeof(*x)) | 
|  |  | 
|  | #endif  /* __KERNEL__ */ | 
|  |  | 
|  | #endif |