summaryrefslogtreecommitdiff
path: root/scsi/scsi2.h
diff options
context:
space:
mode:
authorThomas Bushnell <thomas@gnu.org>1997-02-25 21:28:37 +0000
committerThomas Bushnell <thomas@gnu.org>1997-02-25 21:28:37 +0000
commitf07a4c844da9f0ecae5bbee1ab94be56505f26f7 (patch)
tree12b07c7e578fc1a5f53dbfde2632408491ff2a70 /scsi/scsi2.h
Initial source
Diffstat (limited to 'scsi/scsi2.h')
-rw-r--r--scsi/scsi2.h447
1 files changed, 447 insertions, 0 deletions
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 <scsi/scsi_endian.h>
+
+/*
+ * 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_