Annotation of Gnu-Mach/scsi/scsi2.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: 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.