xref: /csrg-svn/sys/dev/scsi/tape.h (revision 55559)
154882Storek /*
254882Storek  * Copyright (c) 1992 The Regents of the University of California.
354882Storek  * All rights reserved.
454882Storek  *
554882Storek  * This software was developed by the Computer Systems Engineering group
654882Storek  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
754882Storek  * contributed to Berkeley.
854882Storek  *
9*55559Storek  * All advertising materials mentioning features or use of this software
10*55559Storek  * must display the following acknowledgement:
11*55559Storek  *	This product includes software developed by the University of
12*55559Storek  *	California, Lawrence Berkeley Laboratories.
13*55559Storek  *
1454882Storek  * %sccs.include.redist.c%
1554882Storek  *
16*55559Storek  *	@(#)tape.h	5.2 (Berkeley) 07/23/92
1754882Storek  *
1854882Storek  * from: $Header: tape.h,v 1.2 92/05/15 11:24:06 torek Exp $ (LBL)
1954882Storek  */
2054882Storek 
2154882Storek /*
2254882Storek  * SCSI definitions for Sequential Access Devices (tapes).
2354882Storek  */
2454882Storek #define	CMD_REWIND		0x01	/* rewind */
2554882Storek #define	CMD_READ_BLOCK_LIMITS	0x05	/* read block limits */
2654882Storek #define	CMD_READ		0x08	/* read */
2754882Storek #define	CMD_WRITE		0x0a	/* write */
2854882Storek #define	CMD_TRACK_SELECT	0x0b	/* track select */
2954882Storek #define	CMD_READ_REVERSE	0x0f	/* read reverse */
3054882Storek #define	CMD_WRITE_FILEMARK	0x10	/* write file marks */
3154882Storek #define	CMD_SPACE		0x11	/* space */
3254882Storek #define	CMD_VERIFY		0x13	/* verify */
3354882Storek #define	CMD_RBD			0x14	/* recover buffered data */
3454882Storek #define	CMD_MODE_SELECT		0x15	/* mode select */
3554882Storek #define	CMD_RESERVE_UNIT	0x16	/* reserve unit */
3654882Storek #define	CMD_RELEASE_UNIT	0x17	/* release unit */
3754882Storek /*	CMD_COPY		0x18	   copy (common to all scsi devs) */
3854882Storek #define	CMD_ERASE		0x19	/* erase */
3954882Storek #define	CMD_MODE_SENSE		0x1a	/* mode sense */
4054882Storek #define	CMD_LOAD_UNLOAD		0x1b	/* load/unload */
4154882Storek #define	CMD_PAMR		0x1e	/* prevent/allow medium removal */
4254882Storek 
4354882Storek /*
4454882Storek  * Structure of READ, WRITE, READ REVERSE, RECOVER BUFFERED DATA
4554882Storek  * commands (i.e., the cdb).
4654882Storek  * Also used for VERIFY commands.
4754882Storek  */
4854882Storek struct scsi_cdb_rw {
4954882Storek 	u_char	cdb_cmd,	/* 0x08 or 0x0a or 0x0f or 0x13 or 0x14 */
5054882Storek 		cdb_lun:3,	/* logical unit number */
5154882Storek 		cdb_xxx:3,	/* reserved */
5254882Storek 		cdb_bytecmp:1,	/* byte-by-byte comparison (VERIFY only) */
5354882Storek 		cdb_fixed:1,	/* fixed length blocks */
5454882Storek 		cdb_lenh,	/* transfer length (MSB) */
5554882Storek 		cdb_lenm,	/* transfer length */
5654882Storek 		cdb_lenl,	/* transfer length (LSB) */
5754882Storek 		cdb_ctrl;	/* control byte */
5854882Storek };
5954882Storek 
6054882Storek /*
6154882Storek  * Structure of a TRACK SELECT command.
6254882Storek  */
6354882Storek struct scsi_cdb_ts {
6454882Storek 	u_char	cdb_cmd,	/* 0x0b */
6554882Storek 		cdb_lun:3,	/* logical unit number */
6654882Storek 		cdb_xxx0:5,	/* reserved */
6754882Storek 		cdb_xxx1,	/* reserved */
6854882Storek 		cdb_xxx2,	/* reserved */
6954882Storek 		cdb_track,	/* track value */
7054882Storek 		cdb_ctrl;	/* control byte */
7154882Storek };
7254882Storek 
7354882Storek /*
7454882Storek  * Structure of a WRITE FILEMARKS command.
7554882Storek  */
7654882Storek struct scsi_cdb_wfm {
7754882Storek 	u_char	cdb_cmd,	/* 0x0b */
7854882Storek 		cdb_lun:3,	/* logical unit number */
7954882Storek 		cdb_xxx0:5,	/* reserved */
8054882Storek 		cdb_nfh,	/* number of filemarks (MSB) */
8154882Storek 		cdb_nfm,	/* number of filemarks */
8254882Storek 		cdb_nfl,	/* number of filemarks (LSB) */
8354882Storek 		cdb_ctrl;	/* control byte */
8454882Storek };
8554882Storek 
8654882Storek /*
8754882Storek  * Structure of a SPACE command.
8854882Storek  */
8954882Storek struct scsi_cdb_space {
9054882Storek 	u_char	cdb_cmd,	/* 0x0b */
9154882Storek 		cdb_lun:3,	/* logical unit number */
9254882Storek 		cdb_xxx0:3,	/* reserved */
9354882Storek 		cdb_code:2,	/* code (see below) */
9454882Storek 		cdb_counth,	/* count (MSB) */
9554882Storek 		cdb_countm,	/* count */
9654882Storek 		cdb_countl,	/* count (LSB) */
9754882Storek 		cdb_ctrl;	/* control byte */
9854882Storek };
9954882Storek #define	SCSI_CMD_SPACE_BLOCKS	0	/* skip blocks */
10054882Storek #define	SCSI_CMD_SPACE_FMS	1	/* skip file marks */
10154882Storek #define	SCSI_CMD_SPACE_SFMS	2	/* skip sequential file marks */
10254882Storek #define	SCSI_CMD_SPACE_PEOD	3	/* skip to physical end of data */
10354882Storek 
10454882Storek /*
10554882Storek  * Mode Select parameters (data).
10654882Storek  */
10754882Storek struct scsi_msel {
10854882Storek 	u_short	msel_xxx0;	/* reserved */
10954882Storek 	u_char	msel_xxx1:1,	/* reserved */
11054882Storek 		msel_bm:3,	/* buffered mode */
11154882Storek 		msel_speed:4,	/* speed */
11254882Storek 		msel_bdl;	/* block descriptor length */
11354882Storek 	struct scsi_msel_bdesc {
11454882Storek 		u_char	dc,	/* density code */
11554882Storek 			nbh,	/* number of blocks (MSB) */
11654882Storek 			nbm,	/* number of blocks */
11754882Storek 			nbl,	/* number of blocks (LSB) */
11854882Storek 			xxx,	/* reserved */
11954882Storek 			blh,	/* block length (MSB) */
12054882Storek 			blm,	/* block length */
12154882Storek 			bll;	/* block length (LSB) */
12254882Storek 	} msel_bd[1];		/* actually longer */
12354882Storek 	/* followed by Vendor Unique bytes */
12454882Storek };
12554882Storek 
12654882Storek /* buffered mode and speed */
12754882Storek #define	SCSI_MSEL_BM_UNBUFFERED	0	/* unbuffered writes */
12854882Storek #define	SCSI_MSEL_BM_BUFFERED	1	/* buffered writes allowed */
12954882Storek #define	SCSI_MSEL_SPEED_DEFAULT	0	/* use device default speed */
13054882Storek #define	SCSI_MSEL_SPEED_LOW	1	/* use lowest speed */
13154882Storek #define	SCSI_MSEL_SPEED_HIGH	15	/* use highest speed */
13254882Storek 
13354882Storek /* density codes */
13454882Storek #define	SCSI_MSEL_DC_DEFAULT	0	/* use device default density */
13554882Storek #define	SCSI_MSEL_DC_9T_800BPI	1	/* 9 track, 800 bpi */
13654882Storek #define	SCSI_MSEL_DC_9T_1600BPI	2	/* 9 track, 1600 bpi */
13754882Storek #define	SCSI_MSEL_DC_9T_6250BPI	3	/* 9 track, 6250 bpi */
13854882Storek #define	SCSI_MSEL_DC_QIC_XX1	4	/* QIC-11? 4 or 9 track, 8000 bpi */
13954882Storek #define	SCSI_MSEL_DC_QIC_XX2	5	/* QIC-11? 4 or 9 track, 8000 bpi */
14054882Storek #define	SCSI_MSEL_DC_9T_3200BPI	6	/* 9 track, 3200 bpi */
14154882Storek #define	SCSI_MSEL_DC_QIC_XX3	7	/* QIC, 4 track, 6400 bpi */
14254882Storek #define	SCSI_MSEL_DC_CS_XX4	8	/* cassette 4 track, 8000 bpi 8/
14354882Storek #define	SCSI_MSEL_DC_HIC_XX5	9	/* half inch cartridge, 18 track */
14454882Storek #define	SCSI_MSEL_DC_HIC_XX6	10	/* HIC, 22 track, 6667 bpi */
14554882Storek #define	SCSI_MSEL_DC_QIC_XX7	11	/* QIC, 4 track, 1600 bpi */
14654882Storek #define	SCSI_MSEL_DC_HIC_XX8	12	/* HIC, 24 track, 12690 bpi */
14754882Storek #define	SCSI_MSEL_DC_HIC_XX9	13	/* HIC, 24 track, 25380 bpi */
14854882Storek 
14954882Storek /*
15054882Storek  * Structure of an ERASE command.
15154882Storek  */
15254882Storek struct scsi_cdb_erase {
15354882Storek 	u_char	cdb_cmd,	/* 0x0b */
15454882Storek 		cdb_lun:3,	/* logical unit number */
15554882Storek 		cdb_xxx0:4,	/* reserved */
15654882Storek 		cdb_long:1,	/* long erase */
15754882Storek 		cdb_xxx1,	/* reserved */
15854882Storek 		cdb_xxx2,	/* reserved */
15954882Storek 		cdb_xxx3,	/* reserved */
16054882Storek 		cdb_ctrl;	/* control byte */
16154882Storek };
16254882Storek 
16354882Storek /*
16454882Storek  * Structure of a LOAD/UNLOAD command.
16554882Storek  */
16654882Storek struct scsi_cdb_lu {
16754882Storek 	u_char	cdb_cmd,	/* 0x1b */
16854882Storek 		cdb_lun:3,	/* logical unit number */
16954882Storek 		cdb_xxx0:4,	/* reserved */
17054882Storek 		cdb_immed:1,	/* return status immediately */
17154882Storek 		cdb_xxx1,	/* reserved */
17254882Storek 		cdb_xxx2,	/* reserved */
17354882Storek 		cdb_xxx3:6,	/* reserved */
17454882Storek 		cdb_reten:1,	/* retension tape */
17554882Storek 		cdb_load:1,	/* load (else unload) */
17654882Storek 		cdb_ctrl;	/* control byte */
17754882Storek };
178