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

📄 aiclib.h

📁 h内核
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Largely written by Julian Elischer (julian@tfs.com) * for TRW Financial Systems. * * TRW Financial Systems, in accordance with their agreement with Carnegie * Mellon University, makes this software available to CMU to distribute * or use in any manner that they see fit as long as this message is kept with * the software. For this reason TFS also grants any other persons or * organisations permission to use or modify this software. * * TFS supplies this software to be publicly redistributed * on the understanding that TFS is not responsible for the correct * functioning of this software in any circumstances. * * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 * * $FreeBSD: src/sys/cam/scsi/scsi_all.h,v 1.21 2002/10/08 17:12:44 ken Exp $ * * Copyright (c) 2003 Adaptec Inc. * All rights reserved. * * 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, *    without modification. * 2. Redistributions in binary form must reproduce at minimum a disclaimer *    substantially similar to the "NO WARRANTY" disclaimer below *    ("Disclaimer") and any redistribution must be conditioned upon *    including a substantially similar Disclaimer requirement for further *    binary redistribution. * 3. Neither the names of the above-listed copyright holders nor the names *    of any contributors may be used to endorse or promote products derived *    from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * * NO WARRANTY * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES. * * $Id$ */#ifndef	_AICLIB_H#define _AICLIB_H/* * Linux Interrupt Support. */#ifndef IRQ_RETVALtypedef void irqreturn_t;#define	IRQ_RETVAL(x)#endif/* * SCSI command format *//* * Define dome bits that are in ALL (or a lot of) scsi commands */#define SCSI_CTL_LINK		0x01#define SCSI_CTL_FLAG		0x02#define SCSI_CTL_VENDOR		0xC0#define	SCSI_CMD_LUN		0xA0	/* these two should not be needed */#define	SCSI_CMD_LUN_SHIFT	5	/* LUN in the cmd is no longer SCSI */#define SCSI_MAX_CDBLEN		16	/* 					 * 16 byte commands are in the 					 * SCSI-3 spec 					 *//* 6byte CDBs special case 0 length to be 256 */#define SCSI_CDB6_LEN(len)	((len) == 0 ? 256 : len)/* * This type defines actions to be taken when a particular sense code is * received.  Right now, these flags are only defined to take up 16 bits, * but can be expanded in the future if necessary. */typedef enum {	SS_NOP		= 0x000000, /* Do nothing */	SS_RETRY	= 0x010000, /* Retry the command */	SS_FAIL		= 0x020000, /* Bail out */	SS_START	= 0x030000, /* Send a Start Unit command to the device,				     * then retry the original command.				     */	SS_TUR		= 0x040000, /* Send a Test Unit Ready command to the				     * device, then retry the original command.				     */	SS_REQSENSE	= 0x050000, /* Send a RequestSense command to the				     * device, then retry the original command.				     */	SS_INQ_REFRESH	= 0x060000,	SS_MASK		= 0xff0000} aic_sense_action;typedef enum {	SSQ_NONE		= 0x0000,	SSQ_DECREMENT_COUNT	= 0x0100,  /* Decrement the retry count */	SSQ_MANY		= 0x0200,  /* send lots of recovery commands */	SSQ_RANGE		= 0x0400,  /*					    * This table entry represents the					    * end of a range of ASCQs that					    * have identical error actions					    * and text.					    */	SSQ_PRINT_SENSE		= 0x0800,	SSQ_DELAY		= 0x1000,  /* Delay before retry. */	SSQ_DELAY_RANDOM	= 0x2000,  /* Randomized delay before retry. */	SSQ_FALLBACK		= 0x4000,  /* Do a speed fallback to recover */	SSQ_MASK		= 0xff00} aic_sense_action_qualifier;/* Mask for error status values */#define SS_ERRMASK	0xff/* The default, retyable, error action */#define SS_RDEF		SS_RETRY|SSQ_DECREMENT_COUNT|SSQ_PRINT_SENSE|EIO/* The retyable, error action, with table specified error code */#define SS_RET		SS_RETRY|SSQ_DECREMENT_COUNT|SSQ_PRINT_SENSE/* Fatal error action, with table specified error code */#define SS_FATAL	SS_FAIL|SSQ_PRINT_SENSEstruct scsi_generic{	uint8_t opcode;	uint8_t bytes[11];};struct scsi_request_sense{	uint8_t opcode;	uint8_t byte2;	uint8_t unused[2];	uint8_t length;	uint8_t control;};struct scsi_test_unit_ready{	uint8_t opcode;	uint8_t byte2;	uint8_t unused[3];	uint8_t control;};struct scsi_send_diag{	uint8_t opcode;	uint8_t byte2;#define	SSD_UOL		0x01#define	SSD_DOL		0x02#define	SSD_SELFTEST	0x04#define	SSD_PF		0x10	uint8_t unused[1];	uint8_t paramlen[2];	uint8_t control;};struct scsi_sense{	uint8_t opcode;	uint8_t byte2;	uint8_t unused[2];	uint8_t length;	uint8_t control;};struct scsi_inquiry{	uint8_t opcode;	uint8_t byte2;#define	SI_EVPD 0x01	uint8_t page_code;	uint8_t reserved;	uint8_t length;	uint8_t control;};struct scsi_mode_sense_6{	uint8_t opcode;	uint8_t byte2;#define	SMS_DBD				0x08	uint8_t page;#define	SMS_PAGE_CODE 			0x3F#define SMS_VENDOR_SPECIFIC_PAGE	0x00#define SMS_DISCONNECT_RECONNECT_PAGE	0x02#define SMS_PERIPHERAL_DEVICE_PAGE	0x09#define SMS_CONTROL_MODE_PAGE		0x0A#define SMS_ALL_PAGES_PAGE		0x3F#define	SMS_PAGE_CTRL_MASK		0xC0#define	SMS_PAGE_CTRL_CURRENT 		0x00#define	SMS_PAGE_CTRL_CHANGEABLE 	0x40#define	SMS_PAGE_CTRL_DEFAULT 		0x80#define	SMS_PAGE_CTRL_SAVED 		0xC0	uint8_t unused;	uint8_t length;	uint8_t control;};struct scsi_mode_sense_10{	uint8_t opcode;	uint8_t byte2;		/* same bits as small version */	uint8_t page; 		/* same bits as small version */	uint8_t unused[4];	uint8_t length[2];	uint8_t control;};struct scsi_mode_select_6{	uint8_t opcode;	uint8_t byte2;#define	SMS_SP	0x01#define	SMS_PF	0x10	uint8_t unused[2];	uint8_t length;	uint8_t control;};struct scsi_mode_select_10{	uint8_t opcode;	uint8_t byte2;		/* same bits as small version */	uint8_t unused[5];	uint8_t length[2];	uint8_t control;};/* * When sending a mode select to a tape drive, the medium type must be 0. */struct scsi_mode_hdr_6{	uint8_t datalen;	uint8_t medium_type;	uint8_t dev_specific;	uint8_t block_descr_len;};struct scsi_mode_hdr_10{	uint8_t datalen[2];	uint8_t medium_type;	uint8_t dev_specific;	uint8_t reserved[2];	uint8_t block_descr_len[2];};struct scsi_mode_block_descr{	uint8_t density_code;	uint8_t num_blocks[3];	uint8_t reserved;	uint8_t block_len[3];};struct scsi_log_sense{	uint8_t opcode;	uint8_t byte2;#define	SLS_SP				0x01#define	SLS_PPC				0x02	uint8_t page;#define	SLS_PAGE_CODE 			0x3F#define	SLS_ALL_PAGES_PAGE		0x00#define	SLS_OVERRUN_PAGE		0x01#define	SLS_ERROR_WRITE_PAGE		0x02#define	SLS_ERROR_READ_PAGE		0x03#define	SLS_ERROR_READREVERSE_PAGE	0x04#define	SLS_ERROR_VERIFY_PAGE		0x05#define	SLS_ERROR_NONMEDIUM_PAGE	0x06#define	SLS_ERROR_LASTN_PAGE		0x07#define	SLS_PAGE_CTRL_MASK		0xC0#define	SLS_PAGE_CTRL_THRESHOLD		0x00#define	SLS_PAGE_CTRL_CUMULATIVE	0x40#define	SLS_PAGE_CTRL_THRESH_DEFAULT	0x80#define	SLS_PAGE_CTRL_CUMUL_DEFAULT	0xC0	uint8_t reserved[2];	uint8_t paramptr[2];	uint8_t length[2];	uint8_t control;};struct scsi_log_select{	uint8_t opcode;	uint8_t byte2;/*	SLS_SP				0x01 */#define	SLS_PCR				0x02	uint8_t page;/*	SLS_PAGE_CTRL_MASK		0xC0 *//*	SLS_PAGE_CTRL_THRESHOLD		0x00 *//*	SLS_PAGE_CTRL_CUMULATIVE	0x40 *//*	SLS_PAGE_CTRL_THRESH_DEFAULT	0x80 *//*	SLS_PAGE_CTRL_CUMUL_DEFAULT	0xC0 */	uint8_t reserved[4];	uint8_t length[2];	uint8_t control;};struct scsi_log_header{	uint8_t page;	uint8_t reserved;	uint8_t datalen[2];};struct scsi_log_param_header {	uint8_t param_code[2];	uint8_t param_control;#define	SLP_LP				0x01#define	SLP_LBIN			0x02#define	SLP_TMC_MASK			0x0C#define	SLP_TMC_ALWAYS			0x00#define	SLP_TMC_EQUAL			0x04#define	SLP_TMC_NOTEQUAL		0x08#define	SLP_TMC_GREATER			0x0C#define	SLP_ETC				0x10#define	SLP_TSD				0x20#define	SLP_DS				0x40#define	SLP_DU				0x80	uint8_t param_len;};struct scsi_control_page {	uint8_t page_code;	uint8_t page_length;	uint8_t rlec;#define SCB_RLEC			0x01	/*Report Log Exception Cond*/	uint8_t queue_flags;#define SCP_QUEUE_ALG_MASK		0xF0#define SCP_QUEUE_ALG_RESTRICTED	0x00#define SCP_QUEUE_ALG_UNRESTRICTED	0x10#define SCP_QUEUE_ERR			0x02	/*Queued I/O aborted for CACs*/#define SCP_QUEUE_DQUE			0x01	/*Queued I/O disabled*/	uint8_t eca_and_aen;#define SCP_EECA			0x80	/*Enable Extended CA*/#define SCP_RAENP			0x04	/*Ready AEN Permission*/#define SCP_UAAENP			0x02	/*UA AEN Permission*/#define SCP_EAENP			0x01	/*Error AEN Permission*/	uint8_t reserved;	uint8_t aen_holdoff_period[2];};struct scsi_reserve{	uint8_t opcode;	uint8_t byte2;	uint8_t unused[2];	uint8_t length;	uint8_t control;};struct scsi_release{	uint8_t opcode;	uint8_t byte2;	uint8_t unused[2];	uint8_t length;	uint8_t control;};struct scsi_prevent{	uint8_t opcode;	uint8_t byte2;	uint8_t unused[2];	uint8_t how;	uint8_t control;};#define	PR_PREVENT 0x01#define PR_ALLOW   0x00struct scsi_sync_cache{	uint8_t opcode;	uint8_t byte2;	uint8_t begin_lba[4];	uint8_t reserved;	uint8_t lb_count[2];	uint8_t control;	};struct scsi_changedef{	uint8_t opcode;	uint8_t byte2;	uint8_t unused1;	uint8_t how;	uint8_t unused[4];	uint8_t datalen;	uint8_t control;};struct scsi_read_buffer{	uint8_t opcode;	uint8_t byte2;#define	RWB_MODE		0x07#define	RWB_MODE_HDR_DATA	0x00#define	RWB_MODE_DATA		0x02#define	RWB_MODE_DOWNLOAD	0x04#define	RWB_MODE_DOWNLOAD_SAVE	0x05        uint8_t buffer_id;        uint8_t offset[3];        uint8_t length[3];        uint8_t control;};struct scsi_write_buffer{	uint8_t opcode;	uint8_t byte2;	uint8_t buffer_id;	uint8_t offset[3];	uint8_t length[3];	uint8_t control;};struct scsi_rw_6{	uint8_t opcode;	uint8_t addr[3];/* only 5 bits are valid in the MSB address byte */#define	SRW_TOPADDR	0x1F	uint8_t length;	uint8_t control;};struct scsi_rw_10{	uint8_t opcode;#define	SRW10_RELADDR	0x01#define SRW10_FUA	0x08#define	SRW10_DPO	0x10	uint8_t byte2;	uint8_t addr[4];	uint8_t reserved;	uint8_t length[2];	uint8_t control;};struct scsi_rw_12{	uint8_t opcode;#define	SRW12_RELADDR	0x01#define SRW12_FUA	0x08#define	SRW12_DPO	0x10	uint8_t byte2;	uint8_t addr[4];	uint8_t length[4];	uint8_t reserved;	uint8_t control;};struct scsi_start_stop_unit{	uint8_t opcode;	uint8_t byte2;#define	SSS_IMMED		0x01	uint8_t reserved[2];	uint8_t how;#define	SSS_START		0x01#define	SSS_LOEJ		0x02	uint8_t control;};#define SC_SCSI_1 0x01#define SC_SCSI_2 0x03/* * Opcodes */#define	TEST_UNIT_READY		0x00#define REQUEST_SENSE		0x03#define	READ_6			0x08#define WRITE_6			0x0a#define INQUIRY			0x12#define MODE_SELECT_6		0x15#define MODE_SENSE_6		0x1a#define START_STOP_UNIT		0x1b#define START_STOP		0x1b#define RESERVE      		0x16#define RELEASE      		0x17#define	RECEIVE_DIAGNOSTIC	0x1c#define	SEND_DIAGNOSTIC		0x1d#define PREVENT_ALLOW		0x1e#define	READ_CAPACITY		0x25#define	READ_10			0x28#define WRITE_10		0x2a#define POSITION_TO_ELEMENT	0x2b#define	SYNCHRONIZE_CACHE	0x35#define	WRITE_BUFFER            0x3b#define	READ_BUFFER             0x3c#define	CHANGE_DEFINITION	0x40#define	LOG_SELECT		0x4c#define	LOG_SENSE		0x4d#ifdef XXXCAM#define	MODE_SENSE_10		0x5A#endif#define	MODE_SELECT_10		0x55#define MOVE_MEDIUM     	0xa5#define READ_12			0xa8#define WRITE_12		0xaa#define READ_ELEMENT_STATUS	0xb8/* * Device Types */#define T_DIRECT	0x00#define T_SEQUENTIAL	0x01#define T_PRINTER	0x02#define T_PROCESSOR	0x03#define T_WORM		0x04#define T_CDROM		0x05#define T_SCANNER 	0x06#define T_OPTICAL 	0x07#define T_CHANGER	0x08#define T_COMM		0x09#define T_ASC0		0x0a#define T_ASC1		0x0b#define	T_STORARRAY	0x0c

⌨️ 快捷键说明

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