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