Annotation of Gnu-Mach/scsi/scsi.h, revision 1.1.1.1

1.1       root        1: /* 
                      2:  * Mach Operating System
                      3:  * Copyright (c) 1991,1990 Carnegie Mellon University
                      4:  * All Rights Reserved.
                      5:  * 
                      6:  * Permission to use, copy, modify and distribute this software and its
                      7:  * documentation is hereby granted, provided that both the copyright
                      8:  * notice and this permission notice appear in all copies of the
                      9:  * software, derivative works or modified versions, and any portions
                     10:  * thereof, and that both notices appear in supporting documentation.
                     11:  * 
                     12:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     13:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     14:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     15:  * 
                     16:  * Carnegie Mellon requests users of this software to return to
                     17:  * 
                     18:  *  Software Distribution Coordinator  or  [email protected]
                     19:  *  School of Computer Science
                     20:  *  Carnegie Mellon University
                     21:  *  Pittsburgh PA 15213-3890
                     22:  * 
                     23:  * any improvements or extensions that they make and grant Carnegie Mellon
                     24:  * the rights to redistribute these changes.
                     25:  */
                     26: /*
                     27:  *     File: scsi.h
                     28:  *     Author: Alessandro Forin, Carnegie Mellon University
                     29:  *     Date:   9/90
                     30:  *
                     31:  *     Definitions of the SCSI-1 Standard
                     32:  */
                     33: 
                     34: #ifndef        _SCSI_SCSI_H_
                     35: #define        _SCSI_SCSI_H_
                     36: 
                     37: #include <nscsi.h>
                     38: #include <scsi/scsi_endian.h>
                     39: 
                     40: /*
                     41:  * Bus phases
                     42:  */
                     43: 
                     44: #define        SCSI_IO         0x01            /* Input/Output */
                     45: #define        SCSI_CD         0x02            /* Command/Data */
                     46: #define        SCSI_MSG        0x04            /* Message */
                     47: 
                     48: #define        SCSI_PHASE_MASK 0x07
                     49: #define        SCSI_PHASE(x)   ((x)&SCSI_PHASE_MASK)
                     50: 
                     51: #define        SCSI_PHASE_DATAO        0x00                            /* 0 */
                     52: #define        SCSI_PHASE_DATAI        SCSI_IO                         /* 1 */
                     53: #define        SCSI_PHASE_CMD          SCSI_CD                         /* 2 */
                     54: #define        SCSI_PHASE_STATUS       (SCSI_CD|SCSI_IO)               /* 3 */
                     55:                                                                /* 4..5 ANSI reserved */
                     56: #define        SCSI_PHASE_MSG_OUT      (SCSI_MSG|SCSI_CD)              /* 6 */
                     57: #define        SCSI_PHASE_MSG_IN       (SCSI_MSG|SCSI_CD|SCSI_IO)      /* 7 */
                     58: 
                     59: /*
                     60:  * Single byte messages
                     61:  *
                     62:  * originator: I-nitiator T-arget
                     63:  * T-support:  M-andatory O-ptional
                     64:  */
                     65: 
                     66: #define SCSI_COMMAND_COMPLETE          0x00    /* M T   */
                     67: #define SCSI_EXTENDED_MESSAGE          0x01    /*   IT  */
                     68: #define SCSI_SAVE_DATA_POINTER         0x02    /* O T   */
                     69: #define SCSI_RESTORE_POINTERS          0x03    /* O T   */
                     70: #define SCSI_DISCONNECT                        0x04    /* O T   */
                     71: #define SCSI_I_DETECTED_ERROR          0x05    /* M I   */
                     72: #define SCSI_ABORT                     0x06    /* M I   */
                     73: #define SCSI_MESSAGE_REJECT            0x07    /* M IT  */
                     74: #define SCSI_NOP                       0x08    /* M I   */
                     75: #define SCSI_MSG_PARITY_ERROR          0x09    /* M I   */
                     76: #define SCSI_LNKD_CMD_COMPLETE         0x0a    /* O T   */
                     77: #define SCSI_LNKD_CMD_COMPLETE_F       0x0b    /* O T   */
                     78: #define SCSI_BUS_DEVICE_RESET          0x0c    /* M I   */
                     79:                                        /* 0x0d..0x11 scsi2 */
                     80:                                        /* 0x12..0x1f reserved */
                     81: #define SCSI_IDENTIFY                  0x80    /* IT */
                     82: #      define SCSI_IFY_ENABLE_DISCONNECT       0x40    /* I  */
                     83: #      define SCSI_IFY_LUNTAR                  0x20    /* IT */
                     84: #      define SCSI_IFY_LUN_MASK                0x07    /* IT */
                     85: 
                     86: 
                     87: /* Message codes 0x30..0x7f are reserved */
                     88: 
                     89: /*
                     90:  * Extended messages, codes and formats
                     91:  */
                     92: 
                     93: #define SCSI_MODIFY_DATA_PTR           0x00    /* T  */
                     94: typedef struct {
                     95:        unsigned char   xtn_msg_tag;            /* const 0x01 */
                     96:        unsigned char   xtn_msg_len;            /* const 0x05 */
                     97:        unsigned char   xtn_msg_code;           /* const 0x00 */
                     98:        unsigned char   xtn_msg_arg_1000;       /* MSB, signed 2cmpl */
                     99:        unsigned char   xtn_msg_arg_0200;
                    100:        unsigned char   xtn_msg_arg_0030;
                    101:        unsigned char   xtn_msg_arg_0004;       /* LSB */
                    102: } scsi_mod_ptr_t;
                    103: 
                    104: #define SCSI_SYNC_XFER_REQUEST         0x01    /* IT */
                    105: typedef struct {
                    106:        unsigned char   xtn_msg_tag;            /* const 0x01 */
                    107:        unsigned char   xtn_msg_len;            /* const 0x03 */
                    108:        unsigned char   xtn_msg_code;           /* const 0x01 */
                    109:        unsigned char   xtn_msg_xfer_period;    /* times 4nsecs */
                    110:        unsigned char   xtn_msg_xfer_offset;    /* pending ack window */
                    111: #define SCSI_SYNCH_XFER_OFFANY 0xff            /* T  unlimited */
                    112: } scsi_synch_xfer_req_t;
                    113: 
                    114: #define SCSI_XTN_IDENTIFY              0x02    /* IT -2 */
                    115: typedef struct {
                    116:        unsigned char   xtn_msg_tag;            /* const 0x01 */
                    117:        unsigned char   xtn_msg_len;            /* const 0x02 */
                    118:        unsigned char   xtn_msg_code;           /* const 0x02 */
                    119:        unsigned char   xtn_msg_sublun;
                    120: } scsi_xtn_identify_t;
                    121: 
                    122:                                        /* 0x03..0x7f reserved */
                    123: 
                    124: #define SCSI_XTN_VENDOR_UQE            0x80    /* vendor unique bit */
                    125: typedef struct {
                    126:        unsigned char   xtn_msg_tag;            /* const 0x01 */
                    127:        unsigned char   xtn_msg_len;            /* args' len+1 (0-->256)*/
                    128:        unsigned char   xtn_msg_code;           /* const 0x80..0xff */
                    129:        unsigned char   xtn_msg_args[1];        /* 0..255 bytes */
                    130: } scsi_xtn_vedor_unique_t;
                    131: 
                    132: 
                    133: /*
                    134:  * Commands, generic structures
                    135:  */
                    136: 
                    137: /* SIX byte commands */
                    138: typedef struct {
                    139:        unsigned char   scsi_cmd_code;          /* group(7..5) and command(4..1) */
                    140: #define SCSI_CODE_GROUP                0xe0
                    141: #define SCSI_CODE_CMD          0x1f
                    142:        unsigned char   scsi_cmd_lun_and_lba1;  /* lun(7..5) and block# msb[20..16] */
                    143: #define SCSI_LUN_MASK          0xe0
                    144: #define SCSI_LBA_MASK          0x1f
                    145: #define        SCSI_LUN_SHIFT          5
                    146:        unsigned char   scsi_cmd_lba2;          /* block#[15.. 8] */
                    147:        unsigned char   scsi_cmd_lba3;          /* block#[ 7.. 0] */
                    148:        unsigned char   scsi_cmd_xfer_len;      /* if required */
                    149:        unsigned char   scsi_cmd_ctrl_byte;     /* contains: */
                    150: #define        SCSI_CTRL_VUQ           0xc0            /* vendor unique bits */
                    151: #define SCSI_CTRL_RESVD                0x3c            /* reserved, mbz */
                    152: #define SCSI_CTRL_FLAG         0x02            /* send a complete_with_flag at end */
                    153: #define SCSI_CTRL_LINK         0x01            /* link this command with next */
                    154: } scsi_command_group_0;
                    155: 
                    156: /* TEN byte commands */
                    157: typedef struct {
                    158:        unsigned char   scsi_cmd_code;          /* group(7..5) and command(4..1) */
                    159:        unsigned char   scsi_cmd_lun_and_relbit;/* lun(7..5) and RelAdr(0) */
                    160: #define SCSI_RELADR            0x01
                    161:        unsigned char   scsi_cmd_lba1;          /* block#[31..24] */
                    162:        unsigned char   scsi_cmd_lba2;          /* block#[23..16] */
                    163:        unsigned char   scsi_cmd_lba3;          /* block#[15.. 8] */
                    164:        unsigned char   scsi_cmd_lba4;          /* block#[ 7.. 0] */
                    165:        unsigned char   scsi_cmd_xxx;           /* reserved, mbz */
                    166:        unsigned char   scsi_cmd_xfer_len_1;    /* if required */
                    167:        unsigned char   scsi_cmd_xfer_len_2;    /* if required */
                    168:        unsigned char   scsi_cmd_ctrl_byte;     /* see above */
                    169: } scsi_command_group_1,
                    170:   scsi_command_group_2;
                    171: 
                    172: /* TWELVE byte commands */
                    173: typedef struct {
                    174:        unsigned char   scsi_cmd_code;          /* group(7..5) and command(4..1) */
                    175:        unsigned char   scsi_cmd_lun_and_relbit;/* lun(7..5) and RelAdr(0) */
                    176:        unsigned char   scsi_cmd_lba1;          /* block#[31..24] */
                    177:        unsigned char   scsi_cmd_lba2;          /* block#[23..16] */
                    178:        unsigned char   scsi_cmd_lba3;          /* block#[15.. 8] */
                    179:        unsigned char   scsi_cmd_lba4;          /* block#[ 7.. 0] */
                    180:        unsigned char   scsi_cmd_xfer_len_1;    /* if required */
                    181:        unsigned char   scsi_cmd_xfer_len_2;    /* if required */
                    182:        unsigned char   scsi_cmd_xfer_len_3;    /* if required */
                    183:        unsigned char   scsi_cmd_xfer_len_4;    /* if required */
                    184:        unsigned char   scsi_cmd_xxx1;          /* reserved, mbz */
                    185:        unsigned char   scsi_cmd_ctrl_byte;     /* see above */
                    186: } scsi_command_group_5;
                    187: 
                    188: 
                    189: /*
                    190:  * Commands, codes and aliases
                    191:  */
                    192: 
                    193:                                /* GROUP 0 */
                    194: #define SCSI_CMD_TEST_UNIT_READY       0x00    /* O all 2M all */
                    195: #define        scsi_cmd_test_unit_ready_t      scsi_command_group_0
                    196: 
                    197: #define SCSI_CMD_REZERO_UNIT           0x01    /* O disk worm rom */
                    198: #define SCSI_CMD_REWIND                        0x01    /* M tape */
                    199: #define        scsi_cmd_rewind_t       scsi_command_group_0
                    200: #define        scsi_cmd_rezero_t       scsi_command_group_0
                    201: #      define SCSI_CMD_REW_IMMED               0x01
                    202: 
                    203:                                        /* 0x02 vendor unique */
                    204: 
                    205: #define SCSI_CMD_REQUEST_SENSE         0x03    /* M all */
                    206: #define        scsi_cmd_request_sense_t        scsi_command_group_0
                    207: #      define scsi_cmd_allocation_length       scsi_cmd_xfer_len
                    208: 
                    209: #define SCSI_CMD_FORMAT_UNIT           0x04    /* M disk O prin */
                    210: #define        scsi_cmd_format_t       scsi_command_group_0
                    211: #      define SCSI_CMD_FMT_FMTDATA             0x10
                    212: #      define SCSI_CMD_FMT_CMPLIST             0x08
                    213: #      define SCSI_CMD_FMT_LIST_TYPE           0x07
                    214: #      define scsi_cmd_intleave1               scsi_cmd_lba3
                    215: #      define scsi_cmd_intleave2               scsi_cmd_xfer_len
                    216: 
                    217: #define SCSI_CMD_READ_BLOCK_LIMITS     0x05    /* E tape */
                    218: #define        scsi_cmd_block_limits_t scsi_command_group_0
                    219: 
                    220:                                        /* 0x06 vendor unique */
                    221: 
                    222: #define SCSI_CMD_REASSIGN_BLOCKS       0x07    /* O disk worm */
                    223: #define        scsi_cmd_reassign_blocks_t      scsi_command_group_0
                    224: 
                    225: #define SCSI_CMD_READ                  0x08    /* M disk tape O worm rom */
                    226: #define        SCSI_CMD_RECEIVE                0x08    /* O proc */
                    227: #define        SCSI_CMD_GET_MESSAGE            0x08    /* M comm */
                    228: #define        scsi_cmd_read_t scsi_command_group_0
                    229: #      define SCSI_CMD_TP_FIXED                0x01            /* tape */
                    230: #      define scsi_cmd_tp_len1                 scsi_cmd_lba2
                    231: #      define scsi_cmd_tp_len2                 scsi_cmd_lba3
                    232: #      define scsi_cmd_tp_len3                 scsi_cmd_xfer_len
                    233:                                        /* largest addressable blockno */
                    234: #define        SCSI_CMD_READ_MAX_LBA           ((1 << 21) - 1)
                    235: 
                    236:                                        /* 0x09 vendor unique */
                    237: 
                    238: #define SCSI_CMD_WRITE                 0x0a    /* M disk tape O worm */
                    239: #define SCSI_CMD_PRINT                 0x0a    /* M prin */
                    240: #define SCSI_CMD_SEND                  0x0a    /* M proc */
                    241: #define SCSI_CMD_SEND_MESSAGE          0x0a    /* M comm */
                    242: #define        scsi_cmd_write_t        scsi_command_group_0
                    243: 
                    244: #define SCSI_CMD_SEEK                  0x0b    /* O disk worm rom */
                    245: #define SCSI_CMD_TRACK_SELECT          0x0b    /* O tape */
                    246: #define SCSI_CMD_SLEW_AND_PRINT                0x0b    /* O prin */
                    247: #define        scsi_cmd_seek_t scsi_command_group_0
                    248: #      define SCSI_CMD_SLW_CHANNEL             0x01
                    249: #      define scsi_cmd_tp_trackno              scsi_cmd_xfer_len
                    250: #      define scsi_cmd_slew_value              scsi_cmd_lba2
                    251: 
                    252:                                        /* 0x0c..0x0e vendor unique */
                    253: 
                    254: #define SCSI_CMD_READ_REVERSE          0x0f    /* O tape */
                    255: #define        scsi_cmd_rev_read_t     scsi_command_group_0
                    256: 
                    257: #define SCSI_CMD_WRITE_FILEMARKS       0x10    /* M tape */
                    258: #define SCSI_CMD_FLUSH_BUFFER          0x10    /* M prin */
                    259: #define        scsi_cmd_write_fil_t    scsi_command_group_0
                    260: 
                    261: #define SCSI_CMD_SPACE                 0x11    /* O tape */
                    262: #define        scsi_cmd_space_t        scsi_command_group_0
                    263: #      define SCSI_CMD_SP_BLOCKS               0x00
                    264: #      define SCSI_CMD_SP_FIL                  0x01
                    265: #      define SCSI_CMD_SP_SEQ_FIL              0x02
                    266: #      define SCSI_CMD_SP_EOT                  0x03
                    267: 
                    268: #define SCSI_CMD_INQUIRY               0x12    /* E all (2M all) */
                    269: #define        scsi_cmd_inquiry_t      scsi_command_group_0
                    270: #      define SCSI_CMD_INQ_EVPD                0x01    /* 2 */
                    271: #      define scsi_cmd_page_code               scsi_cmd_lba2   /* 2 */
                    272: 
                    273: #define SCSI_CMD_VERIFY_0              0x13    /* O tape */
                    274: #define        scsi_cmd_verify_t       scsi_command_group_0
                    275: #      define SCSI_CMD_VFY_BYTCMP              0x02
                    276: 
                    277: #define SCSI_CMD_RECOVER_BUFFERED_DATA 0x14    /* O tape prin */
                    278: #define        scsi_cmd_recover_buffer_t       scsi_command_group_0
                    279: 
                    280: #define SCSI_CMD_MODE_SELECT           0x15    /* O disk tape prin worm rom */
                    281: #      define SCSI_CMD_MSL_PF                  0x10
                    282: #      define SCSI_CMD_MSL_SP                  0x01
                    283: #define        scsi_cmd_mode_select_t  scsi_command_group_0
                    284: 
                    285: #define SCSI_CMD_RESERVE               0x16    /* O disk tape prin worm rom */
                    286: #define        scsi_cmd_reserve_t      scsi_command_group_0
                    287: #      define SCSI_CMD_RES_3RDPTY              0x10
                    288: #      define SCSI_CMD_RES_3RDPTY_DEV          0x0e
                    289: #      define SCSI_CMD_RES_EXTENT              0x01
                    290: #      define scsi_cmd_reserve_id              scsi_cmd_lba2
                    291: #      define scsi_cmd_extent_llen1            scsi_cmd_lba3
                    292: #      define scsi_cmd_extent_llen2            scsi_cmd_xfer_len
                    293: 
                    294: #define SCSI_CMD_RELEASE               0x17    /* O disk tape prin worm rom */
                    295: #define        scsi_cmd_release_t      scsi_command_group_0
                    296: 
                    297: #define SCSI_CMD_COPY                  0x18    /* O all */
                    298: #define        scsi_cmd_copy_t scsi_command_group_0
                    299: #      define SCSI_CMD_CPY_PAD                 0x01    /* 2 */
                    300: #      define scsi_cmd_paraml_len0             scsi_cmd_lba2
                    301: #      define scsi_cmd_paraml_len1             scsi_cmd_lba3
                    302: #      define scsi_cmd_paraml_len2             scsi_cmd_xfer_len
                    303: 
                    304: #define SCSI_CMD_ERASE                 0x19    /* O tape */
                    305: #define        scsi_cmd_erase_t        scsi_command_group_0
                    306: #      define SCSI_CMD_ER_LONG                 0x01
                    307: 
                    308: #define SCSI_CMD_MODE_SENSE            0x1a    /* O disk tape prin worm rom */
                    309: #define        scsi_cmd_mode_sense_t   scsi_command_group_0
                    310: #      define scsi_cmd_ms_pagecode             scsi_cmd_lba2
                    311: 
                    312: #define SCSI_CMD_START_STOP_UNIT       0x1b    /* O disk prin worm rom */
                    313: #define SCSI_CMD_LOAD_UNLOAD           0x1b    /* O tape */
                    314: #define        scsi_cmd_start_t        scsi_command_group_0
                    315: #      define SCSI_CMD_SS_IMMED                0x01
                    316: #      define scsi_cmd_ss_flags                scsi_cmd_xfer_len
                    317: #      define SCSI_CMD_SS_START                0x01
                    318: #      define SCSI_CMD_SS_RETEN                0x02
                    319: #      define SCSI_CMD_SS_RETAIN               0x01
                    320: #      define SCSI_CMD_SS_EJECT                0x02
                    321: 
                    322: #define SCSI_CMD_RECEIVE_DIAG_RESULTS  0x1c    /* O all */
                    323: #define        scsi_cmd_receive_diag_t scsi_command_group_0
                    324: #      define scsi_cmd_allocation_length1      scsi_cmd_lba3
                    325: #      define scsi_cmd_allocation_length2      scsi_cmd_xfer_len
                    326: 
                    327: #define SCSI_CMD_SEND_DIAGNOSTICS      0x1d    /* O all */
                    328: #define        scsi_cmd_send_diag_t    scsi_command_group_0
                    329: #      define SCSI_CMD_DIAG_SELFTEST           0x04
                    330: #      define SCSI_CMD_DIAG_DEVOFFL            0x02
                    331: #      define SCSI_CMD_DIAG_UNITOFFL           0x01
                    332: 
                    333: #define SCSI_CMD_PREVENT_ALLOW_REMOVAL 0x1e    /* O disk tape worm rom */
                    334: #define        scsi_cmd_medium_removal_t       scsi_command_group_0
                    335: #      define scsi_cmd_pa_prevent              scsi_cmd_xfer_len /* 0x1 */
                    336: 
                    337:                                        /* 0x1f reserved */
                    338: 
                    339:                                /* GROUP 1 */
                    340:                                        /* 0x20..0x24 vendor unique */
                    341: 
                    342: #define SCSI_CMD_READ_CAPACITY         0x25    /* E disk worm rom */
                    343: #define        scsi_cmd_read_capacity_t        scsi_command_group_1
                    344: #      define scsi_cmd_rcap_flags              scsi_cmd_xfer_len_2
                    345: #      define SCSI_CMD_RCAP_PMI                0x01
                    346: 
                    347:                                        /* 0x26..0x27 vendor unique */
                    348: 
                    349: #define SCSI_CMD_LONG_READ                     0x28    /* E disk M worm rom */
                    350: #define        scsi_cmd_long_read_t    scsi_command_group_1
                    351: 
                    352:                                        /* 0x29 vendor unique */
                    353: 
                    354: #define SCSI_CMD_LONG_WRITE                    0x2a    /* E disk M worm */
                    355: #define        scsi_cmd_long_write_t   scsi_command_group_1
                    356: 
                    357: #define SCSI_CMD_LONG_SEEK                     0x2b    /* O disk worm rom */
                    358: #define        scsi_cmd_long_seek_t    scsi_command_group_1
                    359: 
                    360:                                        /* 0x2c..0x2d vendor unique */
                    361: 
                    362: #define SCSI_CMD_WRITE_AND_VERIFY      0x2e    /* O disk worm */
                    363: #define        scsi_cmd_write_vfy_t    scsi_command_group_1
                    364: #      define SCSI_CMD_VFY_BYTCHK              0x02
                    365: 
                    366: #define SCSI_CMD_VERIFY_1              0x2f    /* O disk worm rom */
                    367: #define        scsi_cmd_verify_long_t  scsi_command_group_1
                    368: #      define SCSI_CMD_VFY_BLKVFY              0x04
                    369: 
                    370: #define SCSI_CMD_SEARCH_HIGH           0x30    /* O disk worm rom */
                    371: #define        scsi_cmd_search_t       scsi_command_group_1
                    372: #      define SCSI_CMD_SRCH_INVERT             0x10
                    373: #      define SCSI_CMD_SRCH_SPNDAT             0x02
                    374: 
                    375: #define SCSI_CMD_SEARCH_EQUAL          0x31    /* O disk worm rom */
                    376: #define SCSI_CMD_SEARCH_LOW            0x32    /* O disk worm rom */
                    377: 
                    378: #define SCSI_CMD_SET_LIMITS            0x33    /* O disk worm rom */
                    379: #define        scsi_cmd_set_limits_t   scsi_command_group_1
                    380: #      define SCSI_CMD_SL_RDINH                0x02
                    381: #      define SCSI_CMD_SL_WRINH                0x01
                    382: 
                    383:                                        /* 0x34..0x38 reserved */
                    384: 
                    385: #define SCSI_CMD_COMPARE               0x39    /* O all */
                    386: #define        scsi_cmd_compare_t      scsi_command_group_1
                    387: #      define scsi_cmd_1_paraml1               scsi_cmd_lba2
                    388: #      define scsi_cmd_1_paraml2               scsi_cmd_lba3
                    389: #      define scsi_cmd_1_paraml3               scsi_cmd_lba4
                    390: 
                    391: #define SCSI_CMD_COPY_AND_VERIFY       0x3a    /* O all */
                    392: #define        scsi_cmd_copy_vfy_t     scsi_command_group_1
                    393: #      define SCSI_CMD_CPY_BYTCHK              0x02
                    394: 
                    395:                                        /* 0x3b..0x3f reserved */
                    396: 
                    397:                                /* GROUP 2 */
                    398:                                        /* 0x40..0x5f reserved */
                    399: 
                    400:                                /* GROUP 3 */
                    401:                                        /* 0x60..0x7f reserved */
                    402: 
                    403:                                /* GROUP 4 */
                    404:                                        /* 0x80..0x9f reserved */
                    405: 
                    406:                                /* GROUP 5 */
                    407:                                        /* 0xa0..0xaf vendor unique */
                    408:                                        /* 0xb0..0xbf reserved */
                    409: 
                    410:                                /* GROUP 6 */
                    411:                                        /* 0xc0..0xdf vendor unique */
                    412: 
                    413:                                /* GROUP 7 */
                    414:                                        /* 0xe0..0xff vendor unique */
                    415: 
                    416: 
                    417: /*
                    418:  * Command-specific results and definitions
                    419:  */
                    420: 
                    421: /* inquiry data */
                    422: typedef struct {
                    423:        unsigned char   periph_type;
                    424: #define        SCSI_DISK       0x00
                    425: #define SCSI_TAPE      0x01
                    426: #define        SCSI_PRINTER    0x02
                    427: #define        SCSI_CPU        0x03
                    428: #define        SCSI_WORM       0x04
                    429: #define        SCSI_CDROM      0x05
                    430: 
                    431:        BITFIELD_2( unsigned char,
                    432:                        device_type : 7,
                    433:                        rmb : 1);
                    434:        BITFIELD_3( unsigned char,
                    435:                        ansi : 3,
                    436:                        ecma : 3,
                    437:                        iso : 2);
                    438:        unsigned char   reserved;
                    439:        unsigned char   length;
                    440:        unsigned char   param[1];
                    441: } scsi_inquiry_data_t;
                    442: 
                    443: #define        SCSI_INQ_STD_DATA       -1
                    444: 
                    445: /* request sense data */
                    446: #define SCSI_SNS_NOSENSE       0x0
                    447: #define SCSI_SNS_RECOVERED     0x1
                    448: #define SCSI_SNS_NOTREADY      0x2
                    449: #define SCSI_SNS_MEDIUM_ERR    0x3
                    450: #define SCSI_SNS_HW_ERR                0x4
                    451: #define SCSI_SNS_ILLEGAL_REQ   0x5
                    452: #define SCSI_SNS_UNIT_ATN      0x6
                    453: #define SCSI_SNS_PROTECT       0x7
                    454: #define        SCSI_SNS_BLANK_CHK      0x8
                    455: #define        SCSI_SNS_VUQE           0x9
                    456: #define        SCSI_SNS_COPY_ABRT      0xa
                    457: #define        SCSI_SNS_ABORTED        0xb
                    458: #define        SCSI_SNS_EQUAL          0xc
                    459: #define        SCSI_SNS_VOLUME_OVFL    0xd
                    460: #define        SCSI_SNS_MISCOMPARE     0xe
                    461: #define        SCSI_SNS_RESERVED       0xf
                    462: 
                    463: typedef struct {
                    464:        BITFIELD_3( unsigned char,
                    465:                error_code : 4,
                    466:                error_class : 3,
                    467:                addr_valid : 1);
                    468: #      define  SCSI_SNS_XTENDED_SENSE_DATA     0x7     /* e.g. error_class=7 */
                    469:        union {
                    470:            struct {
                    471:                BITFIELD_2(unsigned char,
                    472:                        lba_msb : 5,
                    473:                        vuqe : 3);
                    474:                unsigned char   lba;
                    475:                unsigned char   lba_lsb;
                    476:            } non_xtnded;
                    477:            struct {
                    478:                unsigned char   segment_number;
                    479:                BITFIELD_5(unsigned char,
                    480:                        sense_key : 4,
                    481:                        res : 1,
                    482:                        ili : 1,
                    483:                        eom : 1,
                    484:                        fm : 1);
                    485:                unsigned char   info0;
                    486:                unsigned char   info1;
                    487:                unsigned char   info2;
                    488:                unsigned char   info3;
                    489:                unsigned char   add_len;
                    490:                unsigned char   add_bytes[1];/* VARSIZE */
                    491:            } xtended;
                    492:        } u;
                    493: } scsi_sense_data_t;
                    494: 
                    495: 
                    496: /* mode select params */
                    497: typedef struct {
                    498:        unsigned char   reserved1;
                    499:        unsigned char   medium_type;
                    500:        BITFIELD_3(unsigned char,
                    501:                        speed:4,        /* special for tapes, reserved in SCSI-1 */
                    502:                        buffer_mode:3,
                    503:                        reserved2:1);
                    504:        unsigned char   desc_len;
                    505:        struct scsi_mode_parm_blockdesc {
                    506:                unsigned char   density_code;
                    507:                unsigned char   nblocks1;
                    508:                unsigned char   nblocks2;
                    509:                unsigned char   nblocks3;
                    510:                unsigned char   reserved;
                    511:                unsigned char   reclen1;
                    512:                unsigned char   reclen2;
                    513:                unsigned char   reclen3;
                    514:        } descs[1];             /* VARSIZE, really */
                    515: } scsi_mode_select_param_t;
                    516: 
                    517: /* mode sense data (TAPE) */
                    518: typedef struct {
                    519:        unsigned char   data_len;
                    520:        unsigned char   medium_type;
                    521:        BITFIELD_3(unsigned char,
                    522:                        speed : 4,
                    523:                        buffered_mode : 3,
                    524:                        wp : 1);
                    525:        unsigned char   bdesc_len;
                    526:        struct {
                    527:            unsigned char       density_code;
                    528:            unsigned char       no_blks_msb;
                    529:            unsigned char       no_blks;
                    530:            unsigned char       no_blks_lsb;
                    531:            unsigned char       reserved;
                    532:            unsigned char       blen_msb;
                    533:            unsigned char       blen;
                    534:            unsigned char       blen_lsb;
                    535:        } bdesc[1];     /* VARSIZE */
                    536:        /* vuqe data might follow */
                    537: } scsi_mode_sense_data_t;
                    538: 
                    539: /* read capacity data */
                    540: typedef struct {
                    541:        unsigned char   lba1;
                    542:        unsigned char   lba2;
                    543:        unsigned char   lba3;
                    544:        unsigned char   lba4;
                    545:        unsigned char   blen1;
                    546:        unsigned char   blen2;
                    547:        unsigned char   blen3;
                    548:        unsigned char   blen4;
                    549: } scsi_rcap_data_t;
                    550: 
                    551: /* defect list(s) */
                    552: typedef struct {
                    553:        unsigned char   res1;
                    554:        unsigned char   res2;
                    555:        unsigned char   list_len_msb;
                    556:        unsigned char   list_len_lsb;
                    557:        struct {
                    558:            unsigned char       blockno_msb;
                    559:            unsigned char       blockno_sb1;
                    560:            unsigned char       blockno_sb2;
                    561:            unsigned char       blockno_lsb;
                    562:        } defects[1];   /* VARSIZE */
                    563: } scsi_Ldefect_data_t;
                    564: 
                    565: /* block limits (tape) */
                    566: typedef struct {
                    567:        unsigned char   res1;
                    568:        unsigned char   maxlen_msb;
                    569:        unsigned char   maxlen_sb;
                    570:        unsigned char   maxlen_lsb;
                    571:        unsigned char   minlen_msb;
                    572:        unsigned char   minlen_lsb;
                    573: } scsi_blimits_data_t;
                    574: 
                    575: /*
                    576:  * Status byte (a-la scsi1)
                    577:  */
                    578: 
                    579: typedef union {
                    580:     struct {
                    581:        BITFIELD_4( unsigned char,
                    582:                        scsi_status_vendor_uqe1:1,
                    583:                        scsi_status_code:4,
                    584:                        scsi_status_vendor_uqe:2,
                    585:                        scsi_status_reserved:1);
                    586: #      define SCSI_ST_GOOD             0x00            /* scsi_status_code values */
                    587: #      define SCSI_ST_CHECK_CONDITION  0x01
                    588: #      define SCSI_ST_CONDITION_MET    0x02
                    589: #      define SCSI_ST_BUSY             0x04
                    590: #      define SCSI_ST_INT_GOOD         0x08
                    591: #      define SCSI_ST_INT_MET          0x0a
                    592: #      define SCSI_ST_RES_CONFLICT     0x0c
                    593:                                        /* anything else is reserved */
                    594:     } st;
                    595:     unsigned char bits;
                    596: } scsi_status_byte_t;
                    597: 
                    598: 
                    599: #endif _SCSI_SCSI_H_

unix.superglobalmegacorp.com

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