diff options
Diffstat (limited to 'usr/src/uts/common/sys/scsi/generic/sas.h')
| -rw-r--r-- | usr/src/uts/common/sys/scsi/generic/sas.h | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/usr/src/uts/common/sys/scsi/generic/sas.h b/usr/src/uts/common/sys/scsi/generic/sas.h new file mode 100644 index 0000000000..61ba710e19 --- /dev/null +++ b/usr/src/uts/common/sys/scsi/generic/sas.h @@ -0,0 +1,199 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + * + * + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * SAS Common Structures and Definitions + * sas2r14, simplified/reduced + */ +#ifndef _SAS_H +#define _SAS_H +#ifdef __cplusplus +extern "C" { +#endif + +#include <sys/sysmacros.h> +/* + * SAS Address Frames + * Trailing 4 byte CRC not included. + */ +typedef struct { + DECL_BITFIELD3( + address_frame_type :4, + device_type :3, + reserved0 :1); + DECL_BITFIELD2( + reason :4, + reserved1 :4); + DECL_BITFIELD5( + restricted0 :1, + smp_ini_port :1, + stp_ini_port :1, + ssp_ini_port :1, + reserved2 :4); + DECL_BITFIELD5( + restricted1 :1, + smp_tgt_port :1, + stp_tgt_port :1, + ssp_tgt_port :1, + reserved3 :4); + uint8_t device_name[8]; + uint8_t sas_address[8]; + uint8_t phy_identifier; + DECL_BITFIELD4( + break_reply_capable :1, + requested_inside_zpsds :1, + inside_zpsds_persistent :1, + reserved4 :5); + uint8_t reserved5[6]; +} sas_identify_af_t; + +typedef struct { + DECL_BITFIELD3( + address_frame_type :4, + protocol :3, + ini_port :1); + DECL_BITFIELD2( + connection_rate :4, + features :4); + uint16_t itag; /* initiator connection tag */ + uint8_t sas_dst[8]; /* destination sas address */ + uint8_t sas_src[8]; /* source sas address */ + uint8_t src_zone_group; /* source zone group */ + uint8_t path_block_count; /* pathway blocked count */ + uint16_t arb_wait_time; /* arbitration wait time */ + uint8_t compat[4]; /* 'more' compatible features */ +} sas_open_af_t; + +#define SAS_AF_IDENTIFY 0 +#define SAS_AF_OPEN 1 + +#define SAS_IF_DTYPE_ENDPOINT 1 +#define SAS_IF_DTYPE_EDGE 2 +#define SAS_IF_DTYPE_FANOUT 3 /* obsolete */ + +#define SAS_OF_PROTO_SMP 0 +#define SAS_OF_PROTO_SSP 1 +#define SAS_OF_PROTO_STP 2 + +#define SAS_SSP_SUPPORT 0x8 +#define SAS_STP_SUPPORT 0x4 +#define SAS_SMP_SUPPORT 0x2 + + +#define SAS_CONNRATE_1_5_GBPS 0x8 +#define SAS_CONNRATE_3_0_GBPS 0x9 +#define SAS_CONNRATE_6_0_GBPS 0xA + +#define SAS_SATA_SUPPORT 0x1 +#define SAS_ATTACHED_NAME_OFFSET 52 /* SAS-2 only */ + +/* + * SSP Definitions + */ +typedef struct { + uint8_t lun[8]; + uint8_t reserved0; + DECL_BITFIELD3( + task_attribute :2, + command_priority :4, + enable_first_burst :1); + uint8_t reserved1; + DECL_BITFIELD2( + reserved2 :2, + addi_cdb_len :6); + uint8_t cdb[16]; + /* additional cdb bytes go here, followed by 4 byte CRC */ +} sas_ssp_cmd_iu_t; + +#define SAS_CMD_TASK_ATTR_SIMPLE 0x00 +#define SAS_CMD_TASK_ATTR_HEAD 0x01 +#define SAS_CMD_TASK_ATTR_ORDERED 0x02 +#define SAS_CMD_TASK_ATTR_ACA 0x04 + +typedef struct { + uint8_t reserved0[8]; + uint16_t status_qualifier; + DECL_BITFIELD2( + datapres :2, + reserved1 :6); + uint8_t status; + uint8_t reserved2[4]; + uint32_t sense_data_length; + uint32_t response_data_length; + uint8_t rspd[]; + /* response data followed by sense data goes here */ +} sas_ssp_rsp_iu_t; + +/* length of bytes up to response data */ +#define SAS_RSP_HDR_SIZE 24 + +#define SAS_RSP_DATAPRES_NO_DATA 0x00 +#define SAS_RSP_DATAPRES_RESPONSE_DATA 0x01 +#define SAS_RSP_DATAPRES_SENSE_DATA 0x02 + +/* + * When the RSP IU is type RESPONSE_DATA, + * the first 4 bytes of response data should + * be a Big Endian representation of one of + * these codes. + */ +#define SAS_RSP_TMF_COMPLETE 0x00 +#define SAS_RSP_INVALID_FRAME 0x02 +#define SAS_RSP_TMF_NOT_SUPPORTED 0x04 +#define SAS_RSP_TMF_FAILED 0x05 +#define SAS_RSP_TMF_SUCCEEDED 0x08 +#define SAS_RSP_TMF_INCORRECT_LUN 0x09 +#define SAS_RSP_OVERLAPPED_OIPTTA 0x0A + +/* + * Task Management Functions- should be in a SAM definition file + */ +#define SAS_ABORT_TASK 0x01 +#define SAS_ABORT_TASK_SET 0x02 +#define SAS_CLEAR_TASK_SET 0x04 +#define SAS_LOGICAL_UNIT_RESET 0x08 +#define SAS_I_T_NEXUS_RESET 0x10 +#define SAS_CLEAR_ACA 0x40 +#define SAS_QUERY_TASK 0x80 +#define SAS_QUERY_TASK_SET 0x81 +#define SAS_QUERY_UNIT_ATTENTION 0x82 + +/* + * PHY size changed from SAS1.1 to SAS2. + */ +#define SAS_PHYNUM_MAX 127 +#define SAS_PHYNUM_MASK 0x7f + +#define SAS2_PHYNUM_MAX 254 +#define SAS2_PHYNUM_MASK 0xff + + +/* + * Maximum SMP payload size, including CRC + */ +#define SAS_SMP_MAX_PAYLOAD 1032 +#ifdef __cplusplus +} +#endif +#endif /* _SAS_H */ |
