203 строки
5.2 KiB
C
203 строки
5.2 KiB
C
#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
|