⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scsi.h

📁 早期freebsd实现
💻 H
字号:
/* * Copyright (c) 1992, 1993 *	The Regents of the University of California.  All rights reserved. * * This software was developed by the Computer Systems Engineering group * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and * contributed to Berkeley. * * All advertising materials mentioning features or use of this software * must display the following acknowledgement: *	This product includes software developed by the University of *	California, Lawrence Berkeley Laboratories. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)scsi.h	8.1 (Berkeley) 6/10/93 * * from: $Header: scsi.h,v 1.5 93/02/01 19:19:15 torek Exp $ (LBL) *//* * Machine independent SCSI defintions. *//* * Mostly-generic command descriptor blocks (6 and 10 bytes). * Note that no SCSI command uses the 12 byte variety, hence it * is not defined here. */struct scsi_cdb6 {	u_char	cdb_cmd,	/* command code */		cdb_lun_lbah,	/* logical unit number, & lba (MSB) */		cdb_lbam,	/* logical block address */		cdb_lbal,	/* logical block address (LSB) */		cdb_len,	/* transfer length */		cdb_ctrl;	/* control byte */};struct scsi_cdb10 {	u_char	cdb_cmd,	/* command code */		cdb_lun_rel,	/* logical unit number, rsvd, & reladr flag */		cdb_lbah,	/* logical block address (MSB) */		cdb_lbahm,	/* logical block address (high middle byte) */		cdb_lbalm,	/* logical block address (low middle byte) */		cdb_lbal,	/* logical block address (LSB) */		cdb_xxx,	/* reserved */		cdb_lenh,	/* transfer length (MSB) */		cdb_lenl,	/* transfer length (LSB) */		cdb_ctrl;	/* control byte */};/* * SCSI `generic' cdb. * The length of the cdb is implicit in the first byte (see scsivar.h). * This is 16 bytes, rather than 10 or 12, just to help out alignment. */struct scsi_cdb {	u_char	cdb_bytes[16];	/* up to 16 bytes of command */};#define CDB6(cdb)	((struct scsi_cdb6 *)&(cdb)->cdb_bytes[0])#define CDB10(cdb)	((struct scsi_cdb10 *)&(cdb)->cdb_bytes[0])/* * SCSI command (cdb_cmd/cdb_bytes[0]) byte definitions.  Only those * that are common across all devices are actually defined here. * (The SCSI standard defines six groups of devices: direct access, * sequential access, printer, processor, WORM direct access, and * ROM direct access.  DADs and SADs are basically `disk' and `tape'; * printers and processors are obvious; and WORMs and ROMs are really * just disks that are missing one or two operations.  A few commands * are required of all devices; these are defined here, and the others * are defined in separate headers.) * * Letter flags in parentheses in the comment column indicate: *	M = mandatory (command is implemented on all SCSI devices) *	E = extended (command implemented if SCSI device does extended SCSI) *	O = optional *	R = reserved to future SCSI standard *	V = vendor unique *	* = depends on device type * * Note that SCSI commands are broken into 8 `groups' given by bits 7..5. * Group 0 is 6-byte commands, 1 is 10-byte commands, and 5 is 12-byte * commands (of which none exist); groups 6 and 7 are vendor unique. * Commands are normally just treated as a simple 8-bit number, * but the size of the associated cdb is implied by the group. */	/* group 0 */#define	CMD_TEST_UNIT_READY	0x00	/* (O) test unit ready *//*				0x01	   (*) *//*				0x02	   (V) */#define	CMD_REQUEST_SENSE	0x03	/* (M) request sense *//*				0x04..0x05 (*) *//*				0x06	   (V) *//*				0x07..0x08 (*) *//*				0x09	   (V) *//*				0x0a..0x0b (*) *//*				0x0c..0x0e (V) *//*				0x0f..0x11 (*) */#define	CMD_INQUIRY		0x12	/* (E) inquiry *//*				0x13..0x17 (*) */#define	CMD_COPY		0x18	/* (O) copy *//*				0x19..0x1b (*) */#define	CMD_RECEIVE_DIAG	0x1c	/* (O) receive diagnostic results */#define	CMD_SEND_DIAG		0x1d	/* (O) send diagnostic *//*				0x1e	   (*) *//*				0x1f	   (R) */	/* group 1 *//*				0x20..0x24 (V) *//*				0x25	   (*) *//*				0x26..0x27 (V) *//*				0x28	   (*) *//*				0x29	   (V) *//*				0x2a..0x2b (*) *//*				0x2c..0x2d (V) *//*				0x2e..0x33 (*) *//*				0x34..0x37 (R) */#define	CMD_COMPARE		0x38	/* (O) compare */#define	CMD_COMPARE_VERIFY	0x39	/* (O) compare and verify *//*				0x3a..0x3f (R) */	/* group 2 (40-5f) reserved */	/* group 3 (60-7f) reserved */	/* group 4 (80-9f) reserved */	/* group 5 (a0-bf) reserved */	/* group 6 (c0-df) vendor unique */	/* group 7 (e0-ff) vendor unique *//* * SCSI control byte. * Bits 7 and 6 are vendor unique; bits 5, 4, 3, and 2 are reserved. * Bit 1 may be 1 only if bit 0 is 1; if so, it tells the target to * send a LINKED COMMAND COMPLETE (WITH FLAG) message.  If not, but * bit 0 is set, this tells the target to send a LINKED COMMAND COMPLETE * message. */#define	CTRL_VU_MASK		0xc0	/* vendor unique */#define	CTRL_RSVD		0x3c	/* reserved, must be zero */#define	CTRL_LCCF		0x02	/* send LCCF if sending LCC */#define	CTRL_LINK		0x01	/* linked command *//* * Generic sense: regular and extended. * A sense operation returned an extended sense iff the error class * is 7.  The format is vendor unique unless the error code is 0. * The regular and extended formats are completely different; we * define macros to obtain values from them. */struct scsi_sense {	u_char	sn_vcc;		/* valid bit, error class, & error code */	u_char	sn_var[7];	/* bytes 1-3, or 1-7; variant formats */	u_char	sn_addl[32-8];	/* additional sense data, if extended */};#define	SENSE_ECLASS(sn)	(((sn)->sn_vcc >> 4) & 7)#define	SENSE_ECODE(sn)		((sn)->sn_vcc & 0xf)#define	SENSE_ISXSENSE(sn)	(SENSE_ECLASS(sn) == 7)/* for non-extended sense (`r'egular or `r'estricted sense) */#define	RSENSE_LVALID(sn)	((sn)->sn_vcc & 0x80)#define	RSENSE_VU(sn)		((sn)->sn_var[0] >> 5)#define	RSENSE_LBA(sn) \  ((((sn)->sn_var[0] & 0x1f) << 16) | ((sn)->sn_var[1] << 8) | (sn)->sn_var[2])/* for extended sense */#define	XSENSE_ISSTD(sn)	(SENSE_ECODE(sn) == 0)			/* if not standard, cannot interpret it at all */#define	XSENSE_IVALID(sn)	((sn)->sn_vcc & 0x80)#define	XSENSE_SEG(sn)		((sn)->sn_var[0])#define	XSENSE_FM(sn)		((sn)->sn_var[1] & 0x80) /* filemark */#define	XSENSE_EOM(sn)		((sn)->sn_var[1] & 0x40) /* end of media */#define	XSENSE_ILI(sn)		((sn)->sn_var[1] & 0x20) /* incor length ind */#define	XSENSE_KEY(sn)		((sn)->sn_var[1] & 0x0f) /* sense key */#define	XSENSE_INFO(sn) \	(((sn)->sn_var[2] << 24) | ((sn)->sn_var[3] << 16) | \	 ((sn)->sn_var[4] << 8) | (sn)->sn_var[5])#define	XSENSE_ADDL(sn)		((sn)->sn_var[6])	/* add'l sense len *//* * SCSI INQUIRY data: general, and ANSI versions 1 and 2 * (including common command set). */struct scsi_inquiry {	u_char	si_type;	/* peripheral device type (below) */	u_char	si_qual;	/* qualifier (see below) */	u_char	si_version;	/* version (see below) */	u_char	si_v2info;	/* scsi version 2 stuff (see below) */	u_char	si_len;		/* additional length */	u_char	si_more[252-5];	/* actually si_len bytes */};struct scsi_inq_ansi {	u_char	si_type;	/* peripheral qualifier and device type */	u_char	si_qual;	/* RMB and device type qualifier */	u_char	si_version;	/* ISO, ECMA and ANSI-approved versions */	u_char	si_v2info;	/* ? */	u_char	si_len;		/* addition length */	char	si_xxx1[2];	/* reserved */	char	si_flags;	/* (see below) */	char	si_vendor[8];	/* vendor (blank padded) */	char	si_product[16];	/* product (blank padded) */	char	si_rev[4];	/* revision (blank padded) */	/* scsi version 2 stuff follows */	char	si_vend1[20];	/* vendor specific */	char	si_xxx2[40];	/* reserved */	char	si_vend2[252-96]; /* vendor specific parameters */};/* peripheral device types */#define TYPE_QUAL_MASK		0xe0	/* peripheral qualifer mask */#define TYPE_TYPE_MASK		0x1f	/* peripheral device type mask */#define TYPE_QUAL_NORM		0x00	/* device is normal */#define TYPE_QUAL_NOTCONN	0x20	/* not connected */#define TYPE_QUAL_XXX		0x40	/* reserved */#define TYPE_QUAL_NOLUN		0x60	/* logical unit not supported */#define TYPE_QUAL_VT4		0x80	/* vendor specific type 4 */#define TYPE_QUAL_VT5		0xa0	/* vendor specific type 5 */#define TYPE_QUAL_VT6		0xc0	/* vendor specific type 6 */#define TYPE_QUAL_VT7		0xe0	/* vendor specific type 7 */#define	TYPE_DAD		0x00	/* direct access device (disk) */#define	TYPE_SAD		0x01	/* sequential access device (tape) */#define	TYPE_PRINTER		0x02	/* printer */#define	TYPE_PROCESSOR		0x03	/* processor */#define	TYPE_WORM		0x04	/* WORM disk */#define	TYPE_ROM		0x05	/* CD-ROM disk */#define	TYPE_SCANNER		0x06	/* scanner */#define	TYPE_MO			0x07	/* magneto-optical */#define	TYPE_JUKEBOX		0x08	/* medium changer */#define	TYPE_LAN		0x09	/* communications device */#define	TYPE_NP			0x1f	/* unknown or no device *//* qualifiers */#define	QUAL_RMB		0x80	/* removable medium bit */#define	QUAL_MASK		0x7f	/* mask for `user' bits *//* version (shifts and masks for subfields) */#define	VER_ISO_SHIFT		6	/* ISO version: top 2 bits */#define	VER_ISO_MASK		3#define	VER_ECMA_SHIFT		3	/* ECMA version: middle 3 bits */#define	VER_ECMA_MASK		7#define	VER_ANSI_SHIFT		0	/* ANSI version: bottom 3 bits */#define	VER_ANSI_MASK		7/* v2 info */#define V2INFO_AENC		0x80	/* device can accept AEN data */#define V2INFO_TRMIOP		0x40	/* supports TERMINATE I/O PROC msg */#define V2INFO_XXX		0x30	/* reserved */#define V2INFO_RDF_MASK		0x0f	/* response data format mask */#define V2INFO_RDF_SCSI1	0x00	/* SCSI-1 standard INQUIRY data */#define V2INFO_RDF_CCS		0x01	/* common command set INQUIRY data */#define V2INFO_RDF_SCSI2	0x02	/* SCSI-2 standard INQUIRY data *//* flags */#define V2FLAG_RELADR		0x80	/* supports relative addressing */#define V2FLAG_WBUS32		0x40	/* supports 32 bit data xfer */#define V2FLAG_WBUS16		0x20	/* supports 32 bit data xfer */#define V2FLAG_SYNC		0x10	/* supports synchronous data xfer */#define V2FLAG_LINKED		0x08	/* supports linked commands */#define V2FLAG_XXX		0x04	/* reserved */#define V2FLAG_CMDQUE		0x02	/* supports tagged command queueing */#define V2FLAG_SOFTRESET	0x01	/* RST causes soft reset *//* * SCSI message codes bytes.  The `command complete' code is required; * all others are optional.  `Identify' is a flag bit, not a code (thus * codes are actually at most 7 bits). */#define	MSG_IDENTIFY		0x80	/* flag => this is an identify msg */#define	MSG_IDENTIFY_DR		0x40	/* IDENTIFY: flag => discon/resel ok */#define	MSG_IDENTIFY_RSVD	0x38	/* IDENTIFY: these bits are reserved */#define	MSG_IDENTIFY_LUN	0x07	/* IDENTIFY: these bits give LUN */#define	MSG_CMD_COMPLETE	0x00	/* command complete */#define	MSG_EXT_MESSAGE		0x01	/* extended message */#define	MSG_SAVE_DATA_PTR	0x02	/* save data pointer */#define	MSG_RESTORE_PTR		0x03	/* restore pointers */#define	MSG_DISCONNECT		0x04	/* disconnect */#define	MSG_INIT_DETECT_ERROR	0x05	/* initiator detected error */#define	MSG_ABORT		0x06	/* abort */#define	MSG_REJECT		0x07	/* message reject */#define	MSG_NOOP		0x08	/* no operation */#define	MSG_PARITY_ERROR	0x09	/* message parity error */#define	MSG_LCC			0x0a	/* linked command complete */#define	MSG_LCCF		0x0b	/* linked command complete (w/ flag) */#define	MSG_BUS_DEVICE_RESET	0x0c	/* bus device reset */#define	MSG_ABORT_TAG		0x0d	/* abort tagged msg */#define	MSG_CLEAR_QUEUE		0x0e	/* clear queue */#define	MSG_INITIATE_RECOVERY	0x0f	/* initiate recovery */#define	MSG_RELEASE_RECOVERY	0x10	/* release recovery */#define	MSG_TERMINATE_PROCESS	0x11	/* ? */#define	MSG_SIMPLE_Q_TAG	0x20	/* ? */#define	MSG_HEAD_Q_TAG		0x21	/* ? */#define	MSG_ORDERED_Q_TAG	0x22	/* ? */#define	MSG_IGNORE_WIDE_RESID	0x23	/* ? *//* * SCSI extended message format. */struct scsi_xmsg {	u_char	xm_xmsg,	/* value 1, i.e., SMSG_EXT_MESSAGE */		xm_len,		/* length of this extended message */		xm_code,	/* actual code */		xm_args[253];	/* actualy xm_len-1 bytes */};/* * SCSI extended message codes. */#define	XMSG_MDP		0x00	/* modify data pointer */#define	XMSG_SDTR		0x01	/* synchronous data transfer request */#define	XMSG_XID		0x02	/* extended identify *//* * SCSI status byte values.  Bits 6, 5, and 0 are Vendor Unique. */#define	STS_EXT			0x80	/* flag => extended status valid */#define	STS_MASK		0x1e	/* mask for non-VU bits */#define	STS_VU			0x61	/* mask for Vendor Unique bits */#define	STS_GOOD		0x00	/* success, command done */#define	STS_CHECKCOND		0x02	/* check condition (do a REQ SENSE) */#define	STS_CONDMET		0x04	/* condition met (search succeeded) */			/*	0x06	   reserved */#define	STS_BUSY		0x08	/* busy */			/*	0x0a	   reserved */			/*	0x0c	   reserved */			/*	0x0e	   reserved */#define	STS_INTERMED		0x10	/* succeeded, doing linked cmd */			/*	0x12	   reserved */#define	STS_INTERMED_CONDMET	0x14	/* condition met, doing linked cmd */			/*	0x16	   reserved */#define	STS_RESERV_CONFLICT	0x18	/* reservation conflict */			/*	0x1a	   reserved */			/*	0x1c	   reserved */			/*	0x1e	   reserved */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -