Annotation of Gnu-Mach/scsi/scsi2.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: scsi2.h
                     28:  *     Author: Alessandro Forin, Carnegie Mellon University
                     29:  *     Date:   9/90
                     30:  *
                     31:  *     Additions and changes of the SCSI-II standard viz SCSI-I
                     32:  */
                     33: 
                     34: #ifndef        _SCSI_SCSI2_H_
                     35: #define        _SCSI_SCSI2_H_
                     36: 
                     37: #include <scsi/scsi_endian.h>
                     38: 
                     39: /*
                     40:  * Single byte messages
                     41:  *
                     42:  * originator: I-nitiator T-arget
                     43:  * T-support:  M-andatory O-ptional
                     44:  */
                     45: 
                     46: #define SCSI_ABORT_TAG                 0x0d    /* O I 2 */
                     47: #define SCSI_CLEAR_QUEUE               0x0e    /* O I 2 */
                     48: #define SCSI_INITIATE_RECOVERY         0x0f    /* O IT2 */
                     49: #define SCSI_RELEASE_RECOVERY          0x10    /* O I 2 */
                     50: #define SCSI_TERMINATE_IO_PROCESS      0x11    /* O I 2 */
                     51: 
                     52: /*
                     53:  * Two byte messages
                     54:  */
                     55: #define SCSI_SIMPLE_QUEUE_TAG          0x20    /* O IT2 */
                     56: #define SCSI_HEADOF_QUEUE_TAG          0x21    /* O I 2 */
                     57: #define SCSI_ORDERED_QUEUE_TAG         0x22    /* O I 2 */
                     58: #define SCSI_IGNORE_WIDE_RESIDUE       0x23    /* O  T2 */
                     59:                                        /* 0x24..0x2f reserved */
                     60: 
                     61: /*
                     62:  * Extended messages, codes and formats
                     63:  */
                     64: 
                     65: #define SCSI_WIDE_XFER_REQUEST         0x03    /* IT 2 */
                     66: typedef struct {
                     67:        unsigned char   xtn_msg_tag;            /* const 0x01 */
                     68:        unsigned char   xtn_msg_len;            /* const 0x02 */
                     69:        unsigned char   xtn_msg_code;           /* const 0x03 */
                     70:        unsigned char   xtn_msg_xfer_width;
                     71: } scsi_wide_xfer_t;
                     72: 
                     73: /*
                     74:  * NOTE: some command-specific mods and extensions
                     75:  * are actually defined in the scsi.h file for
                     76:  * readability reasons
                     77:  */
                     78: 
                     79:                                /* GROUP 1 */
                     80: 
                     81: #define        SCSI_CMD_READ_DEFECT_DATA       0x37    /* O2 disk opti */
                     82: typedef scsi_command_group_1   scsi_cmd_read_defect_t;
                     83: #      define SCSI_CMD_RDD_LIST_TYPE           0x07
                     84: #      define SCSI_CMD_RDD_GLIST               0x08
                     85: #      define SCSI_CMD_RDD_PLIST               0x10
                     86: 
                     87: #define SCSI_CMD_WRITE_BUFFER          0x3b    /* O2 all */
                     88: typedef scsi_command_group_1   scsi_cmd_write_buffer_t;
                     89: #      define SCSI_CMD_BUF_MODE                0x07
                     90: #      define scsi_cmd_buf_id                  scs_cmd_lba1
                     91: #      define scsi_cmd_buf_offset1             scs_cmd_lba2
                     92: #      define scsi_cmd_buf_offset2             scs_cmd_lba3
                     93: #      define scsi_cmd_buf_offset3             scs_cmd_lba4
                     94: #      define scsi_cmd_buf_alloc1              scs_cmd_xxx
                     95: #      define scsi_cmd_buf_alloc2              scs_cmd_xfer_len_1
                     96: #      define scsi_cmd_buf_alloc3              scs_cmd_xfer_len_2
                     97: 
                     98: #define SCSI_CMD_READ_BUFFER           0x3c    /* O2 all */
                     99: #define        scsi_cmd_read_buffer_t scsi_command_group_1
                    100: 
                    101:                                /* GROUP 2 */
                    102: 
                    103: #define SCSI_CMD_CHANGE_DEFINITION     0x40    /* O2 all */
                    104: #define        scsi_cmd_change_def_t   scsi_command_group_2
                    105: #      define scsi_cmd_chg_save                scsi_cmd_lba1
                    106: #      define scsi_cmd_chg_definition          scsi_cmd_lba2
                    107: #      define SCSI_CMD_CHG_CURRENT             0x00
                    108: #      define SCSI_CMD_CHG_SCSI_1              0x01
                    109: #      define SCSI_CMD_CHG_CCS                 0x02
                    110: #      define SCSI_CMD_CHG_SCSI_2              0x03
                    111: 
                    112:                                        /* 0x41 reserved */
                    113: 
                    114: #define SCSI_CMD_READ_SUBCH            0x42    /* O2 rom */
                    115: #define        scsi_cmd_read_subch_t   scsi_command_group_2
                    116: #      define SCSI_CMD_CD_MSF                  0x02
                    117: #      define SCSI_CMD_RS_SUBQ                 0x40
                    118: #      define scsi_cmd_rs_format       scsi_cmd_lba2
                    119: #      define SCSI_CMD_RS_FMT_SUBQ             0x00
                    120: #      define SCSI_CMD_RS_FMT_CURPOS           0x01
                    121: #      define SCSI_CMD_RS_FMT_CATALOG          0x02
                    122: #      define SCSI_CMD_RS_FMT_ISRC             0x03
                    123: #      define scsi_cmd_rs_trackno      scsi_cmd_xxx
                    124: 
                    125: 
                    126: #define SCSI_CMD_READ_TOC              0x43    /* O2 rom */
                    127: #define        scsi_cmd_read_toc_t     scsi_command_group_2
                    128: #      define scsi_cmd_rtoc_startT     scsi_cmd_xxx
                    129: 
                    130: #define SCSI_CMD_READ_HEADER           0x44    /* O2 rom */
                    131: #define        scsi_cmd_read_header_t  scsi_command_group_2
                    132: 
                    133: #define SCSI_CMD_PLAY_AUDIO            0x45    /* O2 rom */
                    134: #define        scsi_cmd_play_audio_t   scsi_command_group_2
                    135: 
                    136: #define SCSI_CMD_PLAY_AUDIO_MSF                0x47    /* O2 rom */
                    137: #define        scsi_cmd_play_audio_msf_t scsi_command_group_2
                    138: #      define scsi_cmd_pamsf_startM    scsi_cmd_lba2
                    139: #      define scsi_cmd_pamsf_startS    scsi_cmd_lba3
                    140: #      define scsi_cmd_pamsf_startF    scsi_cmd_lba4
                    141: #      define scsi_cmd_pamsf_endM      scsi_cmd_xxx
                    142: #      define scsi_cmd_pamsf_endS      scsi_cmd_xfer_len_1
                    143: #      define scsi_cmd_pamsf_endF      scsi_cmd_xfer_len_2
                    144: 
                    145: #define SCSI_CMD_PLAY_AUDIO_TI         0x48    /* O2 rom */
                    146: #define        scsi_cmd_play_audio_ti_t scsi_command_group_2
                    147: #      define scsi_cmd_pati_startT     scsi_cmd_lba3
                    148: #      define scsi_cmd_pati_startI     scsi_cmd_lba4
                    149: #      define scsi_cmd_pati_endT       scsi_cmd_xfer_len_1
                    150: #      define scsi_cmd_pati_endI       scsi_cmd_xfer_len_2
                    151: 
                    152: #define SCSI_CMD_PLAY_AUDIO_TR         0x49    /* O2 rom */
                    153: #define        scsi_cmd_play_audio_tr_t scsi_command_group_2
                    154: #      define scsi_cmd_patr_startT     scsi_cmd_xxx
                    155: 
                    156: 
                    157: #define SCSI_CMD_PAUSE_RESUME          0x4b    /* O2 rom */
                    158: #define        scsi_cmd_pausres_t      scsi_command_group_2
                    159: #      define SCSI_CMD_PAUSRES_RESUME          0x01
                    160: #      define scsi_cmd_pausres_res     scsi_cmd_xfer_len_2
                    161: 
                    162: #define SCSI_CMD_LOG_SELECT            0x4c    /* O2 all */
                    163: #define        scsi_cmd_logsel_t       scsi_command_group_2
                    164: #      define SCSI_CMD_LOG_SP                  0x01
                    165: #      define SCSI_CMD_LOG_PCR                 0x02
                    166: #      define scsi_cmd_log_page_control        scsi_cmd_lba1
                    167: 
                    168: #define SCSI_CMD_LOG_SENSE             0x4d    /* O2 all */
                    169: #define        scsi_cmd_logsense_t     scsi_command_group_2
                    170: #      define SCSI_CMD_LOG_PPC                 0x02
                    171: #      define scsi_cmd_log_page_code           scsi_cmd_lba1
                    172: #      define scsi_cmd_log_param_ptr1          scsi_cmd_lba4
                    173: #      define scsi_cmd_log_param_ptr2          scsi_cmd_xxx
                    174: 
                    175: 
                    176:                                        /* 0x4e..0x54 reserved */
                    177: 
                    178: #define SCSI_CMD_MODE_SELECT_2         0x55    /* Z2 */
                    179: #define        scsi_cmd_mode_select_long_t     scsi_command_group_2
                    180: #      define SCSI_CMD_MSL2_PF         0x10
                    181: #      define SCSI_CMD_MSL2_SP         0x01
                    182: 
                    183:                                        /* 0x56..0x59 reserved */
                    184: 
                    185: #define SCSI_CMD_MODE_SENSE_2          0x5a    /* Z2 */
                    186: #define        scsi_cmd_mode_sense_long_t      scsi_command_group_2
                    187: #      define SCSI_CMD_MSS2_DBD        0x08
                    188: 
                    189:                                        /* 0x5b..0x5f reserved */
                    190: 
                    191:                                /* GROUP 5 */
                    192: 
                    193: #define SCSI_CMD_PLAY_AUDIO_LONG       0xa5    /* O2 rom */
                    194: #define        scsi_cmd_play_audio_l_t         scsi_command_group_5
                    195: 
                    196: #define SCSI_CMD_PLAY_AUDIO_TR_LONG    0xa9    /* O2 rom */
                    197: #define        scsi_cmd_play_audio_tr_l_t      scsi_command_group_5
                    198: #      define scsi_cmd_patrl_startT    scsi_cmd_xxx1
                    199: 
                    200: 
                    201: /*
                    202:  * Command specific defines
                    203:  */
                    204: typedef struct {
                    205:        BITFIELD_2(unsigned char,
                    206:                        periph_type : 5,
                    207:                        periph_qual : 3);
                    208: #define        SCSI_SCANNER            0x06    /* periph_type values */
                    209: #define        SCSI_MEMORY             0x07
                    210: #define        SCSI_J_BOX              0x08
                    211: #define        SCSI_COMM               0x09
                    212: #define        SCSI_PREPRESS1          0x0a
                    213: #define        SCSI_PREPRESS2          0x0b
                    214: 
                    215: #define        SCSI_PERIPH_CONNECTED   0x00    /* periph_qual values */
                    216: #define        SCSI_PERIPH_DISCONN     0x20
                    217: #define        SCSI_PERIPH_NOTHERE     0x30
                    218: 
                    219:        BITFIELD_2(unsigned char,
                    220:                        device_type : 7,
                    221:                        rmb : 1);
                    222: 
                    223:        BITFIELD_3( unsigned char,
                    224:                        ansi : 3,
                    225:                        ecma : 3,
                    226:                        iso : 2);
                    227: 
                    228:        BITFIELD_4( unsigned char,
                    229:                        response_fmt : 4,
                    230:                        res1 : 2,
                    231:                        trmIOP : 1,
                    232:                        aenc : 1);
                    233:        unsigned char   length;
                    234:        unsigned char   res2;
                    235:        unsigned char   res3;
                    236: 
                    237:        BITFIELD_8(unsigned char,
                    238:                        SftRe : 1,
                    239:                        CmdQue : 1,
                    240:                        res4 : 1,
                    241:                        Linked : 1,
                    242:                        Sync : 1,
                    243:                        Wbus16 : 1,
                    244:                        Wbus32 : 1,
                    245:                        RelAdr : 1);
                    246: 
                    247:        unsigned char   vendor_id[8];
                    248:        unsigned char   product_id[16];
                    249:        unsigned char   product_rev[4];
                    250:        unsigned char   vendor_uqe[20];
                    251:        unsigned char   reserved[40];
                    252:        unsigned char   vendor_uqe1[1]; /* varsize */
                    253: } scsi2_inquiry_data_t;
                    254: #define        SCSI_INQ_SUPP_PAGES     0x00
                    255: #define        SCSI_INQ_A_INFO         0x01    /* 0x01..0x1f, really */
                    256: #define        SCSI_INQ_SERIALNO       0x80
                    257: #define        SCSI_INQ_IMPL_OPDEF     0x81
                    258: #define        SCSI_INQ_A_IMPL_OPDEF   0x82
                    259: 
                    260: /* mode_select */
                    261: typedef struct {
                    262:        unsigned char   data_len;
                    263:        unsigned char   medium_type;
                    264:        unsigned char   device_specific;
                    265:        unsigned char   desc_len;
                    266:        /* block descriptors are optional, same struct as scsi1 */
                    267:        /* page info then follows, see individual pages */
                    268: } scsi2_mode_param_t;
                    269: 
                    270: /*
                    271:  * CDROM thingies
                    272:  */
                    273: typedef union {
                    274:        struct {
                    275:                unsigned char   xxx;
                    276:                unsigned char   minute;
                    277:                unsigned char   second;
                    278:                unsigned char   frame;
                    279:        } msf;
                    280:        struct {
                    281:                unsigned char   lba1;
                    282:                unsigned char   lba2;
                    283:                unsigned char   lba3;
                    284:                unsigned char   lba4;
                    285:        } lba;
                    286: } cdrom_addr_t;
                    287: 
                    288: typedef struct {
                    289:        unsigned char   len1;           /* MSB */
                    290:        unsigned char   len2;           /* LSB */
                    291:        unsigned char   first_track;
                    292:        unsigned char   last_track;
                    293:        struct cdrom_toc_desc {
                    294: 
                    295:                unsigned char   xxx;
                    296: 
                    297:                BITFIELD_2(unsigned char,
                    298:                        control : 4,
                    299:                        adr : 4);
                    300: 
                    301:                unsigned char   trackno;
                    302:                unsigned char   xxx1;
                    303:                cdrom_addr_t    absolute_address;
                    304:        } descs[1];                     /* varsize */
                    305: } cdrom_toc_t;
                    306: 
                    307: typedef struct {
                    308:        unsigned char   xxx;
                    309: 
                    310:        unsigned char   audio_status;
                    311: #define SCSI_CDST_INVALID      0x00
                    312: #define SCSI_CDST_PLAYING      0x11
                    313: #define SCSI_CDST_PAUSED       0x12
                    314: #define SCSI_CDST_COMPLETED    0x13
                    315: #define SCSI_CDST_ERROR                0x14
                    316: #define SCSI_CDST_NO_STATUS    0x15
                    317: 
                    318:        unsigned char   len1;
                    319:        unsigned char   len2;
                    320:        struct cdrom_chanQ {
                    321:                unsigned char   format;
                    322:                BITFIELD_2(unsigned char,
                    323:                        control : 4,
                    324:                        adr : 4);
                    325:                unsigned char   trackno;
                    326:                unsigned char   indexno;
                    327:                cdrom_addr_t    absolute_address;
                    328:                cdrom_addr_t    relative_address;
                    329:                BITFIELD_2(unsigned char,
                    330:                        xxx : 7,
                    331:                        mcv : 1);
                    332:                unsigned char   catalog[15];
                    333:                BITFIELD_2(unsigned char,
                    334:                        xxx1 : 7,
                    335:                        tcv  : 1);
                    336:                unsigned char   isrc[15];
                    337:        } subQ;
                    338: } cdrom_chan_data_t;
                    339: 
                    340: /* subsets */
                    341: typedef struct {
                    342:        unsigned char   xxx;
                    343:        unsigned char   audio_status;
                    344:        unsigned char   len1;
                    345:        unsigned char   len2;
                    346:        struct {
                    347:                unsigned char   format;
                    348:                BITFIELD_2(unsigned char,
                    349:                        control : 4,
                    350:                        adr : 4);
                    351:                unsigned char   trackno;
                    352:                unsigned char   indexno;
                    353:                cdrom_addr_t    absolute_address;
                    354:                cdrom_addr_t    relative_address;
                    355:        } subQ;
                    356: } cdrom_chan_curpos_t;
                    357: 
                    358: typedef struct {
                    359:        unsigned char   xxx;
                    360:        unsigned char   audio_status;
                    361:        unsigned char   len1;
                    362:        unsigned char   len2;
                    363:        struct {
                    364:                unsigned char   format;
                    365:                unsigned char   xxx1[3];
                    366:                BITFIELD_2(unsigned char,
                    367:                        xxx : 7,
                    368:                        mcv : 1);
                    369:                unsigned char   catalog[15];
                    370:        } subQ;
                    371: } cdrom_chan_catalog_t;
                    372: 
                    373: typedef struct {
                    374:        unsigned char   xxx;
                    375:        unsigned char   audio_status;
                    376:        unsigned char   len1;
                    377:        unsigned char   len2;
                    378:        struct {
                    379:                unsigned char   format;
                    380:                BITFIELD_2(unsigned char,
                    381:                        control : 4,
                    382:                        adr : 4);
                    383:                unsigned char   trackno;
                    384:                unsigned char   xxx0;
                    385:                BITFIELD_2(unsigned char,
                    386:                        xxx1 : 7,
                    387:                        tcv  : 1);
                    388:                unsigned char   isrc[15];
                    389:        } subQ;
                    390: } cdrom_chan_isrc_t;
                    391: 
                    392: /* Audio page */
                    393: typedef struct {
                    394:        scsi_mode_sense_data_t  h;      /* includes bdescs */
                    395:        unsigned char   page_code;
                    396: #define        SCSI_CD_AUDIO_PAGE      0x0e
                    397:        unsigned char   page_len;
                    398:        BITFIELD_4(unsigned char,
                    399:                xxx1 : 1,
                    400:                sotc : 1,
                    401:                imm  : 1,
                    402:                xxx2 : 5);
                    403:        unsigned char   xxx3[2];
                    404:        BITFIELD_3(unsigned char,
                    405:                fmt : 4,
                    406:                xxx4 : 3,
                    407:                aprv : 1);
                    408:        unsigned char   bps1;
                    409:        unsigned char   bps2;
                    410:        BITFIELD_2(unsigned char,
                    411:                sel0 : 4,
                    412:                xxx5 : 4);
                    413:        unsigned char   vol0;
                    414:        BITFIELD_2(unsigned char,
                    415:                sel1 : 4,
                    416:                xxx6 : 4);
                    417:        unsigned char   vol1;
                    418:        BITFIELD_2(unsigned char,
                    419:                sel2 : 4,
                    420:                xxx7 : 4);
                    421:        unsigned char   vol2;
                    422:        BITFIELD_2(unsigned char,
                    423:                sel3 : 4,
                    424:                xxx8 : 4);
                    425:        unsigned char   vol3;
                    426: } cdrom_audio_page_t;
                    427: 
                    428: /*
                    429:  * Status byte (a-la scsi2)
                    430:  */
                    431: 
                    432: typedef union {
                    433:     struct {
                    434:        BITFIELD_3( unsigned char,
                    435:                        scsi_status_reserved1:1,
                    436:                        scsi_status_code:5,
                    437:                        scsi_status_reserved2:2);
                    438:                                                        /* more scsi_status_code values */
                    439:                                        /* 00..0c as in SCSI-I */
                    440: #      define SCSI_ST2_CMD_TERMINATED  0x11    /* 2 */
                    441: #      define SCSI_ST2_QUEUE_FULL      0x14    /* 2 */
                    442:                                        /* anything else is reserved */
                    443:     } st;
                    444:     unsigned char bits;
                    445: } scsi2_status_byte_t;
                    446: 
                    447: #endif _SCSI_SCSI2_H_

unix.superglobalmegacorp.com

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