i2obscsi.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* *****************************************************************************
* I2O SIG All rights reserved.
*
* These header files are provided, pursuant to your I2O SIG membership
* agreement, free of charge on an as-is basis without warranty of any kind,
* either express or implied, including but not limited to, implied warranties
* or merchantability and fitness for a particular purpose. I2O SIG does not
* warrant that this program will meet the user's requirements or that the
* operation of these programs will be uninterrupted or error-free.
* Acceptance and use of this program constitutes the user's understanding
* that he will have no recourse to I2O SIG for any actual or consequential
* damages including, but not limited to, loss profits arising out of use
* or inability to use this program.
*
* Member is permitted to create derivative works to this header-file program.
* However, all copies of the program and its derivative works must contain the
* I2O SIG copyright notice.
*
* *****************************************************************************
*/
/*
* ***************************************************************************
*
* I2OBSCSI.h -- I2O Base SCSI Device Class Message defintion file
*
* This file contains information presented in Chapter 6, Section 6 & 7 of
* the I2O Specification.
*
* ***************************************************************************
*/
/*
* Copyright (c) 1998 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _SYS_I2OBSCSI_H
#define _SYS_I2OBSCSI_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#define I2OBSCSI_REV 1_5_1 /* Header file revision string */
/*
* NOTES: See i2omsg.h for more info
*/
#include <sys/i2o/i2omsg.h> /* Include the Base Message file */
#include <sys/types.h> /* For system types defined */
/*
* SCSI Peripheral Class specific functions
*
* Although the names are SCSI Peripheral class specific, the values
* assigned are common with other classes when applicable.
*/
#define I2O_SCSI_DEVICE_RESET 0x27
#define I2O_SCSI_SCB_ABORT 0x83
#define I2O_SCSI_SCB_EXEC 0x81
/*
* Detailed Status Codes for SCSI operations
*
* The 16-bit Detailed Status Code field for SCSI operations is divided
* into two separate 8-bit fields. The lower 8 bits are used to report
* Device Status information. The upper 8 bits are used to report
* Adapter Status information. The definitions for these two fields,
* however, will be consistent with the standard reply message frame
* structure declaration, which treats this as a single 16-bit field.
*/
/*
* SCSI Device Completion Status Codes (defined by SCSI-2/3)
*/
#define I2O_SCSI_DEVICE_DSC_MASK 0x00FF
#define I2O_SCSI_DSC_SUCCESS 0x0000
#define I2O_SCSI_DSC_CHECK_CONDITION 0x0002
#define I2O_SCSI_DSC_BUSY 0x0008
#define I2O_SCSI_DSC_RESERVATION_CONFLICT 0x0018
#define I2O_SCSI_DSC_COMMAND_TERMINATED 0x0022
#define I2O_SCSI_DSC_TASK_SET_FULL 0x0028
#define I2O_SCSI_DSC_ACA_ACTIVE 0x0030
/*
* SCSI Adapter Status Codes (based on CAM-1)
*/
#define I2O_SCSI_HBA_DSC_MASK 0xFF00
#define I2O_SCSI_HBA_DSC_SUCCESS 0x0000
#define I2O_SCSI_HBA_DSC_REQUEST_ABORTED 0x0200
#define I2O_SCSI_HBA_DSC_UNABLE_TO_ABORT 0x0300
#define I2O_SCSI_HBA_DSC_COMPLETE_WITH_ERROR 0x0400
#define I2O_SCSI_HBA_DSC_ADAPTER_BUSY 0x0500
#define I2O_SCSI_HBA_DSC_REQUEST_INVALID 0x0600
#define I2O_SCSI_HBA_DSC_PATH_INVALID 0x0700
#define I2O_SCSI_HBA_DSC_DEVICE_NOT_PRESENT 0x0800
#define I2O_SCSI_HBA_DSC_UNABLE_TO_TERMINATE 0x0900
#define I2O_SCSI_HBA_DSC_SELECTION_TIMEOUT 0x0A00
#define I2O_SCSI_HBA_DSC_COMMAND_TIMEOUT 0x0B00
#define I2O_SCSI_HBA_DSC_MR_MESSAGE_RECEIVED 0x0D00
#define I2O_SCSI_HBA_DSC_SCSI_BUS_RESET 0x0E00
#define I2O_SCSI_HBA_DSC_PARITY_ERROR_FAILURE 0x0F00
#define I2O_SCSI_HBA_DSC_AUTOSENSE_FAILED 0x1000
#define I2O_SCSI_HBA_DSC_NO_ADAPTER 0x1100
#define I2O_SCSI_HBA_DSC_DATA_OVERRUN 0x1200
#define I2O_SCSI_HBA_DSC_UNEXPECTED_BUS_FREE 0x1300
#define I2O_SCSI_HBA_DSC_SEQUENCE_FAILURE 0x1400
#define I2O_SCSI_HBA_DSC_REQUEST_LENGTH_ERROR 0x1500
#define I2O_SCSI_HBA_DSC_PROVIDE_FAILURE 0x1600
#define I2O_SCSI_HBA_DSC_BDR_MESSAGE_SENT 0x1700
#define I2O_SCSI_HBA_DSC_REQUEST_TERMINATED 0x1800
#define I2O_SCSI_HBA_DSC_IDE_MESSAGE_SENT 0x3300
#define I2O_SCSI_HBA_DSC_RESOURCE_UNAVAILABLE 0x3400
#define I2O_SCSI_HBA_DSC_UNACKNOWLEDGED_EVENT 0x3500
#define I2O_SCSI_HBA_DSC_MESSAGE_RECEIVED 0x3600
#define I2O_SCSI_HBA_DSC_INVALID_CDB 0x3700
#define I2O_SCSI_HBA_DSC_LUN_INVALID 0x3800
#define I2O_SCSI_HBA_DSC_SCSI_TID_INVALID 0x3900
#define I2O_SCSI_HBA_DSC_FUNCTION_UNAVAILABLE 0x3A00
#define I2O_SCSI_HBA_DSC_NO_NEXUS 0x3B00
#define I2O_SCSI_HBA_DSC_SCSI_IID_INVALID 0x3C00
#define I2O_SCSI_HBA_DSC_CDB_RECEIVED 0x3D00
#define I2O_SCSI_HBA_DSC_LUN_ALREADY_ENABLED 0x3E00
#define I2O_SCSI_HBA_DSC_BUS_BUSY 0x3F00
#define I2O_SCSI_HBA_DSC_QUEUE_FROZEN 0x4000
/*
* SCSI Peripheral Device Parameter Groups
*/
/*
* SCSI Configuration and Operating Structures and Defines
*/
#define I2O_SCSI_DEVICE_INFO_GROUP_NO 0x0000
#define I2O_SCSI_DEVICE_BUS_PORT_INFO_GROUP_NO 0x0001
/*
* - 0000h - SCSI Device Information Parameters Group defines
*/
/*
* Device Type
*/
#define I2O_SCSI_DEVICE_TYPE_DIRECT 0x00
#define I2O_SCSI_DEVICE_TYPE_SEQUENTIAL 0x01
#define I2O_SCSI_DEVICE_TYPE_PRINTER 0x02
#define I2O_SCSI_DEVICE_TYPE_PROCESSOR 0x03
#define I2O_SCSI_DEVICE_TYPE_WORM 0x04
#define I2O_SCSI_DEVICE_TYPE_CDROM 0x05
#define I2O_SCSI_DEVICE_TYPE_SCANNER 0x06
#define I2O_SCSI_DEVICE_TYPE_OPTICAL 0x07
#define I2O_SCSI_DEVICE_TYPE_MEDIA_CHANGER 0x08
#define I2O_SCSI_DEVICE_TYPE_COMM 0x09
#define I2O_SCSI_DEVICE_GRAPHICS_1 0x0A
#define I2O_SCSI_DEVICE_GRAPHICS_2 0x0B
#define I2O_SCSI_DEVICE_TYPE_ARRAY_CONT 0x0C
#define I2O_SCSI_DEVICE_TYPE_UNKNOWN 0x1F
/*
* Flags
*/
#define I2O_SCSI_PERIPHERAL_TYPE_FLAG 0x01
#define I2O_SCSI_PERIPHERAL_TYPE_PARALLEL 0x00
#define I2O_SCSI_PERIPHERAL_TYPE_SERIAL 0x01
#define I2O_SCSI_RESERVED_FLAG 0x02
#define I2O_SCSI_DISCONNECT_FLAG 0x04
#define I2O_SCSI_DISABLE_DISCONNECT 0x00
#define I2O_SCSI_ENABLE_DISCONNECT 0x04
#define I2O_SCSI_MODE_MASK 0x18
#define I2O_SCSI_MODE_SET_DATA 0x00
#define I2O_SCSI_MODE_SET_DEFAULT 0x08
#define I2O_SCSI_MODE_SET_SAFEST 0x10
#define I2O_SCSI_DATA_WIDTH_MASK 0x60
#define I2O_SCSI_DATA_WIDTH_8 0x00
#define I2O_SCSI_DATA_WIDTH_16 0x20
#define I2O_SCSI_DATA_WIDTH_32 0x40
#define I2O_SCSI_SYNC_NEGOTIATION_FLAG 0x80
#define I2O_SCSI_DISABLE_SYNC_NEGOTIATION 0x00
#define I2O_SCSI_ENABLE_SYNC_NEGOTIATION 0x80
/*
* - 0001h - SCSI Device Bus Port Info Parameters Group defines
*/
/*
* Physical
*/
#define I2O_SCSI_PORT_PHYS_OTHER 0x01
#define I2O_SCSI_PORT_PHYS_UNKNOWN 0x02
#define I2O_SCSI_PORT_PHYS_PARALLEL 0x03
#define I2O_SCSI_PORT_PHYS_FIBRE_CHANNEL 0x04
#define I2O_SCSI_PORT_PHYS_SERIAL_P1394 0x05
#define I2O_SCSI_PORT_PHYS_SERIAL_SSA 0x06
/*
* Electrical
*/
#define I2O_SCSI_PORT_ELEC_OTHER 0x01
#define I2O_SCSI_PORT_ELEC_UNKNOWN 0x02
#define I2O_SCSI_PORT_ELEC_SINGLE_ENDED 0x03
#define I2O_SCSI_PORT_ELEC_DIFFERENTIAL 0x04
#define I2O_SCSI_PORT_ELEC_LOW_VOLT_DIFF 0x05
#define I2O_SCSI_PORT_ELEC_OPTICAL 0x06
/*
* Isochronous
*/
#define I2O_SCSI_PORT_ISOC_NO 0x00
#define I2O_SCSI_PORT_ISOC_YES 0x01
#define I2O_SCSI_PORT_ISOC_UNKNOWN 0x02
/*
* Connector Type
*/
#define I2O_SCSI_PORT_CONN_OTHER 0x01
#define I2O_SCSI_PORT_CONN_UNKNOWN 0x02
#define I2O_SCSI_PORT_CONN_NONE 0x03
#define I2O_SCSI_PORT_CONN_SHIELDED_A_HD 0x04
#define I2O_SCSI_PORT_CONN_UNSHIELDED_A_HD 0x05
#define I2O_SCSI_PORT_CONN_SHIELDED_A_LD 0x06
#define I2O_SCSI_PORT_CONN_UNSHIELDED_A_LD 0x07
#define I2O_SCSI_PORT_CONN_SHIELDED_P_HD 0x08
#define I2O_SCSI_PORT_CONN_UNSHIELDED_P_HD 0x09
#define I2O_SCSI_PORT_CONN_SCA_I 0x0A
#define I2O_SCSI_PORT_CONN_SCA_II 0x0B
#define I2O_SCSI_PORT_CONN_FC_DB9 0x0C
#define I2O_SCSI_PORT_CONN_FC_FIBRE 0x0D
#define I2O_SCSI_PORT_CONN_FC_SCA_II_40 0x0E
#define I2O_SCSI_PORT_CONN_FC_SCA_II_20 0x0F
#define I2O_SCSI_PORT_CONN_FC_BNC 0x10
/*
* Connector Gender
*/
#define I2O_SCSI_PORT_CONN_GENDER_OTHER 0x01
#define I2O_SCSI_PORT_CONN_GENDER_UNKOWN 0x02
#define I2O_SCSI_PORT_CONN_GENDER_FEMALE 0x03
#define I2O_SCSI_PORT_CONN_GENDER_MALE 0x04
/*
* SCSI Device Group 0000h - Device Information Parameter Group
*/
typedef struct i2o_scsi_device_info_scalar {
uint8_t DeviceType;
uint8_t Flags;
uint16_t Reserved2;
uint32_t Identifier;
uint8_t LunInfo[8]; /* SCSI2 8-bit scalar LUN goes into */
/* offset 1 */
uint32_t QueueDepth;
uint8_t Reserved1a;
uint8_t NegOffset;
uint8_t NegDataWidth;
uint8_t Reserved1b;
uint64_t NegSyncRate;
} i2o_scsi_device_info_scalar_t;
/*
* SCSI Device Group 0001h - Bus Port Information Parameter Group
*/
typedef struct i2o_scsi_bus_port_info_scalar {
uint8_t PhysicalInterface;
uint8_t ElectricalInterface;
uint8_t Isochronous;
uint8_t ConnectorType;
uint8_t ConnectorGender;
uint8_t Reserved1;
uint16_t Reserved2;
uint32_t MaxNumberDevices;
} i2o_scsi_bus_port_info_scalar_t;
/*
* I2O SCSI Peripheral Event Indicator Assignment
*/
#define I2O_SCSI_EVENT_SCSI_SMART 0x00000010
/*
* SCSI Peripheral Class Specific Message Definitions
*/
/*
* I2O SCSI Peripheral Successful Completion Reply Message Frame
*/
typedef struct i2o_scsi_success_reply_message_frame {
i2o_single_reply_message_frame_t StdReplyFrame;
uint32_t TransferCount;
} i2o_scsi_success_reply_message_frame_t;
/*
* I2O SCSI Peripheral Error Report Reply Message Frame
*/
#define I2O_SCSI_SENSE_DATA_SZ 40
typedef struct i2o_scsi_error_reply_message_frame {
i2o_single_reply_message_frame_t StdReplyFrame;
uint32_t TransferCount;
uint32_t AutoSenseTransferCount;
uint8_t SenseData[I2O_SCSI_SENSE_DATA_SZ];
} i2o_scsi_error_reply_message_frame_t;
/*
* I2O SCSI Device Reset Message Frame
*/
typedef struct i2o_scsi_device_reset_message {
i2o_message_frame_t StdMessageFrame;
i2o_transaction_context_t TransactionContext;
} i2o_scsi_device_reset_message_t;
/*
* I2O SCSI Control Block Abort Message Frame
*/
typedef struct i2o_scsi_scb_abort_message {
i2o_message_frame_t StdMessageFrame;
i2o_transaction_context_t TransactionContext;
i2o_transaction_context_t TransactionContextToAbort;
} i2o_scsi_scb_abort_message_t;
/*
* I2O SCSI Control Block Execute Message Frame
*/
#define I2O_SCSI_CDB_LENGTH 16
#define I2O_SCB_FLAG_XFER_DIR_MASK 0xC000
#define I2O_SCB_FLAG_NO_DATA_XFER 0x0000
#define I2O_SCB_FLAG_XFER_FROM_DEVICE 0x4000
#define I2O_SCB_FLAG_XFER_TO_DEVICE 0x8000
#define I2O_SCB_FLAG_ENABLE_DISCONNECT 0x2000
#define I2O_SCB_FLAG_TAG_TYPE_MASK 0x0380
#define I2O_SCB_FLAG_NO_TAG_QUEUEING 0x0000
#define I2O_SCB_FLAG_SIMPLE_QUEUE_TAG 0x0080
#define I2O_SCB_FLAG_HEAD_QUEUE_TAG 0x0100
#define I2O_SCB_FLAG_ORDERED_QUEUE_TAG 0x0180
#define I2O_SCB_FLAG_ACA_QUEUE_TAG 0x0200
#define I2O_SCB_FLAG_AUTOSENSE_MASK 0x0060
#define I2O_SCB_FLAG_DISABLE_AUTOSENSE 0x0000
#define I2O_SCB_FLAG_SENSE_DATA_IN_MESSAGE 0x0020
#define I2O_SCB_FLAG_SENSE_DATA_IN_BUFFER 0x0060
typedef struct i2o_scsi_scb_execute_message {
i2o_message_frame_t StdMessageFrame;
i2o_transaction_context_t TransactionContext;
uint8_t CDBLength;
uint8_t Reserved;
uint16_t SCBFlags;
uint8_t CDB[I2O_SCSI_CDB_LENGTH];
uint32_t ByteCount;
i2o_sg_element_t SGL;
} i2o_scsi_scb_execute_message_t;
#ifdef __cplusplus
}
#endif
#endif /* _SYS_I2OBSCSI_H */