Annotation of Gnu-Mach/scsi/scsi.h, revision 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.