1 /* @(#)tmscp.h 7.2 (Berkeley) 05/27/88 */ 2 3 /* 4 * @(#)tmscp.h 1.3 10/21/85 5 * Definitions for the Tape Mass Storage Control Protocol 6 */ 7 8 /**************************************************************** 9 * * 10 * Licensed from Digital Equipment Corporation * 11 * Copyright (c) * 12 * Digital Equipment Corporation * 13 * Maynard, Massachusetts * 14 * 1985, 1986 * 15 * All rights reserved. * 16 * * 17 * The Information in this software is subject to change * 18 * without notice and should not be construed as a commitment * 19 * by Digital Equipment Corporation. Digital makes no * 20 * representations about the suitability of this software for * 21 * any purpose. It is supplied "As Is" without expressed or * 22 * implied warranty. * 23 * * 24 * If the Regents of the University of California or its * 25 * licensees modify the software in a manner creating * 26 * diriviative copyright rights, appropriate copyright * 27 * legends may be placed on the drivative work in addition * 28 * to that set forth above. * 29 * * 30 **************************************************************** 31 * 32 * Modification history: /sys/vax/tmscp.h 33 * 34 * 18-Oct-85 - afd 35 * Added: defines for tape format (density) flag values. 36 * 37 * 18-Jul-85 - afd 38 * Added: #define M_UF_WBKNV 0000100 39 * for write back (which enables cache). 40 ************************************************************************/ 41 42 43 /* 44 * Control message opcodes 45 */ 46 #define M_OP_ABORT 0001 /* Abort command */ 47 #define M_OP_GTCMD 0002 /* Get command status command */ 48 #define M_OP_GTUNT 0003 /* Get unit status command */ 49 #define M_OP_STCON 0004 /* Set controller characteristics command */ 50 #define M_OP_AVAIL 0010 /* Available command */ 51 #define M_OP_ONLIN 0011 /* Online command */ 52 #define M_OP_STUNT 0012 /* Set unit characteristics command */ 53 #define M_OP_DTACP 0013 /* Determine access paths command */ 54 #define M_OP_ACCES 0020 /* Access command */ 55 #define M_OP_CMPCD 0021 /* Compare controller data command */ 56 #define M_OP_ERASE 0022 /* Erase command */ 57 #define M_OP_FLUSH 0023 /* Flush command */ 58 #define M_OP_ERGAP 0026 /* Erase gap command */ 59 #define M_OP_COMP 0040 /* Compare host data command */ 60 #define M_OP_READ 0041 /* Read command */ 61 #define M_OP_WRITE 0042 /* Write command */ 62 #define M_OP_WRITM 0044 /* Write tape mark command */ 63 #define M_OP_REPOS 0045 /* Reposition command */ 64 #define M_OP_AVATN 0100 /* Available attention message */ 65 #define M_OP_DUPUN 0101 /* Duplicate unit number attention message */ 66 #define M_OP_ACPTH 0102 /* Access path attention message */ 67 #define M_OP_END 0200 /* End message flag */ 68 69 70 /* 71 * Generic command modifiers 72 */ 73 #define M_MD_COMP 0040000 /* Compare */ 74 #define M_MD_CLSEX 0020000 /* Clear serious exception */ 75 #define M_MD_SECOR 0001000 /* Suppress error correction */ 76 #define M_MD_SEREC 0000400 /* Suppress error recovery */ 77 #define M_MD_STWRP 0000004 /* Set write protect */ 78 #define M_MD_ALLCD 0000002 /* All class drivers */ 79 #define M_MD_NXUNT 0000001 /* Next unit */ 80 81 /* 82 * TMSCP command modifiers 83 */ 84 #define M_MD_DLEOT 0000200 /* Delete LEOT */ 85 #define M_MD_IMMED 0000100 /* Immediate completion */ 86 #define M_MD_EXCAC 0000040 /* Exclusive access */ 87 #define M_MD_UNLOD 0000020 /* Unload */ 88 #define M_MD_REVRS 0000010 /* reverse */ 89 #define M_MD_OBJCT 0000004 /* object count */ 90 #define M_MD_REWND 0000002 /* rewind */ 91 92 /* 93 * End message flags 94 */ 95 #define M_EF_ERLOG 0040 /* Error log generated */ 96 #define M_EF_SEREX 0020 /* Serious exception */ 97 #define M_EF_EOT 0010 /* End of tape encountered */ 98 #define M_EF_PLS 0004 /* Position lost */ 99 100 101 /* 102 * Controller flags 103 */ 104 #define M_CF_ATTN 0200 /* Enable attention messages */ 105 #define M_CF_MISC 0100 /* Enable miscellaneous error log messages */ 106 #define M_CF_OTHER 0040 /* Enable other host's error log messages */ 107 #define M_CF_THIS 0020 /* Enable this host's error log messages */ 108 109 110 /* 111 * Unit flags 112 */ 113 #define M_UF_WRTPH 0020000 /* Write protect (hardware) */ 114 #define M_UF_WRTPS 0010000 /* Write protect (software or volume) */ 115 #define M_UF_WBKNV 0000100 /* Write back (enables cache) */ 116 #define M_UF_VSMSU 0000040 /* Variable speed mode suppression */ 117 #define M_UF_VARSP 0000020 /* Variable speed unit */ 118 #define M_UF_CMPWR 0000002 /* Compare writes */ 119 #define M_UF_CMPRD 0000001 /* Compare reads */ 120 121 122 /* 123 * Status codes 124 */ 125 #define M_ST_MASK 037 /* Status code mask */ 126 #define M_ST_SUCC 000 /* Success */ 127 #define M_ST_ICMD 001 /* Invalid command */ 128 #define M_ST_ABRTD 002 /* Command aborted */ 129 #define M_ST_OFFLN 003 /* Unit offline */ 130 #define M_ST_AVLBL 004 /* Unit available */ 131 #define M_ST_WRTPR 006 /* Write protected */ 132 #define M_ST_COMP 007 /* Compare error */ 133 #define M_ST_DATA 010 /* Data error */ 134 #define M_ST_HSTBF 011 /* Host buffer access error */ 135 #define M_ST_CNTLR 012 /* Controller error */ 136 #define M_ST_DRIVE 013 /* Drive error */ 137 #define M_ST_FMTER 014 /* Formatter error */ 138 #define M_ST_BOT 015 /* BOT encountered */ 139 #define M_ST_TAPEM 016 /* Tape mark encountered */ 140 #define M_ST_RDTRN 020 /* Record data truncated */ 141 #define M_ST_PLOST 021 /* Position lost */ 142 #define M_ST_SEX 022 /* Serious exception */ 143 #define M_ST_LED 023 /* LEOT detected */ 144 #define M_ST_DIAG 037 /* Message from an internal diagnostic */ 145 146 /* 147 * An MSCP packet 148 */ 149 150 struct mscp { 151 struct mscp_header mscp_header;/* device specific header */ 152 long mscp_cmdref; /* command reference number */ 153 short mscp_unit; /* unit number */ 154 short mscp_xxx1; /* unused */ 155 u_char mscp_opcode; /* opcode */ 156 u_char mscp_flags; /* end message flags */ 157 short mscp_modifier; /* modifiers */ 158 union { 159 struct { 160 long Mscp_bytecnt; /* byte count */ 161 long Mscp_buffer; /* buffer descriptor */ 162 long Mscp_mapbase; /* physical addr of map registers */ 163 long Mscp_xxx2; /* unused */ 164 long Mscp_lbn; /* logical block number */ 165 long Mscp_xxx4; /* unused */ 166 long *Mscp_dscptr; /* pointer to descriptor (software) */ 167 long Mscp_sftwds[17];/* software words, padding */ 168 } mscp_generic; 169 struct { 170 short Mscp_version; /* MSCP version */ 171 short Mscp_cntflgs; /* controller flags */ 172 short Mscp_hsttmo; /* host timeout */ 173 short Mscp_usefrac; /* use fraction */ 174 quad Mscp_time; /* time and date */ 175 long Mscp_cntdep; /* controller dependent parameters */ 176 } mscp_setcntchar; 177 struct { 178 short Mscp_multunt; /* multi-unit code */ 179 short Mscp_unitflgs; /* unit flags */ 180 long Mscp_hostid; /* host identifier */ 181 quad Mscp_unitid; /* unit identifier */ 182 long Mscp_mediaid; /* media type identifier */ 183 short Mscp_format; /* format (tape density) */ 184 short Mscp_speed; /* tape speed = (ips * bpi) /1000 */ 185 short Mscp_fmtmenu; /* format menu */ 186 short Mscp_group; /* group size */ 187 short Mscp_cylinder; /* cylinder size */ 188 short Mscp_xxx3; /* reserved */ 189 short Mscp_rctsize; /* RCT table size */ 190 char Mscp_rbns; /* RBNs / track */ 191 char Mscp_rctcpys; /* RCT copies */ 192 } mscp_getunitsts; 193 } mscp_un; 194 short mscp_fil1; 195 short mscp_fil2; 196 short mscp_fil3; 197 }; 198 199 #define mscp_msglen (sizeof (struct mscp) - sizeof(struct mscp_header)) 200 201 /* 202 * generic packet 203 */ 204 205 #define mscp_bytecnt mscp_un.mscp_generic.Mscp_bytecnt 206 #define mscp_buffer mscp_un.mscp_generic.Mscp_buffer 207 #define mscp_mapbase mscp_un.mscp_generic.Mscp_mapbase 208 #define mscp_lbn mscp_un.mscp_generic.Mscp_lbn 209 #define mscp_dscptr mscp_un.mscp_generic.Mscp_dscptr 210 #define mscp_sftwds mscp_un.mscp_generic.Mscp_sftwds 211 #define mscp_status mscp_modifier 212 213 /* 214 * Abort / Get Command Status packet 215 */ 216 217 #define mscp_outref mscp_bytecnt 218 219 /* 220 * Set Controller Characteristics packet 221 */ 222 223 #define mscp_version mscp_un.mscp_setcntchar.Mscp_version 224 #define mscp_cntflgs mscp_un.mscp_setcntchar.Mscp_cntflgs 225 #define mscp_hsttmo mscp_un.mscp_setcntchar.Mscp_hsttmo 226 #define mscp_usefrac mscp_un.mscp_setcntchar.Mscp_usefrac 227 #define mscp_time mscp_un.mscp_setcntchar.Mscp_time 228 #define mscp_cntdep mscp_un.mscp_setcntchar.Mscp_cntdep 229 230 /* 231 * Reposition command packet fields 232 */ 233 234 #define mscp_reccnt mscp_bytecnt /* record/object count */ 235 #define mscp_tmkcnt mscp_buffer /* tape mark count */ 236 237 /* 238 * Get Unit Status end packet 239 */ 240 241 #define mscp_multunt mscp_un.mscp_getunitsts.Mscp_multunt 242 #define mscp_unitflgs mscp_un.mscp_getunitsts.Mscp_unitflgs 243 #define mscp_hostid mscp_un.mscp_getunitsts.Mscp_hostid 244 #define mscp_unitid mscp_un.mscp_getunitsts.Mscp_unitid 245 #define mscp_mediaid mscp_un.mscp_getunitsts.Mscp_mediaid 246 #define mscp_format mscp_un.mscp_getunitsts.Mscp_format /* density:0=high */ 247 #define mscp_speed mscp_un.mscp_getunitsts.Mscp_speed /* (ips*bpi)/1000 */ 248 #define mscp_fmtmenu mscp_un.mscp_getunitsts.Mscp_fmtmenu 249 250 /* 251 * Online / Set Unit Characteristics end packet 252 */ 253 254 #define mscp_maxwrt mscp_dscptr /* max write byte count */ 255 #define mscp_noiserec mscp_cylinder /* noise record */ 256 257 /* 258 * Set Controller Characteristics end packet 259 */ 260 261 #define mscp_cnttmo mscp_hsttmo /* controller timeout */ 262 #define mscp_cntcmdl mscp_usefrac /* controller soft & hardware version */ 263 #define mscp_cntid mscp_unitid /* controller id */ 264 265 266 /* 267 * Error Log message format codes 268 */ 269 #define M_FM_CNTERR 0 /* Controller error */ 270 #define M_FM_BUSADDR 1 /* Host memory access error */ 271 #define M_FM_TAPETRN 5 /* Tape transfer error */ 272 #define M_FM_STIERR 6 /* STI communication or command failure */ 273 #define M_FM_STIDEL 7 /* STI drive error log */ 274 #define M_FM_STIFEL 010 /* STI formatter error log */ 275 276 /* 277 * Error Log message flags 278 */ 279 #define M_LF_SUCC 0200 /* Operation successful */ 280 #define M_LF_CONT 0100 /* Operation continuing */ 281 #define M_LF_SQNRS 0001 /* Sequence number reset */ 282 283 /* 284 * Tape Format Flag Values 285 */ 286 #define M_TF_800 001 /* NRZI 800 bpi */ 287 #define M_TF_PE 002 /* Phase Encoded 1600 bpi */ 288 #define M_TF_GCR 004 /* Group Code Recording 6250 bpi */ 289 #define M_TF_BLK 010 /* Cartridge Block Mode */ 290 291 /* 292 * MSCP Error Log packet 293 * 294 * NOTE: MSCP packet must be padded to this size. 295 */ 296 297 struct mslg { 298 struct mscp_header mslg_header;/* device specific header */ 299 long mslg_cmdref; /* command reference number */ 300 short mslg_unit; /* unit number */ 301 short mslg_seqnum; /* sequence number */ 302 u_char mslg_format; /* format */ 303 u_char mslg_flags; /* error log message flags */ 304 short mslg_event; /* event code */ 305 quad mslg_cntid; /* controller id */ 306 u_char mslg_cntsvr; /* controller software version */ 307 u_char mslg_cnthvr; /* controller hardware version */ 308 short mslg_multunt; /* multi-unit code */ 309 quad mslg_unitid; /* unit id */ 310 u_char mslg_unitsvr; /* unit software version */ 311 u_char mslg_unithvr; /* unit hardware version */ 312 short mslg_group; /* group; retry + level */ 313 long mslg_position; /* position (object count) */ 314 u_char mslg_fmtsvr; /* formatter software version */ 315 u_char mslg_fmthvr; /* formatter hardware version */ 316 short mslg_xxx2; /* unused */ 317 char mslg_stiunsucc[62]; /* STI status information */ 318 }; 319 320 #define mslg_busaddr mslg_unitid.val[0] 321 #define mslg_sdecyl mslg_group 322 323