📄 aiclib.h
字号:
/* * 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 + -