xref: /openbmc/linux/drivers/message/fusion/lsi/mpi.h (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
3cddc0ab7SPrakash, Sathya  *  Copyright (c) 2000-2008 LSI Corporation.
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  *           Name:  mpi.h
71da177e4SLinus Torvalds  *          Title:  MPI Message independent structures and definitions
81da177e4SLinus Torvalds  *  Creation Date:  July 27, 2000
91da177e4SLinus Torvalds  *
10fd7a2533SKashyap, Desai  *    mpi.h Version:  01.05.16
111da177e4SLinus Torvalds  *
121da177e4SLinus Torvalds  *  Version History
131da177e4SLinus Torvalds  *  ---------------
141da177e4SLinus Torvalds  *
151da177e4SLinus Torvalds  *  Date      Version   Description
161da177e4SLinus Torvalds  *  --------  --------  ------------------------------------------------------
171da177e4SLinus Torvalds  *  05-08-00  00.10.01  Original release for 0.10 spec dated 4/26/2000.
181da177e4SLinus Torvalds  *  05-24-00  00.10.02  Added MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH definition.
191da177e4SLinus Torvalds  *  06-06-00  01.00.01  Update MPI_VERSION_MAJOR and MPI_VERSION_MINOR.
201da177e4SLinus Torvalds  *  06-22-00  01.00.02  Added MPI_IOCSTATUS_LAN_ definitions.
211da177e4SLinus Torvalds  *                      Removed LAN_SUSPEND function definition.
221da177e4SLinus Torvalds  *                      Added MPI_MSGFLAGS_CONTINUATION_REPLY definition.
231da177e4SLinus Torvalds  *  06-30-00  01.00.03  Added MPI_CONTEXT_REPLY_TYPE_LAN definition.
241da177e4SLinus Torvalds  *                      Added MPI_GET/SET_CONTEXT_REPLY_TYPE macros.
251da177e4SLinus Torvalds  *  07-27-00  01.00.04  Added MPI_FAULT_ definitions.
261da177e4SLinus Torvalds  *                      Removed MPI_IOCSTATUS_MSG/DATA_XFER_ERROR definitions.
271da177e4SLinus Torvalds  *                      Added MPI_IOCSTATUS_INTERNAL_ERROR definition.
281da177e4SLinus Torvalds  *                      Added MPI_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH.
291da177e4SLinus Torvalds  *  11-02-00  01.01.01  Original release for post 1.0 work.
301da177e4SLinus Torvalds  *  12-04-00  01.01.02  Added new function codes.
311da177e4SLinus Torvalds  *  01-09-01  01.01.03  Added more definitions to the system interface section
321da177e4SLinus Torvalds  *                      Added MPI_IOCSTATUS_TARGET_STS_DATA_NOT_SENT.
331da177e4SLinus Torvalds  *  01-25-01  01.01.04  Changed MPI_VERSION_MINOR from 0x00 to 0x01.
341da177e4SLinus Torvalds  *  02-20-01  01.01.05  Started using MPI_POINTER.
351da177e4SLinus Torvalds  *                      Fixed value for MPI_DIAG_RW_ENABLE.
361da177e4SLinus Torvalds  *                      Added defines for MPI_DIAG_PREVENT_IOC_BOOT and
371da177e4SLinus Torvalds  *                      MPI_DIAG_CLEAR_FLASH_BAD_SIG.
381da177e4SLinus Torvalds  *                      Obsoleted MPI_IOCSTATUS_TARGET_FC_ defines.
391da177e4SLinus Torvalds  *  02-27-01  01.01.06  Removed MPI_HOST_INDEX_REGISTER define.
401da177e4SLinus Torvalds  *                      Added function codes for RAID.
411da177e4SLinus Torvalds  *  04-09-01  01.01.07  Added alternate define for MPI_DOORBELL_ACTIVE,
421da177e4SLinus Torvalds  *                      MPI_DOORBELL_USED, to better match the spec.
431da177e4SLinus Torvalds  *  08-08-01  01.02.01  Original release for v1.2 work.
441da177e4SLinus Torvalds  *                      Changed MPI_VERSION_MINOR from 0x01 to 0x02.
451da177e4SLinus Torvalds  *                      Added define MPI_FUNCTION_TOOLBOX.
461da177e4SLinus Torvalds  *  09-28-01  01.02.02  New function code MPI_SCSI_ENCLOSURE_PROCESSOR.
471da177e4SLinus Torvalds  *  11-01-01  01.02.03  Changed name to MPI_FUNCTION_SCSI_ENCLOSURE_PROCESSOR.
481da177e4SLinus Torvalds  *  03-14-02  01.02.04  Added MPI_HEADER_VERSION_ defines.
491da177e4SLinus Torvalds  *  05-31-02  01.02.05  Bumped MPI_HEADER_VERSION_UNIT.
501da177e4SLinus Torvalds  *  07-12-02  01.02.06  Added define for MPI_FUNCTION_MAILBOX.
511da177e4SLinus Torvalds  *  09-16-02  01.02.07  Bumped value for MPI_HEADER_VERSION_UNIT.
521da177e4SLinus Torvalds  *  11-15-02  01.02.08  Added define MPI_IOCSTATUS_TARGET_INVALID_IO_INDEX and
531da177e4SLinus Torvalds  *                      obsoleted define MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX.
541da177e4SLinus Torvalds  *  04-01-03  01.02.09  New IOCStatus code: MPI_IOCSTATUS_FC_EXCHANGE_CANCELED
551da177e4SLinus Torvalds  *  06-26-03  01.02.10  Bumped MPI_HEADER_VERSION_UNIT value.
56c1a71d1cSMoore, Eric Dean   *  01-16-04  01.02.11  Added define for MPI_IOCLOGINFO_TYPE_SHIFT.
57c1a71d1cSMoore, Eric Dean   *  04-29-04  01.02.12  Added function codes for MPI_FUNCTION_DIAG_BUFFER_POST
58c1a71d1cSMoore, Eric Dean   *                      and MPI_FUNCTION_DIAG_RELEASE.
59c1a71d1cSMoore, Eric Dean   *                      Added MPI_IOCSTATUS_DIAGNOSTIC_RELEASED define.
60c1a71d1cSMoore, Eric Dean   *                      Bumped MPI_HEADER_VERSION_UNIT value.
61c1a71d1cSMoore, Eric Dean   *  05-11-04  01.03.01  Bumped MPI_VERSION_MINOR for MPI v1.3.
62c1a71d1cSMoore, Eric Dean   *                      Added codes for Inband.
63c1a71d1cSMoore, Eric Dean   *  08-19-04  01.05.01  Added defines for Host Buffer Access Control doorbell.
64c1a71d1cSMoore, Eric Dean   *                      Added define for offset of High Priority Request Queue.
65c1a71d1cSMoore, Eric Dean   *                      Added new function codes and new IOCStatus codes.
66c1a71d1cSMoore, Eric Dean   *                      Added a IOCLogInfo type of SAS.
67c1a71d1cSMoore, Eric Dean   *  12-07-04  01.05.02  Bumped MPI_HEADER_VERSION_UNIT.
68c1a71d1cSMoore, Eric Dean   *  12-09-04  01.05.03  Bumped MPI_HEADER_VERSION_UNIT.
69c1a71d1cSMoore, Eric Dean   *  01-15-05  01.05.04  Bumped MPI_HEADER_VERSION_UNIT.
70c1a71d1cSMoore, Eric Dean   *  02-09-05  01.05.05  Bumped MPI_HEADER_VERSION_UNIT.
71c1a71d1cSMoore, Eric Dean   *  02-22-05  01.05.06  Bumped MPI_HEADER_VERSION_UNIT.
72c1a71d1cSMoore, Eric Dean   *  03-11-05  01.05.07  Removed function codes for SCSI IO 32 and
73c1a71d1cSMoore, Eric Dean   *                      TargetAssistExtended requests.
74c1a71d1cSMoore, Eric Dean   *                      Removed EEDP IOCStatus codes.
75ccf3b7bdSChristoph Hellwig  *  06-24-05  01.05.08  Added function codes for SCSI IO 32 and
76ccf3b7bdSChristoph Hellwig  *                      TargetAssistExtended requests.
77ccf3b7bdSChristoph Hellwig  *                      Added EEDP IOCStatus codes.
784b915a73SMoore, Eric  *  08-03-05  01.05.09  Bumped MPI_HEADER_VERSION_UNIT.
794b915a73SMoore, Eric  *  08-30-05  01.05.10  Added 2 new IOCStatus codes for Target.
802076eb6aSEric Moore  *  03-27-06  01.05.11  Bumped MPI_HEADER_VERSION_UNIT.
81eae225ebSEric Moore  *  10-11-06  01.05.12  Bumped MPI_HEADER_VERSION_UNIT.
82d16291b1SEric Moore  *  05-24-07  01.05.13  Bumped MPI_HEADER_VERSION_UNIT.
83fd7a2533SKashyap, Desai  *  08-07-07  01.05.14  Bumped MPI_HEADER_VERSION_UNIT.
84fd7a2533SKashyap, Desai  *  01-15-08  01.05.15  Bumped MPI_HEADER_VERSION_UNIT.
85fd7a2533SKashyap, Desai  *  03-28-08  01.05.16  Bumped MPI_HEADER_VERSION_UNIT.
861da177e4SLinus Torvalds  *  --------------------------------------------------------------------------
871da177e4SLinus Torvalds  */
881da177e4SLinus Torvalds 
891da177e4SLinus Torvalds #ifndef MPI_H
901da177e4SLinus Torvalds #define MPI_H
911da177e4SLinus Torvalds 
921da177e4SLinus Torvalds 
931da177e4SLinus Torvalds /*****************************************************************************
941da177e4SLinus Torvalds *
951da177e4SLinus Torvalds *        M P I    V e r s i o n    D e f i n i t i o n s
961da177e4SLinus Torvalds *
971da177e4SLinus Torvalds *****************************************************************************/
981da177e4SLinus Torvalds 
991da177e4SLinus Torvalds #define MPI_VERSION_MAJOR                   (0x01)
1001da177e4SLinus Torvalds #define MPI_VERSION_MINOR                   (0x05)
1011da177e4SLinus Torvalds #define MPI_VERSION_MAJOR_MASK              (0xFF00)
1021da177e4SLinus Torvalds #define MPI_VERSION_MAJOR_SHIFT             (8)
1031da177e4SLinus Torvalds #define MPI_VERSION_MINOR_MASK              (0x00FF)
1041da177e4SLinus Torvalds #define MPI_VERSION_MINOR_SHIFT             (0)
1051da177e4SLinus Torvalds #define MPI_VERSION ((MPI_VERSION_MAJOR << MPI_VERSION_MAJOR_SHIFT) |   \
1061da177e4SLinus Torvalds                                       MPI_VERSION_MINOR)
1071da177e4SLinus Torvalds 
1081da177e4SLinus Torvalds #define MPI_VERSION_01_00                   (0x0100)
1091da177e4SLinus Torvalds #define MPI_VERSION_01_01                   (0x0101)
1101da177e4SLinus Torvalds #define MPI_VERSION_01_02                   (0x0102)
1111da177e4SLinus Torvalds #define MPI_VERSION_01_03                   (0x0103)
1121da177e4SLinus Torvalds #define MPI_VERSION_01_05                   (0x0105)
1131da177e4SLinus Torvalds /* Note: The major versions of 0xe0 through 0xff are reserved */
1141da177e4SLinus Torvalds 
1151da177e4SLinus Torvalds /* versioning for this MPI header set */
116fd7a2533SKashyap, Desai #define MPI_HEADER_VERSION_UNIT             (0x13)
1171da177e4SLinus Torvalds #define MPI_HEADER_VERSION_DEV              (0x00)
1181da177e4SLinus Torvalds #define MPI_HEADER_VERSION_UNIT_MASK        (0xFF00)
1191da177e4SLinus Torvalds #define MPI_HEADER_VERSION_UNIT_SHIFT       (8)
1201da177e4SLinus Torvalds #define MPI_HEADER_VERSION_DEV_MASK         (0x00FF)
1211da177e4SLinus Torvalds #define MPI_HEADER_VERSION_DEV_SHIFT        (0)
1221da177e4SLinus Torvalds #define MPI_HEADER_VERSION ((MPI_HEADER_VERSION_UNIT << 8) | MPI_HEADER_VERSION_DEV)
1231da177e4SLinus Torvalds 
1241da177e4SLinus Torvalds /*****************************************************************************
1251da177e4SLinus Torvalds *
1261da177e4SLinus Torvalds *        I O C    S t a t e    D e f i n i t i o n s
1271da177e4SLinus Torvalds *
1281da177e4SLinus Torvalds *****************************************************************************/
1291da177e4SLinus Torvalds 
1301da177e4SLinus Torvalds #define MPI_IOC_STATE_RESET                 (0x00000000)
1311da177e4SLinus Torvalds #define MPI_IOC_STATE_READY                 (0x10000000)
1321da177e4SLinus Torvalds #define MPI_IOC_STATE_OPERATIONAL           (0x20000000)
1331da177e4SLinus Torvalds #define MPI_IOC_STATE_FAULT                 (0x40000000)
1341da177e4SLinus Torvalds 
1351da177e4SLinus Torvalds #define MPI_IOC_STATE_MASK                  (0xF0000000)
1361da177e4SLinus Torvalds #define MPI_IOC_STATE_SHIFT                 (28)
1371da177e4SLinus Torvalds 
1381da177e4SLinus Torvalds /* Fault state codes (product independent range 0x8000-0xFFFF) */
1391da177e4SLinus Torvalds 
1401da177e4SLinus Torvalds #define MPI_FAULT_REQUEST_MESSAGE_PCI_PARITY_ERROR  (0x8111)
1411da177e4SLinus Torvalds #define MPI_FAULT_REQUEST_MESSAGE_PCI_BUS_FAULT     (0x8112)
1421da177e4SLinus Torvalds #define MPI_FAULT_REPLY_MESSAGE_PCI_PARITY_ERROR    (0x8113)
1431da177e4SLinus Torvalds #define MPI_FAULT_REPLY_MESSAGE_PCI_BUS_FAULT       (0x8114)
1441da177e4SLinus Torvalds #define MPI_FAULT_DATA_SEND_PCI_PARITY_ERROR        (0x8115)
1451da177e4SLinus Torvalds #define MPI_FAULT_DATA_SEND_PCI_BUS_FAULT           (0x8116)
1461da177e4SLinus Torvalds #define MPI_FAULT_DATA_RECEIVE_PCI_PARITY_ERROR     (0x8117)
1471da177e4SLinus Torvalds #define MPI_FAULT_DATA_RECEIVE_PCI_BUS_FAULT        (0x8118)
1481da177e4SLinus Torvalds 
1491da177e4SLinus Torvalds 
1501da177e4SLinus Torvalds /*****************************************************************************
1511da177e4SLinus Torvalds *
1521da177e4SLinus Torvalds *        P C I    S y s t e m    I n t e r f a c e    R e g i s t e r s
1531da177e4SLinus Torvalds *
1541da177e4SLinus Torvalds *****************************************************************************/
1551da177e4SLinus Torvalds 
156c1a71d1cSMoore, Eric Dean  /*
157c1a71d1cSMoore, Eric Dean   * Defines for working with the System Doorbell register.
158c1a71d1cSMoore, Eric Dean   * Values for doorbell function codes are included in the section that defines
159c1a71d1cSMoore, Eric Dean   * all the function codes (further on in this file).
160c1a71d1cSMoore, Eric Dean   */
1611da177e4SLinus Torvalds #define MPI_DOORBELL_OFFSET                 (0x00000000)
1621da177e4SLinus Torvalds #define MPI_DOORBELL_ACTIVE                 (0x08000000) /* DoorbellUsed */
1631da177e4SLinus Torvalds #define MPI_DOORBELL_USED                   (MPI_DOORBELL_ACTIVE)
1641da177e4SLinus Torvalds #define MPI_DOORBELL_ACTIVE_SHIFT           (27)
1651da177e4SLinus Torvalds #define MPI_DOORBELL_WHO_INIT_MASK          (0x07000000)
1661da177e4SLinus Torvalds #define MPI_DOORBELL_WHO_INIT_SHIFT         (24)
1671da177e4SLinus Torvalds #define MPI_DOORBELL_FUNCTION_MASK          (0xFF000000)
1681da177e4SLinus Torvalds #define MPI_DOORBELL_FUNCTION_SHIFT         (24)
1691da177e4SLinus Torvalds #define MPI_DOORBELL_ADD_DWORDS_MASK        (0x00FF0000)
1701da177e4SLinus Torvalds #define MPI_DOORBELL_ADD_DWORDS_SHIFT       (16)
1711da177e4SLinus Torvalds #define MPI_DOORBELL_DATA_MASK              (0x0000FFFF)
172c1a71d1cSMoore, Eric Dean  #define MPI_DOORBELL_FUNCTION_SPECIFIC_MASK (0x0000FFFF)
173c1a71d1cSMoore, Eric Dean  
174c1a71d1cSMoore, Eric Dean  /* values for Host Buffer Access Control doorbell function */
175c1a71d1cSMoore, Eric Dean  #define MPI_DB_HPBAC_VALUE_MASK             (0x0000F000)
176c1a71d1cSMoore, Eric Dean  #define MPI_DB_HPBAC_ENABLE_ACCESS          (0x01)
177c1a71d1cSMoore, Eric Dean  #define MPI_DB_HPBAC_DISABLE_ACCESS         (0x02)
178c1a71d1cSMoore, Eric Dean  #define MPI_DB_HPBAC_FREE_BUFFER            (0x03)
1791da177e4SLinus Torvalds 
1801da177e4SLinus Torvalds 
1811da177e4SLinus Torvalds #define MPI_WRITE_SEQUENCE_OFFSET           (0x00000004)
1821da177e4SLinus Torvalds #define MPI_WRSEQ_KEY_VALUE_MASK            (0x0000000F)
1831da177e4SLinus Torvalds #define MPI_WRSEQ_1ST_KEY_VALUE             (0x04)
1841da177e4SLinus Torvalds #define MPI_WRSEQ_2ND_KEY_VALUE             (0x0B)
1851da177e4SLinus Torvalds #define MPI_WRSEQ_3RD_KEY_VALUE             (0x02)
1861da177e4SLinus Torvalds #define MPI_WRSEQ_4TH_KEY_VALUE             (0x07)
1871da177e4SLinus Torvalds #define MPI_WRSEQ_5TH_KEY_VALUE             (0x0D)
1881da177e4SLinus Torvalds 
1891da177e4SLinus Torvalds #define MPI_DIAGNOSTIC_OFFSET               (0x00000008)
1901da177e4SLinus Torvalds #define MPI_DIAG_CLEAR_FLASH_BAD_SIG        (0x00000400)
1911da177e4SLinus Torvalds #define MPI_DIAG_PREVENT_IOC_BOOT           (0x00000200)
1921da177e4SLinus Torvalds #define MPI_DIAG_DRWE                       (0x00000080)
1931da177e4SLinus Torvalds #define MPI_DIAG_FLASH_BAD_SIG              (0x00000040)
1941da177e4SLinus Torvalds #define MPI_DIAG_RESET_HISTORY              (0x00000020)
1951da177e4SLinus Torvalds #define MPI_DIAG_RW_ENABLE                  (0x00000010)
1961da177e4SLinus Torvalds #define MPI_DIAG_RESET_ADAPTER              (0x00000004)
1971da177e4SLinus Torvalds #define MPI_DIAG_DISABLE_ARM                (0x00000002)
1981da177e4SLinus Torvalds #define MPI_DIAG_MEM_ENABLE                 (0x00000001)
1991da177e4SLinus Torvalds 
2001da177e4SLinus Torvalds #define MPI_TEST_BASE_ADDRESS_OFFSET        (0x0000000C)
2011da177e4SLinus Torvalds 
2021da177e4SLinus Torvalds #define MPI_DIAG_RW_DATA_OFFSET             (0x00000010)
2031da177e4SLinus Torvalds 
2041da177e4SLinus Torvalds #define MPI_DIAG_RW_ADDRESS_OFFSET          (0x00000014)
2051da177e4SLinus Torvalds 
2061da177e4SLinus Torvalds #define MPI_HOST_INTERRUPT_STATUS_OFFSET    (0x00000030)
2071da177e4SLinus Torvalds #define MPI_HIS_IOP_DOORBELL_STATUS         (0x80000000)
2081da177e4SLinus Torvalds #define MPI_HIS_REPLY_MESSAGE_INTERRUPT     (0x00000008)
2091da177e4SLinus Torvalds #define MPI_HIS_DOORBELL_INTERRUPT          (0x00000001)
2101da177e4SLinus Torvalds 
2111da177e4SLinus Torvalds #define MPI_HOST_INTERRUPT_MASK_OFFSET      (0x00000034)
2121da177e4SLinus Torvalds #define MPI_HIM_RIM                         (0x00000008)
2131da177e4SLinus Torvalds #define MPI_HIM_DIM                         (0x00000001)
2141da177e4SLinus Torvalds 
2151da177e4SLinus Torvalds #define MPI_REQUEST_QUEUE_OFFSET            (0x00000040)
2161da177e4SLinus Torvalds #define MPI_REQUEST_POST_FIFO_OFFSET        (0x00000040)
2171da177e4SLinus Torvalds 
2181da177e4SLinus Torvalds #define MPI_REPLY_QUEUE_OFFSET              (0x00000044)
2191da177e4SLinus Torvalds #define MPI_REPLY_POST_FIFO_OFFSET          (0x00000044)
2201da177e4SLinus Torvalds #define MPI_REPLY_FREE_FIFO_OFFSET          (0x00000044)
2211da177e4SLinus Torvalds 
2221da177e4SLinus Torvalds #define MPI_HI_PRI_REQUEST_QUEUE_OFFSET     (0x00000048)
2231da177e4SLinus Torvalds 
2241da177e4SLinus Torvalds 
2251da177e4SLinus Torvalds 
2261da177e4SLinus Torvalds /*****************************************************************************
2271da177e4SLinus Torvalds *
2281da177e4SLinus Torvalds *        M e s s a g e    F r a m e    D e s c r i p t o r s
2291da177e4SLinus Torvalds *
2301da177e4SLinus Torvalds *****************************************************************************/
2311da177e4SLinus Torvalds 
2321da177e4SLinus Torvalds #define MPI_REQ_MF_DESCRIPTOR_NB_MASK       (0x00000003)
2331da177e4SLinus Torvalds #define MPI_REQ_MF_DESCRIPTOR_F_BIT         (0x00000004)
2341da177e4SLinus Torvalds #define MPI_REQ_MF_DESCRIPTOR_ADDRESS_MASK  (0xFFFFFFF8)
2351da177e4SLinus Torvalds 
2361da177e4SLinus Torvalds #define MPI_ADDRESS_REPLY_A_BIT             (0x80000000)
2371da177e4SLinus Torvalds #define MPI_ADDRESS_REPLY_ADDRESS_MASK      (0x7FFFFFFF)
2381da177e4SLinus Torvalds 
2391da177e4SLinus Torvalds #define MPI_CONTEXT_REPLY_A_BIT             (0x80000000)
2401da177e4SLinus Torvalds #define MPI_CONTEXT_REPLY_TYPE_MASK         (0x60000000)
2411da177e4SLinus Torvalds #define MPI_CONTEXT_REPLY_TYPE_SCSI_INIT    (0x00)
2421da177e4SLinus Torvalds #define MPI_CONTEXT_REPLY_TYPE_SCSI_TARGET  (0x01)
2431da177e4SLinus Torvalds #define MPI_CONTEXT_REPLY_TYPE_LAN          (0x02)
2441da177e4SLinus Torvalds #define MPI_CONTEXT_REPLY_TYPE_SHIFT        (29)
2451da177e4SLinus Torvalds #define MPI_CONTEXT_REPLY_CONTEXT_MASK      (0x1FFFFFFF)
2461da177e4SLinus Torvalds 
2471da177e4SLinus Torvalds 
2481da177e4SLinus Torvalds /****************************************************************************/
2491da177e4SLinus Torvalds /* Context Reply macros                                                     */
2501da177e4SLinus Torvalds /****************************************************************************/
2511da177e4SLinus Torvalds 
2521da177e4SLinus Torvalds #define MPI_GET_CONTEXT_REPLY_TYPE(x)  (((x) & MPI_CONTEXT_REPLY_TYPE_MASK) \
2531da177e4SLinus Torvalds                                           >> MPI_CONTEXT_REPLY_TYPE_SHIFT)
2541da177e4SLinus Torvalds 
2551da177e4SLinus Torvalds #define MPI_SET_CONTEXT_REPLY_TYPE(x, typ)                                  \
2561da177e4SLinus Torvalds             ((x) = ((x) & ~MPI_CONTEXT_REPLY_TYPE_MASK) |                   \
2571da177e4SLinus Torvalds                             (((typ) << MPI_CONTEXT_REPLY_TYPE_SHIFT) &      \
2581da177e4SLinus Torvalds                                         MPI_CONTEXT_REPLY_TYPE_MASK))
2591da177e4SLinus Torvalds 
2601da177e4SLinus Torvalds 
2611da177e4SLinus Torvalds /*****************************************************************************
2621da177e4SLinus Torvalds *
2631da177e4SLinus Torvalds *        M e s s a g e    F u n c t i o n s
2641da177e4SLinus Torvalds *              0x80 -> 0x8F reserved for private message use per product
2651da177e4SLinus Torvalds *
2661da177e4SLinus Torvalds *
2671da177e4SLinus Torvalds *****************************************************************************/
2681da177e4SLinus Torvalds 
2691da177e4SLinus Torvalds #define MPI_FUNCTION_SCSI_IO_REQUEST                (0x00)
2701da177e4SLinus Torvalds #define MPI_FUNCTION_SCSI_TASK_MGMT                 (0x01)
2711da177e4SLinus Torvalds #define MPI_FUNCTION_IOC_INIT                       (0x02)
2721da177e4SLinus Torvalds #define MPI_FUNCTION_IOC_FACTS                      (0x03)
2731da177e4SLinus Torvalds #define MPI_FUNCTION_CONFIG                         (0x04)
2741da177e4SLinus Torvalds #define MPI_FUNCTION_PORT_FACTS                     (0x05)
2751da177e4SLinus Torvalds #define MPI_FUNCTION_PORT_ENABLE                    (0x06)
2761da177e4SLinus Torvalds #define MPI_FUNCTION_EVENT_NOTIFICATION             (0x07)
2771da177e4SLinus Torvalds #define MPI_FUNCTION_EVENT_ACK                      (0x08)
2781da177e4SLinus Torvalds #define MPI_FUNCTION_FW_DOWNLOAD                    (0x09)
2791da177e4SLinus Torvalds #define MPI_FUNCTION_TARGET_CMD_BUFFER_POST         (0x0A)
2801da177e4SLinus Torvalds #define MPI_FUNCTION_TARGET_ASSIST                  (0x0B)
2811da177e4SLinus Torvalds #define MPI_FUNCTION_TARGET_STATUS_SEND             (0x0C)
2821da177e4SLinus Torvalds #define MPI_FUNCTION_TARGET_MODE_ABORT              (0x0D)
2831da177e4SLinus Torvalds #define MPI_FUNCTION_FC_LINK_SRVC_BUF_POST          (0x0E)
2841da177e4SLinus Torvalds #define MPI_FUNCTION_FC_LINK_SRVC_RSP               (0x0F)
2851da177e4SLinus Torvalds #define MPI_FUNCTION_FC_EX_LINK_SRVC_SEND           (0x10)
2861da177e4SLinus Torvalds #define MPI_FUNCTION_FC_ABORT                       (0x11)
2871da177e4SLinus Torvalds #define MPI_FUNCTION_FW_UPLOAD                      (0x12)
2881da177e4SLinus Torvalds #define MPI_FUNCTION_FC_COMMON_TRANSPORT_SEND       (0x13)
2891da177e4SLinus Torvalds #define MPI_FUNCTION_FC_PRIMITIVE_SEND              (0x14)
2901da177e4SLinus Torvalds 
2911da177e4SLinus Torvalds #define MPI_FUNCTION_RAID_ACTION                    (0x15)
2921da177e4SLinus Torvalds #define MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH       (0x16)
2931da177e4SLinus Torvalds 
2941da177e4SLinus Torvalds #define MPI_FUNCTION_TOOLBOX                        (0x17)
2951da177e4SLinus Torvalds 
2961da177e4SLinus Torvalds #define MPI_FUNCTION_SCSI_ENCLOSURE_PROCESSOR       (0x18)
2971da177e4SLinus Torvalds 
2981da177e4SLinus Torvalds #define MPI_FUNCTION_MAILBOX                        (0x19)
2991da177e4SLinus Torvalds 
3001da177e4SLinus Torvalds #define MPI_FUNCTION_SMP_PASSTHROUGH                (0x1A)
3011da177e4SLinus Torvalds #define MPI_FUNCTION_SAS_IO_UNIT_CONTROL            (0x1B)
302c1a71d1cSMoore, Eric Dean  #define MPI_FUNCTION_SATA_PASSTHROUGH               (0x1C)
3031da177e4SLinus Torvalds 
304c1a71d1cSMoore, Eric Dean  #define MPI_FUNCTION_DIAG_BUFFER_POST               (0x1D)
305c1a71d1cSMoore, Eric Dean  #define MPI_FUNCTION_DIAG_RELEASE                   (0x1E)
3061da177e4SLinus Torvalds 
307ccf3b7bdSChristoph Hellwig #define MPI_FUNCTION_SCSI_IO_32                     (0x1F)
308ccf3b7bdSChristoph Hellwig 
3091da177e4SLinus Torvalds #define MPI_FUNCTION_LAN_SEND                       (0x20)
3101da177e4SLinus Torvalds #define MPI_FUNCTION_LAN_RECEIVE                    (0x21)
3111da177e4SLinus Torvalds #define MPI_FUNCTION_LAN_RESET                      (0x22)
3121da177e4SLinus Torvalds 
313ccf3b7bdSChristoph Hellwig #define MPI_FUNCTION_TARGET_ASSIST_EXTENDED         (0x23)
314c1a71d1cSMoore, Eric Dean  #define MPI_FUNCTION_TARGET_CMD_BUF_BASE_POST       (0x24)
315c1a71d1cSMoore, Eric Dean  #define MPI_FUNCTION_TARGET_CMD_BUF_LIST_POST       (0x25)
316c1a71d1cSMoore, Eric Dean  
3171da177e4SLinus Torvalds #define MPI_FUNCTION_INBAND_BUFFER_POST             (0x28)
3181da177e4SLinus Torvalds #define MPI_FUNCTION_INBAND_SEND                    (0x29)
3191da177e4SLinus Torvalds #define MPI_FUNCTION_INBAND_RSP                     (0x2A)
3201da177e4SLinus Torvalds #define MPI_FUNCTION_INBAND_ABORT                   (0x2B)
3211da177e4SLinus Torvalds 
3221da177e4SLinus Torvalds #define MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET         (0x40)
3231da177e4SLinus Torvalds #define MPI_FUNCTION_IO_UNIT_RESET                  (0x41)
3241da177e4SLinus Torvalds #define MPI_FUNCTION_HANDSHAKE                      (0x42)
3251da177e4SLinus Torvalds #define MPI_FUNCTION_REPLY_FRAME_REMOVAL            (0x43)
326c1a71d1cSMoore, Eric Dean  #define MPI_FUNCTION_HOST_PAGEBUF_ACCESS_CONTROL    (0x44)
3271da177e4SLinus Torvalds 
3281da177e4SLinus Torvalds 
3291da177e4SLinus Torvalds /* standard version format */
3301da177e4SLinus Torvalds typedef struct _MPI_VERSION_STRUCT
3311da177e4SLinus Torvalds {
3321da177e4SLinus Torvalds     U8                      Dev;                        /* 00h */
3331da177e4SLinus Torvalds     U8                      Unit;                       /* 01h */
3341da177e4SLinus Torvalds     U8                      Minor;                      /* 02h */
3351da177e4SLinus Torvalds     U8                      Major;                      /* 03h */
3361da177e4SLinus Torvalds } MPI_VERSION_STRUCT, MPI_POINTER PTR_MPI_VERSION_STRUCT,
3371da177e4SLinus Torvalds   MpiVersionStruct_t, MPI_POINTER pMpiVersionStruct;
3381da177e4SLinus Torvalds 
3391da177e4SLinus Torvalds typedef union _MPI_VERSION_FORMAT
3401da177e4SLinus Torvalds {
3411da177e4SLinus Torvalds     MPI_VERSION_STRUCT      Struct;
3421da177e4SLinus Torvalds     U32                     Word;
3431da177e4SLinus Torvalds } MPI_VERSION_FORMAT, MPI_POINTER PTR_MPI_VERSION_FORMAT,
3441da177e4SLinus Torvalds   MpiVersionFormat_t, MPI_POINTER pMpiVersionFormat_t;
3451da177e4SLinus Torvalds 
3461da177e4SLinus Torvalds 
3471da177e4SLinus Torvalds /*****************************************************************************
3481da177e4SLinus Torvalds *
3491da177e4SLinus Torvalds *        S c a t t e r    G a t h e r    E l e m e n t s
3501da177e4SLinus Torvalds *
3511da177e4SLinus Torvalds *****************************************************************************/
3521da177e4SLinus Torvalds 
3531da177e4SLinus Torvalds /****************************************************************************/
3541da177e4SLinus Torvalds /*  Simple element structures                                               */
3551da177e4SLinus Torvalds /****************************************************************************/
3561da177e4SLinus Torvalds 
3571da177e4SLinus Torvalds typedef struct _SGE_SIMPLE32
3581da177e4SLinus Torvalds {
3591da177e4SLinus Torvalds     U32                     FlagsLength;
3601da177e4SLinus Torvalds     U32                     Address;
3611da177e4SLinus Torvalds } SGE_SIMPLE32, MPI_POINTER PTR_SGE_SIMPLE32,
3621da177e4SLinus Torvalds   SGESimple32_t, MPI_POINTER pSGESimple32_t;
3631da177e4SLinus Torvalds 
3641da177e4SLinus Torvalds typedef struct _SGE_SIMPLE64
3651da177e4SLinus Torvalds {
3661da177e4SLinus Torvalds     U32                     FlagsLength;
3671da177e4SLinus Torvalds     U64                     Address;
3681da177e4SLinus Torvalds } SGE_SIMPLE64, MPI_POINTER PTR_SGE_SIMPLE64,
3691da177e4SLinus Torvalds   SGESimple64_t, MPI_POINTER pSGESimple64_t;
3701da177e4SLinus Torvalds 
3711da177e4SLinus Torvalds typedef struct _SGE_SIMPLE_UNION
3721da177e4SLinus Torvalds {
3731da177e4SLinus Torvalds     U32                     FlagsLength;
3741da177e4SLinus Torvalds     union
3751da177e4SLinus Torvalds     {
3761da177e4SLinus Torvalds         U32                 Address32;
3771da177e4SLinus Torvalds         U64                 Address64;
3781da177e4SLinus Torvalds     }u;
379c1a71d1cSMoore, Eric Dean  } SGE_SIMPLE_UNION, MPI_POINTER PTR_SGE_SIMPLE_UNION,
380c1a71d1cSMoore, Eric Dean    SGESimpleUnion_t, MPI_POINTER pSGESimpleUnion_t;
3811da177e4SLinus Torvalds 
3821da177e4SLinus Torvalds /****************************************************************************/
3831da177e4SLinus Torvalds /*  Chain element structures                                                */
3841da177e4SLinus Torvalds /****************************************************************************/
3851da177e4SLinus Torvalds 
3861da177e4SLinus Torvalds typedef struct _SGE_CHAIN32
3871da177e4SLinus Torvalds {
3881da177e4SLinus Torvalds     U16                     Length;
3891da177e4SLinus Torvalds     U8                      NextChainOffset;
3901da177e4SLinus Torvalds     U8                      Flags;
3911da177e4SLinus Torvalds     U32                     Address;
3921da177e4SLinus Torvalds } SGE_CHAIN32, MPI_POINTER PTR_SGE_CHAIN32,
3931da177e4SLinus Torvalds   SGEChain32_t, MPI_POINTER pSGEChain32_t;
3941da177e4SLinus Torvalds 
3951da177e4SLinus Torvalds typedef struct _SGE_CHAIN64
3961da177e4SLinus Torvalds {
3971da177e4SLinus Torvalds     U16                     Length;
3981da177e4SLinus Torvalds     U8                      NextChainOffset;
3991da177e4SLinus Torvalds     U8                      Flags;
4001da177e4SLinus Torvalds     U64                     Address;
4011da177e4SLinus Torvalds } SGE_CHAIN64, MPI_POINTER PTR_SGE_CHAIN64,
4021da177e4SLinus Torvalds   SGEChain64_t, MPI_POINTER pSGEChain64_t;
4031da177e4SLinus Torvalds 
4041da177e4SLinus Torvalds typedef struct _SGE_CHAIN_UNION
4051da177e4SLinus Torvalds {
4061da177e4SLinus Torvalds     U16                     Length;
4071da177e4SLinus Torvalds     U8                      NextChainOffset;
4081da177e4SLinus Torvalds     U8                      Flags;
4091da177e4SLinus Torvalds     union
4101da177e4SLinus Torvalds     {
4111da177e4SLinus Torvalds         U32                 Address32;
4121da177e4SLinus Torvalds         U64                 Address64;
4131da177e4SLinus Torvalds     }u;
4141da177e4SLinus Torvalds } SGE_CHAIN_UNION, MPI_POINTER PTR_SGE_CHAIN_UNION,
4151da177e4SLinus Torvalds   SGEChainUnion_t, MPI_POINTER pSGEChainUnion_t;
4161da177e4SLinus Torvalds 
4171da177e4SLinus Torvalds /****************************************************************************/
4181da177e4SLinus Torvalds /*  Transaction Context element                                             */
4191da177e4SLinus Torvalds /****************************************************************************/
4201da177e4SLinus Torvalds 
4211da177e4SLinus Torvalds typedef struct _SGE_TRANSACTION32
4221da177e4SLinus Torvalds {
4231da177e4SLinus Torvalds     U8                      Reserved;
4241da177e4SLinus Torvalds     U8                      ContextSize;
4251da177e4SLinus Torvalds     U8                      DetailsLength;
4261da177e4SLinus Torvalds     U8                      Flags;
427*4e2e619fSGustavo A. R. Silva     U32                     TransactionContext;
428*4e2e619fSGustavo A. R. Silva     U32                     TransactionDetails[];
4291da177e4SLinus Torvalds } SGE_TRANSACTION32, MPI_POINTER PTR_SGE_TRANSACTION32,
4301da177e4SLinus Torvalds   SGETransaction32_t, MPI_POINTER pSGETransaction32_t;
4311da177e4SLinus Torvalds 
4321da177e4SLinus Torvalds typedef struct _SGE_TRANSACTION64
4331da177e4SLinus Torvalds {
4341da177e4SLinus Torvalds     U8                      Reserved;
4351da177e4SLinus Torvalds     U8                      ContextSize;
4361da177e4SLinus Torvalds     U8                      DetailsLength;
4371da177e4SLinus Torvalds     U8                      Flags;
4381da177e4SLinus Torvalds     U32                     TransactionContext[2];
4391da177e4SLinus Torvalds     U32                     TransactionDetails[1];
4401da177e4SLinus Torvalds } SGE_TRANSACTION64, MPI_POINTER PTR_SGE_TRANSACTION64,
4411da177e4SLinus Torvalds   SGETransaction64_t, MPI_POINTER pSGETransaction64_t;
4421da177e4SLinus Torvalds 
4431da177e4SLinus Torvalds typedef struct _SGE_TRANSACTION96
4441da177e4SLinus Torvalds {
4451da177e4SLinus Torvalds     U8                      Reserved;
4461da177e4SLinus Torvalds     U8                      ContextSize;
4471da177e4SLinus Torvalds     U8                      DetailsLength;
4481da177e4SLinus Torvalds     U8                      Flags;
4491da177e4SLinus Torvalds     U32                     TransactionContext[3];
4501da177e4SLinus Torvalds     U32                     TransactionDetails[1];
4511da177e4SLinus Torvalds } SGE_TRANSACTION96, MPI_POINTER PTR_SGE_TRANSACTION96,
4521da177e4SLinus Torvalds   SGETransaction96_t, MPI_POINTER pSGETransaction96_t;
4531da177e4SLinus Torvalds 
4541da177e4SLinus Torvalds typedef struct _SGE_TRANSACTION128
4551da177e4SLinus Torvalds {
4561da177e4SLinus Torvalds     U8                      Reserved;
4571da177e4SLinus Torvalds     U8                      ContextSize;
4581da177e4SLinus Torvalds     U8                      DetailsLength;
4591da177e4SLinus Torvalds     U8                      Flags;
4601da177e4SLinus Torvalds     U32                     TransactionContext[4];
4611da177e4SLinus Torvalds     U32                     TransactionDetails[1];
4621da177e4SLinus Torvalds } SGE_TRANSACTION128, MPI_POINTER PTR_SGE_TRANSACTION128,
4631da177e4SLinus Torvalds   SGETransaction_t128, MPI_POINTER pSGETransaction_t128;
4641da177e4SLinus Torvalds 
4651da177e4SLinus Torvalds typedef struct _SGE_TRANSACTION_UNION
4661da177e4SLinus Torvalds {
4671da177e4SLinus Torvalds     U8                      Reserved;
4681da177e4SLinus Torvalds     U8                      ContextSize;
4691da177e4SLinus Torvalds     U8                      DetailsLength;
4701da177e4SLinus Torvalds     U8                      Flags;
4711da177e4SLinus Torvalds     union
4721da177e4SLinus Torvalds     {
4731da177e4SLinus Torvalds         U32                 TransactionContext32[1];
4741da177e4SLinus Torvalds         U32                 TransactionContext64[2];
4751da177e4SLinus Torvalds         U32                 TransactionContext96[3];
4761da177e4SLinus Torvalds         U32                 TransactionContext128[4];
4771da177e4SLinus Torvalds     }u;
4781da177e4SLinus Torvalds     U32                     TransactionDetails[1];
4791da177e4SLinus Torvalds } SGE_TRANSACTION_UNION, MPI_POINTER PTR_SGE_TRANSACTION_UNION,
4801da177e4SLinus Torvalds   SGETransactionUnion_t, MPI_POINTER pSGETransactionUnion_t;
4811da177e4SLinus Torvalds 
4821da177e4SLinus Torvalds 
4831da177e4SLinus Torvalds /****************************************************************************/
4841da177e4SLinus Torvalds /*  SGE IO types union  for IO SGL's                                        */
4851da177e4SLinus Torvalds /****************************************************************************/
4861da177e4SLinus Torvalds 
4871da177e4SLinus Torvalds typedef struct _SGE_IO_UNION
4881da177e4SLinus Torvalds {
4891da177e4SLinus Torvalds     union
4901da177e4SLinus Torvalds     {
4911da177e4SLinus Torvalds         SGE_SIMPLE_UNION    Simple;
4921da177e4SLinus Torvalds         SGE_CHAIN_UNION     Chain;
4931da177e4SLinus Torvalds     } u;
4941da177e4SLinus Torvalds } SGE_IO_UNION, MPI_POINTER PTR_SGE_IO_UNION,
4951da177e4SLinus Torvalds   SGEIOUnion_t, MPI_POINTER pSGEIOUnion_t;
4961da177e4SLinus Torvalds 
4971da177e4SLinus Torvalds /****************************************************************************/
4981da177e4SLinus Torvalds /*  SGE union for SGL's with Simple and Transaction elements                */
4991da177e4SLinus Torvalds /****************************************************************************/
5001da177e4SLinus Torvalds 
5011da177e4SLinus Torvalds typedef struct _SGE_TRANS_SIMPLE_UNION
5021da177e4SLinus Torvalds {
5031da177e4SLinus Torvalds     union
5041da177e4SLinus Torvalds     {
5051da177e4SLinus Torvalds         SGE_SIMPLE_UNION        Simple;
5061da177e4SLinus Torvalds         SGE_TRANSACTION_UNION   Transaction;
5071da177e4SLinus Torvalds     } u;
5081da177e4SLinus Torvalds } SGE_TRANS_SIMPLE_UNION, MPI_POINTER PTR_SGE_TRANS_SIMPLE_UNION,
5091da177e4SLinus Torvalds   SGETransSimpleUnion_t, MPI_POINTER pSGETransSimpleUnion_t;
5101da177e4SLinus Torvalds 
5111da177e4SLinus Torvalds /****************************************************************************/
5121da177e4SLinus Torvalds /*  All SGE types union                                                     */
5131da177e4SLinus Torvalds /****************************************************************************/
5141da177e4SLinus Torvalds 
5151da177e4SLinus Torvalds typedef struct _SGE_MPI_UNION
5161da177e4SLinus Torvalds {
5171da177e4SLinus Torvalds     union
5181da177e4SLinus Torvalds     {
5191da177e4SLinus Torvalds         SGE_SIMPLE_UNION        Simple;
5201da177e4SLinus Torvalds         SGE_CHAIN_UNION         Chain;
5211da177e4SLinus Torvalds         SGE_TRANSACTION_UNION   Transaction;
5221da177e4SLinus Torvalds     } u;
5231da177e4SLinus Torvalds } SGE_MPI_UNION, MPI_POINTER PTR_SGE_MPI_UNION,
5241da177e4SLinus Torvalds   MPI_SGE_UNION_t, MPI_POINTER pMPI_SGE_UNION_t,
5251da177e4SLinus Torvalds   SGEAllUnion_t, MPI_POINTER pSGEAllUnion_t;
5261da177e4SLinus Torvalds 
5271da177e4SLinus Torvalds 
5281da177e4SLinus Torvalds /****************************************************************************/
5291da177e4SLinus Torvalds /*  SGE field definition and masks                                          */
5301da177e4SLinus Torvalds /****************************************************************************/
5311da177e4SLinus Torvalds 
5321da177e4SLinus Torvalds /* Flags field bit definitions */
5331da177e4SLinus Torvalds 
5341da177e4SLinus Torvalds #define MPI_SGE_FLAGS_LAST_ELEMENT              (0x80)
5351da177e4SLinus Torvalds #define MPI_SGE_FLAGS_END_OF_BUFFER             (0x40)
5361da177e4SLinus Torvalds #define MPI_SGE_FLAGS_ELEMENT_TYPE_MASK         (0x30)
5371da177e4SLinus Torvalds #define MPI_SGE_FLAGS_LOCAL_ADDRESS             (0x08)
5381da177e4SLinus Torvalds #define MPI_SGE_FLAGS_DIRECTION                 (0x04)
5391da177e4SLinus Torvalds #define MPI_SGE_FLAGS_ADDRESS_SIZE              (0x02)
5401da177e4SLinus Torvalds #define MPI_SGE_FLAGS_END_OF_LIST               (0x01)
5411da177e4SLinus Torvalds 
5421da177e4SLinus Torvalds #define MPI_SGE_FLAGS_SHIFT                     (24)
5431da177e4SLinus Torvalds 
5441da177e4SLinus Torvalds #define MPI_SGE_LENGTH_MASK                     (0x00FFFFFF)
5451da177e4SLinus Torvalds #define MPI_SGE_CHAIN_LENGTH_MASK               (0x0000FFFF)
5461da177e4SLinus Torvalds 
5471da177e4SLinus Torvalds /* Element Type */
5481da177e4SLinus Torvalds 
5491da177e4SLinus Torvalds #define MPI_SGE_FLAGS_TRANSACTION_ELEMENT       (0x00)
5501da177e4SLinus Torvalds #define MPI_SGE_FLAGS_SIMPLE_ELEMENT            (0x10)
5511da177e4SLinus Torvalds #define MPI_SGE_FLAGS_CHAIN_ELEMENT             (0x30)
5521da177e4SLinus Torvalds #define MPI_SGE_FLAGS_ELEMENT_MASK              (0x30)
5531da177e4SLinus Torvalds 
5541da177e4SLinus Torvalds /* Address location */
5551da177e4SLinus Torvalds 
5561da177e4SLinus Torvalds #define MPI_SGE_FLAGS_SYSTEM_ADDRESS            (0x00)
5571da177e4SLinus Torvalds 
5581da177e4SLinus Torvalds /* Direction */
5591da177e4SLinus Torvalds 
5601da177e4SLinus Torvalds #define MPI_SGE_FLAGS_IOC_TO_HOST               (0x00)
5611da177e4SLinus Torvalds #define MPI_SGE_FLAGS_HOST_TO_IOC               (0x04)
5621da177e4SLinus Torvalds 
5631da177e4SLinus Torvalds /* Address Size */
5641da177e4SLinus Torvalds 
5651da177e4SLinus Torvalds #define MPI_SGE_FLAGS_32_BIT_ADDRESSING         (0x00)
5661da177e4SLinus Torvalds #define MPI_SGE_FLAGS_64_BIT_ADDRESSING         (0x02)
5671da177e4SLinus Torvalds 
5681da177e4SLinus Torvalds /* Context Size */
5691da177e4SLinus Torvalds 
5701da177e4SLinus Torvalds #define MPI_SGE_FLAGS_32_BIT_CONTEXT            (0x00)
5711da177e4SLinus Torvalds #define MPI_SGE_FLAGS_64_BIT_CONTEXT            (0x02)
5721da177e4SLinus Torvalds #define MPI_SGE_FLAGS_96_BIT_CONTEXT            (0x04)
5731da177e4SLinus Torvalds #define MPI_SGE_FLAGS_128_BIT_CONTEXT           (0x06)
5741da177e4SLinus Torvalds 
5751da177e4SLinus Torvalds #define MPI_SGE_CHAIN_OFFSET_MASK               (0x00FF0000)
5761da177e4SLinus Torvalds #define MPI_SGE_CHAIN_OFFSET_SHIFT              (16)
5771da177e4SLinus Torvalds 
5781da177e4SLinus Torvalds 
5791da177e4SLinus Torvalds /****************************************************************************/
5801da177e4SLinus Torvalds /*  SGE operation Macros                                                    */
5811da177e4SLinus Torvalds /****************************************************************************/
5821da177e4SLinus Torvalds 
5831da177e4SLinus Torvalds          /* SIMPLE FlagsLength manipulations... */
5841da177e4SLinus Torvalds #define  MPI_SGE_SET_FLAGS(f)           ((U32)(f) << MPI_SGE_FLAGS_SHIFT)
5851da177e4SLinus Torvalds #define  MPI_SGE_GET_FLAGS(fl)          (((fl) & ~MPI_SGE_LENGTH_MASK) >> MPI_SGE_FLAGS_SHIFT)
5861da177e4SLinus Torvalds #define  MPI_SGE_LENGTH(fl)             ((fl) & MPI_SGE_LENGTH_MASK)
5871da177e4SLinus Torvalds #define  MPI_SGE_CHAIN_LENGTH(fl)       ((fl) & MPI_SGE_CHAIN_LENGTH_MASK)
5881da177e4SLinus Torvalds 
5891da177e4SLinus Torvalds #define  MPI_SGE_SET_FLAGS_LENGTH(f,l)  (MPI_SGE_SET_FLAGS(f) | MPI_SGE_LENGTH(l))
5901da177e4SLinus Torvalds 
5911da177e4SLinus Torvalds #define  MPI_pSGE_GET_FLAGS(psg)        MPI_SGE_GET_FLAGS((psg)->FlagsLength)
5921da177e4SLinus Torvalds #define  MPI_pSGE_GET_LENGTH(psg)       MPI_SGE_LENGTH((psg)->FlagsLength)
5931da177e4SLinus Torvalds #define  MPI_pSGE_SET_FLAGS_LENGTH(psg,f,l)  (psg)->FlagsLength = MPI_SGE_SET_FLAGS_LENGTH(f,l)
5941da177e4SLinus Torvalds          /* CAUTION - The following are READ-MODIFY-WRITE! */
5951da177e4SLinus Torvalds #define  MPI_pSGE_SET_FLAGS(psg,f)      (psg)->FlagsLength |= MPI_SGE_SET_FLAGS(f)
5961da177e4SLinus Torvalds #define  MPI_pSGE_SET_LENGTH(psg,l)     (psg)->FlagsLength |= MPI_SGE_LENGTH(l)
5971da177e4SLinus Torvalds 
5981da177e4SLinus Torvalds #define  MPI_GET_CHAIN_OFFSET(x) ((x&MPI_SGE_CHAIN_OFFSET_MASK)>>MPI_SGE_CHAIN_OFFSET_SHIFT)
5991da177e4SLinus Torvalds 
6001da177e4SLinus Torvalds 
6011da177e4SLinus Torvalds 
6021da177e4SLinus Torvalds /*****************************************************************************
6031da177e4SLinus Torvalds *
6041da177e4SLinus Torvalds *        S t a n d a r d    M e s s a g e    S t r u c t u r e s
6051da177e4SLinus Torvalds *
6061da177e4SLinus Torvalds *****************************************************************************/
6071da177e4SLinus Torvalds 
6081da177e4SLinus Torvalds /****************************************************************************/
6091da177e4SLinus Torvalds /* Standard message request header for all request messages                 */
6101da177e4SLinus Torvalds /****************************************************************************/
6111da177e4SLinus Torvalds 
6121da177e4SLinus Torvalds typedef struct _MSG_REQUEST_HEADER
6131da177e4SLinus Torvalds {
6141da177e4SLinus Torvalds     U8                      Reserved[2];      /* function specific */
6151da177e4SLinus Torvalds     U8                      ChainOffset;
6161da177e4SLinus Torvalds     U8                      Function;
6171da177e4SLinus Torvalds     U8                      Reserved1[3];     /* function specific */
6181da177e4SLinus Torvalds     U8                      MsgFlags;
6191da177e4SLinus Torvalds     U32                     MsgContext;
6201da177e4SLinus Torvalds } MSG_REQUEST_HEADER, MPI_POINTER PTR_MSG_REQUEST_HEADER,
6211da177e4SLinus Torvalds   MPIHeader_t, MPI_POINTER pMPIHeader_t;
6221da177e4SLinus Torvalds 
6231da177e4SLinus Torvalds 
6241da177e4SLinus Torvalds /****************************************************************************/
6251da177e4SLinus Torvalds /*  Default Reply                                                           */
6261da177e4SLinus Torvalds /****************************************************************************/
6271da177e4SLinus Torvalds 
6281da177e4SLinus Torvalds typedef struct _MSG_DEFAULT_REPLY
6291da177e4SLinus Torvalds {
6301da177e4SLinus Torvalds     U8                      Reserved[2];      /* function specific */
6311da177e4SLinus Torvalds     U8                      MsgLength;
6321da177e4SLinus Torvalds     U8                      Function;
6331da177e4SLinus Torvalds     U8                      Reserved1[3];     /* function specific */
6341da177e4SLinus Torvalds     U8                      MsgFlags;
6351da177e4SLinus Torvalds     U32                     MsgContext;
6361da177e4SLinus Torvalds     U8                      Reserved2[2];     /* function specific */
6371da177e4SLinus Torvalds     U16                     IOCStatus;
6381da177e4SLinus Torvalds     U32                     IOCLogInfo;
6391da177e4SLinus Torvalds } MSG_DEFAULT_REPLY, MPI_POINTER PTR_MSG_DEFAULT_REPLY,
6401da177e4SLinus Torvalds   MPIDefaultReply_t, MPI_POINTER pMPIDefaultReply_t;
6411da177e4SLinus Torvalds 
6421da177e4SLinus Torvalds 
6431da177e4SLinus Torvalds /* MsgFlags definition for all replies */
6441da177e4SLinus Torvalds 
6451da177e4SLinus Torvalds #define MPI_MSGFLAGS_CONTINUATION_REPLY         (0x80)
6461da177e4SLinus Torvalds 
6471da177e4SLinus Torvalds 
6481da177e4SLinus Torvalds /*****************************************************************************
6491da177e4SLinus Torvalds *
6501da177e4SLinus Torvalds *               I O C    S t a t u s   V a l u e s
6511da177e4SLinus Torvalds *
6521da177e4SLinus Torvalds *****************************************************************************/
6531da177e4SLinus Torvalds 
6541da177e4SLinus Torvalds /****************************************************************************/
6551da177e4SLinus Torvalds /*  Common IOCStatus values for all replies                                 */
6561da177e4SLinus Torvalds /****************************************************************************/
6571da177e4SLinus Torvalds 
6581da177e4SLinus Torvalds #define MPI_IOCSTATUS_SUCCESS                   (0x0000)
6591da177e4SLinus Torvalds #define MPI_IOCSTATUS_INVALID_FUNCTION          (0x0001)
6601da177e4SLinus Torvalds #define MPI_IOCSTATUS_BUSY                      (0x0002)
6611da177e4SLinus Torvalds #define MPI_IOCSTATUS_INVALID_SGL               (0x0003)
6621da177e4SLinus Torvalds #define MPI_IOCSTATUS_INTERNAL_ERROR            (0x0004)
6631da177e4SLinus Torvalds #define MPI_IOCSTATUS_RESERVED                  (0x0005)
6641da177e4SLinus Torvalds #define MPI_IOCSTATUS_INSUFFICIENT_RESOURCES    (0x0006)
6651da177e4SLinus Torvalds #define MPI_IOCSTATUS_INVALID_FIELD             (0x0007)
6661da177e4SLinus Torvalds #define MPI_IOCSTATUS_INVALID_STATE             (0x0008)
6671da177e4SLinus Torvalds #define MPI_IOCSTATUS_OP_STATE_NOT_SUPPORTED    (0x0009)
6681da177e4SLinus Torvalds 
6691da177e4SLinus Torvalds /****************************************************************************/
6701da177e4SLinus Torvalds /*  Config IOCStatus values                                                 */
6711da177e4SLinus Torvalds /****************************************************************************/
6721da177e4SLinus Torvalds 
6731da177e4SLinus Torvalds #define MPI_IOCSTATUS_CONFIG_INVALID_ACTION     (0x0020)
6741da177e4SLinus Torvalds #define MPI_IOCSTATUS_CONFIG_INVALID_TYPE       (0x0021)
6751da177e4SLinus Torvalds #define MPI_IOCSTATUS_CONFIG_INVALID_PAGE       (0x0022)
6761da177e4SLinus Torvalds #define MPI_IOCSTATUS_CONFIG_INVALID_DATA       (0x0023)
6771da177e4SLinus Torvalds #define MPI_IOCSTATUS_CONFIG_NO_DEFAULTS        (0x0024)
6781da177e4SLinus Torvalds #define MPI_IOCSTATUS_CONFIG_CANT_COMMIT        (0x0025)
6791da177e4SLinus Torvalds 
6801da177e4SLinus Torvalds /****************************************************************************/
6811da177e4SLinus Torvalds /*  SCSIIO Reply (SPI & FCP) initiator values                               */
6821da177e4SLinus Torvalds /****************************************************************************/
6831da177e4SLinus Torvalds 
6841da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_RECOVERED_ERROR      (0x0040)
6851da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_INVALID_BUS          (0x0041)
6861da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_INVALID_TARGETID     (0x0042)
6871da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE     (0x0043)
6881da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_DATA_OVERRUN         (0x0044)
6891da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_DATA_UNDERRUN        (0x0045)
6901da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_IO_DATA_ERROR        (0x0046)
6911da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR       (0x0047)
6921da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_TASK_TERMINATED      (0x0048)
6931da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH    (0x0049)
6941da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED     (0x004A)
6951da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_IOC_TERMINATED       (0x004B)
6961da177e4SLinus Torvalds #define MPI_IOCSTATUS_SCSI_EXT_TERMINATED       (0x004C)
6971da177e4SLinus Torvalds 
6981da177e4SLinus Torvalds /****************************************************************************/
699ccf3b7bdSChristoph Hellwig /*  For use by SCSI Initiator and SCSI Target end-to-end data protection    */
700ccf3b7bdSChristoph Hellwig /****************************************************************************/
701ccf3b7bdSChristoph Hellwig 
702ccf3b7bdSChristoph Hellwig #define MPI_IOCSTATUS_EEDP_GUARD_ERROR          (0x004D)
703ccf3b7bdSChristoph Hellwig #define MPI_IOCSTATUS_EEDP_REF_TAG_ERROR        (0x004E)
704ccf3b7bdSChristoph Hellwig #define MPI_IOCSTATUS_EEDP_APP_TAG_ERROR        (0x004F)
705ccf3b7bdSChristoph Hellwig 
706ccf3b7bdSChristoph Hellwig 
707ccf3b7bdSChristoph Hellwig /****************************************************************************/
708c1a71d1cSMoore, Eric Dean  /*  SCSI Target values                                                      */
7091da177e4SLinus Torvalds /****************************************************************************/
7101da177e4SLinus Torvalds 
7111da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_PRIORITY_IO         (0x0060)
7121da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_INVALID_PORT        (0x0061)
713c1a71d1cSMoore, Eric Dean  #define MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX    (0x0062)   /* obsolete name */
7141da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_INVALID_IO_INDEX    (0x0062)
7151da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_ABORTED             (0x0063)
7161da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_NO_CONN_RETRYABLE   (0x0064)
7171da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_NO_CONNECTION       (0x0065)
7181da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH (0x006A)
7191da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_STS_DATA_NOT_SENT   (0x006B)
720c1a71d1cSMoore, Eric Dean  #define MPI_IOCSTATUS_TARGET_DATA_OFFSET_ERROR   (0x006D)
721c1a71d1cSMoore, Eric Dean  #define MPI_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA (0x006E)
722c1a71d1cSMoore, Eric Dean  #define MPI_IOCSTATUS_TARGET_IU_TOO_SHORT        (0x006F)
7234b915a73SMoore, Eric #define MPI_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT     (0x0070)
7244b915a73SMoore, Eric #define MPI_IOCSTATUS_TARGET_NAK_RECEIVED        (0x0071)
7251da177e4SLinus Torvalds 
7261da177e4SLinus Torvalds /****************************************************************************/
7271da177e4SLinus Torvalds /*  Additional FCP target values (obsolete)                                 */
7281da177e4SLinus Torvalds /****************************************************************************/
7291da177e4SLinus Torvalds 
7301da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_FC_ABORTED         (0x0066)    /* obsolete */
7311da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_FC_RX_ID_INVALID   (0x0067)    /* obsolete */
7321da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_FC_DID_INVALID     (0x0068)    /* obsolete */
7331da177e4SLinus Torvalds #define MPI_IOCSTATUS_TARGET_FC_NODE_LOGGED_OUT (0x0069)    /* obsolete */
7341da177e4SLinus Torvalds 
7351da177e4SLinus Torvalds /****************************************************************************/
7361da177e4SLinus Torvalds /*  Fibre Channel Direct Access values                                      */
7371da177e4SLinus Torvalds /****************************************************************************/
7381da177e4SLinus Torvalds 
7391da177e4SLinus Torvalds #define MPI_IOCSTATUS_FC_ABORTED                (0x0066)
7401da177e4SLinus Torvalds #define MPI_IOCSTATUS_FC_RX_ID_INVALID          (0x0067)
7411da177e4SLinus Torvalds #define MPI_IOCSTATUS_FC_DID_INVALID            (0x0068)
7421da177e4SLinus Torvalds #define MPI_IOCSTATUS_FC_NODE_LOGGED_OUT        (0x0069)
7431da177e4SLinus Torvalds #define MPI_IOCSTATUS_FC_EXCHANGE_CANCELED      (0x006C)
7441da177e4SLinus Torvalds 
7451da177e4SLinus Torvalds /****************************************************************************/
7461da177e4SLinus Torvalds /*  LAN values                                                              */
7471da177e4SLinus Torvalds /****************************************************************************/
7481da177e4SLinus Torvalds 
7491da177e4SLinus Torvalds #define MPI_IOCSTATUS_LAN_DEVICE_NOT_FOUND      (0x0080)
7501da177e4SLinus Torvalds #define MPI_IOCSTATUS_LAN_DEVICE_FAILURE        (0x0081)
7511da177e4SLinus Torvalds #define MPI_IOCSTATUS_LAN_TRANSMIT_ERROR        (0x0082)
7521da177e4SLinus Torvalds #define MPI_IOCSTATUS_LAN_TRANSMIT_ABORTED      (0x0083)
7531da177e4SLinus Torvalds #define MPI_IOCSTATUS_LAN_RECEIVE_ERROR         (0x0084)
7541da177e4SLinus Torvalds #define MPI_IOCSTATUS_LAN_RECEIVE_ABORTED       (0x0085)
7551da177e4SLinus Torvalds #define MPI_IOCSTATUS_LAN_PARTIAL_PACKET        (0x0086)
7561da177e4SLinus Torvalds #define MPI_IOCSTATUS_LAN_CANCELED              (0x0087)
7571da177e4SLinus Torvalds 
7581da177e4SLinus Torvalds /****************************************************************************/
7591da177e4SLinus Torvalds /*  Serial Attached SCSI values                                             */
7601da177e4SLinus Torvalds /****************************************************************************/
7611da177e4SLinus Torvalds 
7621da177e4SLinus Torvalds #define MPI_IOCSTATUS_SAS_SMP_REQUEST_FAILED    (0x0090)
763c1a71d1cSMoore, Eric Dean  #define MPI_IOCSTATUS_SAS_SMP_DATA_OVERRUN      (0x0091)
7641da177e4SLinus Torvalds 
7651da177e4SLinus Torvalds /****************************************************************************/
7661da177e4SLinus Torvalds /*  Inband values                                                           */
7671da177e4SLinus Torvalds /****************************************************************************/
7681da177e4SLinus Torvalds 
7691da177e4SLinus Torvalds #define MPI_IOCSTATUS_INBAND_ABORTED            (0x0098)
7701da177e4SLinus Torvalds #define MPI_IOCSTATUS_INBAND_NO_CONNECTION      (0x0099)
7711da177e4SLinus Torvalds 
7721da177e4SLinus Torvalds /****************************************************************************/
7731da177e4SLinus Torvalds /*  Diagnostic Tools values                                                 */
7741da177e4SLinus Torvalds /****************************************************************************/
7751da177e4SLinus Torvalds 
7761da177e4SLinus Torvalds #define MPI_IOCSTATUS_DIAGNOSTIC_RELEASED       (0x00A0)
7771da177e4SLinus Torvalds 
7781da177e4SLinus Torvalds 
7791da177e4SLinus Torvalds /****************************************************************************/
7801da177e4SLinus Torvalds /*  IOCStatus flag to indicate that log info is available                   */
7811da177e4SLinus Torvalds /****************************************************************************/
7821da177e4SLinus Torvalds 
7831da177e4SLinus Torvalds #define MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE   (0x8000)
7841da177e4SLinus Torvalds #define MPI_IOCSTATUS_MASK                      (0x7FFF)
7851da177e4SLinus Torvalds 
7861da177e4SLinus Torvalds /****************************************************************************/
7871da177e4SLinus Torvalds /*  LogInfo Types                                                           */
7881da177e4SLinus Torvalds /****************************************************************************/
7891da177e4SLinus Torvalds 
7901da177e4SLinus Torvalds #define MPI_IOCLOGINFO_TYPE_MASK                (0xF0000000)
7911da177e4SLinus Torvalds #define MPI_IOCLOGINFO_TYPE_SHIFT               (28)
7921da177e4SLinus Torvalds #define MPI_IOCLOGINFO_TYPE_NONE                (0x0)
7931da177e4SLinus Torvalds #define MPI_IOCLOGINFO_TYPE_SCSI                (0x1)
7941da177e4SLinus Torvalds #define MPI_IOCLOGINFO_TYPE_FC                  (0x2)
7951da177e4SLinus Torvalds #define MPI_IOCLOGINFO_TYPE_SAS                 (0x3)
7961da177e4SLinus Torvalds #define MPI_IOCLOGINFO_TYPE_ISCSI               (0x4)
7971da177e4SLinus Torvalds #define MPI_IOCLOGINFO_LOG_DATA_MASK            (0x0FFFFFFF)
7981da177e4SLinus Torvalds 
7991da177e4SLinus Torvalds 
8001da177e4SLinus Torvalds #endif
801