From f07a4c844da9f0ecae5bbee1ab94be56505f26f7 Mon Sep 17 00:00:00 2001 From: Thomas Bushnell Date: Tue, 25 Feb 1997 21:28:37 +0000 Subject: Initial source --- scsi/scsi2.h | 447 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 447 insertions(+) create mode 100644 scsi/scsi2.h (limited to 'scsi/scsi2.h') diff --git a/scsi/scsi2.h b/scsi/scsi2.h new file mode 100644 index 0000000..93a5a76 --- /dev/null +++ b/scsi/scsi2.h @@ -0,0 +1,447 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * File: scsi2.h + * Author: Alessandro Forin, Carnegie Mellon University + * Date: 9/90 + * + * Additions and changes of the SCSI-II standard viz SCSI-I + */ + +#ifndef _SCSI_SCSI2_H_ +#define _SCSI_SCSI2_H_ + +#include + +/* + * Single byte messages + * + * originator: I-nitiator T-arget + * T-support: M-andatory O-ptional + */ + +#define SCSI_ABORT_TAG 0x0d /* O I 2 */ +#define SCSI_CLEAR_QUEUE 0x0e /* O I 2 */ +#define SCSI_INITIATE_RECOVERY 0x0f /* O IT2 */ +#define SCSI_RELEASE_RECOVERY 0x10 /* O I 2 */ +#define SCSI_TERMINATE_IO_PROCESS 0x11 /* O I 2 */ + +/* + * Two byte messages + */ +#define SCSI_SIMPLE_QUEUE_TAG 0x20 /* O IT2 */ +#define SCSI_HEADOF_QUEUE_TAG 0x21 /* O I 2 */ +#define SCSI_ORDERED_QUEUE_TAG 0x22 /* O I 2 */ +#define SCSI_IGNORE_WIDE_RESIDUE 0x23 /* O T2 */ + /* 0x24..0x2f reserved */ + +/* + * Extended messages, codes and formats + */ + +#define SCSI_WIDE_XFER_REQUEST 0x03 /* IT 2 */ +typedef struct { + unsigned char xtn_msg_tag; /* const 0x01 */ + unsigned char xtn_msg_len; /* const 0x02 */ + unsigned char xtn_msg_code; /* const 0x03 */ + unsigned char xtn_msg_xfer_width; +} scsi_wide_xfer_t; + +/* + * NOTE: some command-specific mods and extensions + * are actually defined in the scsi.h file for + * readability reasons + */ + + /* GROUP 1 */ + +#define SCSI_CMD_READ_DEFECT_DATA 0x37 /* O2 disk opti */ +typedef scsi_command_group_1 scsi_cmd_read_defect_t; +# define SCSI_CMD_RDD_LIST_TYPE 0x07 +# define SCSI_CMD_RDD_GLIST 0x08 +# define SCSI_CMD_RDD_PLIST 0x10 + +#define SCSI_CMD_WRITE_BUFFER 0x3b /* O2 all */ +typedef scsi_command_group_1 scsi_cmd_write_buffer_t; +# define SCSI_CMD_BUF_MODE 0x07 +# define scsi_cmd_buf_id scs_cmd_lba1 +# define scsi_cmd_buf_offset1 scs_cmd_lba2 +# define scsi_cmd_buf_offset2 scs_cmd_lba3 +# define scsi_cmd_buf_offset3 scs_cmd_lba4 +# define scsi_cmd_buf_alloc1 scs_cmd_xxx +# define scsi_cmd_buf_alloc2 scs_cmd_xfer_len_1 +# define scsi_cmd_buf_alloc3 scs_cmd_xfer_len_2 + +#define SCSI_CMD_READ_BUFFER 0x3c /* O2 all */ +#define scsi_cmd_read_buffer_t scsi_command_group_1 + + /* GROUP 2 */ + +#define SCSI_CMD_CHANGE_DEFINITION 0x40 /* O2 all */ +#define scsi_cmd_change_def_t scsi_command_group_2 +# define scsi_cmd_chg_save scsi_cmd_lba1 +# define scsi_cmd_chg_definition scsi_cmd_lba2 +# define SCSI_CMD_CHG_CURRENT 0x00 +# define SCSI_CMD_CHG_SCSI_1 0x01 +# define SCSI_CMD_CHG_CCS 0x02 +# define SCSI_CMD_CHG_SCSI_2 0x03 + + /* 0x41 reserved */ + +#define SCSI_CMD_READ_SUBCH 0x42 /* O2 rom */ +#define scsi_cmd_read_subch_t scsi_command_group_2 +# define SCSI_CMD_CD_MSF 0x02 +# define SCSI_CMD_RS_SUBQ 0x40 +# define scsi_cmd_rs_format scsi_cmd_lba2 +# define SCSI_CMD_RS_FMT_SUBQ 0x00 +# define SCSI_CMD_RS_FMT_CURPOS 0x01 +# define SCSI_CMD_RS_FMT_CATALOG 0x02 +# define SCSI_CMD_RS_FMT_ISRC 0x03 +# define scsi_cmd_rs_trackno scsi_cmd_xxx + + +#define SCSI_CMD_READ_TOC 0x43 /* O2 rom */ +#define scsi_cmd_read_toc_t scsi_command_group_2 +# define scsi_cmd_rtoc_startT scsi_cmd_xxx + +#define SCSI_CMD_READ_HEADER 0x44 /* O2 rom */ +#define scsi_cmd_read_header_t scsi_command_group_2 + +#define SCSI_CMD_PLAY_AUDIO 0x45 /* O2 rom */ +#define scsi_cmd_play_audio_t scsi_command_group_2 + +#define SCSI_CMD_PLAY_AUDIO_MSF 0x47 /* O2 rom */ +#define scsi_cmd_play_audio_msf_t scsi_command_group_2 +# define scsi_cmd_pamsf_startM scsi_cmd_lba2 +# define scsi_cmd_pamsf_startS scsi_cmd_lba3 +# define scsi_cmd_pamsf_startF scsi_cmd_lba4 +# define scsi_cmd_pamsf_endM scsi_cmd_xxx +# define scsi_cmd_pamsf_endS scsi_cmd_xfer_len_1 +# define scsi_cmd_pamsf_endF scsi_cmd_xfer_len_2 + +#define SCSI_CMD_PLAY_AUDIO_TI 0x48 /* O2 rom */ +#define scsi_cmd_play_audio_ti_t scsi_command_group_2 +# define scsi_cmd_pati_startT scsi_cmd_lba3 +# define scsi_cmd_pati_startI scsi_cmd_lba4 +# define scsi_cmd_pati_endT scsi_cmd_xfer_len_1 +# define scsi_cmd_pati_endI scsi_cmd_xfer_len_2 + +#define SCSI_CMD_PLAY_AUDIO_TR 0x49 /* O2 rom */ +#define scsi_cmd_play_audio_tr_t scsi_command_group_2 +# define scsi_cmd_patr_startT scsi_cmd_xxx + + +#define SCSI_CMD_PAUSE_RESUME 0x4b /* O2 rom */ +#define scsi_cmd_pausres_t scsi_command_group_2 +# define SCSI_CMD_PAUSRES_RESUME 0x01 +# define scsi_cmd_pausres_res scsi_cmd_xfer_len_2 + +#define SCSI_CMD_LOG_SELECT 0x4c /* O2 all */ +#define scsi_cmd_logsel_t scsi_command_group_2 +# define SCSI_CMD_LOG_SP 0x01 +# define SCSI_CMD_LOG_PCR 0x02 +# define scsi_cmd_log_page_control scsi_cmd_lba1 + +#define SCSI_CMD_LOG_SENSE 0x4d /* O2 all */ +#define scsi_cmd_logsense_t scsi_command_group_2 +# define SCSI_CMD_LOG_PPC 0x02 +# define scsi_cmd_log_page_code scsi_cmd_lba1 +# define scsi_cmd_log_param_ptr1 scsi_cmd_lba4 +# define scsi_cmd_log_param_ptr2 scsi_cmd_xxx + + + /* 0x4e..0x54 reserved */ + +#define SCSI_CMD_MODE_SELECT_2 0x55 /* Z2 */ +#define scsi_cmd_mode_select_long_t scsi_command_group_2 +# define SCSI_CMD_MSL2_PF 0x10 +# define SCSI_CMD_MSL2_SP 0x01 + + /* 0x56..0x59 reserved */ + +#define SCSI_CMD_MODE_SENSE_2 0x5a /* Z2 */ +#define scsi_cmd_mode_sense_long_t scsi_command_group_2 +# define SCSI_CMD_MSS2_DBD 0x08 + + /* 0x5b..0x5f reserved */ + + /* GROUP 5 */ + +#define SCSI_CMD_PLAY_AUDIO_LONG 0xa5 /* O2 rom */ +#define scsi_cmd_play_audio_l_t scsi_command_group_5 + +#define SCSI_CMD_PLAY_AUDIO_TR_LONG 0xa9 /* O2 rom */ +#define scsi_cmd_play_audio_tr_l_t scsi_command_group_5 +# define scsi_cmd_patrl_startT scsi_cmd_xxx1 + + +/* + * Command specific defines + */ +typedef struct { + BITFIELD_2(unsigned char, + periph_type : 5, + periph_qual : 3); +#define SCSI_SCANNER 0x06 /* periph_type values */ +#define SCSI_MEMORY 0x07 +#define SCSI_J_BOX 0x08 +#define SCSI_COMM 0x09 +#define SCSI_PREPRESS1 0x0a +#define SCSI_PREPRESS2 0x0b + +#define SCSI_PERIPH_CONNECTED 0x00 /* periph_qual values */ +#define SCSI_PERIPH_DISCONN 0x20 +#define SCSI_PERIPH_NOTHERE 0x30 + + BITFIELD_2(unsigned char, + device_type : 7, + rmb : 1); + + BITFIELD_3( unsigned char, + ansi : 3, + ecma : 3, + iso : 2); + + BITFIELD_4( unsigned char, + response_fmt : 4, + res1 : 2, + trmIOP : 1, + aenc : 1); + unsigned char length; + unsigned char res2; + unsigned char res3; + + BITFIELD_8(unsigned char, + SftRe : 1, + CmdQue : 1, + res4 : 1, + Linked : 1, + Sync : 1, + Wbus16 : 1, + Wbus32 : 1, + RelAdr : 1); + + unsigned char vendor_id[8]; + unsigned char product_id[16]; + unsigned char product_rev[4]; + unsigned char vendor_uqe[20]; + unsigned char reserved[40]; + unsigned char vendor_uqe1[1]; /* varsize */ +} scsi2_inquiry_data_t; +#define SCSI_INQ_SUPP_PAGES 0x00 +#define SCSI_INQ_A_INFO 0x01 /* 0x01..0x1f, really */ +#define SCSI_INQ_SERIALNO 0x80 +#define SCSI_INQ_IMPL_OPDEF 0x81 +#define SCSI_INQ_A_IMPL_OPDEF 0x82 + +/* mode_select */ +typedef struct { + unsigned char data_len; + unsigned char medium_type; + unsigned char device_specific; + unsigned char desc_len; + /* block descriptors are optional, same struct as scsi1 */ + /* page info then follows, see individual pages */ +} scsi2_mode_param_t; + +/* + * CDROM thingies + */ +typedef union { + struct { + unsigned char xxx; + unsigned char minute; + unsigned char second; + unsigned char frame; + } msf; + struct { + unsigned char lba1; + unsigned char lba2; + unsigned char lba3; + unsigned char lba4; + } lba; +} cdrom_addr_t; + +typedef struct { + unsigned char len1; /* MSB */ + unsigned char len2; /* LSB */ + unsigned char first_track; + unsigned char last_track; + struct cdrom_toc_desc { + + unsigned char xxx; + + BITFIELD_2(unsigned char, + control : 4, + adr : 4); + + unsigned char trackno; + unsigned char xxx1; + cdrom_addr_t absolute_address; + } descs[1]; /* varsize */ +} cdrom_toc_t; + +typedef struct { + unsigned char xxx; + + unsigned char audio_status; +#define SCSI_CDST_INVALID 0x00 +#define SCSI_CDST_PLAYING 0x11 +#define SCSI_CDST_PAUSED 0x12 +#define SCSI_CDST_COMPLETED 0x13 +#define SCSI_CDST_ERROR 0x14 +#define SCSI_CDST_NO_STATUS 0x15 + + unsigned char len1; + unsigned char len2; + struct cdrom_chanQ { + unsigned char format; + BITFIELD_2(unsigned char, + control : 4, + adr : 4); + unsigned char trackno; + unsigned char indexno; + cdrom_addr_t absolute_address; + cdrom_addr_t relative_address; + BITFIELD_2(unsigned char, + xxx : 7, + mcv : 1); + unsigned char catalog[15]; + BITFIELD_2(unsigned char, + xxx1 : 7, + tcv : 1); + unsigned char isrc[15]; + } subQ; +} cdrom_chan_data_t; + +/* subsets */ +typedef struct { + unsigned char xxx; + unsigned char audio_status; + unsigned char len1; + unsigned char len2; + struct { + unsigned char format; + BITFIELD_2(unsigned char, + control : 4, + adr : 4); + unsigned char trackno; + unsigned char indexno; + cdrom_addr_t absolute_address; + cdrom_addr_t relative_address; + } subQ; +} cdrom_chan_curpos_t; + +typedef struct { + unsigned char xxx; + unsigned char audio_status; + unsigned char len1; + unsigned char len2; + struct { + unsigned char format; + unsigned char xxx1[3]; + BITFIELD_2(unsigned char, + xxx : 7, + mcv : 1); + unsigned char catalog[15]; + } subQ; +} cdrom_chan_catalog_t; + +typedef struct { + unsigned char xxx; + unsigned char audio_status; + unsigned char len1; + unsigned char len2; + struct { + unsigned char format; + BITFIELD_2(unsigned char, + control : 4, + adr : 4); + unsigned char trackno; + unsigned char xxx0; + BITFIELD_2(unsigned char, + xxx1 : 7, + tcv : 1); + unsigned char isrc[15]; + } subQ; +} cdrom_chan_isrc_t; + +/* Audio page */ +typedef struct { + scsi_mode_sense_data_t h; /* includes bdescs */ + unsigned char page_code; +#define SCSI_CD_AUDIO_PAGE 0x0e + unsigned char page_len; + BITFIELD_4(unsigned char, + xxx1 : 1, + sotc : 1, + imm : 1, + xxx2 : 5); + unsigned char xxx3[2]; + BITFIELD_3(unsigned char, + fmt : 4, + xxx4 : 3, + aprv : 1); + unsigned char bps1; + unsigned char bps2; + BITFIELD_2(unsigned char, + sel0 : 4, + xxx5 : 4); + unsigned char vol0; + BITFIELD_2(unsigned char, + sel1 : 4, + xxx6 : 4); + unsigned char vol1; + BITFIELD_2(unsigned char, + sel2 : 4, + xxx7 : 4); + unsigned char vol2; + BITFIELD_2(unsigned char, + sel3 : 4, + xxx8 : 4); + unsigned char vol3; +} cdrom_audio_page_t; + +/* + * Status byte (a-la scsi2) + */ + +typedef union { + struct { + BITFIELD_3( unsigned char, + scsi_status_reserved1:1, + scsi_status_code:5, + scsi_status_reserved2:2); + /* more scsi_status_code values */ + /* 00..0c as in SCSI-I */ +# define SCSI_ST2_CMD_TERMINATED 0x11 /* 2 */ +# define SCSI_ST2_QUEUE_FULL 0x14 /* 2 */ + /* anything else is reserved */ + } st; + unsigned char bits; +} scsi2_status_byte_t; + +#endif _SCSI_SCSI2_H_ -- cgit v1.2.3