view usr/src/uts/common/sys/scsi/generic/sas.h @ 10696:cd0f390dd9e2

PSARC 2008/672 thebe SAS/SATA driver PSARC 2008/755 ddi_ssoft_state(9F) and ddi_isoft_state(9F) PSARC 2008/764 Cfgadm SCSI-Plugin MPxIO Support PSARC 2009/125 scsi_device property interfaces 6726110 pmcs driver (driver for thebe) 6726867 SCSAv3
author dh142964 <David.Hollister@Sun.COM>
date Wed, 30 Sep 2009 13:40:27 -0600
parents
children
line wrap: on
line source

/*
 * 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 */