linux/drivers/scsi/mpt3sas/mpi/mpi2.h

/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright 2000-2020 Broadcom Inc. All rights reserved.
 *
 *
 *          Name:  mpi2.h
 *         Title:  MPI Message independent structures and definitions
 *                 including System Interface Register Set and
 *                 scatter/gather formats.
 * Creation Date:  June 21, 2006
 *
 *  mpi2.h Version:  02.00.54
 *
 * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
 *       prefix are for use only on MPI v2.5 products, and must not be used
 *       with MPI v2.0 products. Unless otherwise noted, names beginning with
 *       MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products.
 *
 * Version History
 * ---------------
 *
 * Date      Version   Description
 * --------  --------  ------------------------------------------------------
 * 04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
 * 06-04-07  02.00.01  Bumped MPI2_HEADER_VERSION_UNIT.
 * 06-26-07  02.00.02  Bumped MPI2_HEADER_VERSION_UNIT.
 * 08-31-07  02.00.03  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Moved ReplyPostHostIndex register to offset 0x6C of the
 *                     MPI2_SYSTEM_INTERFACE_REGS and modified the define for
 *                     MPI2_REPLY_POST_HOST_INDEX_OFFSET.
 *                     Added union of request descriptors.
 *                     Added union of reply descriptors.
 * 10-31-07  02.00.04  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added define for MPI2_VERSION_02_00.
 *                     Fixed the size of the FunctionDependent5 field in the
 *                     MPI2_DEFAULT_REPLY structure.
 * 12-18-07  02.00.05  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Removed the MPI-defined Fault Codes and extended the
 *                     product specific codes up to 0xEFFF.
 *                     Added a sixth key value for the WriteSequence register
 *                     and changed the flush value to 0x0.
 *                     Added message function codes for Diagnostic Buffer Post
 *                     and Diagnsotic Release.
 *                     New IOCStatus define: MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED
 *                     Moved MPI2_VERSION_UNION from mpi2_ioc.h.
 * 02-29-08  02.00.06  Bumped MPI2_HEADER_VERSION_UNIT.
 * 03-03-08  02.00.07  Bumped MPI2_HEADER_VERSION_UNIT.
 * 05-21-08  02.00.08  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added #defines for marking a reply descriptor as unused.
 * 06-27-08  02.00.09  Bumped MPI2_HEADER_VERSION_UNIT.
 * 10-02-08  02.00.10  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Moved LUN field defines from mpi2_init.h.
 * 01-19-09  02.00.11  Bumped MPI2_HEADER_VERSION_UNIT.
 * 05-06-09  02.00.12  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     In all request and reply descriptors, replaced VF_ID
 *                     field with MSIxIndex field.
 *                     Removed DevHandle field from
 *                     MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR and made those
 *                     bytes reserved.
 *                     Added RAID Accelerator functionality.
 * 07-30-09  02.00.13  Bumped MPI2_HEADER_VERSION_UNIT.
 * 10-28-09  02.00.14  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added MSI-x index mask and shift for Reply Post Host
 *                     Index register.
 *                     Added function code for Host Based Discovery Action.
 * 02-10-10  02.00.15  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added define for MPI2_FUNCTION_PWR_MGMT_CONTROL.
 *                     Added defines for product-specific range of message
 *                     function codes, 0xF0 to 0xFF.
 * 05-12-10  02.00.16  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added alternative defines for the SGE Direction bit.
 * 08-11-10  02.00.17  Bumped MPI2_HEADER_VERSION_UNIT.
 * 11-10-10  02.00.18  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added MPI2_IEEE_SGE_FLAGS_SYSTEMPLBCPI_ADDR define.
 * 02-23-11  02.00.19  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added MPI2_FUNCTION_SEND_HOST_MESSAGE.
 * 03-09-11  02.00.20  Bumped MPI2_HEADER_VERSION_UNIT.
 * 05-25-11  02.00.21  Bumped MPI2_HEADER_VERSION_UNIT.
 * 08-24-11  02.00.22  Bumped MPI2_HEADER_VERSION_UNIT.
 * 11-18-11  02.00.23  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Incorporating additions for MPI v2.5.
 * 02-06-12  02.00.24  Bumped MPI2_HEADER_VERSION_UNIT.
 * 03-29-12  02.00.25  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added Hard Reset delay timings.
 * 07-10-12  02.00.26  Bumped MPI2_HEADER_VERSION_UNIT.
 * 07-26-12  02.00.27  Bumped MPI2_HEADER_VERSION_UNIT.
 * 11-27-12  02.00.28  Bumped MPI2_HEADER_VERSION_UNIT.
 * 12-20-12  02.00.29  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET.
 * 04-09-13  02.00.30  Bumped MPI2_HEADER_VERSION_UNIT.
 * 04-17-13  02.00.31  Bumped MPI2_HEADER_VERSION_UNIT.
 * 08-19-13  02.00.32  Bumped MPI2_HEADER_VERSION_UNIT.
 * 12-05-13  02.00.33  Bumped MPI2_HEADER_VERSION_UNIT.
 * 01-08-14  02.00.34  Bumped MPI2_HEADER_VERSION_UNIT
 * 06-13-14  02.00.35  Bumped MPI2_HEADER_VERSION_UNIT.
 * 11-18-14  02.00.36  Updated copyright information.
 *                     Bumped MPI2_HEADER_VERSION_UNIT.
 * 03-16-15  02.00.37  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added Scratchpad registers to
 *                     MPI2_SYSTEM_INTERFACE_REGS.
 *                     Added MPI2_DIAG_SBR_RELOAD.
 * 03-19-15  02.00.38  Bumped MPI2_HEADER_VERSION_UNIT.
 * 05-25-15  02.00.39  Bumped MPI2_HEADER_VERSION_UNIT.
 * 08-25-15  02.00.40  Bumped MPI2_HEADER_VERSION_UNIT.
 * 12-15-15  02.00.41  Bumped MPI_HEADER_VERSION_UNIT
 * 01-01-16  02.00.42  Bumped MPI_HEADER_VERSION_UNIT
 * 04-05-16  02.00.43  Modified  MPI26_DIAG_BOOT_DEVICE_SELECT defines
 *                     to be unique within first 32 characters.
 *                     Removed AHCI support.
 *                     Removed SOP support.
 *                     Bumped MPI2_HEADER_VERSION_UNIT.
 * 04-10-16  02.00.44  Bumped MPI2_HEADER_VERSION_UNIT.
 * 07-06-16  02.00.45  Bumped MPI2_HEADER_VERSION_UNIT.
 * 09-02-16  02.00.46  Bumped MPI2_HEADER_VERSION_UNIT.
 * 11-23-16  02.00.47  Bumped MPI2_HEADER_VERSION_UNIT.
 * 02-03-17  02.00.48  Bumped MPI2_HEADER_VERSION_UNIT.
 * 06-13-17  02.00.49  Bumped MPI2_HEADER_VERSION_UNIT.
 * 09-29-17  02.00.50  Bumped MPI2_HEADER_VERSION_UNIT.
 * 07-22-18  02.00.51  Added SECURE_BOOT define.
 *                     Bumped MPI2_HEADER_VERSION_UNIT
 * 08-15-18  02.00.52  Bumped MPI2_HEADER_VERSION_UNIT.
 * 08-28-18  02.00.53  Bumped MPI2_HEADER_VERSION_UNIT.
 *                     Added MPI2_IOCSTATUS_FAILURE
 * 12-17-18  02.00.54  Bumped MPI2_HEADER_VERSION_UNIT
 * 06-24-19  02.00.55  Bumped MPI2_HEADER_VERSION_UNIT
 * 08-01-19  02.00.56  Bumped MPI2_HEADER_VERSION_UNIT
 * 10-02-19  02.00.57  Bumped MPI2_HEADER_VERSION_UNIT
 *  --------------------------------------------------------------------------
 */

#ifndef MPI2_H
#define MPI2_H

/*****************************************************************************
*
*       MPI Version Definitions
*
*****************************************************************************/

#define MPI2_VERSION_MAJOR_MASK
#define MPI2_VERSION_MAJOR_SHIFT
#define MPI2_VERSION_MINOR_MASK
#define MPI2_VERSION_MINOR_SHIFT

/*major version for all MPI v2.x */
#define MPI2_VERSION_MAJOR

/*minor version for MPI v2.0 compatible products */
#define MPI2_VERSION_MINOR
#define MPI2_VERSION
#define MPI2_VERSION_02_00

/*minor version for MPI v2.5 compatible products */
#define MPI25_VERSION_MINOR
#define MPI25_VERSION
#define MPI2_VERSION_02_05

/*minor version for MPI v2.6 compatible products */
#define MPI26_VERSION_MINOR
#define MPI26_VERSION
#define MPI2_VERSION_02_06


/* Unit and Dev versioning for this MPI header set */
#define MPI2_HEADER_VERSION_UNIT
#define MPI2_HEADER_VERSION_DEV
#define MPI2_HEADER_VERSION_UNIT_MASK
#define MPI2_HEADER_VERSION_UNIT_SHIFT
#define MPI2_HEADER_VERSION_DEV_MASK
#define MPI2_HEADER_VERSION_DEV_SHIFT
#define MPI2_HEADER_VERSION

/*****************************************************************************
*
*       IOC State Definitions
*
*****************************************************************************/

#define MPI2_IOC_STATE_RESET
#define MPI2_IOC_STATE_READY
#define MPI2_IOC_STATE_OPERATIONAL
#define MPI2_IOC_STATE_FAULT
#define MPI2_IOC_STATE_COREDUMP

#define MPI2_IOC_STATE_MASK
#define MPI2_IOC_STATE_SHIFT

/*Fault state range for prodcut specific codes */
#define MPI2_FAULT_PRODUCT_SPECIFIC_MIN
#define MPI2_FAULT_PRODUCT_SPECIFIC_MAX

/*****************************************************************************
*
*       System Interface Register Definitions
*
*****************************************************************************/

pMpi2SystemInterfaceRegs_t;

/*
 *Defines for working with the Doorbell register.
 */
#define MPI2_DOORBELL_OFFSET

/*IOC --> System values */
#define MPI2_DOORBELL_USED
#define MPI2_DOORBELL_WHO_INIT_MASK
#define MPI2_DOORBELL_WHO_INIT_SHIFT
#define MPI2_DOORBELL_FAULT_CODE_MASK
#define MPI2_DOORBELL_DATA_MASK

/*System --> IOC values */
#define MPI2_DOORBELL_FUNCTION_MASK
#define MPI2_DOORBELL_FUNCTION_SHIFT
#define MPI2_DOORBELL_ADD_DWORDS_MASK
#define MPI2_DOORBELL_ADD_DWORDS_SHIFT

/*
 *Defines for the WriteSequence register
 */
#define MPI2_WRITE_SEQUENCE_OFFSET
#define MPI2_WRSEQ_KEY_VALUE_MASK
#define MPI2_WRSEQ_FLUSH_KEY_VALUE
#define MPI2_WRSEQ_1ST_KEY_VALUE
#define MPI2_WRSEQ_2ND_KEY_VALUE
#define MPI2_WRSEQ_3RD_KEY_VALUE
#define MPI2_WRSEQ_4TH_KEY_VALUE
#define MPI2_WRSEQ_5TH_KEY_VALUE
#define MPI2_WRSEQ_6TH_KEY_VALUE

/*
 *Defines for the HostDiagnostic register
 */
#define MPI2_HOST_DIAGNOSTIC_OFFSET

#define MPI26_DIAG_SECURE_BOOT

#define MPI2_DIAG_SBR_RELOAD

#define MPI2_DIAG_BOOT_DEVICE_SELECT_MASK
#define MPI2_DIAG_BOOT_DEVICE_SELECT_DEFAULT
#define MPI2_DIAG_BOOT_DEVICE_SELECT_HCDW

/* Defines for V7A/V7R HostDiagnostic Register */
#define MPI26_DIAG_BOOT_DEVICE_SEL_64FLASH
#define MPI26_DIAG_BOOT_DEVICE_SEL_64HCDW
#define MPI26_DIAG_BOOT_DEVICE_SEL_32FLASH
#define MPI26_DIAG_BOOT_DEVICE_SEL_32HCDW

#define MPI2_DIAG_CLEAR_FLASH_BAD_SIG
#define MPI2_DIAG_FORCE_HCB_ON_RESET
#define MPI2_DIAG_HCB_MODE
#define MPI2_DIAG_DIAG_WRITE_ENABLE
#define MPI2_DIAG_FLASH_BAD_SIG
#define MPI2_DIAG_RESET_HISTORY
#define MPI2_DIAG_DIAG_RW_ENABLE
#define MPI2_DIAG_RESET_ADAPTER
#define MPI2_DIAG_HOLD_IOC_RESET

/*
 *Offsets for DiagRWData and address
 */
#define MPI2_DIAG_RW_DATA_OFFSET
#define MPI2_DIAG_RW_ADDRESS_LOW_OFFSET
#define MPI2_DIAG_RW_ADDRESS_HIGH_OFFSET

/*
 *Defines for the HostInterruptStatus register
 */
#define MPI2_HOST_INTERRUPT_STATUS_OFFSET
#define MPI2_HIS_SYS2IOC_DB_STATUS
#define MPI2_HIS_IOP_DOORBELL_STATUS
#define MPI2_HIS_RESET_IRQ_STATUS
#define MPI2_HIS_REPLY_DESCRIPTOR_INTERRUPT
#define MPI2_HIS_IOC2SYS_DB_STATUS
#define MPI2_HIS_DOORBELL_INTERRUPT

/*
 *Defines for the HostInterruptMask register
 */
#define MPI2_HOST_INTERRUPT_MASK_OFFSET
#define MPI2_HIM_RESET_IRQ_MASK
#define MPI2_HIM_REPLY_INT_MASK
#define MPI2_HIM_RIM
#define MPI2_HIM_IOC2SYS_DB_MASK
#define MPI2_HIM_DIM

/*
 *Offsets for DCRData and address
 */
#define MPI2_DCR_DATA_OFFSET
#define MPI2_DCR_ADDRESS_OFFSET

/*
 *Offset for the Reply Free Queue
 */
#define MPI2_REPLY_FREE_HOST_INDEX_OFFSET

/*
 *Defines for the Reply Descriptor Post Queue
 */
#define MPI2_REPLY_POST_HOST_INDEX_OFFSET
#define MPI2_REPLY_POST_HOST_INDEX_MASK
#define MPI2_RPHI_MSIX_INDEX_MASK
#define MPI2_RPHI_MSIX_INDEX_SHIFT
#define MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET


/*
 *Defines for the HCBSize and address
 */
#define MPI2_HCB_SIZE_OFFSET
#define MPI2_HCB_SIZE_SIZE_MASK
#define MPI2_HCB_SIZE_HCB_ENABLE

#define MPI2_HCB_ADDRESS_LOW_OFFSET
#define MPI2_HCB_ADDRESS_HIGH_OFFSET

/*
 *Offsets for the Scratchpad registers
 */
#define MPI26_SCRATCHPAD0_OFFSET
#define MPI26_SCRATCHPAD1_OFFSET
#define MPI26_SCRATCHPAD2_OFFSET
#define MPI26_SCRATCHPAD3_OFFSET

/*
 *Offsets for the Request Descriptor Post Queue
 */
#define MPI2_REQUEST_DESCRIPTOR_POST_LOW_OFFSET
#define MPI2_REQUEST_DESCRIPTOR_POST_HIGH_OFFSET
#define MPI26_ATOMIC_REQUEST_DESCRIPTOR_POST_OFFSET

/*Hard Reset delay timings */
#define MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC
#define MPI2_HARD_RESET_PCIE_RESET_READ_WINDOW_MICRO_SEC
#define MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC

/*****************************************************************************
*
*       Message Descriptors
*
*****************************************************************************/

/*Request Descriptors */

/*Default Request Descriptor */
pMpi2DefaultRequestDescriptor_t;

/*defines for the RequestFlags field */
#define MPI2_REQ_DESCRIPT_FLAGS_TYPE_MASK
#define MPI2_REQ_DESCRIPT_FLAGS_TYPE_RSHIFT
#define MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO
#define MPI2_REQ_DESCRIPT_FLAGS_SCSI_TARGET
#define MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY
#define MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE
#define MPI2_REQ_DESCRIPT_FLAGS_RAID_ACCELERATOR
#define MPI25_REQ_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO
#define MPI26_REQ_DESCRIPT_FLAGS_PCIE_ENCAPSULATED

#define MPI2_REQ_DESCRIPT_FLAGS_IOC_FIFO_MARKER

/*High Priority Request Descriptor */
pMpi2HighPriorityRequestDescriptor_t;

/*SCSI IO Request Descriptor */
pMpi2SCSIIORequestDescriptor_t;

/*SCSI Target Request Descriptor */
pMpi2SCSITargetRequestDescriptor_t;

/*RAID Accelerator Request Descriptor */
pMpi2RAIDAcceleratorRequestDescriptor_t;

/*Fast Path SCSI IO Request Descriptor */
pMpi25FastPathSCSIIORequestDescriptor_t;

/*PCIe Encapsulated Request Descriptor */
pMpi26PCIeEncapsulatedRequestDescriptor_t;

/*union of Request Descriptors */
pMpi2RequestDescriptorUnion_t;

/*Atomic Request Descriptors */

/*
 * All Atomic Request Descriptors have the same format, so the following
 * structure is used for all Atomic Request Descriptors:
 *      Atomic Default Request Descriptor
 *      Atomic High Priority Request Descriptor
 *      Atomic SCSI IO Request Descriptor
 *      Atomic SCSI Target Request Descriptor
 *      Atomic RAID Accelerator Request Descriptor
 *      Atomic Fast Path SCSI IO Request Descriptor
 *      Atomic PCIe Encapsulated Request Descriptor
 */

/*Atomic Request Descriptor */
pMpi26AtomicRequestDescriptor_t;

/*for the RequestFlags field, use the same
 *defines as MPI2_DEFAULT_REQUEST_DESCRIPTOR
 */

/*Reply Descriptors */

/*Default Reply Descriptor */
pMpi2DefaultReplyDescriptor_t;

/*defines for the ReplyFlags field */
#define MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK
#define MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS
#define MPI2_RPY_DESCRIPT_FLAGS_ADDRESS_REPLY
#define MPI2_RPY_DESCRIPT_FLAGS_TARGETASSIST_SUCCESS
#define MPI2_RPY_DESCRIPT_FLAGS_TARGET_COMMAND_BUFFER
#define MPI2_RPY_DESCRIPT_FLAGS_RAID_ACCELERATOR_SUCCESS
#define MPI25_RPY_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO_SUCCESS
#define MPI26_RPY_DESCRIPT_FLAGS_PCIE_ENCAPSULATED_SUCCESS
#define MPI2_RPY_DESCRIPT_FLAGS_UNUSED

/*values for marking a reply descriptor as unused */
#define MPI2_RPY_DESCRIPT_UNUSED_WORD0_MARK
#define MPI2_RPY_DESCRIPT_UNUSED_WORD1_MARK

/*Address Reply Descriptor */
pMpi2AddressReplyDescriptor_t;

#define MPI2_ADDRESS_REPLY_SMID_INVALID

/*SCSI IO Success Reply Descriptor */
pMpi2SCSIIOSuccessReplyDescriptor_t;

/*TargetAssist Success Reply Descriptor */
pMpi2TargetAssistSuccessReplyDescriptor_t;

/*Target Command Buffer Reply Descriptor */
pMpi2TargetCommandBufferReplyDescriptor_t;

/*defines for Flags field */
#define MPI2_RPY_DESCRIPT_TCB_FLAGS_PHYNUM_MASK

/*RAID Accelerator Success Reply Descriptor */
pMpi2RAIDAcceleratorSuccessReplyDescriptor_t;

/*Fast Path SCSI IO Success Reply Descriptor */
pMpi25FastPathSCSIIOSuccessReplyDescriptor_t;

/*PCIe Encapsulated Success Reply Descriptor */
pMpi26PCIeEncapsulatedSuccessReplyDescriptor_t;

/*union of Reply Descriptors */
pMpi2ReplyDescriptorsUnion_t;

/*****************************************************************************
*
*       Message Functions
*
*****************************************************************************/

#define MPI2_FUNCTION_SCSI_IO_REQUEST
#define MPI2_FUNCTION_SCSI_TASK_MGMT
#define MPI2_FUNCTION_IOC_INIT
#define MPI2_FUNCTION_IOC_FACTS
#define MPI2_FUNCTION_CONFIG
#define MPI2_FUNCTION_PORT_FACTS
#define MPI2_FUNCTION_PORT_ENABLE
#define MPI2_FUNCTION_EVENT_NOTIFICATION
#define MPI2_FUNCTION_EVENT_ACK
#define MPI2_FUNCTION_FW_DOWNLOAD
#define MPI2_FUNCTION_TARGET_ASSIST
#define MPI2_FUNCTION_TARGET_STATUS_SEND
#define MPI2_FUNCTION_TARGET_MODE_ABORT
#define MPI2_FUNCTION_FW_UPLOAD
#define MPI2_FUNCTION_RAID_ACTION
#define MPI2_FUNCTION_RAID_SCSI_IO_PASSTHROUGH
#define MPI2_FUNCTION_TOOLBOX
#define MPI2_FUNCTION_SCSI_ENCLOSURE_PROCESSOR
#define MPI2_FUNCTION_SMP_PASSTHROUGH
#define MPI2_FUNCTION_SAS_IO_UNIT_CONTROL
#define MPI2_FUNCTION_IO_UNIT_CONTROL
#define MPI2_FUNCTION_SATA_PASSTHROUGH
#define MPI2_FUNCTION_DIAG_BUFFER_POST
#define MPI2_FUNCTION_DIAG_RELEASE
#define MPI2_FUNCTION_TARGET_CMD_BUF_BASE_POST
#define MPI2_FUNCTION_TARGET_CMD_BUF_LIST_POST
#define MPI2_FUNCTION_RAID_ACCELERATOR
#define MPI2_FUNCTION_HOST_BASED_DISCOVERY_ACTION
#define MPI2_FUNCTION_PWR_MGMT_CONTROL
#define MPI2_FUNCTION_SEND_HOST_MESSAGE
#define MPI2_FUNCTION_NVME_ENCAPSULATED
#define MPI2_FUNCTION_MIN_PRODUCT_SPECIFIC
#define MPI2_FUNCTION_MAX_PRODUCT_SPECIFIC

/*Doorbell functions */
#define MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET
#define MPI2_FUNCTION_HANDSHAKE

/*****************************************************************************
*
*       IOC Status Values
*
*****************************************************************************/

/*mask for IOCStatus status value */
#define MPI2_IOCSTATUS_MASK

/****************************************************************************
* Common IOCStatus values for all replies
****************************************************************************/

#define MPI2_IOCSTATUS_SUCCESS
#define MPI2_IOCSTATUS_INVALID_FUNCTION
#define MPI2_IOCSTATUS_BUSY
#define MPI2_IOCSTATUS_INVALID_SGL
#define MPI2_IOCSTATUS_INTERNAL_ERROR
#define MPI2_IOCSTATUS_INVALID_VPID
#define MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES
#define MPI2_IOCSTATUS_INVALID_FIELD
#define MPI2_IOCSTATUS_INVALID_STATE
#define MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED
/*MPI v2.6 and later */
#define MPI2_IOCSTATUS_INSUFFICIENT_POWER
#define MPI2_IOCSTATUS_FAILURE

/****************************************************************************
* Config IOCStatus values
****************************************************************************/

#define MPI2_IOCSTATUS_CONFIG_INVALID_ACTION
#define MPI2_IOCSTATUS_CONFIG_INVALID_TYPE
#define MPI2_IOCSTATUS_CONFIG_INVALID_PAGE
#define MPI2_IOCSTATUS_CONFIG_INVALID_DATA
#define MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS
#define MPI2_IOCSTATUS_CONFIG_CANT_COMMIT

/****************************************************************************
* SCSI IO Reply
****************************************************************************/

#define MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR
#define MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE
#define MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE
#define MPI2_IOCSTATUS_SCSI_DATA_OVERRUN
#define MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN
#define MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR
#define MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR
#define MPI2_IOCSTATUS_SCSI_TASK_TERMINATED
#define MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH
#define MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED
#define MPI2_IOCSTATUS_SCSI_IOC_TERMINATED
#define MPI2_IOCSTATUS_SCSI_EXT_TERMINATED

/****************************************************************************
* For use by SCSI Initiator and SCSI Target end-to-end data protection
****************************************************************************/

#define MPI2_IOCSTATUS_EEDP_GUARD_ERROR
#define MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR
#define MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR

/****************************************************************************
* SCSI Target values
****************************************************************************/

#define MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX
#define MPI2_IOCSTATUS_TARGET_ABORTED
#define MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE
#define MPI2_IOCSTATUS_TARGET_NO_CONNECTION
#define MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH
#define MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR
#define MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA
#define MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT
#define MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT
#define MPI2_IOCSTATUS_TARGET_NAK_RECEIVED

/****************************************************************************
* Serial Attached SCSI values
****************************************************************************/

#define MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED
#define MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN

/****************************************************************************
* Diagnostic Buffer Post / Diagnostic Release values
****************************************************************************/

#define MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED

/****************************************************************************
* RAID Accelerator values
****************************************************************************/

#define MPI2_IOCSTATUS_RAID_ACCEL_ERROR

/****************************************************************************
* IOCStatus flag to indicate that log info is available
****************************************************************************/

#define MPI2_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE

/****************************************************************************
* IOCLogInfo Types
****************************************************************************/

#define MPI2_IOCLOGINFO_TYPE_MASK
#define MPI2_IOCLOGINFO_TYPE_SHIFT
#define MPI2_IOCLOGINFO_TYPE_NONE
#define MPI2_IOCLOGINFO_TYPE_SCSI
#define MPI2_IOCLOGINFO_TYPE_FC
#define MPI2_IOCLOGINFO_TYPE_SAS
#define MPI2_IOCLOGINFO_TYPE_ISCSI
#define MPI2_IOCLOGINFO_LOG_DATA_MASK

/*****************************************************************************
*
*       Standard Message Structures
*
*****************************************************************************/

/****************************************************************************
*Request Message Header for all request messages
****************************************************************************/

pMPI2RequestHeader_t;

/****************************************************************************
* Default Reply
****************************************************************************/

pMPI2DefaultReply_t;

/*common version structure/union used in messages and configuration pages */

MPI2_VERSION_STRUCT;

MPI2_VERSION_UNION;

/*LUN field defines, common to many structures */
#define MPI2_LUN_FIRST_LEVEL_ADDRESSING
#define MPI2_LUN_SECOND_LEVEL_ADDRESSING
#define MPI2_LUN_THIRD_LEVEL_ADDRESSING
#define MPI2_LUN_FOURTH_LEVEL_ADDRESSING
#define MPI2_LUN_LEVEL_1_WORD
#define MPI2_LUN_LEVEL_1_DWORD

/*****************************************************************************
*
*       Fusion-MPT MPI Scatter Gather Elements
*
*****************************************************************************/

/****************************************************************************
* MPI Simple Element structures
****************************************************************************/

pMpi2SGESimple32_t;

pMpi2SGESimple64_t;

pMpi2SGESimpleUnion_t;

/****************************************************************************
* MPI Chain Element structures - for MPI v2.0 products only
****************************************************************************/

pMpi2SGEChain32_t;

pMpi2SGEChain64_t;

pMpi2SGEChainUnion_t;

/****************************************************************************
* MPI Transaction Context Element structures - for MPI v2.0 products only
****************************************************************************/

pMpi2SGETransaction32_t;

pMpi2SGETransaction64_t;

pMpi2SGETransaction96_t;

pMpi2SGETransaction_t128;

pMpi2SGETransactionUnion_t;

/****************************************************************************
* MPI SGE union for IO SGL's - for MPI v2.0 products only
****************************************************************************/

pMpi2MpiSGEIOUnion_t;

/****************************************************************************
* MPI SGE union for SGL's with Simple and Transaction elements - for MPI v2.0 products only
****************************************************************************/

pMpi2SGETransSimpleUnion_t;

/****************************************************************************
* All MPI SGE types union
****************************************************************************/

pMpi2MpiSgeUnion_t;

/****************************************************************************
* MPI SGE field definition and masks
****************************************************************************/

/*Flags field bit definitions */

#define MPI2_SGE_FLAGS_LAST_ELEMENT
#define MPI2_SGE_FLAGS_END_OF_BUFFER
#define MPI2_SGE_FLAGS_ELEMENT_TYPE_MASK
#define MPI2_SGE_FLAGS_LOCAL_ADDRESS
#define MPI2_SGE_FLAGS_DIRECTION
#define MPI2_SGE_FLAGS_ADDRESS_SIZE
#define MPI2_SGE_FLAGS_END_OF_LIST

#define MPI2_SGE_FLAGS_SHIFT

#define MPI2_SGE_LENGTH_MASK
#define MPI2_SGE_CHAIN_LENGTH_MASK

/*Element Type */

#define MPI2_SGE_FLAGS_TRANSACTION_ELEMENT
#define MPI2_SGE_FLAGS_SIMPLE_ELEMENT
#define MPI2_SGE_FLAGS_CHAIN_ELEMENT
#define MPI2_SGE_FLAGS_ELEMENT_MASK

/*Address location */

#define MPI2_SGE_FLAGS_SYSTEM_ADDRESS

/*Direction */

#define MPI2_SGE_FLAGS_IOC_TO_HOST
#define MPI2_SGE_FLAGS_HOST_TO_IOC

#define MPI2_SGE_FLAGS_DEST
#define MPI2_SGE_FLAGS_SOURCE

/*Address Size */

#define MPI2_SGE_FLAGS_32_BIT_ADDRESSING
#define MPI2_SGE_FLAGS_64_BIT_ADDRESSING

/*Context Size */

#define MPI2_SGE_FLAGS_32_BIT_CONTEXT
#define MPI2_SGE_FLAGS_64_BIT_CONTEXT
#define MPI2_SGE_FLAGS_96_BIT_CONTEXT
#define MPI2_SGE_FLAGS_128_BIT_CONTEXT

#define MPI2_SGE_CHAIN_OFFSET_MASK
#define MPI2_SGE_CHAIN_OFFSET_SHIFT

/****************************************************************************
* MPI SGE operation Macros
****************************************************************************/

/*SIMPLE FlagsLength manipulations... */
#define MPI2_SGE_SET_FLAGS(f)
#define MPI2_SGE_GET_FLAGS(f)
#define MPI2_SGE_LENGTH(f)
#define MPI2_SGE_CHAIN_LENGTH(f)

#define MPI2_SGE_SET_FLAGS_LENGTH(f, l)

#define MPI2_pSGE_GET_FLAGS(psg)
#define MPI2_pSGE_GET_LENGTH(psg)
#define MPI2_pSGE_SET_FLAGS_LENGTH(psg, f, l)

/*CAUTION - The following are READ-MODIFY-WRITE! */
#define MPI2_pSGE_SET_FLAGS(psg, f)
#define MPI2_pSGE_SET_LENGTH(psg, l)

#define MPI2_GET_CHAIN_OFFSET(x)

/*****************************************************************************
*
*       Fusion-MPT IEEE Scatter Gather Elements
*
*****************************************************************************/

/****************************************************************************
* IEEE Simple Element structures
****************************************************************************/

/*MPI2_IEEE_SGE_SIMPLE32 is for MPI v2.0 products only */
pMpi2IeeeSgeSimple32_t;

pMpi2IeeeSgeSimple64_t;

pMpi2IeeeSgeSimpleUnion_t;

/****************************************************************************
* IEEE Chain Element structures
****************************************************************************/

/*MPI2_IEEE_SGE_CHAIN32 is for MPI v2.0 products only */
MPI2_IEEE_SGE_CHAIN32;

/*MPI2_IEEE_SGE_CHAIN64 is for MPI v2.0 products only */
MPI2_IEEE_SGE_CHAIN64;

pMpi2IeeeSgeChainUnion_t;

/*MPI25_IEEE_SGE_CHAIN64 is for MPI v2.5 and later */
pMpi25IeeeSgeChain64_t;

/****************************************************************************
* All IEEE SGE types union
****************************************************************************/

/*MPI2_IEEE_SGE_UNION is for MPI v2.0 products only */
pMpi2IeeeSgeUnion_t;

/****************************************************************************
* IEEE SGE union for IO SGL's
****************************************************************************/

pMpi25SGEIOUnion_t;

/****************************************************************************
* IEEE SGE field definitions and masks
****************************************************************************/

/*Flags field bit definitions */

#define MPI2_IEEE_SGE_FLAGS_ELEMENT_TYPE_MASK
#define MPI25_IEEE_SGE_FLAGS_END_OF_LIST

#define MPI2_IEEE32_SGE_FLAGS_SHIFT

#define MPI2_IEEE32_SGE_LENGTH_MASK

/*Element Type */

#define MPI2_IEEE_SGE_FLAGS_SIMPLE_ELEMENT
#define MPI2_IEEE_SGE_FLAGS_CHAIN_ELEMENT

/*Next Segment Format */

#define MPI26_IEEE_SGE_FLAGS_NSF_MASK
#define MPI26_IEEE_SGE_FLAGS_NSF_MPI_IEEE
#define MPI26_IEEE_SGE_FLAGS_NSF_NVME_PRP
#define MPI26_IEEE_SGE_FLAGS_NSF_NVME_SGL

/*Data Location Address Space */

#define MPI2_IEEE_SGE_FLAGS_ADDR_MASK
#define MPI2_IEEE_SGE_FLAGS_SYSTEM_ADDR
#define MPI2_IEEE_SGE_FLAGS_IOCDDR_ADDR
#define MPI2_IEEE_SGE_FLAGS_IOCPLB_ADDR
#define MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR
#define MPI2_IEEE_SGE_FLAGS_SYSTEMPLBPCI_ADDR
#define MPI2_IEEE_SGE_FLAGS_SYSTEMPLBCPI_ADDR
#define MPI26_IEEE_SGE_FLAGS_IOCCTL_ADDR

/****************************************************************************
* IEEE SGE operation Macros
****************************************************************************/

/*SIMPLE FlagsLength manipulations... */
#define MPI2_IEEE32_SGE_SET_FLAGS(f)
#define MPI2_IEEE32_SGE_GET_FLAGS(f)
#define MPI2_IEEE32_SGE_LENGTH(f)

#define MPI2_IEEE32_SGE_SET_FLAGS_LENGTH(f, l)

#define MPI2_IEEE32_pSGE_GET_FLAGS(psg)
#define MPI2_IEEE32_pSGE_GET_LENGTH(psg)
#define MPI2_IEEE32_pSGE_SET_FLAGS_LENGTH(psg, f, l)

/*CAUTION - The following are READ-MODIFY-WRITE! */
#define MPI2_IEEE32_pSGE_SET_FLAGS(psg, f)
#define MPI2_IEEE32_pSGE_SET_LENGTH(psg, l)

/*****************************************************************************
*
*       Fusion-MPT MPI/IEEE Scatter Gather Unions
*
*****************************************************************************/

pMpi2SimpleSgeUntion_t;

pMpi2SGEIOUnion_t;

/****************************************************************************
*
* Values for SGLFlags field, used in many request messages with an SGL
*
****************************************************************************/

/*values for MPI SGL Data Location Address Space subfield */
#define MPI2_SGLFLAGS_ADDRESS_SPACE_MASK
#define MPI2_SGLFLAGS_SYSTEM_ADDRESS_SPACE
#define MPI2_SGLFLAGS_IOCDDR_ADDRESS_SPACE
#define MPI2_SGLFLAGS_IOCPLB_ADDRESS_SPACE
#define MPI26_SGLFLAGS_IOCPLB_ADDRESS_SPACE
#define MPI2_SGLFLAGS_IOCPLBNTA_ADDRESS_SPACE
/*values for SGL Type subfield */
#define MPI2_SGLFLAGS_SGL_TYPE_MASK
#define MPI2_SGLFLAGS_SGL_TYPE_MPI
#define MPI2_SGLFLAGS_SGL_TYPE_IEEE32
#define MPI2_SGLFLAGS_SGL_TYPE_IEEE64

#endif