Annotation of 42BSD/sys/vax/mscp.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.