#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/config.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