xref: /csrg-svn/sys/dev/scsi/tape.h (revision 54882)
1*54882Storek /*
2*54882Storek  * Copyright (c) 1992 The Regents of the University of California.
3*54882Storek  * All rights reserved.
4*54882Storek  *
5*54882Storek  * This software was developed by the Computer Systems Engineering group
6*54882Storek  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
7*54882Storek  * contributed to Berkeley.
8*54882Storek  *
9*54882Storek  * %sccs.include.redist.c%
10*54882Storek  *
11*54882Storek  *	@(#)tape.h	5.1 (Berkeley) 07/10/92
12*54882Storek  *
13*54882Storek  * from: $Header: tape.h,v 1.2 92/05/15 11:24:06 torek Exp $ (LBL)
14*54882Storek  */
15*54882Storek 
16*54882Storek /*
17*54882Storek  * SCSI definitions for Sequential Access Devices (tapes).
18*54882Storek  */
19*54882Storek #define	CMD_REWIND		0x01	/* rewind */
20*54882Storek #define	CMD_READ_BLOCK_LIMITS	0x05	/* read block limits */
21*54882Storek #define	CMD_READ		0x08	/* read */
22*54882Storek #define	CMD_WRITE		0x0a	/* write */
23*54882Storek #define	CMD_TRACK_SELECT	0x0b	/* track select */
24*54882Storek #define	CMD_READ_REVERSE	0x0f	/* read reverse */
25*54882Storek #define	CMD_WRITE_FILEMARK	0x10	/* write file marks */
26*54882Storek #define	CMD_SPACE		0x11	/* space */
27*54882Storek #define	CMD_VERIFY		0x13	/* verify */
28*54882Storek #define	CMD_RBD			0x14	/* recover buffered data */
29*54882Storek #define	CMD_MODE_SELECT		0x15	/* mode select */
30*54882Storek #define	CMD_RESERVE_UNIT	0x16	/* reserve unit */
31*54882Storek #define	CMD_RELEASE_UNIT	0x17	/* release unit */
32*54882Storek /*	CMD_COPY		0x18	   copy (common to all scsi devs) */
33*54882Storek #define	CMD_ERASE		0x19	/* erase */
34*54882Storek #define	CMD_MODE_SENSE		0x1a	/* mode sense */
35*54882Storek #define	CMD_LOAD_UNLOAD		0x1b	/* load/unload */
36*54882Storek #define	CMD_PAMR		0x1e	/* prevent/allow medium removal */
37*54882Storek 
38*54882Storek /*
39*54882Storek  * Structure of READ, WRITE, READ REVERSE, RECOVER BUFFERED DATA
40*54882Storek  * commands (i.e., the cdb).
41*54882Storek  * Also used for VERIFY commands.
42*54882Storek  */
43*54882Storek struct scsi_cdb_rw {
44*54882Storek 	u_char	cdb_cmd,	/* 0x08 or 0x0a or 0x0f or 0x13 or 0x14 */
45*54882Storek 		cdb_lun:3,	/* logical unit number */
46*54882Storek 		cdb_xxx:3,	/* reserved */
47*54882Storek 		cdb_bytecmp:1,	/* byte-by-byte comparison (VERIFY only) */
48*54882Storek 		cdb_fixed:1,	/* fixed length blocks */
49*54882Storek 		cdb_lenh,	/* transfer length (MSB) */
50*54882Storek 		cdb_lenm,	/* transfer length */
51*54882Storek 		cdb_lenl,	/* transfer length (LSB) */
52*54882Storek 		cdb_ctrl;	/* control byte */
53*54882Storek };
54*54882Storek 
55*54882Storek /*
56*54882Storek  * Structure of a TRACK SELECT command.
57*54882Storek  */
58*54882Storek struct scsi_cdb_ts {
59*54882Storek 	u_char	cdb_cmd,	/* 0x0b */
60*54882Storek 		cdb_lun:3,	/* logical unit number */
61*54882Storek 		cdb_xxx0:5,	/* reserved */
62*54882Storek 		cdb_xxx1,	/* reserved */
63*54882Storek 		cdb_xxx2,	/* reserved */
64*54882Storek 		cdb_track,	/* track value */
65*54882Storek 		cdb_ctrl;	/* control byte */
66*54882Storek };
67*54882Storek 
68*54882Storek /*
69*54882Storek  * Structure of a WRITE FILEMARKS command.
70*54882Storek  */
71*54882Storek struct scsi_cdb_wfm {
72*54882Storek 	u_char	cdb_cmd,	/* 0x0b */
73*54882Storek 		cdb_lun:3,	/* logical unit number */
74*54882Storek 		cdb_xxx0:5,	/* reserved */
75*54882Storek 		cdb_nfh,	/* number of filemarks (MSB) */
76*54882Storek 		cdb_nfm,	/* number of filemarks */
77*54882Storek 		cdb_nfl,	/* number of filemarks (LSB) */
78*54882Storek 		cdb_ctrl;	/* control byte */
79*54882Storek };
80*54882Storek 
81*54882Storek /*
82*54882Storek  * Structure of a SPACE command.
83*54882Storek  */
84*54882Storek struct scsi_cdb_space {
85*54882Storek 	u_char	cdb_cmd,	/* 0x0b */
86*54882Storek 		cdb_lun:3,	/* logical unit number */
87*54882Storek 		cdb_xxx0:3,	/* reserved */
88*54882Storek 		cdb_code:2,	/* code (see below) */
89*54882Storek 		cdb_counth,	/* count (MSB) */
90*54882Storek 		cdb_countm,	/* count */
91*54882Storek 		cdb_countl,	/* count (LSB) */
92*54882Storek 		cdb_ctrl;	/* control byte */
93*54882Storek };
94*54882Storek #define	SCSI_CMD_SPACE_BLOCKS	0	/* skip blocks */
95*54882Storek #define	SCSI_CMD_SPACE_FMS	1	/* skip file marks */
96*54882Storek #define	SCSI_CMD_SPACE_SFMS	2	/* skip sequential file marks */
97*54882Storek #define	SCSI_CMD_SPACE_PEOD	3	/* skip to physical end of data */
98*54882Storek 
99*54882Storek /*
100*54882Storek  * Mode Select parameters (data).
101*54882Storek  */
102*54882Storek struct scsi_msel {
103*54882Storek 	u_short	msel_xxx0;	/* reserved */
104*54882Storek 	u_char	msel_xxx1:1,	/* reserved */
105*54882Storek 		msel_bm:3,	/* buffered mode */
106*54882Storek 		msel_speed:4,	/* speed */
107*54882Storek 		msel_bdl;	/* block descriptor length */
108*54882Storek 	struct scsi_msel_bdesc {
109*54882Storek 		u_char	dc,	/* density code */
110*54882Storek 			nbh,	/* number of blocks (MSB) */
111*54882Storek 			nbm,	/* number of blocks */
112*54882Storek 			nbl,	/* number of blocks (LSB) */
113*54882Storek 			xxx,	/* reserved */
114*54882Storek 			blh,	/* block length (MSB) */
115*54882Storek 			blm,	/* block length */
116*54882Storek 			bll;	/* block length (LSB) */
117*54882Storek 	} msel_bd[1];		/* actually longer */
118*54882Storek 	/* followed by Vendor Unique bytes */
119*54882Storek };
120*54882Storek 
121*54882Storek /* buffered mode and speed */
122*54882Storek #define	SCSI_MSEL_BM_UNBUFFERED	0	/* unbuffered writes */
123*54882Storek #define	SCSI_MSEL_BM_BUFFERED	1	/* buffered writes allowed */
124*54882Storek #define	SCSI_MSEL_SPEED_DEFAULT	0	/* use device default speed */
125*54882Storek #define	SCSI_MSEL_SPEED_LOW	1	/* use lowest speed */
126*54882Storek #define	SCSI_MSEL_SPEED_HIGH	15	/* use highest speed */
127*54882Storek 
128*54882Storek /* density codes */
129*54882Storek #define	SCSI_MSEL_DC_DEFAULT	0	/* use device default density */
130*54882Storek #define	SCSI_MSEL_DC_9T_800BPI	1	/* 9 track, 800 bpi */
131*54882Storek #define	SCSI_MSEL_DC_9T_1600BPI	2	/* 9 track, 1600 bpi */
132*54882Storek #define	SCSI_MSEL_DC_9T_6250BPI	3	/* 9 track, 6250 bpi */
133*54882Storek #define	SCSI_MSEL_DC_QIC_XX1	4	/* QIC-11? 4 or 9 track, 8000 bpi */
134*54882Storek #define	SCSI_MSEL_DC_QIC_XX2	5	/* QIC-11? 4 or 9 track, 8000 bpi */
135*54882Storek #define	SCSI_MSEL_DC_9T_3200BPI	6	/* 9 track, 3200 bpi */
136*54882Storek #define	SCSI_MSEL_DC_QIC_XX3	7	/* QIC, 4 track, 6400 bpi */
137*54882Storek #define	SCSI_MSEL_DC_CS_XX4	8	/* cassette 4 track, 8000 bpi 8/
138*54882Storek #define	SCSI_MSEL_DC_HIC_XX5	9	/* half inch cartridge, 18 track */
139*54882Storek #define	SCSI_MSEL_DC_HIC_XX6	10	/* HIC, 22 track, 6667 bpi */
140*54882Storek #define	SCSI_MSEL_DC_QIC_XX7	11	/* QIC, 4 track, 1600 bpi */
141*54882Storek #define	SCSI_MSEL_DC_HIC_XX8	12	/* HIC, 24 track, 12690 bpi */
142*54882Storek #define	SCSI_MSEL_DC_HIC_XX9	13	/* HIC, 24 track, 25380 bpi */
143*54882Storek 
144*54882Storek /*
145*54882Storek  * Structure of an ERASE command.
146*54882Storek  */
147*54882Storek struct scsi_cdb_erase {
148*54882Storek 	u_char	cdb_cmd,	/* 0x0b */
149*54882Storek 		cdb_lun:3,	/* logical unit number */
150*54882Storek 		cdb_xxx0:4,	/* reserved */
151*54882Storek 		cdb_long:1,	/* long erase */
152*54882Storek 		cdb_xxx1,	/* reserved */
153*54882Storek 		cdb_xxx2,	/* reserved */
154*54882Storek 		cdb_xxx3,	/* reserved */
155*54882Storek 		cdb_ctrl;	/* control byte */
156*54882Storek };
157*54882Storek 
158*54882Storek /*
159*54882Storek  * Structure of a LOAD/UNLOAD command.
160*54882Storek  */
161*54882Storek struct scsi_cdb_lu {
162*54882Storek 	u_char	cdb_cmd,	/* 0x1b */
163*54882Storek 		cdb_lun:3,	/* logical unit number */
164*54882Storek 		cdb_xxx0:4,	/* reserved */
165*54882Storek 		cdb_immed:1,	/* return status immediately */
166*54882Storek 		cdb_xxx1,	/* reserved */
167*54882Storek 		cdb_xxx2,	/* reserved */
168*54882Storek 		cdb_xxx3:6,	/* reserved */
169*54882Storek 		cdb_reten:1,	/* retension tape */
170*54882Storek 		cdb_load:1,	/* load (else unload) */
171*54882Storek 		cdb_ctrl;	/* control byte */
172*54882Storek };
173