📄 scsireg.h
字号:
/* @(#)scsireg.h 1.24 00/11/07 Copyright 1987 J. Schilling */
/*
* usefull definitions for dealing with CCS SCSI - devices
*
* Copyright (c) 1987 J. Schilling
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _SCG_SCSIREG_H
#define _SCG_SCSIREG_H
#include "types.h"
#include "ecma_167.h"
#ifdef __cplusplus
extern "C" {
#endif
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
typedef struct {
Ucbit type : 5; /* 0 */
Ucbit qualifier : 3; /* 0 */
Ucbit type_modifier : 7; /* 1 */
Ucbit removable : 1; /* 1 */
Ucbit ansi_version : 3; /* 2 */
Ucbit ecma_version : 3; /* 2 */
Ucbit iso_version : 2; /* 2 */
Ucbit data_format : 4; /* 3 */
Ucbit res3_54 : 2; /* 3 */
Ucbit termiop : 1; /* 3 */
Ucbit aenc : 1; /* 3 */
Ucbit add_len : 8; /* 4 */
Ucbit sense_len : 8; /* 5 */ /* only Emulex ??? */
Ucbit res2 : 8; /* 6 */
Ucbit softreset : 1; /* 7 */
Ucbit cmdque : 1;
Ucbit res7_2 : 1;
Ucbit linked : 1;
Ucbit sync : 1;
Ucbit wbus16 : 1;
Ucbit wbus32 : 1;
Ucbit reladr : 1; /* 7 */
char vendor_info[8]; /* 8 */
char prod_ident[16]; /* 16 */
char prod_revision[4]; /* 32 */
#ifdef comment
char vendor_uniq[20]; /* 36 */
char reserved[40]; /* 56 */
#endif
}scsi_inquiry; /* 96 */
#else /* Motorola byteorder */
typedef struct {
Ucbit qualifier : 3; /* 0 */
Ucbit type : 5; /* 0 */
Ucbit removable : 1; /* 1 */
Ucbit type_modifier : 7; /* 1 */
Ucbit iso_version : 2; /* 2 */
Ucbit ecma_version : 3;
Ucbit ansi_version : 3; /* 2 */
Ucbit aenc : 1; /* 3 */
Ucbit termiop : 1;
Ucbit res3_54 : 2;
Ucbit data_format : 4; /* 3 */
Ucbit add_len : 8; /* 4 */
Ucbit sense_len : 8; /* 5 */ /* only Emulex ??? */
Ucbit res2 : 8; /* 6 */
Ucbit reladr : 1; /* 7 */
Ucbit wbus32 : 1;
Ucbit wbus16 : 1;
Ucbit sync : 1;
Ucbit linked : 1;
Ucbit res7_2 : 1;
Ucbit cmdque : 1;
Ucbit softreset : 1;
char vendor_info[8]; /* 8 */
char prod_ident[16]; /* 16 */
char prod_revision[4]; /* 32 */
#ifdef comment
char vendor_uniq[20]; /* 36 */
char reserved[40]; /* 56 */
#endif
}scsi_inquiry; /* 96 */
#endif
/* Peripheral Device Qualifier */
#define INQ_DEV_PRESENT 0x00 /* Physical device present */
#define INQ_DEV_NOTPR 0x01 /* Physical device not present */
#define INQ_DEV_RES 0x02 /* Reserved */
#define INQ_DEV_NOTSUP 0x03 /* Logical unit not supported */
/* Peripheral Device Type */
#define INQ_DASD 0x00 /* Direct-access device (disk) */
#define INQ_SEQD 0x01 /* Sequential-access device (tape) */
#define INQ_PRTD 0x02 /* Printer device */
#define INQ_PROCD 0x03 /* Processor device */
#define INQ_OPTD 0x04 /* Write once device (optical disk) */
#define INQ_WORM 0x04 /* Write once device (optical disk) */
#define INQ_ROMD 0x05 /* CD-ROM device */
#define INQ_SCAN 0x06 /* Scanner device */
#define INQ_OMEM 0x07 /* Optical Memory device */
#define INQ_JUKE 0x08 /* Medium Changer device (jukebox) */
#define INQ_COMM 0x09 /* Communications device */
#define INQ_IT8_1 0x0A /* IT8 */
#define INQ_IT8_2 0x0B /* IT8 */
#define INQ_STARR 0x0C /* Storage array device */
#define INQ_ENCL 0x0D /* Enclosure services device */
#define INQ_NODEV 0x1F /* Unknown or no device */
#define INQ_NOTPR 0x1F /* Logical unit not present (SCSI-1) */
typedef struct {
Uchar dataLen[2];
Uchar res1;
Uchar res2;
}cd_atip_header;
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
typedef struct {
Ucbit ref_speed : 3; /* Reference speed */
Ucbit res4_3 : 1; /* Reserved */
Ucbit ind_wr_power: 3; /* Indicative tgt writing power */
Ucbit res4_7 : 1; /* Reserved (must be "1") */
Ucbit res5_05 : 6; /* Reserved */
Ucbit uru : 1; /* Disk is for unrestricted use */
Ucbit res5_7 : 1; /* Reserved (must be "0") */
Ucbit a3_v : 1; /* A 3 Values valid */
Ucbit a2_v : 1; /* A 2 Values valid */
Ucbit a1_v : 1; /* A 1 Values valid */
Ucbit sub_type : 3; /* Disc sub type */
Ucbit erasable : 1; /* Disk is erasable */
Ucbit res6_7 : 1; /* Reserved (must be "1") */
Ucbit res3 : 8;
Uchar lead_in[4]; /* Lead in time */
Uchar lead_out[4]; /* Lead out time */
Uchar res15; /* Reserved */
Ucbit clv_high : 4; /* Highes usable CLV recording speed */
Ucbit clv_low : 3; /* Lowest usable CLV recording speed */
Ucbit res16_7 : 1; /* Reserved (must be "0") */
Ucbit res17_0 : 1; /* Reserved */
Ucbit tgt_y_pow : 3; /* Tgt y val of the power mod fun */
Ucbit power_mult : 3; /* Power multiplication factor */
Ucbit res17_7 : 1; /* Reserved (must be "0") */
Ucbit res_18_30 : 4; /* Reserved */
Ucbit rerase_pwr_ratio: 3; /* Recommended erase/write power*/
Ucbit res18_7 : 1; /* Reserved (must be "1") */
Uchar res19; /* Reserved */
Uchar a2[3]; /* A 2 Values */
Uchar res23; /* Reserved */
Uchar a3[3]; /* A 3 Vaules */
Uchar res27; /* Reserved */
}cd_atip_desc;
#else /* Motorola bitorder */
typedef struct {
Ucbit res4_7 : 1; /* Reserved (must be "1") */
Ucbit ind_wr_power : 3; /* Indicative tgt writing power */
Ucbit res4_3 : 1; /* Reserved */
Ucbit ref_speed : 3; /* Reference speed */
Ucbit res5_7 : 1; /* Reserved (must be "0") */
Ucbit uru : 1; /* Disk is for unrestricted use */
Ucbit res5_05 : 6; /* Reserved */
Ucbit res6_7 : 1; /* Reserved (must be "1") */
Ucbit erasable : 1; /* Disk is erasable */
Ucbit sub_type : 3; /* Disc sub type */
Ucbit a1_v : 1; /* A 1 Values valid */
Ucbit a2_v : 1; /* A 2 Values valid */
Ucbit a3_v : 1; /* A 3 Values valid */
Ucbit : 8;
Uchar lead_in[4]; /* Lead in time */
Uchar lead_out[4]; /* Lead out time */
Uchar res15; /* Reserved */
Ucbit res16_7 : 1; /* Reserved (must be "0") */
Ucbit clv_low : 3; /* Lowest usable CLV recording speed */
Ucbit clv_high : 4; /* Highes usable CLV recording speed */
Ucbit res17_7 : 1; /* Reserved (must be "0") */
Ucbit power_mult : 3; /* Power multiplication factor */
Ucbit tgt_y_pow : 3; /* Tgt y val of the power mod fun */
Ucbit res17_0 : 1; /* Reserved */
Ucbit res18_7 : 1; /* Reserved (must be "1") */
Ucbit rerase_pwr_ratio: 3; /* Recommended erase/write power*/
Ucbit res_18_30 : 4; /* Reserved */
Uchar res19; /* Reserved */
Uchar a2[3]; /* A 2 Values */
Uchar res23; /* Reserved */
Uchar a3[3]; /* A 3 Vaules */
Uchar res27; /* Reserved */
}cd_atip_desc;
#endif
typedef struct {
cd_atip_header header;
cd_atip_desc desc;
}cd_atip;
typedef struct {
Uchar dataLen[2];
Uchar firstSession;
Uchar lastSession;
}cd_toc_header;
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
typedef struct {
Uchar res1;
Ucbit ctrl : 4;
Ucbit adr : 4;
Uchar firstTrack;
Uchar res2;
Uchar lba[4];
}cd_toc_00;
#else /* Motorola byteorder */
typedef struct {
Uchar res1;
Ucbit adr : 4;
Ucbit ctrl : 4;
Uchar firstTrack;
Uchar res2;
int lba;
}cd_toc_00;
#endif
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
typedef struct {
Uchar res0;
Ucbit ctrl : 4;
Ucbit adr : 4;
Uchar TNO;
Uchar point;
Uchar min;
Uchar sec;
Uchar frame;
Uchar zero;
Uchar pmin;
Uchar psec;
Uchar pframe;
}cd_PMA_desc;
#else /* Motorola byteorder */
typedef struct cd_PMA_desc {
Uchar res0;
Ucbit adr : 4;
Ucbit ctrl : 4;
Uchar TNO;
Uchar point;
Uchar min;
Uchar sec;
Uchar frame;
Uchar zero;
Uchar pmin;
Uchar psec;
Uchar pframe;
}cd_PMA_desc;
#endif
typedef struct {
cd_atip_header header;
cd_PMA_desc desc;
}cd_pma;
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
typedef struct {
Ucbit sense_data_len : 8;
Uchar medium_type;
Ucbit res2 : 4;
Ucbit cache : 1;
Ucbit res : 2;
Ucbit write_prot : 1;
Uchar blockdesc_len;
}scsi_mode_header;
#else /* Motorola byteorder */
typedef struct{
Ucbit sense_data_len : 8;
Uchar medium_type;
Ucbit write_prot : 1;
Ucbit res : 2;
Ucbit cache : 1;
Ucbit res2 : 4;
Uchar blockdesc_len;
}scsi_mode_header;
#endif
typedef struct {
Ucbit sense_data_len : 8;
Uchar medium_type;
Ucbit res2 : 8;
Uchar blockdesc_len;
}scsi_modesel_header;
typedef struct {
Uchar density;
Uchar nlblock[3];
Ucbit res : 8;
Uchar lblen[3];
}scsi_mode_blockdesc;
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
typedef struct {
Uchar listformat;
Uchar ncyl[2];
Uchar nhead;
Uchar start_red_wcurrent[2];
Uchar start_precomp[2];
Uchar landing_zone;
Uchar step_rate;
Ucbit : 2;
Ucbit hard_sec : 1;
Ucbit fixed_media : 1;
Ucbit : 4;
Uchar sect_per_trk;
}acb_mode_data;
#else /* Motorola byteorder */
typedef struct {
Uchar listformat;
Uchar ncyl[2];
Uchar nhead;
Uchar start_red_wcurrent[2];
Uchar start_precomp[2];
Uchar landing_zone;
Uchar step_rate;
Ucbit : 4;
Ucbit fixed_media : 1;
Ucbit hard_sec : 1;
Ucbit : 2;
Uchar sect_per_trk;
}acb_mode_data;
#endif
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
typedef struct {
Ucbit p_code : 6;
Ucbit res : 1;
Ucbit parsave : 1;
Uchar p_len;
}scsi_mode_page_header;
/*
* This is a hack that allows mode pages without
* any further bitfileds to be defined bitorder independent.
*/
#define MP_P_CODE \
Ucbit p_code : 6; \
Ucbit p_res : 1; \
Ucbit parsave : 1
#else /* Motorola byteorder */
typedef struct{
Ucbit parsave : 1;
Ucbit res : 1;
Ucbit p_code : 6;
Uchar p_len;
} scsi_mode_page_header ;
/*
* This is a hack that allows mode pages without
* any further bitfileds to be defined bitorder independent.
*/
#define MP_P_CODE \
Ucbit parsave : 1; \
Ucbit p_res : 1; \
Ucbit p_code : 6
#endif
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
typedef struct { /* Error recovery Parameters */
MP_P_CODE; /* parsave & pagecode */
Uchar p_len; /* 0x0A = 12 Bytes */
Ucbit disa_correction : 1; /* Byte 2 */
Ucbit term_on_rec_err : 1;
Ucbit report_rec_err : 1;
Ucbit en_early_corr : 1;
Ucbit read_continuous : 1;
Ucbit tranfer_block : 1;
Ucbit en_auto_reall_r : 1;
Ucbit en_auto_reall_w : 1; /* Byte 2 */
Uchar rd_retry_count; /* Byte 3 */
Uchar correction_span;
char head_offset_count;
char data_strobe_offset;
Uchar res;
Uchar wr_retry_count;
Uchar res_tape[2];
Uchar recov_timelim[2];
}scsi_mode_page_01;
#else /* Motorola byteorder */
typedef struct { /* Error recovery Parameters */
MP_P_CODE; /* parsave & pagecode */
Uchar p_len; /* 0x0A = 12 Bytes */
Ucbit en_auto_reall_w : 1; /* Byte 2 */
Ucbit en_auto_reall_r : 1;
Ucbit tranfer_block : 1;
Ucbit read_continuous : 1;
Ucbit en_early_corr : 1;
Ucbit report_rec_err : 1;
Ucbit term_on_rec_err : 1;
Ucbit disa_correction : 1; /* Byte 2 */
Uchar rd_retry_count; /* Byte 3 */
Uchar correction_span;
char head_offset_count;
char data_strobe_offset;
Uchar res;
Uchar wr_retry_count;
Uchar res_tape[2];
Uchar recov_timelim[2];
}scsi_mode_page_01;
#endif
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
typedef struct { /* Device dis/re connect Parameters */
MP_P_CODE; /* parsave & pagecode */
Uchar p_len; /* 0x0E = 16 Bytes */
Uchar buf_full_ratio;
Uchar buf_empt_ratio;
Uchar bus_inact_limit[2];
Uchar disc_time_limit[2];
Uchar conn_time_limit[2];
Uchar max_burst_size[2]; /* Start SCSI-2 */
Ucbit data_tr_dis_ctl : 2;
Ucbit : 6;
Uchar res[3];
}scsi_mode_page_02;
#else /* Motorola byteorder */
typedef struct { /* Device dis/re connect Parameters */
MP_P_CODE; /* parsave & pagecode */
Uchar p_len; /* 0x0E = 16 Bytes */
Uchar buf_full_ratio;
Uchar buf_empt_ratio;
Uchar bus_inact_limit[2];
Uchar disc_time_limit[2];
Uchar conn_time_limit[2];
Uchar max_burst_size[2]; /* Start SCSI-2 */
Ucbit : 6;
Ucbit data_tr_dis_ctl : 2;
Uchar res[3];
}scsi_mode_page_02;
#endif
#define DTDC_DATADONE 0x01 /*
* Target may not disconnect once
* data transfer is started until
* all data successfully transferred.
*/
#define DTDC_CMDDONE 0x03 /*
* Target may not disconnect once
* data transfer is started until
* command completed.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -