xref: /original-bsd/sys/dev/scsi/tape.h (revision da6ea800)
1 /*
2  * Copyright (c) 1992, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * This software was developed by the Computer Systems Engineering group
6  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
7  * contributed to Berkeley.
8  *
9  * All advertising materials mentioning features or use of this software
10  * must display the following acknowledgement:
11  *	This product includes software developed by the University of
12  *	California, Lawrence Berkeley Laboratories.
13  *
14  * %sccs.include.redist.c%
15  *
16  *	@(#)tape.h	8.1 (Berkeley) 06/10/93
17  *
18  * from: $Header: tape.h,v 1.3 92/12/02 03:53:14 torek Exp $ (LBL)
19  */
20 
21 /*
22  * SCSI definitions for Sequential Access Devices (tapes).
23  *
24  * Commands defined in common headers (scsi.h or disktape.h) are omitted.
25  */
26 #define	CMD_REWIND		0x01	/* rewind */
27 #define	CMD_READ_BLOCK_LIMITS	0x05	/* read block limits */
28 #define	CMD_READ		0x08	/* read */
29 #define	CMD_WRITE		0x0a	/* write */
30 #define	CMD_TRACK_SELECT	0x0b	/* track select */
31 #define	CMD_READ_REVERSE	0x0f	/* read reverse */
32 #define	CMD_WRITE_FILEMARK	0x10	/* write file marks */
33 #define	CMD_SPACE		0x11	/* space */
34 #define	CMD_VERIFY		0x13	/* verify */
35 #define	CMD_RBD			0x14	/* recover buffered data */
36 #define	CMD_RESERVE_UNIT	0x16	/* reserve unit */
37 #define	CMD_RELEASE_UNIT	0x17	/* release unit */
38 /*	CMD_COPY		0x18	   copy (common to all scsi devs) */
39 #define	CMD_ERASE		0x19	/* erase */
40 #define	CMD_LOAD_UNLOAD		0x1b	/* load/unload */
41 #define	CMD_PAMR		0x1e	/* prevent/allow medium removal */
42 
43 /*
44  * Structure of READ, WRITE, READ REVERSE, RECOVER BUFFERED DATA
45  * commands (i.e., the cdb).
46  * Also used for VERIFY commands.
47  */
48 struct scsi_cdb_rw {
49 	u_char	cdb_cmd,	/* 0x08 or 0x0a or 0x0f or 0x13 or 0x14 */
50 		cdb_lun_bf,	/* LUN + reserved + bytecmp + fixed */
51 		cdb_lenh,	/* transfer length (MSB) */
52 		cdb_lenm,	/* transfer length */
53 		cdb_lenl,	/* transfer length (LSB) */
54 		cdb_ctrl;	/* control byte */
55 };
56 #define	SCSI_RW_BYTECMP		0x02	/* byte compare flag if verify */
57 #define	SCSI_RW_FIXEDBLK	0x01	/* fixed block size for read/write */
58 
59 /*
60  * Structure of a TRACK SELECT command.
61  */
62 struct scsi_cdb_ts {
63 	u_char	cdb_cmd,	/* 0x0b */
64 		cdb_lun_xxx,	/* logical unit number + reserved */
65 		cdb_xxx1,	/* reserved */
66 		cdb_xxx2,	/* reserved */
67 		cdb_track,	/* track value */
68 		cdb_ctrl;	/* control byte */
69 };
70 
71 /*
72  * Structure of a WRITE FILEMARKS command.
73  */
74 struct scsi_cdb_wfm {
75 	u_char	cdb_cmd,	/* 0x0b */
76 		cdb_lun_xxx,	/* logical unit number + reserved */
77 		cdb_nfh,	/* number of filemarks (MSB) */
78 		cdb_nfm,	/* number of filemarks */
79 		cdb_nfl,	/* number of filemarks (LSB) */
80 		cdb_ctrl;	/* control byte */
81 };
82 
83 /*
84  * Structure of a SPACE command.
85  */
86 struct scsi_cdb_space {
87 	u_char	cdb_cmd,	/* 0x0b */
88 		cdb_lun_code,	/* LUN + reserved + 2-bit code */
89 		cdb_counth,	/* count (MSB) */
90 		cdb_countm,	/* count */
91 		cdb_countl,	/* count (LSB) */
92 		cdb_ctrl;	/* control byte */
93 };
94 #define	SCSI_CMD_SPACE_BLOCKS	0	/* skip blocks */
95 #define	SCSI_CMD_SPACE_FMS	1	/* skip file marks */
96 #define	SCSI_CMD_SPACE_SFMS	2	/* skip sequential file marks */
97 #define	SCSI_CMD_SPACE_PEOD	3	/* skip to physical end of data */
98 
99 /*
100  * Structure of an ERASE command.
101  */
102 struct scsi_cdb_erase {
103 	u_char	cdb_cmd,	/* 0x0b */
104 		cdb_lun_long,	/* LUN + reserved + long-erase flag */
105 		cdb_xxx1,	/* reserved */
106 		cdb_xxx2,	/* reserved */
107 		cdb_xxx3,	/* reserved */
108 		cdb_ctrl;	/* control byte */
109 };
110 
111 /*
112  * Structure of a LOAD/UNLOAD command.
113  */
114 struct scsi_cdb_lu {
115 	u_char	cdb_cmd,	/* 0x1b */
116 		cdb_lun_immed,	/* LUN + reserved + immediate flag */
117 		cdb_xxx1,	/* reserved */
118 		cdb_xxx2,	/* reserved */
119 		cdb_rl,		/* reserved + retension flag + load flag */
120 		cdb_ctrl;	/* control byte */
121 };
122 #define	SCSI_LU_RL_RETEN	0x02	/* retension */
123 #define	SCSI_LU_RL_LOAD		0x01	/* load */
124 #define	SCSI_LU_RL_UNLOAD	0x00	/* unload (pseudo flag) */
125