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