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