Annotation of researchv9/sys.vax/h/mscp.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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