Annotation of 41BSD/4.0.upgrade/sys/h/mscp.h, revision 1.1.1.1

1.1       root        1: /*     mscp.h  81/10/26        1.1     */
                      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: typedef        short   quad[4];                /* a word-aligned quadword */
                    143: 
                    144: /*
                    145:  * An MSCP packet
                    146:  */
                    147: 
                    148: struct mscp {
                    149:        struct  mscp_header mscp_header;/* device specific header */
                    150:        long    mscp_cmdref;            /* command reference number */
                    151:        short   mscp_unit;              /* unit number */
                    152:        short   mscp_xxx1;              /* unused */
                    153:        u_char  mscp_opcode;            /* opcode */
                    154:        u_char  mscp_flags;             /* end message flags */
                    155:        short   mscp_modifier;          /* modifiers */
                    156:        union {
                    157:        struct {
                    158:                long    Mscp_bytecnt;   /* byte count */
                    159:                long    Mscp_buffer;    /* buffer descriptor */
                    160:                long    Mscp_xxx2[2];   /* unused */
                    161:                long    Mscp_lbn;       /* logical block number */
                    162:                long    Mscp_xxx4;      /* unused */
                    163:                long    *Mscp_dscptr;   /* pointer to descriptor (software) */
                    164:                long    Mscp_sftwds[4]; /* software words, padding */
                    165:        } mscp_generic;
                    166:        struct {
                    167:                short   Mscp_version;   /* MSCP version */
                    168:                short   Mscp_cntflgs;   /* controller flags */
                    169:                short   Mscp_hsttmo;    /* host timeout */
                    170:                short   Mscp_usefrac;   /* use fraction */
                    171:                long    Mscp_time;      /* time and date */
                    172:        } mscp_setcntchar;
                    173:        struct {
                    174:                short   Mscp_multunt;   /* multi-unit code */
                    175:                short   Mscp_unitflgs;  /* unit flags */
                    176:                long    Mscp_hostid;    /* host identifier */
                    177:                quad    Mscp_unitid;    /* unit identifier */
                    178:                long    Mscp_mediaid;   /* media type identifier */
                    179:                short   Mscp_shdwunt;   /* shadow unit */
                    180:                short   Mscp_shdwsts;   /* shadow status */
                    181:                short   Mscp_track;     /* track size */
                    182:                short   Mscp_group;     /* group size */
                    183:                short   Mscp_cylinder;  /* cylinder size */
                    184:                short   Mscp_xxx3;      /* reserved */
                    185:                short   Mscp_rctsize;   /* RCT table size */
                    186:                char    Mscp_rbns;      /* RBNs / track */
                    187:                char    Mscp_rctcpys;   /* RCT copies */
                    188:        } mscp_getunitsts;
                    189:        } mscp_un;
                    190: };
                    191: 
                    192: /*
                    193:  * generic packet
                    194:  */
                    195: 
                    196: #define        mscp_bytecnt    mscp_un.mscp_generic.Mscp_bytecnt
                    197: #define        mscp_buffer     mscp_un.mscp_generic.Mscp_buffer
                    198: #define        mscp_lbn        mscp_un.mscp_generic.Mscp_lbn
                    199: #define        mscp_dscptr     mscp_un.mscp_generic.Mscp_dscptr
                    200: #define        mscp_sftwds     mscp_un.mscp_generic.Mscp_sftwds
                    201: #define        mscp_status     mscp_modifier
                    202: 
                    203: /*
                    204:  * Abort / Get Command Status packet
                    205:  */
                    206: 
                    207: #define        mscp_outref     mscp_bytecnt
                    208: 
                    209: /*
                    210:  * Online / Set Unit Characteristics packet
                    211:  */
                    212: 
                    213: #define        mscp_errlgfl    mscp_lbn
                    214: #define        mscp_copyspd    mscp_shdwsts
                    215: 
                    216: /*
                    217:  * Replace packet
                    218:  */
                    219: 
                    220: #define        mscp_rbn        mscp_bytecnt
                    221: 
                    222: /*
                    223:  * Set Controller Characteristics packet
                    224:  */
                    225: 
                    226: #define        mscp_version    mscp_un.mscp_setcntchar.Mscp_version
                    227: #define        mscp_cntflgs    mscp_un.mscp_setcntchar.Mscp_cntflgs
                    228: #define        mscp_hsttmo     mscp_un.mscp_setcntchar.Mscp_hsttmo
                    229: #define        mscp_usefrac    mscp_un.mscp_setcntchar.Mscp_usefrac
                    230: #define        mscp_time       mscp_un.mscp_setcntchar.Mscp_time
                    231: 
                    232: /*
                    233:  * Get Unit Status end packet
                    234:  */
                    235: 
                    236: #define        mscp_multunt    mscp_un.mscp_getunitsts.Mscp_multunt
                    237: #define        mscp_unitflgs   mscp_un.mscp_getunitsts.Mscp_unitflgs
                    238: #define        mscp_hostid     mscp_un.mscp_getunitsts.Mscp_hostid
                    239: #define        mscp_unitid     mscp_un.mscp_getunitsts.Mscp_unitid
                    240: #define        mscp_mediaid    mscp_un.mscp_getunitsts.Mscp_mediaid
                    241: #define        mscp_shdwunt    mscp_un.mscp_getunitsts.Mscp_shdwunt
                    242: #define        mscp_shdwsts    mscp_un.mscp_getunitsts.Mscp_shdwsts
                    243: #define        mscp_track      mscp_un.mscp_getunitsts.Mscp_track
                    244: #define        mscp_group      mscp_un.mscp_getunitsts.Mscp_group
                    245: #define        mscp_cylinder   mscp_un.mscp_getunitsts.Mscp_cylinder
                    246: #define        mscp_rctsize    mscp_un.mscp_getunitsts.Mscp_rctsize
                    247: #define        mscp_rbns       mscp_un.mscp_getunitsts.Mscp_rbns
                    248: #define        mscp_rctcpys    mscp_un.mscp_getunitsts.Mscp_rctcpys
                    249: 
                    250: /*
                    251:  * Online / Set Unit Characteristics end packet
                    252:  */
                    253: 
                    254: #define        mscp_untsize    mscp_dscptr
                    255: #define        mscp_volser     mscp_sftwds[0]
                    256: 
                    257: /*
                    258:  * Set Controller Characteristics end packet
                    259:  */
                    260: 
                    261: #define        mscp_cnttmo     mscp_hsttmo
                    262: #define        mscp_cntcmdl    mscp_usefrac
                    263: #define        mscp_cntid      mscp_unitid
                    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_DISKTRN    2       /* Disk transfer error */
                    272: #define        M_FM_SDI        3       /* SDI error */
                    273: #define        M_FM_SMLDSK     4       /* Small disk error */
                    274: 
                    275: /*
                    276:  * Error Log message flags
                    277:  */
                    278: #define        M_LF_SUCC       0200    /* Operation successful */
                    279: #define        M_LF_CONT       0100    /* Operation continuing */
                    280: #define        M_LF_SQNRS      0001    /* Sequence number reset */
                    281: 
                    282: /*
                    283:  * MSCP Error Log packet
                    284:  *
                    285:  *     NOTE: MSCP packet must be padded to this size.
                    286:  */
                    287: 
                    288: struct mslg {
                    289:        struct  mscp_header mslg_header;/* device specific header */
                    290:        long    mslg_cmdref;            /* command reference number */
                    291:        short   mslg_unit;              /* unit number */
                    292:        short   mslg_seqnum;            /* sequence number */
                    293:        u_char  mslg_format;            /* format */
                    294:        u_char  mslg_flags;             /* error log message flags */
                    295:        short   mslg_event;             /* event code */
                    296:        quad    mslg_cntid;             /* controller id */
                    297:        u_char  mslg_cntsvr;            /* controller software version */
                    298:        u_char  mslg_cnthvr;            /* controller hardware version */
                    299:        short   mslg_multunt;           /* multi-unit code */
                    300:        quad    mslg_unitid;            /* unit id */
                    301:        u_char  mslg_unitsvr;           /* unit software version */
                    302:        u_char  mslg_unithvr;           /* unit hardware version */
                    303:        short   mslg_group;             /* group */
                    304:        long    mslg_volser;            /* volume serial number */
                    305:        long    mslg_cylinder;          /* cylinder */
                    306:        short   mslg_track;             /* track */
                    307:        short   mslg_sector;            /* sector */
                    308:        long    mslg_lbn;               /* logical block number */
                    309:        u_char  mslg_level;             /* level */
                    310:        u_char  mslg_retry;             /* retry */
                    311: };
                    312: 
                    313: #define        mslg_busaddr    mslg_unitid
                    314: #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.