⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tpqic02.h

📁 linux得一些常用命令,以及linux环境下的c编程
💻 H
📖 第 1 页 / 共 2 页
字号:
/* $Id: tpqic02.h,v 1.5 1996/12/14 23:01:38 root Exp root $ * * Include file for QIC-02 driver for Linux. * * Copyright (c) 1992--1995 by H. H. Bergman. All rights reserved. * * ******* USER CONFIG SECTION BELOW (Near line 70) ******* */#ifndef _LINUX_TPQIC02_H#define _LINUX_TPQIC02_H#include <linux/config.h>#if CONFIG_QIC02_TAPE || CONFIG_QIC02_TAPE_MODULE/* need to have QIC02_TAPE_DRIVE and QIC02_TAPE_IFC expand to something */#include <linux/mtio.h>/* Make QIC02_TAPE_IFC expand to something. * * The only difference between WANGTEK and EVEREX is in the  * handling of the DMA channel 3. * Note that the driver maps EVEREX to WANGTEK internally for speed * reasons. Externally WANGTEK==1, EVEREX==2, ARCHIVE==3. * These must correspond to the values used in qic02config(1). * * Support for Mountain controllers was added by Erik Jacobson * and severely hacked by me.   -- hhb *  * Support for Emerald controllers by Alan Bain <afrb2@chiark.chu.cam.ac.uk> * with more hacks by me.   -- hhb */#define WANGTEK		1		   /* don't know about Wangtek QIC-36 */#define EVEREX		(WANGTEK+1)  /* I heard *some* of these are identical */#define EVEREX_811V	EVEREX			      /* With TEAC MT 2ST 45D */#define EVEREX_831V	EVEREX#define ARCHIVE		3#define ARCHIVE_SC400	ARCHIVE	       /* rumoured to be from the pre-SMD-age */#define ARCHIVE_SC402	ARCHIVE		       /* don't know much about SC400 */#define ARCHIVE_SC499	ARCHIVE       /* SC402 and SC499R should be identical */#define MOUNTAIN	5		       /* Mountain Computer Interface */#define EMERALD		6		       /* Emerald Interface card */#define QIC02_TAPE_PORT_RANGE 	8	 /* number of IO locations to reserve *//*********** START OF USER CONFIGURABLE SECTION ************//* Tape configuration: Select DRIVE, IFC, PORT, IRQ and DMA below. * Runtime (re)configuration is not supported yet. * * Tape drive configuration:	(MT_IS* constants are defined in mtio.h) * * QIC02_TAPE_DRIVE = MT_ISWT5150 *	- Wangtek 5150, format: up to QIC-150. * QIC02_TAPE_DRIVE = MT_ISQIC02_ALL_FEATURES *	- Enables some optional QIC02 commands that some drives may lack. *	  It is provided so you can check which are supported by your drive. *	  Refer to tpqic02.h for others. * * Supported interface cards: QIC02_TAPE_IFC = *	WANGTEK, *	ARCHIVE_SC402, ARCHIVE_SC499.	(both same programming interface) * * Make sure you have the I/O ports/DMA channels  * and IRQ stuff configured properly! * NOTE: There may be other device drivers using the same major *       number. This must be avoided. Check for timer.h conflicts too. * * If you have an EVEREX EV-831 card and you are using DMA channel 3, * you will probably have to ``#define QIC02_TAPE_DMA3_FIX'' below. *//* CONFIG_QIC02_DYNCONF can be defined in autoconf.h, by `make config' *//*** #undef CONFIG_QIC02_DYNCONF ***/#ifndef CONFIG_QIC02_DYNCONF#define QIC02_TAPE_DRIVE	MT_ISQIC02_ALL_FEATURES	 /* drive type *//* #define QIC02_TAPE_DRIVE	MT_ISWT5150 *//* #define QIC02_TAPE_DRIVE	MT_ISARCHIVE_5945L2 *//* #define QIC02_TAPE_DRIVE	MT_ISTEAC_MT2ST *//* #define QIC02_TAPE_DRIVE	MT_ISARCHIVE_2150L *//* #define QIC02_TAPE_DRIVE	MT_ISARCHIVESC499 *//* Either WANGTEK, ARCHIVE or MOUNTAIN. Not EVEREX.  * If you have an EVEREX, use WANGTEK and try the DMA3_FIX below. */#define QIC02_TAPE_IFC		WANGTEK	/* interface card type *//* #define QIC02_TAPE_IFC		ARCHIVE *//* #define QIC02_TAPE_IFC		MOUNTAIN */#define QIC02_TAPE_PORT 	0x300	/* controller port address */#define QIC02_TAPE_IRQ		5	/* For IRQ2, use 9 here, others normal. */#define QIC02_TAPE_DMA		1	/* either 1 or 3, because 2 is used by the floppy *//* If DMA3 doesn't work, but DMA1 does, and you have a  * Wangtek/Everex card, you can try #define-ing the flag * below. Note that you should also change the DACK jumper * for Wangtek/Everex cards when changing the DMA channel. */#undef QIC02_TAPE_DMA3_FIX/************ END OF USER CONFIGURABLE SECTION *************//* I put the stuff above in config.in, but a few recompiles, to * verify different configurations, and several days later I decided * to change it back again. *//* NOTE: TP_HAVE_DENS should distinguish between available densities (?) * NOTE: Drive select is not implemented -- I have only one tape streamer, *	 so I'm unable and unmotivated to test and implement that. ;-) ;-) */#if QIC02_TAPE_DRIVE == MT_ISWT5150#define TP_HAVE_DENS	1#define TP_HAVE_BSF	0	/* nope */#define TP_HAVE_FSR	0	/* nope */#define TP_HAVE_BSR	0	/* nope */#define TP_HAVE_EOD	0	/* most of the time */#define TP_HAVE_SEEK	0#define TP_HAVE_TELL	0#define TP_HAVE_RAS1	1#define TP_HAVE_RAS2	1#elif QIC02_TAPE_DRIVE == MT_ISARCHIVESC499	/* Archive SC-499 QIC-36 controller */#define TP_HAVE_DENS	1	/* can do set density (QIC-11 / QIC-24) */#define TP_HAVE_BSF	0#define TP_HAVE_FSR	1	/* can skip one block forwards */#define TP_HAVE_BSR	1	/* can skip one block backwards */#define TP_HAVE_EOD	1	/* can seek to end of recorded data */#define TP_HAVE_SEEK	0#define TP_HAVE_TELL	0#define TP_HAVE_RAS1	1	/* can run selftest 1 */#define TP_HAVE_RAS2	1	/* can run selftest 2 *//* These last two selftests shouldn't be used yet! */#elif (QIC02_TAPE_DRIVE == MT_ISARCHIVE_2060L) || (QIC02_TAPE_DRIVE == MT_ISARCHIVE_2150L)#define TP_HAVE_DENS	1	/* can do set density (QIC-24 / QIC-120 / QIC-150) */#define TP_HAVE_BSF	0#define TP_HAVE_FSR	1	/* can skip one block forwards */#define TP_HAVE_BSR	1	/* can skip one block backwards */#define TP_HAVE_EOD	1	/* can seek to end of recorded data */#define TP_HAVE_TELL	1	/* can read current block address */#define TP_HAVE_SEEK	1	/* can seek to block */#define TP_HAVE_RAS1	1	/* can run selftest 1 */#define TP_HAVE_RAS2	1	/* can run selftest 2 *//* These last two selftests shouldn't be used yet! */#elif QIC02_TAPE_DRIVE == MT_ISARCHIVE_5945L2/* can anyone verify this entry?? */#define TP_HAVE_DENS	1	/* can do set density?? (QIC-24??) */#define TP_HAVE_BSF	0#define TP_HAVE_FSR	1	/* can skip one block forwards */#define TP_HAVE_BSR	1	/* can skip one block backwards */#define TP_HAVE_EOD	1	/* can seek to end of recorded data */#define TP_HAVE_TELL	1	/* can read current block address */#define TP_HAVE_SEEK	1	/* can seek to block */#define TP_HAVE_RAS1	1	/* can run selftest 1 */#define TP_HAVE_RAS2	1	/* can run selftest 2 *//* These last two selftests shouldn't be used yet! */#elif QIC02_TAPE_DRIVE == MT_ISTEAC_MT2ST/* can anyone verify this entry?? */#define TP_HAVE_DENS	0	/* cannot do set density?? (QIC-150?) */#define TP_HAVE_BSF	0#define TP_HAVE_FSR	1	/* can skip one block forwards */#define TP_HAVE_BSR	1	/* can skip one block backwards */#define TP_HAVE_EOD	1	/* can seek to end of recorded data */#define TP_HAVE_SEEK	1	/* can seek to block */#define TP_HAVE_TELL	1	/* can read current block address */#define TP_HAVE_RAS1	1	/* can run selftest 1 */#define TP_HAVE_RAS2	1	/* can run selftest 2 *//* These last two selftests shouldn't be used yet! */#elif QIC02_TAPE_DRIVE == MT_ISQIC02_ALL_FEATURES#define TP_HAVE_DENS	1	/* can do set density */#define TP_HAVE_BSF	1	/* can search filemark backwards */#define TP_HAVE_FSR	1	/* can skip one block forwards */#define TP_HAVE_BSR	1	/* can skip one block backwards */#define TP_HAVE_EOD	1	/* can seek to end of recorded data */#define TP_HAVE_SEEK	1	/* seek to block address */#define TP_HAVE_TELL	1	/* tell current block address */#define TP_HAVE_RAS1	1	/* can run selftest 1 */#define TP_HAVE_RAS2	1	/* can run selftest 2 *//* These last two selftests shouldn't be used yet! */#else#error No QIC-02 tape drive type defined!/* If your drive is not listed above, first try the 'ALL_FEATURES', * to see what commands are supported, then create your own entry in * the list above. You may want to mail it to me, so that I can include * it in the next release. */#endif#endif /* !CONFIG_QIC02_DYNCONF *//* WANGTEK interface card specifics */#define WT_QIC02_STAT_PORT	(QIC02_TAPE_PORT)#define WT_QIC02_CTL_PORT	(QIC02_TAPE_PORT)#define WT_QIC02_CMD_PORT	(QIC02_TAPE_PORT+1)#define WT_QIC02_DATA_PORT	(QIC02_TAPE_PORT+1)/* status register bits (Active LOW!) */#define WT_QIC02_STAT_POLARITY	0#define WT_QIC02_STAT_READY	0x01#define WT_QIC02_STAT_EXCEPTION	0x02#define WT_QIC02_STAT_MASK	(WT_QIC02_STAT_READY|WT_QIC02_STAT_EXCEPTION)#define WT_QIC02_STAT_RESETMASK	0x07#define WT_QIC02_STAT_RESETVAL	(WT_QIC02_STAT_RESETMASK & ~WT_QIC02_STAT_EXCEPTION)/* controller register (QIC02_CTL_PORT) bits */#define WT_QIC02_CTL_RESET	0x02#define WT_QIC02_CTL_REQUEST	0x04#define WT_CTL_ONLINE		0x01#define WT_CTL_CMDOFF		0xC0 #define WT_CTL_DMA3		0x10			  /* enable dma chan3 */#define WT_CTL_DMA1		0x08	         /* enable dma chan1 or chan2 *//* EMERALD interface card specifics * Much like Wangtek, only different polarity and bit locations */#define EMR_QIC02_STAT_PORT	(QIC02_TAPE_PORT)#define EMR_QIC02_CTL_PORT	(QIC02_TAPE_PORT)#define EMR_QIC02_CMD_PORT	(QIC02_TAPE_PORT+1)#define EMR_QIC02_DATA_PORT	(QIC02_TAPE_PORT+1)/* status register bits (Active High!) */#define EMR_QIC02_STAT_POLARITY		1#define EMR_QIC02_STAT_READY		0x01#define EMR_QIC02_STAT_EXCEPTION	0x02#define EMR_QIC02_STAT_MASK	(EMR_QIC02_STAT_READY|EMR_QIC02_STAT_EXCEPTION)#define EMR_QIC02_STAT_RESETMASK	0x07#define EMR_QIC02_STAT_RESETVAL	(EMR_QIC02_STAT_RESETMASK & ~EMR_QIC02_STAT_EXCEPTION)/* controller register (QIC02_CTL_PORT) bits */#define EMR_QIC02_CTL_RESET	0x02#define EMR_QIC02_CTL_REQUEST	0x04#define EMR_CTL_ONLINE		0x01#define EMR_CTL_CMDOFF		0xC0 #define EMR_CTL_DMA3		0x10			  /* enable dma chan3 */#define EMR_CTL_DMA1		0x08	         /* enable dma chan1 or chan2 *//* ARCHIVE interface card specifics */#define AR_QIC02_STAT_PORT	(QIC02_TAPE_PORT+1)#define AR_QIC02_CTL_PORT	(QIC02_TAPE_PORT+1)#define AR_QIC02_CMD_PORT	(QIC02_TAPE_PORT)#define AR_QIC02_DATA_PORT	(QIC02_TAPE_PORT)#define AR_START_DMA_PORT	(QIC02_TAPE_PORT+2)#define AR_RESET_DMA_PORT	(QIC02_TAPE_PORT+3)/* STAT port bits */#define AR_QIC02_STAT_POLARITY	0#define AR_STAT_IRQF		0x80	/* active high, interrupt request flag */#define AR_QIC02_STAT_READY	0x40	/* active low */#define AR_QIC02_STAT_EXCEPTION	0x20	/* active low */#define AR_QIC02_STAT_MASK	(AR_QIC02_STAT_READY|AR_QIC02_STAT_EXCEPTION)#define AR_STAT_DMADONE		0x10	/* active high, DMA done */#define AR_STAT_DIRC		0x08	/* active high, direction */#define AR_QIC02_STAT_RESETMASK	0x70	/* check RDY,EXC,DMADONE */#define AR_QIC02_STAT_RESETVAL	((AR_QIC02_STAT_RESETMASK & ~AR_STAT_IRQF & ~AR_QIC02_STAT_EXCEPTION) | AR_STAT_DMADONE)/* CTL port bits */#define AR_QIC02_CTL_RESET	0x80	/* drive reset */#define AR_QIC02_CTL_REQUEST	0x40	/* notify of new command */#define AR_CTL_IEN		0x20	/* interrupt enable */#define AR_CTL_DNIEN		0x10	/* done-interrupt enable */  /* Note: All of these bits are cleared automatically when writing to   * AR_RESET_DMA_PORT. So AR_CTL_IEN and AR_CTL_DNIEN must be   * reprogrammed before the write to AR_START_DMA_PORT.   *//* MOUNTAIN interface specifics */#define MTN_QIC02_STAT_PORT	(QIC02_TAPE_PORT+1)#define MTN_QIC02_CTL_PORT	(QIC02_TAPE_PORT+1)#define MTN_QIC02_CMD_PORT	(QIC02_TAPE_PORT)#define MTN_QIC02_DATA_PORT	(QIC02_TAPE_PORT)#define MTN_W_SELECT_DMA_PORT	(QIC02_TAPE_PORT+2)#define MTN_R_DESELECT_DMA_PORT	(QIC02_TAPE_PORT+2)#define MTN_W_DMA_WRITE_PORT	(QIC02_TAPE_PORT+3)/* STAT port bits */#define MTN_QIC02_STAT_POLARITY	 0#define MTN_QIC02_STAT_READY	 0x02	/* active low */#define MTN_QIC02_STAT_EXCEPTION 0x04	/* active low */#define MTN_QIC02_STAT_MASK	 (MTN_QIC02_STAT_READY|MTN_QIC02_STAT_EXCEPTION)#define MTN_STAT_DMADONE	 0x01	/* active high, DMA done */#define MTN_QIC02_STAT_RESETMASK 0x07	/* check RDY,EXC,DMADONE */#define MTN_QIC02_STAT_RESETVAL	 ((MTN_QIC02_STAT_RESETMASK & ~MTN_QIC02_STAT_EXCEPTION) | MTN_STAT_DMADONE)/* CTL port bits */#define MTN_QIC02_CTL_RESET_NOT	 0x80	/* drive reset, active low */#define MTN_QIC02_CTL_RESET	 0x80	/* Fodder #definition to keep gcc happy */#define MTN_QIC02_CTL_ONLINE	 0x40	/* Put drive on line  */#define MTN_QIC02_CTL_REQUEST	 0x20	/* notify of new command */#define MTN_QIC02_CTL_IRQ_DRIVER 0x10	/* Enable IRQ tristate driver */#define MTN_QIC02_CTL_DMA_DRIVER 0x08	/* Enable DMA tristate driver */#define MTN_CTL_EXC_IEN		 0x04	/* Exception interrupt enable */#define MTN_CTL_RDY_IEN		 0x02	/* Ready interrupt enable */#define MTN_CTL_DNIEN		 0x01	/* done-interrupt enable */#define MTN_CTL_ONLINE		(MTN_QIC02_CTL_RESET_NOT | MTN_QIC02_CTL_IRQ_DRIVER | MTN_QIC02_CTL_DMA_DRIVER)#ifndef CONFIG_QIC02_DYNCONF# define QIC02_TAPE_DEBUG	(qic02_tape_debug)# if QIC02_TAPE_IFC == WANGTEK	#  define QIC02_STAT_POLARITY	WT_QIC02_STAT_POLARITY#  define QIC02_STAT_PORT	WT_QIC02_STAT_PORT#  define QIC02_CTL_PORT	WT_QIC02_CTL_PORT#  define QIC02_CMD_PORT	WT_QIC02_CMD_PORT#  define QIC02_DATA_PORT	WT_QIC02_DATA_PORT#  define QIC02_STAT_READY	WT_QIC02_STAT_READY#  define QIC02_STAT_EXCEPTION	WT_QIC02_STAT_EXCEPTION#  define QIC02_STAT_MASK	WT_QIC02_STAT_MASK#  define QIC02_STAT_RESETMASK	WT_QIC02_STAT_RESETMASK#  define QIC02_STAT_RESETVAL	WT_QIC02_STAT_RESETVAL#  define QIC02_CTL_RESET	WT_QIC02_CTL_RESET#  define QIC02_CTL_REQUEST	WT_QIC02_CTL_REQUEST#  if QIC02_TAPE_DMA == 3#   ifdef QIC02_TAPE_DMA3_FIX#    define WT_CTL_DMA		WT_CTL_DMA1#   else#    define WT_CTL_DMA		WT_CTL_DMA3#   endif#  elif QIC02_TAPE_DMA == 1#    define WT_CTL_DMA		WT_CTL_DMA1#  else#   error Unsupported or incorrect DMA configuration.#  endif# elif QIC02_TAPE_IFC == EMERALD#  define QIC02_STAT_POLARITY	EMR_QIC02_STAT_POLARITY#  define QIC02_STAT_PORT	EMR_QIC02_STAT_PORT#  define QIC02_CTL_PORT	EMR_QIC02_CTL_PORT#  define QIC02_CMD_PORT	EMR_QIC02_CMD_PORT#  define QIC02_DATA_PORT	EMR_QIC02_DATA_PORT#  define QIC02_STAT_READY	EMR_QIC02_STAT_READY#  define QIC02_STAT_EXCEPTION	EMR_QIC02_STAT_EXCEPTION#  define QIC02_STAT_MASK	EMR_QIC02_STAT_MASK#  define QIC02_STAT_RESETMASK	EMR_QIC02_STAT_RESETMASK

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -