|
|
1.1 ! root 1: /* ! 2: * Definitions for the Mass Storage Control Protocol ! 3: * (P means not in uda subset) ! 4: */ ! 5: ! 6: /* ! 7: * Control message opcodes ! 8: */ ! 9: #define M_OP_ABORT 0001 /* Abort command */ ! 10: #define M_OP_GTCMD 0002 /* Get command status command */ ! 11: #define M_OP_GTUNT 0003 /* Get unit status command */ ! 12: #define M_OP_STCON 0004 /* Set controller characteristics command */ ! 13: #define M_OP_SEREX 0007 /* Serious exception end message */ ! 14: #define M_OP_AVAIL 0010 /* Available command */ ! 15: #define M_OP_ONLIN 0011 /* Online command */ ! 16: #define M_OP_STUNT 0012 /* Set unit characteristics command */ ! 17: #define M_OP_DTACP 0013 /* Determine access paths command */ ! 18: #define M_OP_ACCES 0020 /* Access command */ ! 19: #define M_OP_CMPCD 0021 /*P Compare controller data command */ ! 20: #define M_OP_ERASE 0022 /* Erase command */ ! 21: #define M_OP_FLUSH 0023 /*P Flush command */ ! 22: #define M_OP_REPLC 0024 /* Replace command */ ! 23: #define M_OP_COMP 0040 /* Compare host data command */ ! 24: #define M_OP_READ 0041 /* Read command */ ! 25: #define M_OP_WRITE 0042 /* Write command */ ! 26: #define M_OP_AVATN 0100 /* Available attention message */ ! 27: #define M_OP_DUPUN 0101 /* Duplicate unit number attention message */ ! 28: #define M_OP_ACPTH 0102 /* Access path attention message */ ! 29: #define M_OP_END 0200 /* End message flag */ ! 30: ! 31: /* ! 32: * Generic command modifiers ! 33: */ ! 34: #define M_MD_EXPRS 0100000 /* Express request */ ! 35: #define M_MD_COMP 0040000 /* Compare */ ! 36: #define M_MD_CLSEX 0020000 /*P Clear serious exception */ ! 37: #define M_MD_ERROR 0010000 /* Force error */ ! 38: #define M_MD_SCCHH 0004000 /*P Suppress caching (high speed) */ ! 39: #define M_MD_SCCHL 0002000 /*P Suppress caching (low speed) */ ! 40: #define M_MD_SECOR 0001000 /* Suppress error correction */ ! 41: #define M_MD_SEREC 0000400 /* Suppress error recovery */ ! 42: #define M_MD_SSHDW 0000200 /*P Suppress shadowing */ ! 43: #define M_MD_WBKNV 0000100 /*P Write back (non-volatile) */ ! 44: #define M_MD_WBKVL 0000040 /*P Write back (volatile) */ ! 45: #define M_MD_WRSEQ 0000020 /*P Write shadow set one at a time */ ! 46: ! 47: /* ! 48: * AVAILABLE command modifiers ! 49: */ ! 50: #define M_MD_ALLCD 0000002 /* All class drivers */ ! 51: #define M_MD_SPNDW 0000001 /* Spin down */ ! 52: ! 53: /* ! 54: * FLUSH command modifiers (none in uda subset) ! 55: */ ! 56: #define M_MD_FLENU 0000001 /* Flush entire unit */ ! 57: #define M_MD_VOLTL 0000002 /* Volatile only */ ! 58: ! 59: /* ! 60: * GET UNIT STATUS command modifiers ! 61: */ ! 62: #define M_MD_NXUNT 0000001 /* Next unit */ ! 63: ! 64: /* ! 65: * ONLINE command modifiers ! 66: */ ! 67: #define M_MD_RIP 0000001 /* Allow self destruction */ ! 68: #define M_MD_IGNMF 0000002 /* Ignore media format error */ ! 69: ! 70: /* ! 71: * ONLINE and SET UNIT CHARACTERISTICS command modifiers ! 72: */ ! 73: #define M_MD_ALTHI 0000040 /*P Alter host identifier */ ! 74: #define M_MD_SHDSP 0000020 /*P Shadow unit specified */ ! 75: #define M_MD_CLWBL 0000010 /*P Clear write-back data lost */ ! 76: #define M_MD_STWRP 0000004 /* Set write protect */ ! 77: ! 78: /* ! 79: * REPLACE command modifiers ! 80: */ ! 81: #define M_MD_PRIMR 0000001 /* Primary replacement block */ ! 82: ! 83: /* ! 84: * End message flags ! 85: */ ! 86: #define M_EF_BBLKR 0200 /* Bad block reported */ ! 87: #define M_EF_BBLKU 0100 /* Bad block unreported */ ! 88: #define M_EF_ERLOG 0040 /* Error log generated */ ! 89: #define M_EF_SEREX 0020 /*P Serious exception */ ! 90: ! 91: /* ! 92: * Controller flags ! 93: */ ! 94: #define M_CF_ATTN 0200 /* Enable attention messages */ ! 95: #define M_CF_MISC 0100 /* Enable miscellaneous error log messages */ ! 96: #define M_CF_OTHER 0040 /* Enable other host's error log messages */ ! 97: #define M_CF_THIS 0020 /* Enable this host's error log messages */ ! 98: #define M_CF_MLTHS 0004 /*P Multi-host */ ! 99: #define M_CF_SHADW 0002 /*P Shadowing */ ! 100: #define M_CF_576 0001 /*P 576 byte sectors */ ! 101: ! 102: /* ! 103: * Unit flags ! 104: */ ! 105: #define M_UF_REPLC 0100000 /*P Controller did bad block replacement */ ! 106: #define M_UF_INACT 0040000 /*P Inactive shadow set unit */ ! 107: #define M_UF_WRTPH 0020000 /* Write protect (hardware) */ ! 108: #define M_UF_WRTPS 0010000 /* Write protect (software or volume) */ ! 109: #define M_UF_SCCHH 0004000 /*P Suppress caching (high speed) */ ! 110: #define M_UF_SCCHL 0002000 /*P Suppress caching (low speed) */ ! 111: #define M_UF_RMVBL 0000200 /* Removable media */ ! 112: #define M_UF_WBKNV 0000100 /* Write back (non-volatile) */ ! 113: #define M_UF_576 0000004 /* 576 byte sectors */ ! 114: #define M_UF_CMPWR 0000002 /* Compare writes */ ! 115: #define M_UF_CMPRD 0000001 /* Compare reads */ ! 116: ! 117: /* ! 118: * Status codes ! 119: */ ! 120: #define M_ST_MASK 037 /* Status code mask */ ! 121: #define M_ST_SUCC 000 /* Success */ ! 122: #define M_ST_ICMD 001 /* Invalid command */ ! 123: #define M_ST_ABRTD 002 /* Command aborted */ ! 124: #define M_ST_OFFLN 003 /* Unit offline */ ! 125: #define M_ST_AVLBL 004 /* Unit available */ ! 126: #define M_ST_MFMTE 005 /* Media format error */ ! 127: #define M_ST_WRTPR 006 /* Write protected */ ! 128: #define M_ST_COMP 007 /* Compare error */ ! 129: #define M_ST_DATA 010 /* Data error */ ! 130: #define M_ST_HSTBF 011 /* Host buffer access error */ ! 131: #define M_ST_CNTLR 012 /* Controller error */ ! 132: #define M_ST_DRIVE 013 /* Drive error */ ! 133: #define M_ST_DIAG 037 /* From an internal diagnostic */ ! 134: ! 135: typedef short quad[4]; /* a word-aligned quadword */ ! 136: ! 137: /* ! 138: * An MSCP packet (probably 64 bytes long) ! 139: */ ! 140: ! 141: struct mscp { ! 142: struct mscp_header mscp_header;/* device specific header */ ! 143: long mscp_cmdref; /* command reference number */ ! 144: short mscp_unit; /* unit number */ ! 145: short mscp_xxx1; /* unused */ ! 146: u_char mscp_opcode; /* opcode or endcode */ ! 147: u_char mscp_flags; /* rsvd or end flags */ ! 148: short mscp_modifier; /* modifiers or status */ ! 149: union { ! 150: struct { ! 151: long Mscp_bytecnt; /* byte count */ ! 152: long Mscp_buffer; /* buffer descriptor */ ! 153: /* bdp and unibus addr */ ! 154: long Mscp_xxx2[2]; /* unused */ ! 155: long Mscp_lbn; /* logical block number */ ! 156: long Mscp_xxx4; /* unused */ ! 157: long *Mscp_dscptr; /* pointer to descriptor (software) */ ! 158: long Mscp_sftwds[4]; /* software words, padding */ ! 159: } mscp_generic; ! 160: struct { ! 161: short Mscp_version; /* MSCP version */ ! 162: short Mscp_cntflgs; /* controller flags */ ! 163: short Mscp_hsttmo; /* host timeout */ ! 164: short Mscp_usefrac; /*P use fraction */ ! 165: long Mscp_time[2]; /* time and date */ ! 166: } mscp_setcntchar; ! 167: struct { ! 168: short Mscp_multunt; /* multi-unit code */ ! 169: short Mscp_unitflgs; /* unit flags */ ! 170: long Mscp_hostid; /* host identifier */ ! 171: quad Mscp_unitid; /* unit identifier */ ! 172: long Mscp_mediaid; /* media type identifier */ ! 173: short Mscp_shdwunt; /* shadow unit */ ! 174: short Mscp_shdwsts; /* shadow status */ ! 175: short Mscp_track; /* track size */ ! 176: short Mscp_group; /* group size */ ! 177: short Mscp_cylinder; /* cylinder size */ ! 178: short Mscp_xxx3; /* reserved */ ! 179: short Mscp_rctsize; /* RCT table size */ ! 180: char Mscp_rbns; /* RBNs / track */ ! 181: char Mscp_rctcpys; /* RCT copies */ ! 182: } mscp_getunitsts; ! 183: } mscp_un; ! 184: }; ! 185: ! 186: /* ! 187: * generic packet ! 188: */ ! 189: ! 190: #define mscp_bytecnt mscp_un.mscp_generic.Mscp_bytecnt ! 191: #define mscp_buffer mscp_un.mscp_generic.Mscp_buffer ! 192: #define mscp_lbn mscp_un.mscp_generic.Mscp_lbn ! 193: #define mscp_dscptr mscp_un.mscp_generic.Mscp_dscptr ! 194: #define mscp_sftwds mscp_un.mscp_generic.Mscp_sftwds ! 195: #define mscp_status mscp_modifier ! 196: ! 197: /* ! 198: * Abort / Get Command Status packet ! 199: */ ! 200: ! 201: #define mscp_outref mscp_bytecnt ! 202: ! 203: /* ! 204: * Online / Set Unit Characteristics packet ! 205: */ ! 206: ! 207: #define mscp_errlgfl mscp_lbn ! 208: #define mscp_copyspd mscp_shdwsts ! 209: ! 210: /* ! 211: * Replace packet ! 212: */ ! 213: ! 214: #define mscp_rbn mscp_bytecnt ! 215: ! 216: /* ! 217: * Set Controller Characteristics packet ! 218: */ ! 219: ! 220: #define mscp_version mscp_un.mscp_setcntchar.Mscp_version ! 221: #define mscp_cntflgs mscp_un.mscp_setcntchar.Mscp_cntflgs ! 222: #define mscp_hsttmo mscp_un.mscp_setcntchar.Mscp_hsttmo ! 223: #define mscp_usefrac mscp_un.mscp_setcntchar.Mscp_usefrac ! 224: #define mscp_time mscp_un.mscp_setcntchar.Mscp_time ! 225: ! 226: /* ! 227: * Get Unit Status end packet ! 228: */ ! 229: ! 230: #define mscp_multunt mscp_un.mscp_getunitsts.Mscp_multunt ! 231: #define mscp_unitflgs mscp_un.mscp_getunitsts.Mscp_unitflgs ! 232: #define mscp_hostid mscp_un.mscp_getunitsts.Mscp_hostid ! 233: #define mscp_unitid mscp_un.mscp_getunitsts.Mscp_unitid ! 234: #define mscp_mediaid mscp_un.mscp_getunitsts.Mscp_mediaid ! 235: #define mscp_shdwunt mscp_un.mscp_getunitsts.Mscp_shdwunt ! 236: #define mscp_shdwsts mscp_un.mscp_getunitsts.Mscp_shdwsts ! 237: #define mscp_track mscp_un.mscp_getunitsts.Mscp_track ! 238: #define mscp_group mscp_un.mscp_getunitsts.Mscp_group ! 239: #define mscp_cylinder mscp_un.mscp_getunitsts.Mscp_cylinder ! 240: #define mscp_rctsize mscp_un.mscp_getunitsts.Mscp_rctsize ! 241: #define mscp_rbns mscp_un.mscp_getunitsts.Mscp_rbns ! 242: #define mscp_rctcpys mscp_un.mscp_getunitsts.Mscp_rctcpys ! 243: ! 244: /* ! 245: * Online / Set Unit Characteristics end packet ! 246: */ ! 247: ! 248: #define mscp_untsize mscp_dscptr ! 249: #define mscp_volser mscp_sftwds[0] ! 250: ! 251: /* ! 252: * Set Controller Characteristics end packet ! 253: */ ! 254: ! 255: #define mscp_cnttmo mscp_hsttmo ! 256: #define mscp_cntcmdl mscp_usefrac ! 257: #define mscp_cntid mscp_unitid ! 258: ! 259: ! 260: /* ! 261: * Error Log message format codes ! 262: */ ! 263: #define M_FM_CNTERR 0 /* Controller error */ ! 264: #define M_FM_BUSADDR 1 /* Host memory access error */ ! 265: #define M_FM_DISKTRN 2 /* Disk transfer error */ ! 266: #define M_FM_SDI 3 /* SDI error */ ! 267: #define M_FM_SMLDSK 4 /*P Small disk error */ ! 268: ! 269: /* ! 270: * Error Log message flags ! 271: */ ! 272: #define M_LF_SUCC 0200 /* Operation successful */ ! 273: #define M_LF_CONT 0100 /* Operation continuing */ ! 274: #define M_LF_SQNRS 0001 /* Sequence number reset */ ! 275: ! 276: /* ! 277: * MSCP Error Log packet ! 278: * ! 279: * NOTE: MSCP packet must be padded to this size. ! 280: */ ! 281: ! 282: struct mslg { ! 283: struct mscp_header mslg_header;/* device specific header */ ! 284: long mslg_cmdref; /* command reference number */ ! 285: short mslg_unit; /* unit number */ ! 286: short mslg_seqnum; /* sequence number */ ! 287: u_char mslg_format; /* format */ ! 288: u_char mslg_flags; /* error log message flags */ ! 289: short mslg_event; /* event code */ ! 290: quad mslg_cntid; /* controller id */ ! 291: u_char mslg_cntsvr; /* controller software version */ ! 292: u_char mslg_cnthvr; /* controller hardware version */ ! 293: short mslg_multunt; /* multi-unit code */ ! 294: quad mslg_unitid; /* unit id */ ! 295: u_char mslg_unitsvr; /* unit software version */ ! 296: u_char mslg_unithvr; /* unit hardware version */ ! 297: u_char mslg_level; /* level */ ! 298: u_char mslg_retry; /* retry */ ! 299: long mslg_volser; /* volume serial number */ ! 300: long mslg_hdr; /* usually block number */ ! 301: union { ! 302: long Mslg_sdi[3]; /* sdi info */ ! 303: struct { ! 304: long Mslg_group; /* group */ ! 305: long Mslg_cylinder; /* cylinder */ ! 306: short Mslg_track; /* track */ ! 307: short Mslg_sector; /* sector */ ! 308: } Mslg_dte; ! 309: } Mslg_u; ! 310: }; ! 311: ! 312: #define mslg_sdi Mslg_u.Mslg_sdi ! 313: #define mslg_group Mslg_u.Mslg_dte.Mslg_group ! 314: #define mslg_cylinder Mslg_u.Mslg_dte.Mslg_cylinder ! 315: #define mslg_track Mslg_u.Mslg_dte.Mslg_track ! 316: #define mslg_sector Mslg_u.Mslg_dte.Mslg_sector ! 317: ! 318: #define mslg_busaddr mslg_unitid ! 319: #define mslg_sdecyl mslg_group
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.