Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / sam / devices / sas / include / mpi_init.h
/*
* ========== Copyright Header Begin ==========================================
*
* OpenSPARC T2 Processor File: mpi_init.h
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
*
* The above named program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation.
*
* The above named program is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*
* ========== Copyright Header End ============================================
*/
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_MPI_INIT_H
#define _SYS_MPI_INIT_H
#pragma ident "@(#)mpi_init.h 1.2 04/11/08 SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* SCSI Initiator Messages
*/
/*
* SCSI IO messages and assocaited structures
*/
typedef struct msg_scsi_io_request {
uint8_t TargetID;
uint8_t Bus;
uint8_t ChainOffset;
uint8_t Function;
uint8_t CDBLength;
uint8_t SenseBufferLength;
uint8_t Reserved;
uint8_t MsgFlags;
uint32_t MsgContext;
uint8_t LUN[8];
uint32_t Control;
uint8_t CDB[16];
uint32_t DataLength;
uint32_t SenseBufferLowAddr;
sge_io_union_t SGL;
} msg_scsi_io_request_t;
/* SCSIO MsgFlags bits */
#define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH 0x01
#define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_32 0x00
#define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_64 0x01
#define MPI_SCSIIO_MSGFLGS_SENSE_LOCATION 0x02
#define MPI_SCSIIO_MSGFLGS_SENSE_LOC_HOST 0x00
#define MPI_SCSIIO_MSGFLGS_SENSE_LOC_IOC 0x02
/*
* SCSIIO LUN fields
*/
#define MPI_SCSIIO_LUN_FIRST_LEVEL_ADDRESSING 0x0000FFFF
#define MPI_SCSIIO_LUN_SECOND_LEVEL_ADDRESSING 0xFFFF0000
#define MPI_SCSIIO_LUN_THIRD_LEVEL_ADDRESSING 0x0000FFFF
#define MPI_SCSIIO_LUN_FOURTH_LEVEL_ADDRESSING 0xFFFF0000
#define MPI_SCSIIO_LUN_LEVEL_1_WORD 0xFF00
#define MPI_SCSIIO_LUN_LEVEL_1_DWORD 0x0000FF00
/*
* SCSIO Control bits
*/
#define MPI_SCSIIO_CONTROL_DATADIRECTION_MASK 0x03000000
#define MPI_SCSIIO_CONTROL_NODATATRANSFER 0x00000000
#define MPI_SCSIIO_CONTROL_WRITE 0x01000000
#define MPI_SCSIIO_CONTROL_READ 0x02000000
#define MPI_SCSIIO_CONTROL_ADDCDBLEN_MASK 0x3C000000
#define MPI_SCSIIO_CONTROL_ADDCDBLEN_SHIFT 26
#define MPI_SCSIIO_CONTROL_TASKATTRIBUTE_MASK 0x00000700
#define MPI_SCSIIO_CONTROL_SIMPLEQ 0x00000000
#define MPI_SCSIIO_CONTROL_HEADOFQ 0x00000100
#define MPI_SCSIIO_CONTROL_ORDEREDQ 0x00000200
#define MPI_SCSIIO_CONTROL_ACAQ 0x00000400
#define MPI_SCSIIO_CONTROL_UNTAGGED 0x00000500
#define MPI_SCSIIO_CONTROL_NO_DISCONNECT 0x00000700
#define MPI_SCSIIO_CONTROL_TASKMANAGE_MASK 0x00FF0000
#define MPI_SCSIIO_CONTROL_OBSOLETE 0x00800000
#define MPI_SCSIIO_CONTROL_CLEAR_ACA_RSV 0x00400000
#define MPI_SCSIIO_CONTROL_TARGET_RESET 0x00200000
#define MPI_SCSIIO_CONTROL_LUN_RESET_RSV 0x00100000
#define MPI_SCSIIO_CONTROL_RESERVED 0x00080000
#define MPI_SCSIIO_CONTROL_CLR_TASK_SET_RSV 0x00040000
#define MPI_SCSIIO_CONTROL_ABORT_TASK_SET 0x00020000
#define MPI_SCSIIO_CONTROL_RESERVED2 0x00010000
/*
* SCSIIO reply structure
*/
typedef struct msg_scsi_io_reply {
uint8_t TargetID;
uint8_t Bus;
uint8_t MsgLength;
uint8_t Function;
uint8_t CDBLength;
uint8_t SenseBufferLength;
uint8_t Reserved;
uint8_t MsgFlags;
uint32_t MsgContext;
uint8_t SCSIStatus;
uint8_t SCSIState;
uint16_t IOCStatus;
uint32_t IOCLogInfo;
uint32_t TransferCount;
uint32_t SenseCount;
uint32_t ResponseInfo;
uint16_t TaskTag;
uint16_t Reserved1;
} msg_scsi_io_reply_t;
/*
* SCSIIO Reply SCSIStatus values (SAM-2 status codes)
*/
#define MPI_SCSI_STATUS_SUCCESS 0x00
#define MPI_SCSI_STATUS_CHECK_CONDITION 0x02
#define MPI_SCSI_STATUS_CONDITION_MET 0x04
#define MPI_SCSI_STATUS_BUSY 0x08
#define MPI_SCSI_STATUS_INTERMEDIATE 0x10
#define MPI_SCSI_STATUS_INTERMEDIATE_CONDMET 0x14
#define MPI_SCSI_STATUS_RESERVATION_CONFLICT 0x18
#define MPI_SCSI_STATUS_COMMAND_TERMINATED 0x22
#define MPI_SCSI_STATUS_TASK_SET_FULL 0x28
#define MPI_SCSI_STATUS_ACA_ACTIVE 0x30
/*
* SCSIIO Reply SCSIState values
*/
#define MPI_SCSI_STATE_AUTOSENSE_VALID 0x01
#define MPI_SCSI_STATE_AUTOSENSE_FAILED 0x02
#define MPI_SCSI_STATE_NO_SCSI_STATUS 0x04
#define MPI_SCSI_STATE_TERMINATED 0x08
#define MPI_SCSI_STATE_RESPONSE_INFO_VALID 0x10
#define MPI_SCSI_STATE_QUEUE_TAG_REJECTED 0x20
/*
* SCSIIO Reply ResponseInfo values
* (FCP-1 RSP_CODE values and SPI-3 Packetized Failure codes)
*/
#define MPI_SCSI_RSP_INFO_FUNCTION_COMPLETE 0x00000000
#define MPI_SCSI_RSP_INFO_FCP_BURST_LEN_ERROR 0x01000000
#define MPI_SCSI_RSP_INFO_CMND_FIELDS_INVALID 0x02000000
#define MPI_SCSI_RSP_INFO_FCP_DATA_RO_ERROR 0x03000000
#define MPI_SCSI_RSP_INFO_TASK_MGMT_UNSUPPORTED 0x04000000
#define MPI_SCSI_RSP_INFO_TASK_MGMT_FAILED 0x05000000
#define MPI_SCSI_RSP_INFO_SPI_LQ_INVALID_TYPE 0x06000000
/*
* SCSI Task Management messages
*/
typedef struct msg_scsi_task_mgmt {
uint8_t TargetID;
uint8_t Bus;
uint8_t ChainOffset;
uint8_t Function;
uint8_t Reserved;
uint8_t TaskType;
uint8_t Reserved1;
uint8_t MsgFlags;
uint32_t MsgContext;
uint8_t LUN[8];
uint32_t Reserved2[7];
uint32_t TaskMsgContext;
} msg_scsi_task_mgmt_t;
/*
* TaskType values
*/
#define MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK 0x00000001
#define MPI_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET 0x00000002
#define MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET 0x00000003
#define MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS 0x00000004
#define MPI_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET 0x00000005
/*
* MsgFlags bits
*/
#define MPI_SCSITASKMGMT_MSGFLAGS_TARGET_RESET_OPTION 0x00000000
#define MPI_SCSITASKMGMT_MSGFLAGS_LIP_RESET_OPTION 0x00000002
#define MPI_SCSITASKMGMT_MSGFLAGS_LIPRESET_RESET_OPTION 0x00000004
/* SCSI Task Management Reply */
typedef struct msg_scsi_task_mgmt_reply {
uint8_t TargetID;
uint8_t Bus;
uint8_t MsgLength;
uint8_t Function;
uint8_t Reserved;
uint8_t TaskType;
uint8_t Reserved1;
uint8_t MsgFlags;
uint32_t MsgContext;
uint8_t Reserved2[2];
uint16_t IOCStatus;
uint32_t IOCLogInfo;
uint32_t TerminationCount;
} msg_scsi_task_mgmt_reply_t;
/*
* SCSI enclosure processor messages
*/
typedef struct msg_sep_request {
uint8_t TargetID;
uint8_t Bus;
uint8_t ChainOffset;
uint8_t Function;
uint8_t Action;
uint8_t Reserved1;
uint8_t Reserved2;
uint8_t MsgFlags;
uint32_t MsgContext;
uint32_t SlotStatus;
} msg_sep_request_t;
#define MPI_SEP_REQ_ACTION_WRITE_STATUS 0x00
#define MPI_SEP_REQ_ACTION_READ_STATUS 0x01
#define MPI_SEP_REQ_SLOTSTATUS_NO_ERROR 0x00000001
#define MPI_SEP_REQ_SLOTSTATUS_DEV_FAULTY 0x00000002
#define MPI_SEP_REQ_SLOTSTATUS_DEV_REBUILDING 0x00000004
#ifdef __cplusplus
}
#endif
#endif /* _SYS_MPI_INIT_H */