Annotation of researchv9/sys.vax/h/mscp.h, revision 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.