Home | History | Annotate | Line # | Download | only in ic
mpt_mpilib.h revision 1.3.138.1
      1  1.3.138.1  thorpej /*	$NetBSD: mpt_mpilib.h,v 1.3.138.1 2021/08/01 22:42:23 thorpej Exp $	*/
      2        1.1  thorpej 
      3        1.1  thorpej /*
      4        1.1  thorpej  * Copyright (c) 2000, 2001 by LSI Logic Corporation
      5        1.1  thorpej  *
      6        1.1  thorpej  * Redistribution and use in source and binary forms, with or without
      7        1.1  thorpej  * modification, are permitted provided that the following conditions
      8        1.1  thorpej  * are met:
      9        1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
     10        1.1  thorpej  *    notice immediately at the beginning of the file, without modification,
     11        1.1  thorpej  *    this list of conditions, and the following disclaimer.
     12        1.1  thorpej  * 2. The name of the author may not be used to endorse or promote products
     13        1.1  thorpej  *    derived from this software without specific prior written permission.
     14        1.1  thorpej  *
     15        1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     16        1.1  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     17        1.1  thorpej  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     18        1.1  thorpej  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
     19        1.1  thorpej  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     20        1.1  thorpej  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     21        1.1  thorpej  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     22        1.1  thorpej  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     23        1.1  thorpej  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     24        1.1  thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     25        1.1  thorpej  * SUCH DAMAGE.
     26        1.1  thorpej  *
     27        1.1  thorpej  *
     28        1.1  thorpej  *           Name:  MPI_TYPE.H
     29        1.1  thorpej  *          Title:  MPI Basic type definitions
     30        1.1  thorpej  *  Creation Date:  June 6, 2000
     31        1.1  thorpej  *
     32        1.1  thorpej  *    MPI Version:  01.02.01
     33        1.1  thorpej  *
     34        1.1  thorpej  *  Version History
     35        1.1  thorpej  *  ---------------
     36        1.1  thorpej  *
     37        1.1  thorpej  *  Date      Version   Description
     38        1.1  thorpej  *  --------  --------  ------------------------------------------------------
     39        1.1  thorpej  *  05-08-00  00.10.01  Original release for 0.10 spec dated 4/26/2000.
     40        1.1  thorpej  *  06-06-00  01.00.01  Update version number for 1.0 release.
     41        1.1  thorpej  *  11-02-00  01.01.01  Original release for post 1.0 work
     42        1.1  thorpej  *  02-20-01  01.01.02  Added define and ifdef for MPI_POINTER.
     43        1.1  thorpej  *  08-08-01  01.02.01  Original release for v1.2 work.
     44        1.1  thorpej  *  --------------------------------------------------------------------------
     45        1.1  thorpej  */
     46        1.1  thorpej 
     47        1.1  thorpej #ifndef MPI_TYPE_H
     48        1.1  thorpej #define MPI_TYPE_H
     49        1.1  thorpej 
     50        1.1  thorpej 
     51        1.1  thorpej /*******************************************************************************
     52        1.1  thorpej  * Define MPI_POINTER if it hasn't already been defined. By default MPI_POINTER
     53        1.1  thorpej  * is defined to be a near pointer. MPI_POINTER can be defined as a far pointer
     54        1.1  thorpej  * by defining MPI_POINTER as "far *" before this header file is included.
     55        1.1  thorpej  */
     56        1.1  thorpej #ifndef MPI_POINTER
     57        1.1  thorpej #define MPI_POINTER     *
     58        1.1  thorpej #endif
     59        1.1  thorpej 
     60        1.1  thorpej 
     61        1.1  thorpej /*****************************************************************************
     62        1.1  thorpej *
     63        1.1  thorpej *               B a s i c    T y p e s
     64        1.1  thorpej *
     65        1.1  thorpej *****************************************************************************/
     66        1.1  thorpej 
     67        1.2  thorpej #ifdef __NetBSD__
     68        1.2  thorpej typedef	int8_t		S8;
     69        1.2  thorpej typedef	uint8_t		U8;
     70        1.2  thorpej typedef	int16_t		S16;
     71        1.2  thorpej typedef	uint16_t	U16;
     72        1.2  thorpej typedef	int32_t		S32;
     73        1.2  thorpej typedef	uint32_t	U32;
     74        1.2  thorpej #else /* ! __NetBSD__ */
     75        1.1  thorpej typedef signed   char   S8;
     76        1.1  thorpej typedef unsigned char   U8;
     77        1.1  thorpej typedef signed   short  S16;
     78        1.1  thorpej typedef unsigned short  U16;
     79        1.1  thorpej 
     80        1.1  thorpej #if defined(unix) || defined(__arm) || defined(ALPHA) || defined(__GNUC__)
     81        1.1  thorpej 
     82        1.1  thorpej     typedef signed   int   S32;
     83        1.1  thorpej     typedef unsigned int   U32;
     84        1.1  thorpej 
     85        1.1  thorpej #else
     86        1.1  thorpej 
     87        1.1  thorpej     typedef signed   long  S32;
     88        1.1  thorpej     typedef unsigned long  U32;
     89        1.1  thorpej 
     90        1.1  thorpej #endif
     91        1.2  thorpej #endif /* __NetBSD__ */
     92        1.1  thorpej 
     93        1.1  thorpej 
     94        1.1  thorpej typedef struct _S64
     95        1.1  thorpej {
     96        1.1  thorpej     U32          Low;
     97        1.1  thorpej     S32          High;
     98        1.1  thorpej } S64;
     99        1.1  thorpej 
    100        1.1  thorpej typedef struct _U64
    101        1.1  thorpej {
    102        1.1  thorpej     U32          Low;
    103        1.1  thorpej     U32          High;
    104        1.1  thorpej } U64;
    105        1.1  thorpej 
    106        1.1  thorpej 
    107        1.1  thorpej /****************************************************************************/
    108        1.1  thorpej /*  Pointers                                                                */
    109        1.1  thorpej /****************************************************************************/
    110        1.1  thorpej 
    111        1.1  thorpej typedef S8      *PS8;
    112        1.1  thorpej typedef U8      *PU8;
    113        1.1  thorpej typedef S16     *PS16;
    114        1.1  thorpej typedef U16     *PU16;
    115        1.1  thorpej typedef S32     *PS32;
    116        1.1  thorpej typedef U32     *PU32;
    117        1.1  thorpej typedef S64     *PS64;
    118        1.1  thorpej typedef U64     *PU64;
    119        1.1  thorpej 
    120        1.1  thorpej 
    121        1.1  thorpej #endif
    122        1.1  thorpej 
    123        1.1  thorpej 
    124        1.1  thorpej /*
    125        1.1  thorpej  * Copyright (c) 2000, 2001 by LSI Logic Corporation
    126        1.1  thorpej  *
    127        1.1  thorpej  * Redistribution and use in source and binary forms, with or without
    128        1.1  thorpej  * modification, are permitted provided that the following conditions
    129        1.1  thorpej  * are met:
    130        1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
    131        1.1  thorpej  *    notice immediately at the beginning of the file, without modification,
    132        1.1  thorpej  *    this list of conditions, and the following disclaimer.
    133        1.1  thorpej  * 2. The name of the author may not be used to endorse or promote products
    134        1.1  thorpej  *    derived from this software without specific prior written permission.
    135        1.1  thorpej  *
    136        1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    137        1.1  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    138        1.1  thorpej  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    139        1.1  thorpej  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
    140        1.1  thorpej  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    141        1.1  thorpej  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    142        1.1  thorpej  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    143        1.1  thorpej  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    144        1.1  thorpej  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    145        1.1  thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    146        1.1  thorpej  * SUCH DAMAGE.
    147        1.1  thorpej  *
    148        1.1  thorpej  *
    149        1.1  thorpej  *           Name:  MPI.H
    150        1.1  thorpej  *          Title:  MPI Message independent structures and definitions
    151        1.1  thorpej  *  Creation Date:  July 27, 2000
    152        1.1  thorpej  *
    153        1.1  thorpej  *    MPI Version:  01.02.03
    154        1.1  thorpej  *
    155        1.1  thorpej  *  Version History
    156        1.1  thorpej  *  ---------------
    157        1.1  thorpej  *
    158        1.1  thorpej  *  Date      Version   Description
    159        1.1  thorpej  *  --------  --------  ------------------------------------------------------
    160        1.1  thorpej  *  05-08-00  00.10.01  Original release for 0.10 spec dated 4/26/2000.
    161        1.1  thorpej  *  05-24-00  00.10.02  Added MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH definition.
    162        1.1  thorpej  *  06-06-00  01.00.01  Update MPI_VERSION_MAJOR and MPI_VERSION_MINOR.
    163        1.1  thorpej  *  06-22-00  01.00.02  Added MPI_IOCSTATUS_LAN_ definitions.
    164        1.1  thorpej  *                      Removed LAN_SUSPEND function definition.
    165        1.1  thorpej  *                      Added MPI_MSGFLAGS_CONTINUATION_REPLY definition.
    166        1.1  thorpej  *  06-30-00  01.00.03  Added MPI_CONTEXT_REPLY_TYPE_LAN definition.
    167        1.1  thorpej  *                      Added MPI_GET/SET_CONTEXT_REPLY_TYPE macros.
    168        1.1  thorpej  *  07-27-00  01.00.04  Added MPI_FAULT_ definitions.
    169        1.1  thorpej  *                      Removed MPI_IOCSTATUS_MSG/DATA_XFER_ERROR definitions.
    170        1.1  thorpej  *                      Added MPI_IOCSTATUS_INTERNAL_ERROR definition.
    171        1.1  thorpej  *                      Added MPI_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH.
    172        1.1  thorpej  *  11-02-00  01.01.01  Original release for post 1.0 work.
    173        1.1  thorpej  *  12-04-00  01.01.02  Added new function codes.
    174        1.1  thorpej  *  01-09-01  01.01.03  Added more definitions to the system interface section
    175        1.1  thorpej  *                      Added MPI_IOCSTATUS_TARGET_STS_DATA_NOT_SENT.
    176        1.1  thorpej  *  01-25-01  01.01.04  Changed MPI_VERSION_MINOR from 0x00 to 0x01.
    177        1.1  thorpej  *  02-20-01  01.01.05  Started using MPI_POINTER.
    178        1.1  thorpej  *                      Fixed value for MPI_DIAG_RW_ENABLE.
    179        1.1  thorpej  *                      Added defines for MPI_DIAG_PREVENT_IOC_BOOT and
    180        1.1  thorpej  *                      MPI_DIAG_CLEAR_FLASH_BAD_SIG.
    181        1.1  thorpej  *                      Obsoleted MPI_IOCSTATUS_TARGET_FC_ defines.
    182        1.1  thorpej  *  02-27-01  01.01.06  Removed MPI_HOST_INDEX_REGISTER define.
    183        1.1  thorpej  *                      Added function codes for RAID.
    184        1.1  thorpej  *  04-09-01  01.01.07  Added alternate define for MPI_DOORBELL_ACTIVE,
    185        1.1  thorpej  *                      MPI_DOORBELL_USED, to better match the spec.
    186        1.1  thorpej  *  08-08-01  01.02.01  Original release for v1.2 work.
    187        1.1  thorpej  *                      Changed MPI_VERSION_MINOR from 0x01 to 0x02.
    188        1.1  thorpej  *                      Added define MPI_FUNCTION_TOOLBOX.
    189        1.1  thorpej  *  09-28-01  01.02.02  New function code MPI_SCSI_ENCLOSURE_PROCESSOR.
    190        1.1  thorpej  *  11-01-01  01.02.03  Changed name to MPI_FUNCTION_SCSI_ENCLOSURE_PROCESSOR.
    191        1.1  thorpej  *  --------------------------------------------------------------------------
    192        1.1  thorpej  */
    193        1.1  thorpej 
    194        1.1  thorpej #ifndef MPI_H
    195        1.1  thorpej #define MPI_H
    196        1.1  thorpej 
    197        1.1  thorpej 
    198        1.1  thorpej /*****************************************************************************
    199        1.1  thorpej *
    200        1.1  thorpej *        M P I    V e r s i o n    D e f i n i t i o n s
    201        1.1  thorpej *
    202        1.1  thorpej *****************************************************************************/
    203        1.1  thorpej 
    204        1.1  thorpej #define MPI_VERSION_MAJOR                   (0x01)
    205        1.1  thorpej #define MPI_VERSION_MINOR                   (0x02)
    206        1.1  thorpej #define MPI_VERSION            ((MPI_VERSION_MAJOR << 8) | MPI_VERSION_MINOR)
    207        1.1  thorpej 
    208        1.1  thorpej /* Note: The major versions of 0xe0 through 0xff are reserved */
    209        1.1  thorpej 
    210        1.1  thorpej /*****************************************************************************
    211        1.1  thorpej *
    212        1.1  thorpej *        I O C    S t a t e    D e f i n i t i o n s
    213        1.1  thorpej *
    214        1.1  thorpej *****************************************************************************/
    215        1.1  thorpej 
    216        1.1  thorpej #define MPI_IOC_STATE_RESET                 (0x00000000)
    217        1.1  thorpej #define MPI_IOC_STATE_READY                 (0x10000000)
    218        1.1  thorpej #define MPI_IOC_STATE_OPERATIONAL           (0x20000000)
    219        1.1  thorpej #define MPI_IOC_STATE_FAULT                 (0x40000000)
    220        1.1  thorpej 
    221        1.1  thorpej #define MPI_IOC_STATE_MASK                  (0xF0000000)
    222        1.1  thorpej #define MPI_IOC_STATE_SHIFT                 (28)
    223        1.1  thorpej 
    224        1.1  thorpej /* Fault state codes (product independent range 0x8000-0xFFFF) */
    225        1.1  thorpej 
    226        1.1  thorpej #define MPI_FAULT_REQUEST_MESSAGE_PCI_PARITY_ERROR  (0x8111)
    227        1.1  thorpej #define MPI_FAULT_REQUEST_MESSAGE_PCI_BUS_FAULT     (0x8112)
    228        1.1  thorpej #define MPI_FAULT_REPLY_MESSAGE_PCI_PARITY_ERROR    (0x8113)
    229        1.1  thorpej #define MPI_FAULT_REPLY_MESSAGE_PCI_BUS_FAULT       (0x8114)
    230        1.1  thorpej #define MPI_FAULT_DATA_SEND_PCI_PARITY_ERROR        (0x8115)
    231        1.1  thorpej #define MPI_FAULT_DATA_SEND_PCI_BUS_FAULT           (0x8116)
    232        1.1  thorpej #define MPI_FAULT_DATA_RECEIVE_PCI_PARITY_ERROR     (0x8117)
    233        1.1  thorpej #define MPI_FAULT_DATA_RECEIVE_PCI_BUS_FAULT        (0x8118)
    234        1.1  thorpej 
    235        1.1  thorpej 
    236        1.1  thorpej /*****************************************************************************
    237        1.1  thorpej *
    238        1.1  thorpej *        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
    239        1.1  thorpej *
    240        1.1  thorpej *****************************************************************************/
    241        1.1  thorpej 
    242        1.1  thorpej /* S y s t e m    D o o r b e l l */
    243        1.1  thorpej #define MPI_DOORBELL_OFFSET                 (0x00000000)
    244        1.1  thorpej #define MPI_DOORBELL_ACTIVE                 (0x08000000) /* DoorbellUsed */
    245        1.1  thorpej #define MPI_DOORBELL_USED                   (MPI_DOORBELL_ACTIVE)
    246        1.1  thorpej #define MPI_DOORBELL_ACTIVE_SHIFT           (27)
    247        1.1  thorpej #define MPI_DOORBELL_WHO_INIT_MASK          (0x07000000)
    248        1.1  thorpej #define MPI_DOORBELL_WHO_INIT_SHIFT         (24)
    249        1.1  thorpej #define MPI_DOORBELL_FUNCTION_MASK          (0xFF000000)
    250        1.1  thorpej #define MPI_DOORBELL_FUNCTION_SHIFT         (24)
    251        1.1  thorpej #define MPI_DOORBELL_ADD_DWORDS_MASK        (0x00FF0000)
    252        1.1  thorpej #define MPI_DOORBELL_ADD_DWORDS_SHIFT       (16)
    253        1.1  thorpej #define MPI_DOORBELL_DATA_MASK              (0x0000FFFF)
    254        1.1  thorpej 
    255        1.1  thorpej 
    256        1.1  thorpej #define MPI_WRITE_SEQUENCE_OFFSET           (0x00000004)
    257        1.1  thorpej #define MPI_WRSEQ_KEY_VALUE_MASK            (0x0000000F)
    258        1.1  thorpej #define MPI_WRSEQ_1ST_KEY_VALUE             (0x04)
    259        1.1  thorpej #define MPI_WRSEQ_2ND_KEY_VALUE             (0x0B)
    260        1.1  thorpej #define MPI_WRSEQ_3RD_KEY_VALUE             (0x02)
    261        1.1  thorpej #define MPI_WRSEQ_4TH_KEY_VALUE             (0x07)
    262        1.1  thorpej #define MPI_WRSEQ_5TH_KEY_VALUE             (0x0D)
    263        1.1  thorpej 
    264        1.1  thorpej #define MPI_DIAGNOSTIC_OFFSET               (0x00000008)
    265        1.1  thorpej #define MPI_DIAG_CLEAR_FLASH_BAD_SIG        (0x00000400)
    266        1.1  thorpej #define MPI_DIAG_PREVENT_IOC_BOOT           (0x00000200)
    267        1.1  thorpej #define MPI_DIAG_DRWE                       (0x00000080)
    268        1.1  thorpej #define MPI_DIAG_FLASH_BAD_SIG              (0x00000040)
    269        1.1  thorpej #define MPI_DIAG_RESET_HISTORY              (0x00000020)
    270        1.1  thorpej #define MPI_DIAG_RW_ENABLE                  (0x00000010)
    271        1.1  thorpej #define MPI_DIAG_RESET_ADAPTER              (0x00000004)
    272        1.1  thorpej #define MPI_DIAG_DISABLE_ARM                (0x00000002)
    273        1.1  thorpej #define MPI_DIAG_MEM_ENABLE                 (0x00000001)
    274        1.1  thorpej 
    275        1.1  thorpej #define MPI_TEST_BASE_ADDRESS_OFFSET        (0x0000000C)
    276        1.1  thorpej 
    277        1.1  thorpej #define MPI_DIAG_RW_DATA_OFFSET             (0x00000010)
    278        1.1  thorpej 
    279        1.1  thorpej #define MPI_DIAG_RW_ADDRESS_OFFSET          (0x00000014)
    280        1.1  thorpej 
    281        1.1  thorpej #define MPI_HOST_INTERRUPT_STATUS_OFFSET    (0x00000030)
    282        1.1  thorpej #define MPI_HIS_IOP_DOORBELL_STATUS         (0x80000000)
    283        1.1  thorpej #define MPI_HIS_REPLY_MESSAGE_INTERRUPT     (0x00000008)
    284        1.1  thorpej #define MPI_HIS_DOORBELL_INTERRUPT          (0x00000001)
    285        1.1  thorpej 
    286        1.1  thorpej #define MPI_HOST_INTERRUPT_MASK_OFFSET      (0x00000034)
    287        1.1  thorpej #define MPI_HIM_RIM                         (0x00000008)
    288        1.1  thorpej #define MPI_HIM_DIM                         (0x00000001)
    289        1.1  thorpej 
    290        1.1  thorpej #define MPI_REQUEST_QUEUE_OFFSET            (0x00000040)
    291        1.1  thorpej #define MPI_REQUEST_POST_FIFO_OFFSET        (0x00000040)
    292        1.1  thorpej 
    293        1.1  thorpej #define MPI_REPLY_QUEUE_OFFSET              (0x00000044)
    294        1.1  thorpej #define MPI_REPLY_POST_FIFO_OFFSET          (0x00000044)
    295        1.1  thorpej #define MPI_REPLY_FREE_FIFO_OFFSET          (0x00000044)
    296        1.1  thorpej 
    297        1.1  thorpej 
    298        1.1  thorpej 
    299        1.1  thorpej /*****************************************************************************
    300        1.1  thorpej *
    301        1.1  thorpej *        M e s s a g e    F r a m e    D e s c r i p t o r s
    302        1.1  thorpej *
    303        1.1  thorpej *****************************************************************************/
    304        1.1  thorpej 
    305        1.1  thorpej #define MPI_REQ_MF_DESCRIPTOR_NB_MASK       (0x00000003)
    306        1.1  thorpej #define MPI_REQ_MF_DESCRIPTOR_F_BIT         (0x00000004)
    307        1.1  thorpej #define MPI_REQ_MF_DESCRIPTOR_ADDRESS_MASK  (0xFFFFFFF8)
    308        1.1  thorpej 
    309        1.1  thorpej #define MPI_ADDRESS_REPLY_A_BIT             (0x80000000)
    310        1.1  thorpej #define MPI_ADDRESS_REPLY_ADDRESS_MASK      (0x7FFFFFFF)
    311        1.1  thorpej 
    312        1.1  thorpej #define MPI_CONTEXT_REPLY_A_BIT             (0x80000000)
    313        1.1  thorpej #define MPI_CONTEXT_REPLY_TYPE_MASK         (0x60000000)
    314        1.1  thorpej #define MPI_CONTEXT_REPLY_TYPE_SCSI_INIT    (0x00)
    315        1.1  thorpej #define MPI_CONTEXT_REPLY_TYPE_SCSI_TARGET  (0x01)
    316        1.1  thorpej #define MPI_CONTEXT_REPLY_TYPE_LAN          (0x02)
    317        1.1  thorpej #define MPI_CONTEXT_REPLY_TYPE_SHIFT        (29)
    318        1.1  thorpej #define MPI_CONTEXT_REPLY_CONTEXT_MASK      (0x1FFFFFFF)
    319        1.1  thorpej 
    320        1.1  thorpej 
    321        1.1  thorpej /****************************************************************************/
    322        1.1  thorpej /* Context Reply macros                                                     */
    323        1.1  thorpej /****************************************************************************/
    324        1.1  thorpej 
    325        1.1  thorpej #define MPI_GET_CONTEXT_REPLY_TYPE(x)  (((x) & MPI_CONTEXT_REPLY_TYPE_MASK) \
    326        1.1  thorpej                                           >> MPI_CONTEXT_REPLY_TYPE_SHIFT)
    327        1.1  thorpej 
    328        1.1  thorpej #define MPI_SET_CONTEXT_REPLY_TYPE(x, typ)                                  \
    329        1.1  thorpej             ((x) = ((x) & ~MPI_CONTEXT_REPLY_TYPE_MASK) |                   \
    330        1.1  thorpej                             (((typ) << MPI_CONTEXT_REPLY_TYPE_SHIFT) &      \
    331        1.1  thorpej                                         MPI_CONTEXT_REPLY_TYPE_MASK))
    332        1.1  thorpej 
    333        1.1  thorpej 
    334        1.1  thorpej /*****************************************************************************
    335        1.1  thorpej *
    336        1.1  thorpej *        M e s s a g e    F u n c t i o n s
    337        1.1  thorpej *              0x80 -> 0x8F reserved for private message use per product
    338        1.1  thorpej *
    339        1.1  thorpej *
    340        1.1  thorpej *****************************************************************************/
    341        1.1  thorpej 
    342        1.1  thorpej #define MPI_FUNCTION_SCSI_IO_REQUEST                (0x00)
    343        1.1  thorpej #define MPI_FUNCTION_SCSI_TASK_MGMT                 (0x01)
    344        1.1  thorpej #define MPI_FUNCTION_IOC_INIT                       (0x02)
    345        1.1  thorpej #define MPI_FUNCTION_IOC_FACTS                      (0x03)
    346        1.1  thorpej #define MPI_FUNCTION_CONFIG                         (0x04)
    347        1.1  thorpej #define MPI_FUNCTION_PORT_FACTS                     (0x05)
    348        1.1  thorpej #define MPI_FUNCTION_PORT_ENABLE                    (0x06)
    349        1.1  thorpej #define MPI_FUNCTION_EVENT_NOTIFICATION             (0x07)
    350        1.1  thorpej #define MPI_FUNCTION_EVENT_ACK                      (0x08)
    351        1.1  thorpej #define MPI_FUNCTION_FW_DOWNLOAD                    (0x09)
    352        1.1  thorpej #define MPI_FUNCTION_TARGET_CMD_BUFFER_POST         (0x0A)
    353        1.1  thorpej #define MPI_FUNCTION_TARGET_ASSIST                  (0x0B)
    354        1.1  thorpej #define MPI_FUNCTION_TARGET_STATUS_SEND             (0x0C)
    355        1.1  thorpej #define MPI_FUNCTION_TARGET_MODE_ABORT              (0x0D)
    356        1.1  thorpej #define MPI_FUNCTION_TARGET_FC_BUF_POST_LINK_SRVC   (0x0E) /* obsolete name */
    357        1.1  thorpej #define MPI_FUNCTION_TARGET_FC_RSP_LINK_SRVC        (0x0F) /* obsolete name */
    358        1.1  thorpej #define MPI_FUNCTION_TARGET_FC_EX_SEND_LINK_SRVC    (0x10) /* obsolete name */
    359        1.1  thorpej #define MPI_FUNCTION_TARGET_FC_ABORT                (0x11) /* obsolete name */
    360        1.1  thorpej #define MPI_FUNCTION_FC_LINK_SRVC_BUF_POST          (0x0E)
    361        1.1  thorpej #define MPI_FUNCTION_FC_LINK_SRVC_RSP               (0x0F)
    362        1.1  thorpej #define MPI_FUNCTION_FC_EX_LINK_SRVC_SEND           (0x10)
    363        1.1  thorpej #define MPI_FUNCTION_FC_ABORT                       (0x11)
    364        1.1  thorpej #define MPI_FUNCTION_FW_UPLOAD                      (0x12)
    365        1.1  thorpej #define MPI_FUNCTION_FC_COMMON_TRANSPORT_SEND       (0x13)
    366        1.1  thorpej #define MPI_FUNCTION_FC_PRIMITIVE_SEND              (0x14)
    367        1.1  thorpej 
    368        1.1  thorpej #define MPI_FUNCTION_RAID_ACTION                    (0x15)
    369        1.1  thorpej #define MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH       (0x16)
    370        1.1  thorpej 
    371        1.1  thorpej #define MPI_FUNCTION_TOOLBOX                        (0x17)
    372        1.1  thorpej 
    373        1.1  thorpej #define MPI_FUNCTION_SCSI_ENCLOSURE_PROCESSOR       (0x18)
    374        1.1  thorpej 
    375        1.1  thorpej #define MPI_FUNCTION_LAN_SEND                       (0x20)
    376        1.1  thorpej #define MPI_FUNCTION_LAN_RECEIVE                    (0x21)
    377        1.1  thorpej #define MPI_FUNCTION_LAN_RESET                      (0x22)
    378        1.1  thorpej 
    379        1.1  thorpej #define MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET         (0x40)
    380        1.1  thorpej #define MPI_FUNCTION_IO_UNIT_RESET                  (0x41)
    381        1.1  thorpej #define MPI_FUNCTION_HANDSHAKE                      (0x42)
    382        1.1  thorpej #define MPI_FUNCTION_REPLY_FRAME_REMOVAL            (0x43)
    383        1.1  thorpej 
    384        1.1  thorpej 
    385        1.1  thorpej 
    386        1.1  thorpej /*****************************************************************************
    387        1.1  thorpej *
    388        1.1  thorpej *        S c a t t e r    G a t h e r    E l e m e n t s
    389        1.1  thorpej *
    390        1.1  thorpej *****************************************************************************/
    391        1.1  thorpej 
    392        1.1  thorpej /****************************************************************************/
    393        1.1  thorpej /*  Simple element structures                                               */
    394        1.1  thorpej /****************************************************************************/
    395        1.1  thorpej 
    396        1.1  thorpej typedef struct _SGE_SIMPLE32
    397        1.1  thorpej {
    398        1.1  thorpej     U32                     FlagsLength;
    399        1.1  thorpej     U32                     Address;
    400        1.1  thorpej } SGE_SIMPLE32, MPI_POINTER PTR_SGE_SIMPLE32,
    401        1.1  thorpej   SGESimple32_t, MPI_POINTER pSGESimple32_t;
    402        1.1  thorpej 
    403        1.1  thorpej typedef struct _SGE_SIMPLE64
    404        1.1  thorpej {
    405        1.1  thorpej     U32                     FlagsLength;
    406        1.1  thorpej     U64                     Address;
    407        1.1  thorpej } SGE_SIMPLE64, MPI_POINTER PTR_SGE_SIMPLE64,
    408        1.1  thorpej   SGESimple64_t, MPI_POINTER pSGESimple64_t;
    409        1.1  thorpej 
    410        1.1  thorpej typedef struct _SGE_SIMPLE_UNION
    411        1.1  thorpej {
    412        1.1  thorpej     U32                     FlagsLength;
    413        1.1  thorpej     union
    414        1.1  thorpej     {
    415        1.1  thorpej         U32                 Address32;
    416        1.1  thorpej         U64                 Address64;
    417        1.1  thorpej     } _u;
    418        1.1  thorpej } SGESimpleUnion_t, MPI_POINTER pSGESimpleUnion_t,
    419        1.1  thorpej   SGE_SIMPLE_UNION, MPI_POINTER PTR_SGE_SIMPLE_UNION;
    420        1.1  thorpej 
    421        1.1  thorpej /****************************************************************************/
    422        1.1  thorpej /*  Chain element structures                                                */
    423        1.1  thorpej /****************************************************************************/
    424        1.1  thorpej 
    425        1.1  thorpej typedef struct _SGE_CHAIN32
    426        1.1  thorpej {
    427        1.1  thorpej     U16                     Length;
    428        1.1  thorpej     U8                      NextChainOffset;
    429        1.1  thorpej     U8                      Flags;
    430        1.1  thorpej     U32                     Address;
    431        1.1  thorpej } SGE_CHAIN32, MPI_POINTER PTR_SGE_CHAIN32,
    432        1.1  thorpej   SGEChain32_t, MPI_POINTER pSGEChain32_t;
    433        1.1  thorpej 
    434        1.1  thorpej typedef struct _SGE_CHAIN64
    435        1.1  thorpej {
    436        1.1  thorpej     U16                     Length;
    437        1.1  thorpej     U8                      NextChainOffset;
    438        1.1  thorpej     U8                      Flags;
    439        1.1  thorpej     U64                     Address;
    440        1.1  thorpej } SGE_CHAIN64, MPI_POINTER PTR_SGE_CHAIN64,
    441        1.1  thorpej   SGEChain64_t, MPI_POINTER pSGEChain64_t;
    442        1.1  thorpej 
    443        1.1  thorpej typedef struct _SGE_CHAIN_UNION
    444        1.1  thorpej {
    445        1.1  thorpej     U16                     Length;
    446        1.1  thorpej     U8                      NextChainOffset;
    447        1.1  thorpej     U8                      Flags;
    448        1.1  thorpej     union
    449        1.1  thorpej     {
    450        1.1  thorpej         U32                 Address32;
    451        1.1  thorpej         U64                 Address64;
    452        1.1  thorpej     } _u;
    453        1.1  thorpej } SGE_CHAIN_UNION, MPI_POINTER PTR_SGE_CHAIN_UNION,
    454        1.1  thorpej   SGEChainUnion_t, MPI_POINTER pSGEChainUnion_t;
    455        1.1  thorpej 
    456        1.1  thorpej /****************************************************************************/
    457        1.1  thorpej /*  Transaction Context element                                             */
    458        1.1  thorpej /****************************************************************************/
    459        1.1  thorpej 
    460        1.1  thorpej typedef struct _SGE_TRANSACTION32
    461        1.1  thorpej {
    462        1.1  thorpej     U8                      Reserved;
    463        1.1  thorpej     U8                      ContextSize;
    464        1.1  thorpej     U8                      DetailsLength;
    465        1.1  thorpej     U8                      Flags;
    466        1.1  thorpej     U32                     TransactionContext[1];
    467        1.1  thorpej     U32                     TransactionDetails[1];
    468        1.1  thorpej } SGE_TRANSACTION32, MPI_POINTER PTR_SGE_TRANSACTION32,
    469        1.1  thorpej   SGETransaction32_t, MPI_POINTER pSGETransaction32_t;
    470        1.1  thorpej 
    471        1.1  thorpej typedef struct _SGE_TRANSACTION64
    472        1.1  thorpej {
    473        1.1  thorpej     U8                      Reserved;
    474        1.1  thorpej     U8                      ContextSize;
    475        1.1  thorpej     U8                      DetailsLength;
    476        1.1  thorpej     U8                      Flags;
    477        1.1  thorpej     U32                     TransactionContext[2];
    478        1.1  thorpej     U32                     TransactionDetails[1];
    479        1.1  thorpej } SGE_TRANSACTION64, MPI_POINTER PTR_SGE_TRANSACTION64,
    480        1.1  thorpej   SGETransaction64_t, MPI_POINTER pSGETransaction64_t;
    481        1.1  thorpej 
    482        1.1  thorpej typedef struct _SGE_TRANSACTION96
    483        1.1  thorpej {
    484        1.1  thorpej     U8                      Reserved;
    485        1.1  thorpej     U8                      ContextSize;
    486        1.1  thorpej     U8                      DetailsLength;
    487        1.1  thorpej     U8                      Flags;
    488        1.1  thorpej     U32                     TransactionContext[3];
    489        1.1  thorpej     U32                     TransactionDetails[1];
    490        1.1  thorpej } SGE_TRANSACTION96, MPI_POINTER PTR_SGE_TRANSACTION96,
    491        1.1  thorpej   SGETransaction96_t, MPI_POINTER pSGETransaction96_t;
    492        1.1  thorpej 
    493        1.1  thorpej typedef struct _SGE_TRANSACTION128
    494        1.1  thorpej {
    495        1.1  thorpej     U8                      Reserved;
    496        1.1  thorpej     U8                      ContextSize;
    497        1.1  thorpej     U8                      DetailsLength;
    498        1.1  thorpej     U8                      Flags;
    499        1.1  thorpej     U32                     TransactionContext[4];
    500        1.1  thorpej     U32                     TransactionDetails[1];
    501        1.1  thorpej } SGE_TRANSACTION128, MPI_POINTER PTR_SGE_TRANSACTION128,
    502        1.1  thorpej   SGETransaction_t128, MPI_POINTER pSGETransaction_t128;
    503        1.1  thorpej 
    504        1.1  thorpej typedef struct _SGE_TRANSACTION_UNION
    505        1.1  thorpej {
    506        1.1  thorpej     U8                      Reserved;
    507        1.1  thorpej     U8                      ContextSize;
    508        1.1  thorpej     U8                      DetailsLength;
    509        1.1  thorpej     U8                      Flags;
    510        1.1  thorpej     union
    511        1.1  thorpej     {
    512        1.1  thorpej         U32                 TransactionContext32[1];
    513        1.1  thorpej         U32                 TransactionContext64[2];
    514        1.1  thorpej         U32                 TransactionContext96[3];
    515        1.1  thorpej         U32                 TransactionContext128[4];
    516        1.1  thorpej     } _u;
    517        1.1  thorpej     U32                     TransactionDetails[1];
    518        1.1  thorpej } SGE_TRANSACTION_UNION, MPI_POINTER PTR_SGE_TRANSACTION_UNION,
    519        1.1  thorpej   SGETransactionUnion_t, MPI_POINTER pSGETransactionUnion_t;
    520        1.1  thorpej 
    521        1.1  thorpej 
    522        1.1  thorpej /****************************************************************************/
    523        1.1  thorpej /*  SGE IO types union  for IO SGL's                                        */
    524        1.1  thorpej /****************************************************************************/
    525        1.1  thorpej 
    526        1.1  thorpej typedef struct _SGE_IO_UNION
    527        1.1  thorpej {
    528        1.1  thorpej     union
    529        1.1  thorpej     {
    530        1.1  thorpej         SGE_SIMPLE_UNION    Simple;
    531        1.1  thorpej         SGE_CHAIN_UNION     Chain;
    532        1.1  thorpej     } _u;
    533        1.1  thorpej } SGE_IO_UNION, MPI_POINTER PTR_SGE_IO_UNION,
    534        1.1  thorpej   SGEIOUnion_t, MPI_POINTER pSGEIOUnion_t;
    535        1.1  thorpej 
    536        1.1  thorpej /****************************************************************************/
    537        1.1  thorpej /*  SGE union for SGL's with Simple and Transaction elements                */
    538        1.1  thorpej /****************************************************************************/
    539        1.1  thorpej 
    540        1.1  thorpej typedef struct _SGE_TRANS_SIMPLE_UNION
    541        1.1  thorpej {
    542        1.1  thorpej     union
    543        1.1  thorpej     {
    544        1.1  thorpej         SGE_SIMPLE_UNION        Simple;
    545        1.1  thorpej         SGE_TRANSACTION_UNION   Transaction;
    546        1.1  thorpej     } _u;
    547        1.1  thorpej } SGE_TRANS_SIMPLE_UNION, MPI_POINTER PTR_SGE_TRANS_SIMPLE_UNION,
    548        1.1  thorpej   SGETransSimpleUnion_t, MPI_POINTER pSGETransSimpleUnion_t;
    549        1.1  thorpej 
    550        1.1  thorpej /****************************************************************************/
    551        1.1  thorpej /*  All SGE types union                                                     */
    552        1.1  thorpej /****************************************************************************/
    553        1.1  thorpej 
    554        1.1  thorpej typedef struct _SGE_MPI_UNION
    555        1.1  thorpej {
    556        1.1  thorpej     union
    557        1.1  thorpej     {
    558        1.1  thorpej         SGE_SIMPLE_UNION        Simple;
    559        1.1  thorpej         SGE_CHAIN_UNION         Chain;
    560        1.1  thorpej         SGE_TRANSACTION_UNION   Transaction;
    561        1.1  thorpej     } _u;
    562        1.1  thorpej } SGE_MPI_UNION, MPI_POINTER PTR_SGE_MPI_UNION,
    563        1.1  thorpej   MPI_SGE_UNION_t, MPI_POINTER pMPI_SGE_UNION_t,
    564        1.1  thorpej   SGEAllUnion_t, MPI_POINTER pSGEAllUnion_t;
    565        1.1  thorpej 
    566        1.1  thorpej 
    567        1.1  thorpej /****************************************************************************/
    568        1.1  thorpej /*  SGE field definition and masks                                          */
    569        1.1  thorpej /****************************************************************************/
    570        1.1  thorpej 
    571        1.1  thorpej /* Flags field bit definitions */
    572        1.1  thorpej 
    573        1.1  thorpej #define MPI_SGE_FLAGS_LAST_ELEMENT              (0x80)
    574        1.1  thorpej #define MPI_SGE_FLAGS_END_OF_BUFFER             (0x40)
    575        1.1  thorpej #define MPI_SGE_FLAGS_ELEMENT_TYPE_MASK         (0x30)
    576        1.1  thorpej #define MPI_SGE_FLAGS_LOCAL_ADDRESS             (0x08)
    577        1.1  thorpej #define MPI_SGE_FLAGS_DIRECTION                 (0x04)
    578        1.1  thorpej #define MPI_SGE_FLAGS_ADDRESS_SIZE              (0x02)
    579        1.1  thorpej #define MPI_SGE_FLAGS_END_OF_LIST               (0x01)
    580        1.1  thorpej 
    581        1.1  thorpej #define MPI_SGE_FLAGS_SHIFT                     (24)
    582        1.1  thorpej 
    583        1.1  thorpej #define MPI_SGE_LENGTH_MASK                     (0x00FFFFFF)
    584        1.1  thorpej #define MPI_SGE_CHAIN_LENGTH_MASK               (0x0000FFFF)
    585        1.1  thorpej 
    586        1.1  thorpej /* Element Type */
    587        1.1  thorpej 
    588        1.1  thorpej #define MPI_SGE_FLAGS_TRANSACTION_ELEMENT       (0x00)
    589        1.1  thorpej #define MPI_SGE_FLAGS_SIMPLE_ELEMENT            (0x10)
    590        1.1  thorpej #define MPI_SGE_FLAGS_CHAIN_ELEMENT             (0x30)
    591        1.1  thorpej #define MPI_SGE_FLAGS_ELEMENT_MASK              (0x30)
    592        1.1  thorpej 
    593        1.1  thorpej /* Address location */
    594        1.1  thorpej 
    595        1.1  thorpej #define MPI_SGE_FLAGS_SYSTEM_ADDRESS            (0x00)
    596        1.1  thorpej 
    597        1.1  thorpej /* Direction */
    598        1.1  thorpej 
    599        1.1  thorpej #define MPI_SGE_FLAGS_IOC_TO_HOST               (0x00)
    600        1.1  thorpej #define MPI_SGE_FLAGS_HOST_TO_IOC               (0x04)
    601        1.1  thorpej 
    602        1.1  thorpej /* Address Size */
    603        1.1  thorpej 
    604        1.1  thorpej #define MPI_SGE_FLAGS_32_BIT_ADDRESSING         (0x00)
    605        1.1  thorpej #define MPI_SGE_FLAGS_64_BIT_ADDRESSING         (0x02)
    606        1.1  thorpej 
    607        1.1  thorpej /* Context Size */
    608        1.1  thorpej 
    609        1.1  thorpej #define MPI_SGE_FLAGS_32_BIT_CONTEXT            (0x00)
    610        1.1  thorpej #define MPI_SGE_FLAGS_64_BIT_CONTEXT            (0x02)
    611        1.1  thorpej #define MPI_SGE_FLAGS_96_BIT_CONTEXT            (0x04)
    612        1.1  thorpej #define MPI_SGE_FLAGS_128_BIT_CONTEXT           (0x06)
    613        1.1  thorpej 
    614        1.1  thorpej #define MPI_SGE_CHAIN_OFFSET_MASK               (0x00FF0000)
    615        1.1  thorpej #define MPI_SGE_CHAIN_OFFSET_SHIFT              (16)
    616        1.1  thorpej 
    617        1.1  thorpej 
    618        1.1  thorpej /****************************************************************************/
    619        1.1  thorpej /*  SGE operation Macros                                                    */
    620        1.1  thorpej /****************************************************************************/
    621        1.1  thorpej 
    622        1.1  thorpej          /* SIMPLE FlagsLength manipulations... */
    623        1.1  thorpej #define  MPI_SGE_SET_FLAGS(f)           ((U32)(f) << MPI_SGE_FLAGS_SHIFT)
    624        1.1  thorpej #define  MPI_SGE_GET_FLAGS(fl)          (((fl) & ~MPI_SGE_LENGTH_MASK) >> MPI_SGE_FLAGS_SHIFT)
    625        1.1  thorpej #define  MPI_SGE_LENGTH(fl)             ((fl) & MPI_SGE_LENGTH_MASK)
    626        1.1  thorpej #define  MPI_SGE_CHAIN_LENGTH(fl)       ((fl) & MPI_SGE_CHAIN_LENGTH_MASK)
    627        1.1  thorpej 
    628        1.1  thorpej #define  MPI_SGE_SET_FLAGS_LENGTH(f,l)  (MPI_SGE_SET_FLAGS(f) | MPI_SGE_LENGTH(l))
    629        1.1  thorpej 
    630        1.1  thorpej #define  MPI_pSGE_GET_FLAGS(psg)        MPI_SGE_GET_FLAGS((psg)->FlagsLength)
    631        1.1  thorpej #define  MPI_pSGE_GET_LENGTH(psg)       MPI_SGE_LENGTH((psg)->FlagsLength)
    632        1.1  thorpej #define  MPI_pSGE_SET_FLAGS_LENGTH(psg,f,l)  (psg)->FlagsLength = MPI_SGE_SET_FLAGS_LENGTH(f,l)
    633        1.1  thorpej          /* CAUTION - The following are READ-MODIFY-WRITE! */
    634        1.1  thorpej #define  MPI_pSGE_SET_FLAGS(psg,f)      (psg)->FlagsLength |= MPI_SGE_SET_FLAGS(f)
    635        1.1  thorpej #define  MPI_pSGE_SET_LENGTH(psg,l)     (psg)->FlagsLength |= MPI_SGE_LENGTH(l)
    636        1.1  thorpej 
    637        1.1  thorpej #define  MPI_GET_CHAIN_OFFSET(x) ((x&MPI_SGE_CHAIN_OFFSET_MASK)>>MPI_SGE_CHAIN_OFFSET_SHIFT)
    638        1.1  thorpej 
    639        1.1  thorpej 
    640        1.1  thorpej 
    641        1.1  thorpej /*****************************************************************************
    642        1.1  thorpej *
    643        1.1  thorpej *        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
    644        1.1  thorpej *
    645        1.1  thorpej *****************************************************************************/
    646        1.1  thorpej 
    647        1.1  thorpej /****************************************************************************/
    648        1.1  thorpej /* Standard message request header for all request messages                 */
    649        1.1  thorpej /****************************************************************************/
    650        1.1  thorpej 
    651        1.1  thorpej typedef struct _MSG_REQUEST_HEADER
    652        1.1  thorpej {
    653        1.1  thorpej     U8                      Reserved[2];      /* function specific */
    654        1.1  thorpej     U8                      ChainOffset;
    655        1.1  thorpej     U8                      Function;
    656        1.1  thorpej     U8                      Reserved1[3];     /* function specific */
    657        1.1  thorpej     U8                      MsgFlags;
    658        1.1  thorpej     U32                     MsgContext;
    659        1.1  thorpej } MSG_REQUEST_HEADER, MPI_POINTER PTR_MSG_REQUEST_HEADER,
    660        1.1  thorpej   MPIHeader_t, MPI_POINTER pMPIHeader_t;
    661        1.1  thorpej 
    662        1.1  thorpej 
    663        1.1  thorpej /****************************************************************************/
    664        1.1  thorpej /*  Default Reply                                                           */
    665        1.1  thorpej /****************************************************************************/
    666        1.1  thorpej 
    667        1.1  thorpej typedef struct _MSG_DEFAULT_REPLY
    668        1.1  thorpej {
    669        1.1  thorpej     U8                      Reserved[2];      /* function specific */
    670        1.1  thorpej     U8                      MsgLength;
    671        1.1  thorpej     U8                      Function;
    672        1.1  thorpej     U8                      Reserved1[3];     /* function specific */
    673        1.1  thorpej     U8                      MsgFlags;
    674        1.1  thorpej     U32                     MsgContext;
    675        1.1  thorpej     U8                      Reserved2[2];     /* function specific */
    676        1.1  thorpej     U16                     IOCStatus;
    677        1.1  thorpej     U32                     IOCLogInfo;
    678        1.1  thorpej } MSG_DEFAULT_REPLY, MPI_POINTER PTR_MSG_DEFAULT_REPLY,
    679        1.1  thorpej   MPIDefaultReply_t, MPI_POINTER pMPIDefaultReply_t;
    680        1.1  thorpej 
    681        1.1  thorpej 
    682        1.1  thorpej /* MsgFlags definition for all replies */
    683        1.1  thorpej 
    684        1.1  thorpej #define MPI_MSGFLAGS_CONTINUATION_REPLY         (0x80)
    685        1.1  thorpej 
    686        1.1  thorpej 
    687        1.1  thorpej /*****************************************************************************
    688        1.1  thorpej *
    689        1.1  thorpej *               I O C    S t a t u s   V a l u e s
    690        1.1  thorpej *
    691        1.1  thorpej *****************************************************************************/
    692        1.1  thorpej 
    693        1.1  thorpej /****************************************************************************/
    694        1.1  thorpej /*  Common IOCStatus values for all replies                                 */
    695        1.1  thorpej /****************************************************************************/
    696        1.1  thorpej 
    697        1.1  thorpej #define MPI_IOCSTATUS_SUCCESS                  (0x0000)
    698        1.1  thorpej #define MPI_IOCSTATUS_INVALID_FUNCTION         (0x0001)
    699        1.1  thorpej #define MPI_IOCSTATUS_BUSY                     (0x0002)
    700        1.1  thorpej #define MPI_IOCSTATUS_INVALID_SGL              (0x0003)
    701        1.1  thorpej #define MPI_IOCSTATUS_INTERNAL_ERROR           (0x0004)
    702        1.1  thorpej #define MPI_IOCSTATUS_RESERVED                 (0x0005)
    703        1.1  thorpej #define MPI_IOCSTATUS_INSUFFICIENT_RESOURCES   (0x0006)
    704        1.1  thorpej #define MPI_IOCSTATUS_INVALID_FIELD            (0x0007)
    705        1.1  thorpej #define MPI_IOCSTATUS_INVALID_STATE            (0x0008)
    706        1.1  thorpej 
    707        1.1  thorpej /****************************************************************************/
    708        1.1  thorpej /*  Config IOCStatus values                                                 */
    709        1.1  thorpej /****************************************************************************/
    710        1.1  thorpej 
    711        1.1  thorpej #define MPI_IOCSTATUS_CONFIG_INVALID_ACTION    (0x0020)
    712        1.1  thorpej #define MPI_IOCSTATUS_CONFIG_INVALID_TYPE      (0x0021)
    713        1.1  thorpej #define MPI_IOCSTATUS_CONFIG_INVALID_PAGE      (0x0022)
    714        1.1  thorpej #define MPI_IOCSTATUS_CONFIG_INVALID_DATA      (0x0023)
    715        1.1  thorpej #define MPI_IOCSTATUS_CONFIG_NO_DEFAULTS       (0x0024)
    716        1.1  thorpej #define MPI_IOCSTATUS_CONFIG_CANT_COMMIT       (0x0025)
    717        1.1  thorpej 
    718        1.1  thorpej /****************************************************************************/
    719        1.1  thorpej /*  SCSIIO Reply (SPI & FCP) initiator values                               */
    720        1.1  thorpej /****************************************************************************/
    721        1.1  thorpej 
    722        1.1  thorpej #define MPI_IOCSTATUS_SCSI_RECOVERED_ERROR     (0x0040)
    723        1.1  thorpej #define MPI_IOCSTATUS_SCSI_INVALID_BUS         (0x0041)
    724        1.1  thorpej #define MPI_IOCSTATUS_SCSI_INVALID_TARGETID    (0x0042)
    725        1.1  thorpej #define MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE    (0x0043)
    726        1.1  thorpej #define MPI_IOCSTATUS_SCSI_DATA_OVERRUN        (0x0044)
    727        1.1  thorpej #define MPI_IOCSTATUS_SCSI_DATA_UNDERRUN       (0x0045)
    728        1.1  thorpej #define MPI_IOCSTATUS_SCSI_IO_DATA_ERROR       (0x0046)
    729        1.1  thorpej #define MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR      (0x0047)
    730        1.1  thorpej #define MPI_IOCSTATUS_SCSI_TASK_TERMINATED     (0x0048)
    731        1.1  thorpej #define MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH   (0x0049)
    732        1.1  thorpej #define MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED    (0x004A)
    733        1.1  thorpej #define MPI_IOCSTATUS_SCSI_IOC_TERMINATED      (0x004B)
    734        1.1  thorpej #define MPI_IOCSTATUS_SCSI_EXT_TERMINATED      (0x004C)
    735        1.1  thorpej 
    736        1.1  thorpej /****************************************************************************/
    737        1.1  thorpej /*  SCSI (SPI & FCP) target values                                          */
    738        1.1  thorpej /****************************************************************************/
    739        1.1  thorpej 
    740        1.1  thorpej #define MPI_IOCSTATUS_TARGET_PRIORITY_IO         (0x0060)
    741        1.1  thorpej #define MPI_IOCSTATUS_TARGET_INVALID_PORT        (0x0061)
    742        1.1  thorpej #define MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX    (0x0062)
    743        1.1  thorpej #define MPI_IOCSTATUS_TARGET_ABORTED             (0x0063)
    744        1.1  thorpej #define MPI_IOCSTATUS_TARGET_NO_CONN_RETRYABLE   (0x0064)
    745        1.1  thorpej #define MPI_IOCSTATUS_TARGET_NO_CONNECTION       (0x0065)
    746        1.1  thorpej #define MPI_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH (0x006A)
    747        1.1  thorpej #define MPI_IOCSTATUS_TARGET_STS_DATA_NOT_SENT   (0x006B)
    748        1.1  thorpej 
    749        1.1  thorpej /****************************************************************************/
    750        1.1  thorpej /*  Additional FCP target values                                            */
    751        1.1  thorpej /****************************************************************************/
    752        1.1  thorpej 
    753        1.1  thorpej #define MPI_IOCSTATUS_TARGET_FC_ABORTED         (0x0066)    /* obsolete */
    754        1.1  thorpej #define MPI_IOCSTATUS_TARGET_FC_RX_ID_INVALID   (0x0067)    /* obsolete */
    755        1.1  thorpej #define MPI_IOCSTATUS_TARGET_FC_DID_INVALID     (0x0068)    /* obsolete */
    756        1.1  thorpej #define MPI_IOCSTATUS_TARGET_FC_NODE_LOGGED_OUT (0x0069)    /* obsolete */
    757        1.1  thorpej 
    758        1.1  thorpej /****************************************************************************/
    759        1.1  thorpej /*  Fibre Channel Direct Access values                                      */
    760        1.1  thorpej /****************************************************************************/
    761        1.1  thorpej 
    762        1.1  thorpej #define MPI_IOCSTATUS_FC_ABORTED                (0x0066)
    763        1.1  thorpej #define MPI_IOCSTATUS_FC_RX_ID_INVALID          (0x0067)
    764        1.1  thorpej #define MPI_IOCSTATUS_FC_DID_INVALID            (0x0068)
    765        1.1  thorpej #define MPI_IOCSTATUS_FC_NODE_LOGGED_OUT        (0x0069)
    766        1.1  thorpej 
    767        1.1  thorpej /****************************************************************************/
    768        1.1  thorpej /*  LAN values                                                              */
    769        1.1  thorpej /****************************************************************************/
    770        1.1  thorpej 
    771        1.1  thorpej #define MPI_IOCSTATUS_LAN_DEVICE_NOT_FOUND      (0x0080)
    772        1.1  thorpej #define MPI_IOCSTATUS_LAN_DEVICE_FAILURE        (0x0081)
    773        1.1  thorpej #define MPI_IOCSTATUS_LAN_TRANSMIT_ERROR        (0x0082)
    774        1.1  thorpej #define MPI_IOCSTATUS_LAN_TRANSMIT_ABORTED      (0x0083)
    775        1.1  thorpej #define MPI_IOCSTATUS_LAN_RECEIVE_ERROR         (0x0084)
    776        1.1  thorpej #define MPI_IOCSTATUS_LAN_RECEIVE_ABORTED       (0x0085)
    777        1.1  thorpej #define MPI_IOCSTATUS_LAN_PARTIAL_PACKET        (0x0086)
    778        1.1  thorpej #define MPI_IOCSTATUS_LAN_CANCELED              (0x0087)
    779        1.1  thorpej 
    780        1.1  thorpej 
    781        1.1  thorpej /****************************************************************************/
    782        1.1  thorpej /*  IOCStatus flag to indicate that log info is available                   */
    783        1.1  thorpej /****************************************************************************/
    784        1.1  thorpej 
    785        1.1  thorpej #define MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE   (0x8000)
    786        1.1  thorpej #define MPI_IOCSTATUS_MASK                      (0x7FFF)
    787        1.1  thorpej 
    788        1.1  thorpej /****************************************************************************/
    789        1.1  thorpej /*  LogInfo Types                                                           */
    790        1.1  thorpej /****************************************************************************/
    791        1.1  thorpej 
    792        1.1  thorpej #define MPI_IOCLOGINFO_TYPE_MASK                (0xF0000000)
    793        1.1  thorpej #define MPI_IOCLOGINFO_TYPE_NONE                (0x0)
    794        1.1  thorpej #define MPI_IOCLOGINFO_TYPE_SCSI                (0x1)
    795        1.1  thorpej #define MPI_IOCLOGINFO_TYPE_FC                  (0x2)
    796        1.1  thorpej #define MPI_IOCLOGINFO_LOG_DATA_MASK            (0x0FFFFFFF)
    797        1.1  thorpej 
    798        1.1  thorpej 
    799        1.1  thorpej #endif
    800        1.1  thorpej 
    801        1.1  thorpej /*
    802        1.1  thorpej  * Copyright (c) 2000, 2001 by LSI Logic Corporation
    803        1.1  thorpej  *
    804        1.1  thorpej  * Redistribution and use in source and binary forms, with or without
    805        1.1  thorpej  * modification, are permitted provided that the following conditions
    806        1.1  thorpej  * are met:
    807        1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
    808        1.1  thorpej  *    notice immediately at the beginning of the file, without modification,
    809        1.1  thorpej  *    this list of conditions, and the following disclaimer.
    810        1.1  thorpej  * 2. The name of the author may not be used to endorse or promote products
    811        1.1  thorpej  *    derived from this software without specific prior written permission.
    812        1.1  thorpej  *
    813        1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    814        1.1  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    815        1.1  thorpej  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    816        1.1  thorpej  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
    817        1.1  thorpej  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    818        1.1  thorpej  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    819        1.1  thorpej  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    820        1.1  thorpej  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    821        1.1  thorpej  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    822        1.1  thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    823        1.1  thorpej  * SUCH DAMAGE.
    824        1.1  thorpej  *
    825        1.1  thorpej  *
    826        1.1  thorpej  *           Name:  MPI_CNFG.H
    827        1.1  thorpej  *          Title:  MPI Config message, structures, and Pages
    828        1.1  thorpej  *  Creation Date:  July 27, 2000
    829        1.1  thorpej  *
    830        1.1  thorpej  *    MPI Version:  01.02.05
    831        1.1  thorpej  *
    832        1.1  thorpej  *  Version History
    833        1.1  thorpej  *  ---------------
    834        1.1  thorpej  *
    835        1.1  thorpej  *  Date      Version   Description
    836        1.1  thorpej  *  --------  --------  ------------------------------------------------------
    837        1.1  thorpej  *  05-08-00  00.10.01  Original release for 0.10 spec dated 4/26/2000.
    838        1.1  thorpej  *  06-06-00  01.00.01  Update version number for 1.0 release.
    839        1.1  thorpej  *  06-08-00  01.00.02  Added _PAGEVERSION definitions for all pages.
    840        1.1  thorpej  *                      Added FcPhLowestVersion, FcPhHighestVersion, Reserved2
    841        1.1  thorpej  *                      fields to FC_DEVICE_0 page, updated the page version.
    842        1.1  thorpej  *                      Changed _FREE_RUNNING_CLOCK to _PACING_TRANSFERS in
    843        1.1  thorpej  *                      SCSI_PORT_0, SCSI_DEVICE_0 and SCSI_DEVICE_1 pages
    844        1.1  thorpej  *                      and updated the page versions.
    845        1.1  thorpej  *                      Added _RESPONSE_ID_MASK definition to SCSI_PORT_1
    846        1.1  thorpej  *                      page and updated the page version.
    847        1.1  thorpej  *                      Added Information field and _INFO_PARAMS_NEGOTIATED
    848        1.1  thorpej  *                      definitionto SCSI_DEVICE_0 page.
    849        1.1  thorpej  *  06-22-00  01.00.03  Removed batch controls from LAN_0 page and updated the
    850        1.1  thorpej  *                      page version.
    851        1.1  thorpej  *                      Added BucketsRemaining to LAN_1 page, redefined the
    852        1.1  thorpej  *                      state values, and updated the page version.
    853        1.1  thorpej  *                      Revised bus width definitions in SCSI_PORT_0,
    854        1.1  thorpej  *                      SCSI_DEVICE_0 and SCSI_DEVICE_1 pages.
    855        1.1  thorpej  *  06-30-00  01.00.04  Added MaxReplySize to LAN_1 page and updated the page
    856        1.1  thorpej  *                      version.
    857        1.1  thorpej  *                      Moved FC_DEVICE_0 PageAddress description to spec.
    858        1.1  thorpej  *  07-27-00  01.00.05  Corrected the SubsystemVendorID and SubsystemID field
    859        1.1  thorpej  *                      widths in IOC_0 page and updated the page version.
    860        1.1  thorpej  *  11-02-00  01.01.01  Original release for post 1.0 work
    861        1.1  thorpej  *                      Added Manufacturing pages, IO Unit Page 2, SCSI SPI
    862        1.1  thorpej  *                      Port Page 2, FC Port Page 4, FC Port Page 5
    863        1.1  thorpej  *  11-15-00  01.01.02  Interim changes to match proposals
    864        1.1  thorpej  *  12-04-00  01.01.03  Config page changes to match MPI rev 1.00.01.
    865        1.1  thorpej  *  12-05-00  01.01.04  Modified config page actions.
    866        1.1  thorpej  *  01-09-01  01.01.05  Added defines for page address formats.
    867        1.1  thorpej  *                      Data size for Manufacturing pages 2 and 3 no longer
    868        1.1  thorpej  *                      defined here.
    869        1.1  thorpej  *                      Io Unit Page 2 size is fixed at 4 adapters and some
    870        1.1  thorpej  *                      flags were changed.
    871        1.1  thorpej  *                      SCSI Port Page 2 Device Settings modified.
    872        1.1  thorpej  *                      New fields added to FC Port Page 0 and some flags
    873        1.1  thorpej  *                      cleaned up.
    874        1.1  thorpej  *                      Removed impedance flash from FC Port Page 1.
    875        1.1  thorpej  *                      Added FC Port pages 6 and 7.
    876        1.1  thorpej  *  01-25-01  01.01.06  Added MaxInitiators field to FcPortPage0.
    877        1.1  thorpej  *  01-29-01  01.01.07  Changed some defines to make them 32 character unique.
    878        1.1  thorpej  *                      Added some LinkType defines for FcPortPage0.
    879        1.1  thorpej  *  02-20-01  01.01.08  Started using MPI_POINTER.
    880        1.1  thorpej  *  02-27-01  01.01.09  Replaced MPI_CONFIG_PAGETYPE_SCSI_LUN with
    881        1.1  thorpej  *                      MPI_CONFIG_PAGETYPE_RAID_VOLUME.
    882        1.1  thorpej  *                      Added definitions and structures for IOC Page 2 and
    883        1.1  thorpej  *                      RAID Volume Page 2.
    884        1.1  thorpej  *  03-27-01  01.01.10  Added CONFIG_PAGE_FC_PORT_8 and CONFIG_PAGE_FC_PORT_9.
    885        1.1  thorpej  *                      CONFIG_PAGE_FC_PORT_3 now supports persistent by DID.
    886        1.1  thorpej  *                      Added VendorId and ProductRevLevel fields to
    887        1.1  thorpej  *                      RAIDVOL2_IM_PHYS_ID struct.
    888        1.1  thorpej  *                      Modified values for MPI_FCPORTPAGE0_FLAGS_ATTACH_
    889        1.1  thorpej  *                      defines to make them compatible to MPI version 1.0.
    890        1.1  thorpej  *                      Added structure offset comments.
    891        1.1  thorpej  *  04-09-01  01.01.11  Added some new defines for the PageAddress field and
    892        1.1  thorpej  *                      removed some obsolete ones.
    893        1.1  thorpej  *                      Added IO Unit Page 3.
    894        1.1  thorpej  *                      Modified defines for Scsi Port Page 2.
    895        1.1  thorpej  *                      Modified RAID Volume Pages.
    896        1.1  thorpej  *  08-08-01  01.02.01  Original release for v1.2 work.
    897        1.1  thorpej  *                      Added SepID and SepBus to RVP2 IMPhysicalDisk struct.
    898        1.1  thorpej  *                      Added defines for the SEP bits in RVP2 VolumeSettings.
    899        1.1  thorpej  *                      Modified the DeviceSettings field in RVP2 to use the
    900        1.1  thorpej  *                      proper structure.
    901        1.1  thorpej  *                      Added defines for SES, SAF-TE, and cross channel for
    902        1.1  thorpej  *                      IOCPage2 CapabilitiesFlags.
    903        1.1  thorpej  *                      Removed define for MPI_IOUNITPAGE2_FLAGS_RAID_DISABLE.
    904        1.1  thorpej  *                      Removed define for
    905        1.1  thorpej  *                      MPI_SCSIPORTPAGE2_PORT_FLAGS_PARITY_ENABLE.
    906        1.1  thorpej  *                      Added define for MPI_CONFIG_PAGEATTR_RO_PERSISTENT.
    907        1.1  thorpej  *  08-29-01 01.02.02   Fixed value for MPI_MANUFACTPAGE_DEVID_53C1035.
    908        1.1  thorpej  *                      Added defines for MPI_FCPORTPAGE1_FLAGS_HARD_ALPA_ONLY
    909        1.1  thorpej  *                      and MPI_FCPORTPAGE1_FLAGS_IMMEDIATE_ERROR_REPLY.
    910        1.1  thorpej  *                      Removed MPI_SCSIPORTPAGE0_CAP_PACING_TRANSFERS,
    911        1.1  thorpej  *                      MPI_SCSIDEVPAGE0_NP_PACING_TRANSFERS, and
    912        1.1  thorpej  *                      MPI_SCSIDEVPAGE1_RP_PACING_TRANSFERS, and
    913        1.1  thorpej  *                      MPI_SCSIDEVPAGE1_CONF_PPR_ALLOWED.
    914        1.1  thorpej  *                      Added defines for MPI_SCSIDEVPAGE1_CONF_WDTR_DISALLOWED
    915        1.1  thorpej  *                      and MPI_SCSIDEVPAGE1_CONF_SDTR_DISALLOWED.
    916        1.1  thorpej  *                      Added OnBusTimerValue to CONFIG_PAGE_SCSI_PORT_1.
    917        1.1  thorpej  *                      Added rejected bits to SCSI Device Page 0 Information.
    918        1.1  thorpej  *                      Increased size of ALPA array in FC Port Page 2 by one
    919        1.1  thorpej  *                      and removed a one byte reserved field.
    920        1.1  thorpej  *  09-28-01 01.02.03   Swapped NegWireSpeedLow and NegWireSpeedLow in
    921        1.1  thorpej  *                      CONFIG_PAGE_LAN_1 to match preferred 64-bit ordering.
    922        1.1  thorpej  *                      Added structures for Manufacturing Page 4, IO Unit
    923        1.1  thorpej  *                      Page 3, IOC Page 3, IOC Page 4, RAID Volume Page 0, and
    924        1.1  thorpej  *                      RAID PhysDisk Page 0.
    925        1.1  thorpej  *  10-04-01 01.02.04   Added define for MPI_CONFIG_PAGETYPE_RAID_PHYSDISK.
    926        1.1  thorpej  *                      Modified some of the new defines to make them 32
    927        1.1  thorpej  *                      character unique.
    928        1.1  thorpej  *                      Modified how variable length pages (arrays) are defined.
    929        1.1  thorpej  *                      Added generic defines for hot spare pools and RAID
    930        1.1  thorpej  *                      volume types.
    931        1.1  thorpej  *  11-01-01 01.02.05   Added define for MPI_IOUNITPAGE1_DISABLE_IR.
    932        1.1  thorpej  *  --------------------------------------------------------------------------
    933        1.1  thorpej  */
    934        1.1  thorpej 
    935        1.1  thorpej #ifndef MPI_CNFG_H
    936        1.1  thorpej #define MPI_CNFG_H
    937        1.1  thorpej 
    938        1.1  thorpej 
    939        1.1  thorpej /*****************************************************************************
    940        1.1  thorpej *
    941        1.1  thorpej *       C o n f i g    M e s s a g e    a n d    S t r u c t u r e s
    942        1.1  thorpej *
    943        1.1  thorpej *****************************************************************************/
    944        1.1  thorpej 
    945        1.1  thorpej typedef struct _CONFIG_PAGE_HEADER
    946        1.1  thorpej {
    947        1.1  thorpej     U8                      PageVersion;                /* 00h */
    948        1.1  thorpej     U8                      PageLength;                 /* 01h */
    949        1.1  thorpej     U8                      PageNumber;                 /* 02h */
    950        1.1  thorpej     U8                      PageType;                   /* 03h */
    951        1.1  thorpej } fCONFIG_PAGE_HEADER, MPI_POINTER PTR_CONFIG_PAGE_HEADER,
    952        1.1  thorpej   ConfigPageHeader_t, MPI_POINTER pConfigPageHeader_t;
    953        1.1  thorpej 
    954        1.1  thorpej typedef union _CONFIG_PAGE_HEADER_UNION
    955        1.1  thorpej {
    956        1.1  thorpej    ConfigPageHeader_t  Struct;
    957        1.1  thorpej    U8                  Bytes[4];
    958        1.1  thorpej    U16                 Word16[2];
    959        1.1  thorpej    U32                 Word32;
    960        1.1  thorpej } ConfigPageHeaderUnion, MPI_POINTER pConfigPageHeaderUnion,
    961        1.1  thorpej   fCONFIG_PAGE_HEADER_UNION, MPI_POINTER PTR_CONFIG_PAGE_HEADER_UNION;
    962        1.1  thorpej 
    963        1.1  thorpej 
    964        1.1  thorpej /****************************************************************************
    965        1.1  thorpej *   PageType field values
    966        1.1  thorpej ****************************************************************************/
    967        1.1  thorpej #define MPI_CONFIG_PAGEATTR_READ_ONLY               (0x00)
    968        1.1  thorpej #define MPI_CONFIG_PAGEATTR_CHANGEABLE              (0x10)
    969        1.1  thorpej #define MPI_CONFIG_PAGEATTR_PERSISTENT              (0x20)
    970        1.1  thorpej #define MPI_CONFIG_PAGEATTR_RO_PERSISTENT           (0x30)
    971        1.1  thorpej #define MPI_CONFIG_PAGEATTR_MASK                    (0xF0)
    972        1.1  thorpej 
    973        1.1  thorpej #define MPI_CONFIG_PAGETYPE_IO_UNIT                 (0x00)
    974        1.1  thorpej #define MPI_CONFIG_PAGETYPE_IOC                     (0x01)
    975        1.1  thorpej #define MPI_CONFIG_PAGETYPE_BIOS                    (0x02)
    976        1.1  thorpej #define MPI_CONFIG_PAGETYPE_SCSI_PORT               (0x03)
    977        1.1  thorpej #define MPI_CONFIG_PAGETYPE_SCSI_DEVICE             (0x04)
    978        1.1  thorpej #define MPI_CONFIG_PAGETYPE_FC_PORT                 (0x05)
    979        1.1  thorpej #define MPI_CONFIG_PAGETYPE_FC_DEVICE               (0x06)
    980        1.1  thorpej #define MPI_CONFIG_PAGETYPE_LAN                     (0x07)
    981        1.1  thorpej #define MPI_CONFIG_PAGETYPE_RAID_VOLUME             (0x08)
    982        1.1  thorpej #define MPI_CONFIG_PAGETYPE_MANUFACTURING           (0x09)
    983        1.1  thorpej #define MPI_CONFIG_PAGETYPE_RAID_PHYSDISK           (0x0A)
    984        1.1  thorpej #define MPI_CONFIG_PAGETYPE_MASK                    (0x0F)
    985        1.1  thorpej 
    986        1.1  thorpej #define MPI_CONFIG_TYPENUM_MASK                     (0x0FFF)
    987        1.1  thorpej 
    988        1.1  thorpej 
    989        1.1  thorpej /****************************************************************************
    990        1.1  thorpej *   PageAddress field values
    991        1.1  thorpej ****************************************************************************/
    992        1.1  thorpej #define MPI_SCSI_PORT_PGAD_PORT_MASK                (0x000000FF)
    993        1.1  thorpej 
    994        1.1  thorpej #define MPI_SCSI_DEVICE_TARGET_ID_MASK              (0x000000FF)
    995        1.1  thorpej #define MPI_SCSI_DEVICE_TARGET_ID_SHIFT             (0)
    996        1.1  thorpej #define MPI_SCSI_DEVICE_BUS_MASK                    (0x0000FF00)
    997        1.1  thorpej #define MPI_SCSI_DEVICE_BUS_SHIFT                   (8)
    998        1.1  thorpej 
    999        1.1  thorpej #define MPI_FC_PORT_PGAD_PORT_MASK                  (0xF0000000)
   1000        1.1  thorpej #define MPI_FC_PORT_PGAD_PORT_SHIFT                 (28)
   1001        1.1  thorpej #define MPI_FC_PORT_PGAD_FORM_MASK                  (0x0F000000)
   1002        1.1  thorpej #define MPI_FC_PORT_PGAD_FORM_INDEX                 (0x01000000)
   1003        1.1  thorpej #define MPI_FC_PORT_PGAD_INDEX_MASK                 (0x0000FFFF)
   1004        1.1  thorpej #define MPI_FC_PORT_PGAD_INDEX_SHIFT                (0)
   1005        1.1  thorpej 
   1006        1.1  thorpej #define MPI_FC_DEVICE_PGAD_PORT_MASK                (0xF0000000)
   1007        1.1  thorpej #define MPI_FC_DEVICE_PGAD_PORT_SHIFT               (28)
   1008        1.1  thorpej #define MPI_FC_DEVICE_PGAD_FORM_MASK                (0x0F000000)
   1009        1.1  thorpej #define MPI_FC_DEVICE_PGAD_FORM_NEXT_DID            (0x00000000)
   1010        1.1  thorpej #define MPI_FC_DEVICE_PGAD_ND_PORT_MASK             (0xF0000000)
   1011        1.1  thorpej #define MPI_FC_DEVICE_PGAD_ND_PORT_SHIFT            (28)
   1012        1.1  thorpej #define MPI_FC_DEVICE_PGAD_ND_DID_MASK              (0x00FFFFFF)
   1013        1.1  thorpej #define MPI_FC_DEVICE_PGAD_ND_DID_SHIFT             (0)
   1014        1.1  thorpej #define MPI_FC_DEVICE_PGAD_FORM_BUS_TID             (0x01000000)
   1015        1.1  thorpej #define MPI_FC_DEVICE_PGAD_BT_BUS_MASK              (0x0000FF00)
   1016        1.1  thorpej #define MPI_FC_DEVICE_PGAD_BT_BUS_SHIFT             (8)
   1017        1.1  thorpej #define MPI_FC_DEVICE_PGAD_BT_TID_MASK              (0x000000FF)
   1018        1.1  thorpej #define MPI_FC_DEVICE_PGAD_BT_TID_SHIFT             (0)
   1019        1.1  thorpej 
   1020        1.1  thorpej #define MPI_PHYSDISK_PGAD_PHYSDISKNUM_MASK          (0x000000FF)
   1021        1.1  thorpej #define MPI_PHYSDISK_PGAD_PHYSDISKNUM_SHIFT         (0)
   1022        1.1  thorpej 
   1023        1.1  thorpej 
   1024        1.1  thorpej 
   1025        1.1  thorpej /****************************************************************************
   1026        1.1  thorpej *   Config Request Message
   1027        1.1  thorpej ****************************************************************************/
   1028        1.1  thorpej typedef struct _MSG_CONFIG
   1029        1.1  thorpej {
   1030        1.1  thorpej     U8                      Action;                     /* 00h */
   1031        1.1  thorpej     U8                      Reserved;                   /* 01h */
   1032        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   1033        1.1  thorpej     U8                      Function;                   /* 03h */
   1034        1.1  thorpej     U8                      Reserved1[3];               /* 04h */
   1035        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   1036        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   1037        1.1  thorpej     U8                      Reserved2[8];               /* 0Ch */
   1038        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 14h */
   1039        1.1  thorpej     U32                     PageAddress;                /* 18h */
   1040        1.1  thorpej     SGE_IO_UNION            PageBufferSGE;              /* 1Ch */
   1041        1.1  thorpej } MSG_CONFIG, MPI_POINTER PTR_MSG_CONFIG,
   1042        1.1  thorpej   Config_t, MPI_POINTER pConfig_t;
   1043        1.1  thorpej 
   1044        1.1  thorpej 
   1045        1.1  thorpej /****************************************************************************
   1046        1.1  thorpej *   Action field values
   1047        1.1  thorpej ****************************************************************************/
   1048        1.1  thorpej #define MPI_CONFIG_ACTION_PAGE_HEADER               (0x00)
   1049        1.1  thorpej #define MPI_CONFIG_ACTION_PAGE_READ_CURRENT         (0x01)
   1050        1.1  thorpej #define MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT        (0x02)
   1051        1.1  thorpej #define MPI_CONFIG_ACTION_PAGE_DEFAULT              (0x03)
   1052        1.1  thorpej #define MPI_CONFIG_ACTION_PAGE_WRITE_NVRAM          (0x04)
   1053        1.1  thorpej #define MPI_CONFIG_ACTION_PAGE_READ_DEFAULT         (0x05)
   1054        1.1  thorpej #define MPI_CONFIG_ACTION_PAGE_READ_NVRAM           (0x06)
   1055        1.1  thorpej 
   1056        1.1  thorpej 
   1057        1.1  thorpej /* Config Reply Message */
   1058        1.1  thorpej typedef struct _MSG_CONFIG_REPLY
   1059        1.1  thorpej {
   1060        1.1  thorpej     U8                      Action;                     /* 00h */
   1061        1.1  thorpej     U8                      Reserved;                   /* 01h */
   1062        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   1063        1.1  thorpej     U8                      Function;                   /* 03h */
   1064        1.1  thorpej     U8                      Reserved1[3];               /* 04h */
   1065        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   1066        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   1067        1.1  thorpej     U8                      Reserved2[2];               /* 0Ch */
   1068        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   1069        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   1070        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 14h */
   1071        1.1  thorpej } MSG_CONFIG_REPLY, MPI_POINTER PTR_MSG_CONFIG_REPLY,
   1072        1.1  thorpej   ConfigReply_t, MPI_POINTER pConfigReply_t;
   1073        1.1  thorpej 
   1074        1.1  thorpej 
   1075        1.1  thorpej 
   1076        1.1  thorpej /*****************************************************************************
   1077        1.1  thorpej *
   1078        1.1  thorpej *               C o n f i g u r a t i o n    P a g e s
   1079        1.1  thorpej *
   1080        1.1  thorpej *****************************************************************************/
   1081        1.1  thorpej 
   1082        1.1  thorpej /****************************************************************************
   1083        1.1  thorpej *   Manufacturing Config pages
   1084        1.1  thorpej ****************************************************************************/
   1085        1.1  thorpej #define MPI_MANUFACTPAGE_DEVICEID_FC909             (0x0621)
   1086        1.1  thorpej #define MPI_MANUFACTPAGE_DEVICEID_FC919             (0x0624)
   1087        1.1  thorpej #define MPI_MANUFACTPAGE_DEVICEID_FC929             (0x0622)
   1088        1.1  thorpej #define MPI_MANUFACTPAGE_DEVICEID_FC919X            (0x0628)
   1089        1.1  thorpej #define MPI_MANUFACTPAGE_DEVICEID_FC929X            (0x0626)
   1090        1.1  thorpej #define MPI_MANUFACTPAGE_DEVID_53C1030              (0x0030)
   1091        1.1  thorpej #define MPI_MANUFACTPAGE_DEVID_53C1030ZC            (0x0031)
   1092        1.1  thorpej #define MPI_MANUFACTPAGE_DEVID_1030_53C1035         (0x0032)
   1093        1.1  thorpej #define MPI_MANUFACTPAGE_DEVID_1030ZC_53C1035       (0x0033)
   1094        1.1  thorpej #define MPI_MANUFACTPAGE_DEVID_53C1035              (0x0040)
   1095        1.1  thorpej #define MPI_MANUFACTPAGE_DEVID_53C1035ZC            (0x0041)
   1096        1.1  thorpej 
   1097        1.1  thorpej typedef struct _CONFIG_PAGE_MANUFACTURING_0
   1098        1.1  thorpej {
   1099        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1100        1.1  thorpej     U8                      ChipName[16];               /* 04h */
   1101        1.1  thorpej     U8                      ChipRevision[8];            /* 14h */
   1102        1.1  thorpej     U8                      BoardName[16];              /* 1Ch */
   1103        1.1  thorpej     U8                      BoardAssembly[16];          /* 2Ch */
   1104        1.1  thorpej     U8                      BoardTracerNumber[16];      /* 3Ch */
   1105        1.1  thorpej 
   1106        1.1  thorpej } fCONFIG_PAGE_MANUFACTURING_0, MPI_POINTER PTR_CONFIG_PAGE_MANUFACTURING_0,
   1107        1.1  thorpej   ManufacturingPage0_t, MPI_POINTER pManufacturingPage0_t;
   1108        1.1  thorpej 
   1109        1.1  thorpej #define MPI_MANUFACTURING0_PAGEVERSION                 (0x00)
   1110        1.1  thorpej 
   1111        1.1  thorpej 
   1112        1.1  thorpej typedef struct _CONFIG_PAGE_MANUFACTURING_1
   1113        1.1  thorpej {
   1114        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1115        1.1  thorpej     U8                      VPD[256];                   /* 04h */
   1116        1.1  thorpej } fCONFIG_PAGE_MANUFACTURING_1, MPI_POINTER PTR_CONFIG_PAGE_MANUFACTURING_1,
   1117        1.1  thorpej   ManufacturingPage1_t, MPI_POINTER pManufacturingPage1_t;
   1118        1.1  thorpej 
   1119        1.1  thorpej #define MPI_MANUFACTURING1_PAGEVERSION                 (0x00)
   1120        1.1  thorpej 
   1121        1.1  thorpej 
   1122        1.1  thorpej typedef struct _MPI_CHIP_REVISION_ID
   1123        1.1  thorpej {
   1124        1.1  thorpej     U16 DeviceID;                                       /* 00h */
   1125        1.1  thorpej     U8  PCIRevisionID;                                  /* 02h */
   1126        1.1  thorpej     U8  Reserved;                                       /* 03h */
   1127        1.1  thorpej } MPI_CHIP_REVISION_ID, MPI_POINTER PTR_MPI_CHIP_REVISION_ID,
   1128        1.1  thorpej   MpiChipRevisionId_t, MPI_POINTER pMpiChipRevisionId_t;
   1129        1.1  thorpej 
   1130        1.1  thorpej 
   1131        1.1  thorpej /*
   1132        1.1  thorpej  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
   1133        1.1  thorpej  * one and check Header.PageLength at runtime.
   1134        1.1  thorpej  */
   1135        1.1  thorpej #ifndef MPI_MAN_PAGE_2_HW_SETTINGS_WORDS
   1136        1.1  thorpej #define MPI_MAN_PAGE_2_HW_SETTINGS_WORDS    (1)
   1137        1.1  thorpej #endif
   1138        1.1  thorpej 
   1139        1.1  thorpej typedef struct _CONFIG_PAGE_MANUFACTURING_2
   1140        1.1  thorpej {
   1141        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                                 /* 00h */
   1142        1.1  thorpej     MPI_CHIP_REVISION_ID    ChipId;                                 /* 04h */
   1143        1.1  thorpej     U32                     HwSettings[MPI_MAN_PAGE_2_HW_SETTINGS_WORDS];/* 08h */
   1144        1.1  thorpej } fCONFIG_PAGE_MANUFACTURING_2, MPI_POINTER PTR_CONFIG_PAGE_MANUFACTURING_2,
   1145        1.1  thorpej   ManufacturingPage2_t, MPI_POINTER pManufacturingPage2_t;
   1146        1.1  thorpej 
   1147        1.1  thorpej #define MPI_MANUFACTURING2_PAGEVERSION                  (0x00)
   1148        1.1  thorpej 
   1149        1.1  thorpej 
   1150        1.1  thorpej /*
   1151        1.1  thorpej  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
   1152        1.1  thorpej  * one and check Header.PageLength at runtime.
   1153        1.1  thorpej  */
   1154        1.1  thorpej #ifndef MPI_MAN_PAGE_3_INFO_WORDS
   1155        1.1  thorpej #define MPI_MAN_PAGE_3_INFO_WORDS           (1)
   1156        1.1  thorpej #endif
   1157        1.1  thorpej 
   1158        1.1  thorpej typedef struct _CONFIG_PAGE_MANUFACTURING_3
   1159        1.1  thorpej {
   1160        1.1  thorpej     fCONFIG_PAGE_HEADER                  Header;                     /* 00h */
   1161        1.1  thorpej     MPI_CHIP_REVISION_ID                ChipId;                     /* 04h */
   1162        1.1  thorpej     U32                                 Info[MPI_MAN_PAGE_3_INFO_WORDS];/* 08h */
   1163        1.1  thorpej } fCONFIG_PAGE_MANUFACTURING_3, MPI_POINTER PTR_CONFIG_PAGE_MANUFACTURING_3,
   1164        1.1  thorpej   ManufacturingPage3_t, MPI_POINTER pManufacturingPage3_t;
   1165        1.1  thorpej 
   1166        1.1  thorpej #define MPI_MANUFACTURING3_PAGEVERSION                  (0x00)
   1167        1.1  thorpej 
   1168        1.1  thorpej 
   1169        1.1  thorpej typedef struct _CONFIG_PAGE_MANUFACTURING_4
   1170        1.1  thorpej {
   1171        1.1  thorpej     fCONFIG_PAGE_HEADER              Header;             /* 00h */
   1172        1.1  thorpej     U32                             Reserved1;          /* 04h */
   1173        1.1  thorpej     U8                              InfoOffset0;        /* 08h */
   1174        1.1  thorpej     U8                              InfoSize0;          /* 09h */
   1175        1.1  thorpej     U8                              InfoOffset1;        /* 0Ah */
   1176        1.1  thorpej     U8                              InfoSize1;          /* 0Bh */
   1177        1.1  thorpej     U8                              InquirySize;        /* 0Ch */
   1178        1.1  thorpej     U8                              Reserved2;          /* 0Dh */
   1179        1.1  thorpej     U16                             Reserved3;          /* 0Eh */
   1180        1.1  thorpej     U8                              InquiryData[56];    /* 10h */
   1181        1.1  thorpej     U32                             ISVolumeSettings;   /* 48h */
   1182        1.1  thorpej     U32                             IMEVolumeSettings;  /* 4Ch */
   1183        1.1  thorpej     U32                             IMVolumeSettings;   /* 50h */
   1184        1.1  thorpej } fCONFIG_PAGE_MANUFACTURING_4, MPI_POINTER PTR_CONFIG_PAGE_MANUFACTURING_4,
   1185        1.1  thorpej   ManufacturingPage4_t, MPI_POINTER pManufacturingPage4_t;
   1186        1.1  thorpej 
   1187        1.1  thorpej #define MPI_MANUFACTURING4_PAGEVERSION                  (0x00)
   1188        1.1  thorpej 
   1189        1.1  thorpej 
   1190        1.1  thorpej /****************************************************************************
   1191        1.1  thorpej *   IO Unit Config Pages
   1192        1.1  thorpej ****************************************************************************/
   1193        1.1  thorpej 
   1194        1.1  thorpej typedef struct _CONFIG_PAGE_IO_UNIT_0
   1195        1.1  thorpej {
   1196        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1197        1.1  thorpej     U64                     UniqueValue;                /* 04h */
   1198        1.1  thorpej } fCONFIG_PAGE_IO_UNIT_0, MPI_POINTER PTR_CONFIG_PAGE_IO_UNIT_0,
   1199        1.1  thorpej   IOUnitPage0_t, MPI_POINTER pIOUnitPage0_t;
   1200        1.1  thorpej 
   1201        1.1  thorpej #define MPI_IOUNITPAGE0_PAGEVERSION                     (0x00)
   1202        1.1  thorpej 
   1203        1.1  thorpej 
   1204        1.1  thorpej typedef struct _CONFIG_PAGE_IO_UNIT_1
   1205        1.1  thorpej {
   1206        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1207        1.1  thorpej     U32                     Flags;                      /* 04h */
   1208        1.1  thorpej } fCONFIG_PAGE_IO_UNIT_1, MPI_POINTER PTR_CONFIG_PAGE_IO_UNIT_1,
   1209        1.1  thorpej   IOUnitPage1_t, MPI_POINTER pIOUnitPage1_t;
   1210        1.1  thorpej 
   1211        1.1  thorpej #define MPI_IOUNITPAGE1_PAGEVERSION                     (0x00)
   1212        1.1  thorpej 
   1213        1.1  thorpej /* IO Unit Page 1 Flags defines */
   1214        1.1  thorpej 
   1215        1.1  thorpej #define MPI_IOUNITPAGE1_MULTI_FUNCTION                  (0x00000000)
   1216        1.1  thorpej #define MPI_IOUNITPAGE1_SINGLE_FUNCTION                 (0x00000001)
   1217        1.1  thorpej #define MPI_IOUNITPAGE1_MULTI_PATHING                   (0x00000002)
   1218        1.1  thorpej #define MPI_IOUNITPAGE1_SINGLE_PATHING                  (0x00000000)
   1219        1.1  thorpej #define MPI_IOUNITPAGE1_DISABLE_IR                      (0x00000040)
   1220        1.1  thorpej #define MPI_IOUNITPAGE1_FORCE_32                        (0x00000080)
   1221        1.1  thorpej 
   1222        1.1  thorpej 
   1223        1.1  thorpej typedef struct _MPI_ADAPTER_INFO
   1224        1.1  thorpej {
   1225        1.1  thorpej     U8      PciBusNumber;                               /* 00h */
   1226        1.1  thorpej     U8      PciDeviceAndFunctionNumber;                 /* 01h */
   1227        1.1  thorpej     U16     AdapterFlags;                               /* 02h */
   1228        1.1  thorpej } MPI_ADAPTER_INFO, MPI_POINTER PTR_MPI_ADAPTER_INFO,
   1229        1.1  thorpej   MpiAdapterInfo_t, MPI_POINTER pMpiAdapterInfo_t;
   1230        1.1  thorpej 
   1231        1.1  thorpej #define MPI_ADAPTER_INFO_FLAGS_EMBEDDED                 (0x0001)
   1232        1.1  thorpej #define MPI_ADAPTER_INFO_FLAGS_INIT_STATUS              (0x0002)
   1233        1.1  thorpej 
   1234        1.1  thorpej typedef struct _CONFIG_PAGE_IO_UNIT_2
   1235        1.1  thorpej {
   1236        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1237        1.1  thorpej     U32                     Flags;                      /* 04h */
   1238        1.1  thorpej     U32                     BiosVersion;                /* 08h */
   1239        1.1  thorpej     MPI_ADAPTER_INFO        AdapterOrder[4];            /* 0Ch */
   1240        1.1  thorpej } fCONFIG_PAGE_IO_UNIT_2, MPI_POINTER PTR_CONFIG_PAGE_IO_UNIT_2,
   1241        1.1  thorpej   IOUnitPage2_t, MPI_POINTER pIOUnitPage2_t;
   1242        1.1  thorpej 
   1243        1.1  thorpej #define MPI_IOUNITPAGE2_PAGEVERSION                     (0x00)
   1244        1.1  thorpej 
   1245        1.1  thorpej #define MPI_IOUNITPAGE2_FLAGS_PAUSE_ON_ERROR            (0x00000002)
   1246        1.1  thorpej #define MPI_IOUNITPAGE2_FLAGS_VERBOSE_ENABLE            (0x00000004)
   1247        1.1  thorpej #define MPI_IOUNITPAGE2_FLAGS_COLOR_VIDEO_DISABLE       (0x00000008)
   1248        1.1  thorpej #define MPI_IOUNITPAGE2_FLAGS_DONT_HOOK_INT_40          (0x00000010)
   1249        1.1  thorpej 
   1250        1.1  thorpej 
   1251        1.1  thorpej /*
   1252        1.1  thorpej  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
   1253        1.1  thorpej  * one and check Header.PageLength at runtime.
   1254        1.1  thorpej  */
   1255        1.1  thorpej #ifndef MPI_IO_UNIT_PAGE_3_GPIO_VAL_MAX
   1256        1.1  thorpej #define MPI_IO_UNIT_PAGE_3_GPIO_VAL_MAX     (1)
   1257        1.1  thorpej #endif
   1258        1.1  thorpej 
   1259        1.1  thorpej typedef struct _CONFIG_PAGE_IO_UNIT_3
   1260        1.1  thorpej {
   1261        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                                   /* 00h */
   1262        1.1  thorpej     U8                      GPIOCount;                                /* 04h */
   1263        1.1  thorpej     U8                      Reserved1;                                /* 05h */
   1264        1.1  thorpej     U16                     Reserved2;                                /* 06h */
   1265        1.1  thorpej     U16                     GPIOVal[MPI_IO_UNIT_PAGE_3_GPIO_VAL_MAX]; /* 08h */
   1266        1.1  thorpej } fCONFIG_PAGE_IO_UNIT_3, MPI_POINTER PTR_CONFIG_PAGE_IO_UNIT_3,
   1267        1.1  thorpej   IOUnitPage3_t, MPI_POINTER pIOUnitPage3_t;
   1268        1.1  thorpej 
   1269        1.1  thorpej #define MPI_IOUNITPAGE3_PAGEVERSION                     (0x01)
   1270        1.1  thorpej 
   1271        1.1  thorpej #define MPI_IOUNITPAGE3_GPIO_FUNCTION_MASK              (0xFC)
   1272        1.1  thorpej #define MPI_IOUNITPAGE3_GPIO_FUNCTION_SHIFT             (2)
   1273        1.1  thorpej #define MPI_IOUNITPAGE3_GPIO_SETTING_OFF                (0x00)
   1274        1.1  thorpej #define MPI_IOUNITPAGE3_GPIO_SETTING_ON                 (0x01)
   1275        1.1  thorpej 
   1276        1.1  thorpej 
   1277        1.1  thorpej /****************************************************************************
   1278        1.1  thorpej *   IOC Config Pages
   1279        1.1  thorpej ****************************************************************************/
   1280        1.1  thorpej 
   1281        1.1  thorpej typedef struct _CONFIG_PAGE_IOC_0
   1282        1.1  thorpej {
   1283        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1284        1.1  thorpej     U32                     TotalNVStore;               /* 04h */
   1285        1.1  thorpej     U32                     FreeNVStore;                /* 08h */
   1286        1.1  thorpej     U16                     VendorID;                   /* 0Ch */
   1287        1.1  thorpej     U16                     DeviceID;                   /* 0Eh */
   1288        1.1  thorpej     U8                      RevisionID;                 /* 10h */
   1289        1.1  thorpej     U8                      Reserved[3];                /* 11h */
   1290        1.1  thorpej     U32                     ClassCode;                  /* 14h */
   1291        1.1  thorpej     U16                     SubsystemVendorID;          /* 18h */
   1292        1.1  thorpej     U16                     SubsystemID;                /* 1Ah */
   1293        1.1  thorpej } fCONFIG_PAGE_IOC_0, MPI_POINTER PTR_CONFIG_PAGE_IOC_0,
   1294        1.1  thorpej   IOCPage0_t, MPI_POINTER pIOCPage0_t;
   1295        1.1  thorpej 
   1296        1.1  thorpej #define MPI_IOCPAGE0_PAGEVERSION                        (0x01)
   1297        1.1  thorpej 
   1298        1.1  thorpej 
   1299        1.1  thorpej typedef struct _CONFIG_PAGE_IOC_1
   1300        1.1  thorpej {
   1301        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1302        1.1  thorpej     U32                     Flags;                      /* 04h */
   1303        1.1  thorpej     U32                     CoalescingTimeout;          /* 08h */
   1304        1.1  thorpej     U8                      CoalescingDepth;            /* 0Ch */
   1305        1.1  thorpej     U8                      Reserved[3];                /* 0Dh */
   1306        1.1  thorpej } fCONFIG_PAGE_IOC_1, MPI_POINTER PTR_CONFIG_PAGE_IOC_1,
   1307        1.1  thorpej   IOCPage1_t, MPI_POINTER pIOCPage1_t;
   1308        1.1  thorpej 
   1309        1.1  thorpej #define MPI_IOCPAGE1_PAGEVERSION                        (0x00)
   1310        1.1  thorpej 
   1311        1.1  thorpej #define MPI_IOCPAGE1_REPLY_COALESCING                   (0x00000001)
   1312        1.1  thorpej 
   1313        1.1  thorpej 
   1314        1.1  thorpej typedef struct _CONFIG_PAGE_IOC_2_RAID_VOL
   1315        1.1  thorpej {
   1316        1.1  thorpej     U8                          VolumeID;               /* 00h */
   1317        1.1  thorpej     U8                          VolumeBus;              /* 01h */
   1318        1.1  thorpej     U8                          VolumeIOC;              /* 02h */
   1319        1.1  thorpej     U8                          VolumePageNumber;       /* 03h */
   1320        1.1  thorpej     U8                          VolumeType;             /* 04h */
   1321        1.1  thorpej     U8                          Reserved2;              /* 05h */
   1322        1.1  thorpej     U16                         Reserved3;              /* 06h */
   1323        1.1  thorpej } fCONFIG_PAGE_IOC_2_RAID_VOL, MPI_POINTER PTR_CONFIG_PAGE_IOC_2_RAID_VOL,
   1324        1.1  thorpej   ConfigPageIoc2RaidVol_t, MPI_POINTER pConfigPageIoc2RaidVol_t;
   1325        1.1  thorpej 
   1326        1.1  thorpej /*
   1327        1.1  thorpej  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
   1328        1.1  thorpej  * one and check Header.PageLength at runtime.
   1329        1.1  thorpej  */
   1330        1.1  thorpej #ifndef MPI_IOC_PAGE_2_RAID_VOLUME_MAX
   1331        1.1  thorpej #define MPI_IOC_PAGE_2_RAID_VOLUME_MAX      (1)
   1332        1.1  thorpej #endif
   1333        1.1  thorpej 
   1334        1.1  thorpej typedef struct _CONFIG_PAGE_IOC_2
   1335        1.1  thorpej {
   1336        1.1  thorpej     fCONFIG_PAGE_HEADER          Header;                              /* 00h */
   1337        1.1  thorpej     U32                         CapabilitiesFlags;                   /* 04h */
   1338        1.1  thorpej     U8                          NumActiveVolumes;                    /* 08h */
   1339        1.1  thorpej     U8                          MaxVolumes;                          /* 09h */
   1340        1.1  thorpej     U8                          NumActivePhysDisks;                  /* 0Ah */
   1341        1.1  thorpej     U8                          MaxPhysDisks;                        /* 0Bh */
   1342        1.1  thorpej     fCONFIG_PAGE_IOC_2_RAID_VOL  RaidVolume[MPI_IOC_PAGE_2_RAID_VOLUME_MAX];/* 0Ch */
   1343        1.1  thorpej } fCONFIG_PAGE_IOC_2, MPI_POINTER PTR_CONFIG_PAGE_IOC_2,
   1344        1.1  thorpej   IOCPage2_t, MPI_POINTER pIOCPage2_t;
   1345        1.1  thorpej 
   1346        1.1  thorpej #define MPI_IOCPAGE2_PAGEVERSION                        (0x01)
   1347        1.1  thorpej 
   1348        1.1  thorpej /* IOC Page 2 Capabilities flags */
   1349        1.1  thorpej 
   1350        1.1  thorpej #define MPI_IOCPAGE2_CAP_FLAGS_IS_SUPPORT               (0x00000001)
   1351        1.1  thorpej #define MPI_IOCPAGE2_CAP_FLAGS_IME_SUPPORT              (0x00000002)
   1352        1.1  thorpej #define MPI_IOCPAGE2_CAP_FLAGS_IM_SUPPORT               (0x00000004)
   1353        1.1  thorpej #define MPI_IOCPAGE2_CAP_FLAGS_SES_SUPPORT              (0x20000000)
   1354        1.1  thorpej #define MPI_IOCPAGE2_CAP_FLAGS_SAFTE_SUPPORT            (0x40000000)
   1355        1.1  thorpej #define MPI_IOCPAGE2_CAP_FLAGS_CROSS_CHANNEL_SUPPORT    (0x80000000)
   1356        1.1  thorpej 
   1357        1.1  thorpej /* IOC Page 2 Volume RAID Type values, also used in RAID Volume pages */
   1358        1.1  thorpej 
   1359        1.1  thorpej #define MPI_RAID_VOL_TYPE_IS                        (0x00)
   1360        1.1  thorpej #define MPI_RAID_VOL_TYPE_IME                       (0x01)
   1361        1.1  thorpej #define MPI_RAID_VOL_TYPE_IM                        (0x02)
   1362        1.1  thorpej 
   1363        1.1  thorpej 
   1364        1.1  thorpej typedef struct _IOC_3_PHYS_DISK
   1365        1.1  thorpej {
   1366        1.1  thorpej     U8                          PhysDiskID;             /* 00h */
   1367        1.1  thorpej     U8                          PhysDiskBus;            /* 01h */
   1368        1.1  thorpej     U8                          PhysDiskIOC;            /* 02h */
   1369        1.1  thorpej     U8                          PhysDiskNum;            /* 03h */
   1370        1.1  thorpej } IOC_3_PHYS_DISK, MPI_POINTER PTR_IOC_3_PHYS_DISK,
   1371        1.1  thorpej   Ioc3PhysDisk_t, MPI_POINTER pIoc3PhysDisk_t;
   1372        1.1  thorpej 
   1373        1.1  thorpej /*
   1374        1.1  thorpej  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
   1375        1.1  thorpej  * one and check Header.PageLength at runtime.
   1376        1.1  thorpej  */
   1377        1.1  thorpej #ifndef MPI_IOC_PAGE_3_PHYSDISK_MAX
   1378        1.1  thorpej #define MPI_IOC_PAGE_3_PHYSDISK_MAX         (1)
   1379        1.1  thorpej #endif
   1380        1.1  thorpej 
   1381        1.1  thorpej typedef struct _CONFIG_PAGE_IOC_3
   1382        1.1  thorpej {
   1383        1.1  thorpej     fCONFIG_PAGE_HEADER          Header;                                /* 00h */
   1384        1.1  thorpej     U8                          NumPhysDisks;                          /* 04h */
   1385        1.1  thorpej     U8                          Reserved1;                             /* 05h */
   1386        1.1  thorpej     U16                         Reserved2;                             /* 06h */
   1387        1.1  thorpej     IOC_3_PHYS_DISK             PhysDisk[MPI_IOC_PAGE_3_PHYSDISK_MAX]; /* 08h */
   1388        1.1  thorpej } fCONFIG_PAGE_IOC_3, MPI_POINTER PTR_CONFIG_PAGE_IOC_3,
   1389        1.1  thorpej   IOCPage3_t, MPI_POINTER pIOCPage3_t;
   1390        1.1  thorpej 
   1391        1.1  thorpej #define MPI_IOCPAGE3_PAGEVERSION                        (0x00)
   1392        1.1  thorpej 
   1393        1.1  thorpej 
   1394        1.1  thorpej typedef struct _IOC_4_SEP
   1395        1.1  thorpej {
   1396        1.1  thorpej     U8                          SEPTargetID;            /* 00h */
   1397        1.1  thorpej     U8                          SEPBus;                 /* 01h */
   1398        1.1  thorpej     U16                         Reserved;               /* 02h */
   1399        1.1  thorpej } IOC_4_SEP, MPI_POINTER PTR_IOC_4_SEP,
   1400        1.1  thorpej   Ioc4Sep_t, MPI_POINTER pIoc4Sep_t;
   1401        1.1  thorpej 
   1402        1.1  thorpej /*
   1403        1.1  thorpej  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
   1404        1.1  thorpej  * one and check Header.PageLength at runtime.
   1405        1.1  thorpej  */
   1406        1.1  thorpej #ifndef MPI_IOC_PAGE_4_SEP_MAX
   1407        1.1  thorpej #define MPI_IOC_PAGE_4_SEP_MAX              (1)
   1408        1.1  thorpej #endif
   1409        1.1  thorpej 
   1410        1.1  thorpej typedef struct _CONFIG_PAGE_IOC_4
   1411        1.1  thorpej {
   1412        1.1  thorpej     fCONFIG_PAGE_HEADER          Header;                         /* 00h */
   1413        1.1  thorpej     U8                          ActiveSEP;                      /* 04h */
   1414        1.1  thorpej     U8                          MaxSEP;                         /* 05h */
   1415        1.1  thorpej     U16                         Reserved1;                      /* 06h */
   1416        1.1  thorpej     IOC_4_SEP                   SEP[MPI_IOC_PAGE_4_SEP_MAX];    /* 08h */
   1417        1.1  thorpej } fCONFIG_PAGE_IOC_4, MPI_POINTER PTR_CONFIG_PAGE_IOC_4,
   1418        1.1  thorpej   IOCPage4_t, MPI_POINTER pIOCPage4_t;
   1419        1.1  thorpej 
   1420        1.1  thorpej #define MPI_IOCPAGE4_PAGEVERSION                        (0x00)
   1421        1.1  thorpej 
   1422        1.1  thorpej 
   1423        1.1  thorpej /****************************************************************************
   1424        1.1  thorpej *   SCSI Port Config Pages
   1425        1.1  thorpej ****************************************************************************/
   1426        1.1  thorpej 
   1427        1.1  thorpej typedef struct _CONFIG_PAGE_SCSI_PORT_0
   1428        1.1  thorpej {
   1429        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1430        1.1  thorpej     U32                     Capabilities;               /* 04h */
   1431        1.1  thorpej     U32                     PhysicalInterface;          /* 08h */
   1432        1.1  thorpej } fCONFIG_PAGE_SCSI_PORT_0, MPI_POINTER PTR_CONFIG_PAGE_SCSI_PORT_0,
   1433        1.1  thorpej   SCSIPortPage0_t, MPI_POINTER pSCSIPortPage0_t;
   1434        1.1  thorpej 
   1435        1.1  thorpej #define MPI_SCSIPORTPAGE0_PAGEVERSION                   (0x01)
   1436        1.1  thorpej 
   1437        1.1  thorpej #define MPI_SCSIPORTPAGE0_CAP_IU                        (0x00000001)
   1438        1.1  thorpej #define MPI_SCSIPORTPAGE0_CAP_DT                        (0x00000002)
   1439        1.1  thorpej #define MPI_SCSIPORTPAGE0_CAP_QAS                       (0x00000004)
   1440        1.1  thorpej #define MPI_SCSIPORTPAGE0_CAP_MIN_SYNC_PERIOD_MASK      (0x0000FF00)
   1441        1.1  thorpej #define MPI_SCSIPORTPAGE0_CAP_MAX_SYNC_OFFSET_MASK      (0x00FF0000)
   1442        1.1  thorpej #define MPI_SCSIPORTPAGE0_CAP_WIDE                      (0x20000000)
   1443        1.1  thorpej #define MPI_SCSIPORTPAGE0_CAP_AIP                       (0x80000000)
   1444        1.1  thorpej 
   1445        1.1  thorpej #define MPI_SCSIPORTPAGE0_PHY_SIGNAL_TYPE_MASK          (0x00000003)
   1446        1.1  thorpej #define MPI_SCSIPORTPAGE0_PHY_SIGNAL_HVD                (0x01)
   1447        1.1  thorpej #define MPI_SCSIPORTPAGE0_PHY_SIGNAL_SE                 (0x02)
   1448        1.1  thorpej #define MPI_SCSIPORTPAGE0_PHY_SIGNAL_LVD                (0x03)
   1449        1.1  thorpej 
   1450        1.1  thorpej 
   1451        1.1  thorpej typedef struct _CONFIG_PAGE_SCSI_PORT_1
   1452        1.1  thorpej {
   1453        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1454        1.1  thorpej     U32                     Configuration;              /* 04h */
   1455        1.1  thorpej     U32                     OnBusTimerValue;            /* 08h */
   1456        1.1  thorpej } fCONFIG_PAGE_SCSI_PORT_1, MPI_POINTER PTR_CONFIG_PAGE_SCSI_PORT_1,
   1457        1.1  thorpej   SCSIPortPage1_t, MPI_POINTER pSCSIPortPage1_t;
   1458        1.1  thorpej 
   1459        1.1  thorpej #define MPI_SCSIPORTPAGE1_PAGEVERSION                   (0x02)
   1460        1.1  thorpej 
   1461        1.1  thorpej #define MPI_SCSIPORTPAGE1_CFG_PORT_SCSI_ID_MASK         (0x000000FF)
   1462        1.1  thorpej #define MPI_SCSIPORTPAGE1_CFG_PORT_RESPONSE_ID_MASK     (0xFFFF0000)
   1463        1.1  thorpej 
   1464        1.1  thorpej 
   1465        1.1  thorpej typedef struct _MPI_DEVICE_INFO
   1466        1.1  thorpej {
   1467        1.1  thorpej     U8      Timeout;                                    /* 00h */
   1468        1.1  thorpej     U8      SyncFactor;                                 /* 01h */
   1469        1.1  thorpej     U16     DeviceFlags;                                /* 02h */
   1470        1.1  thorpej } MPI_DEVICE_INFO, MPI_POINTER PTR_MPI_DEVICE_INFO,
   1471        1.1  thorpej   MpiDeviceInfo_t, MPI_POINTER pMpiDeviceInfo_t;
   1472        1.1  thorpej 
   1473        1.1  thorpej typedef struct _CONFIG_PAGE_SCSI_PORT_2
   1474        1.1  thorpej {
   1475        1.1  thorpej     fCONFIG_PAGE_HEADER  Header;                         /* 00h */
   1476        1.1  thorpej     U32                 PortFlags;                      /* 04h */
   1477        1.1  thorpej     U32                 PortSettings;                   /* 08h */
   1478        1.1  thorpej     MPI_DEVICE_INFO     DeviceSettings[16];             /* 0Ch */
   1479        1.1  thorpej } fCONFIG_PAGE_SCSI_PORT_2, MPI_POINTER PTR_CONFIG_PAGE_SCSI_PORT_2,
   1480        1.1  thorpej   SCSIPortPage2_t, MPI_POINTER pSCSIPortPage2_t;
   1481        1.1  thorpej 
   1482        1.1  thorpej #define MPI_SCSIPORTPAGE2_PAGEVERSION                       (0x01)
   1483        1.1  thorpej 
   1484        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_FLAGS_SCAN_HIGH_TO_LOW       (0x00000001)
   1485        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_FLAGS_AVOID_SCSI_RESET       (0x00000004)
   1486        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_FLAGS_ALTERNATE_CHS          (0x00000008)
   1487        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_FLAGS_TERMINATION_DISABLE    (0x00000010)
   1488        1.1  thorpej 
   1489        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_HOST_ID_MASK                 (0x0000000F)
   1490        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_MASK_INIT_HBA                (0x00000030)
   1491        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_DISABLE_INIT_HBA             (0x00000000)
   1492        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_BIOS_INIT_HBA                (0x00000010)
   1493        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_OS_INIT_HBA                  (0x00000020)
   1494        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_BIOS_OS_INIT_HBA             (0x00000030)
   1495        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_REMOVABLE_MEDIA              (0x000000C0)
   1496        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_SPINUP_DELAY_MASK            (0x00000F00)
   1497        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_MASK_NEGO_MASTER_SETTINGS    (0x00003000)
   1498        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_NEGO_MASTER_SETTINGS         (0x00000000)
   1499        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_NONE_MASTER_SETTINGS         (0x00001000)
   1500        1.1  thorpej #define MPI_SCSIPORTPAGE2_PORT_ALL_MASTER_SETTINGS          (0x00003000)
   1501        1.1  thorpej 
   1502        1.1  thorpej #define MPI_SCSIPORTPAGE2_DEVICE_DISCONNECT_ENABLE          (0x0001)
   1503        1.1  thorpej #define MPI_SCSIPORTPAGE2_DEVICE_ID_SCAN_ENABLE             (0x0002)
   1504        1.1  thorpej #define MPI_SCSIPORTPAGE2_DEVICE_LUN_SCAN_ENABLE            (0x0004)
   1505        1.1  thorpej #define MPI_SCSIPORTPAGE2_DEVICE_TAG_QUEUE_ENABLE           (0x0008)
   1506        1.1  thorpej #define MPI_SCSIPORTPAGE2_DEVICE_WIDE_DISABLE               (0x0010)
   1507        1.1  thorpej #define MPI_SCSIPORTPAGE2_DEVICE_BOOT_CHOICE                (0x0020)
   1508        1.1  thorpej 
   1509        1.1  thorpej 
   1510        1.1  thorpej /****************************************************************************
   1511        1.1  thorpej *   SCSI Target Device Config Pages
   1512        1.1  thorpej ****************************************************************************/
   1513        1.1  thorpej 
   1514        1.1  thorpej typedef struct _CONFIG_PAGE_SCSI_DEVICE_0
   1515        1.1  thorpej {
   1516        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1517        1.1  thorpej     U32                     NegotiatedParameters;       /* 04h */
   1518        1.1  thorpej     U32                     Information;                /* 08h */
   1519        1.1  thorpej } fCONFIG_PAGE_SCSI_DEVICE_0, MPI_POINTER PTR_CONFIG_PAGE_SCSI_DEVICE_0,
   1520        1.1  thorpej   SCSIDevicePage0_t, MPI_POINTER pSCSIDevicePage0_t;
   1521        1.1  thorpej 
   1522        1.1  thorpej #define MPI_SCSIDEVPAGE0_PAGEVERSION                    (0x02)
   1523        1.1  thorpej 
   1524        1.1  thorpej #define MPI_SCSIDEVPAGE0_NP_IU                          (0x00000001)
   1525        1.1  thorpej #define MPI_SCSIDEVPAGE0_NP_DT                          (0x00000002)
   1526        1.1  thorpej #define MPI_SCSIDEVPAGE0_NP_QAS                         (0x00000004)
   1527        1.1  thorpej #define MPI_SCSIDEVPAGE0_NP_NEG_SYNC_PERIOD_MASK        (0x0000FF00)
   1528        1.1  thorpej #define MPI_SCSIDEVPAGE0_NP_NEG_SYNC_OFFSET_MASK        (0x00FF0000)
   1529        1.1  thorpej #define MPI_SCSIDEVPAGE0_NP_WIDE                        (0x20000000)
   1530        1.1  thorpej #define MPI_SCSIDEVPAGE0_NP_AIP                         (0x80000000)
   1531        1.1  thorpej 
   1532        1.1  thorpej #define MPI_SCSIDEVPAGE0_INFO_PARAMS_NEGOTIATED         (0x00000001)
   1533        1.1  thorpej #define MPI_SCSIDEVPAGE0_INFO_SDTR_REJECTED             (0x00000002)
   1534        1.1  thorpej #define MPI_SCSIDEVPAGE0_INFO_WDTR_REJECTED             (0x00000004)
   1535        1.1  thorpej #define MPI_SCSIDEVPAGE0_INFO_PPR_REJECTED              (0x00000008)
   1536        1.1  thorpej 
   1537        1.1  thorpej 
   1538        1.1  thorpej typedef struct _CONFIG_PAGE_SCSI_DEVICE_1
   1539        1.1  thorpej {
   1540        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1541        1.1  thorpej     U32                     RequestedParameters;        /* 04h */
   1542        1.1  thorpej     U32                     Reserved;                   /* 08h */
   1543        1.1  thorpej     U32                     Configuration;              /* 0Ch */
   1544        1.1  thorpej } fCONFIG_PAGE_SCSI_DEVICE_1, MPI_POINTER PTR_CONFIG_PAGE_SCSI_DEVICE_1,
   1545        1.1  thorpej   SCSIDevicePage1_t, MPI_POINTER pSCSIDevicePage1_t;
   1546        1.1  thorpej 
   1547        1.1  thorpej #define MPI_SCSIDEVPAGE1_PAGEVERSION                    (0x03)
   1548        1.1  thorpej 
   1549        1.1  thorpej #define MPI_SCSIDEVPAGE1_RP_IU                          (0x00000001)
   1550        1.1  thorpej #define MPI_SCSIDEVPAGE1_RP_DT                          (0x00000002)
   1551        1.1  thorpej #define MPI_SCSIDEVPAGE1_RP_QAS                         (0x00000004)
   1552        1.1  thorpej #define MPI_SCSIDEVPAGE1_RP_MIN_SYNC_PERIOD_MASK        (0x0000FF00)
   1553        1.1  thorpej #define MPI_SCSIDEVPAGE1_RP_MAX_SYNC_OFFSET_MASK        (0x00FF0000)
   1554        1.1  thorpej #define MPI_SCSIDEVPAGE1_RP_WIDE                        (0x20000000)
   1555        1.1  thorpej #define MPI_SCSIDEVPAGE1_RP_AIP                         (0x80000000)
   1556        1.1  thorpej 
   1557        1.1  thorpej #define MPI_SCSIDEVPAGE1_DV_LVD_DRIVE_STRENGTH_MASK     (0x00000003)
   1558        1.1  thorpej #define MPI_SCSIDEVPAGE1_DV_SE_SLEW_RATE_MASK           (0x00000300)
   1559        1.1  thorpej 
   1560        1.1  thorpej #define MPI_SCSIDEVPAGE1_CONF_WDTR_DISALLOWED           (0x00000002)
   1561        1.1  thorpej #define MPI_SCSIDEVPAGE1_CONF_SDTR_DISALLOWED           (0x00000004)
   1562        1.1  thorpej 
   1563        1.1  thorpej 
   1564        1.1  thorpej typedef struct _CONFIG_PAGE_SCSI_DEVICE_2
   1565        1.1  thorpej {
   1566        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1567        1.1  thorpej     U32                     DomainValidation;           /* 04h */
   1568        1.1  thorpej     U32                     ParityPipeSelect;           /* 08h */
   1569        1.1  thorpej     U32                     DataPipeSelect;             /* 0Ch */
   1570        1.1  thorpej } fCONFIG_PAGE_SCSI_DEVICE_2, MPI_POINTER PTR_CONFIG_PAGE_SCSI_DEVICE_2,
   1571        1.1  thorpej   SCSIDevicePage2_t, MPI_POINTER pSCSIDevicePage2_t;
   1572        1.1  thorpej 
   1573        1.1  thorpej #define MPI_SCSIDEVPAGE2_PAGEVERSION                    (0x00)
   1574        1.1  thorpej 
   1575        1.1  thorpej #define MPI_SCSIDEVPAGE2_DV_ISI_ENABLE                  (0x00000010)
   1576        1.1  thorpej #define MPI_SCSIDEVPAGE2_DV_SECONDARY_DRIVER_ENABLE     (0x00000020)
   1577        1.1  thorpej #define MPI_SCSIDEVPAGE2_DV_SLEW_RATE_CTRL              (0x00000380)
   1578        1.1  thorpej #define MPI_SCSIDEVPAGE2_DV_PRIM_DRIVE_STR_CTRL         (0x00001C00)
   1579        1.1  thorpej #define MPI_SCSIDEVPAGE2_DV_SECOND_DRIVE_STR_CTRL       (0x0000E000)
   1580        1.1  thorpej #define MPI_SCSIDEVPAGE2_DV_XCLKH_ST                    (0x10000000)
   1581        1.1  thorpej #define MPI_SCSIDEVPAGE2_DV_XCLKS_ST                    (0x20000000)
   1582        1.1  thorpej #define MPI_SCSIDEVPAGE2_DV_XCLKH_DT                    (0x40000000)
   1583        1.1  thorpej #define MPI_SCSIDEVPAGE2_DV_XCLKS_DT                    (0x80000000)
   1584        1.1  thorpej 
   1585        1.1  thorpej #define MPI_SCSIDEVPAGE2_PPS_PPS_MASK                   (0x00000003)
   1586        1.1  thorpej 
   1587        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_0_PL_SELECT_MASK       (0x00000003)
   1588        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_1_PL_SELECT_MASK       (0x0000000C)
   1589        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_2_PL_SELECT_MASK       (0x00000030)
   1590        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_3_PL_SELECT_MASK       (0x000000C0)
   1591        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_4_PL_SELECT_MASK       (0x00000300)
   1592        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_5_PL_SELECT_MASK       (0x00000C00)
   1593        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_6_PL_SELECT_MASK       (0x00003000)
   1594        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_7_PL_SELECT_MASK       (0x0000C000)
   1595        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_8_PL_SELECT_MASK       (0x00030000)
   1596        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_9_PL_SELECT_MASK       (0x000C0000)
   1597        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_10_PL_SELECT_MASK      (0x00300000)
   1598        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_11_PL_SELECT_MASK      (0x00C00000)
   1599        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_12_PL_SELECT_MASK      (0x03000000)
   1600        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_13_PL_SELECT_MASK      (0x0C000000)
   1601        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_14_PL_SELECT_MASK      (0x30000000)
   1602        1.1  thorpej #define MPI_SCSIDEVPAGE2_DPS_BIT_15_PL_SELECT_MASK      (0xC0000000)
   1603        1.1  thorpej 
   1604        1.1  thorpej 
   1605        1.1  thorpej /****************************************************************************
   1606        1.1  thorpej *   FC Port Config Pages
   1607        1.1  thorpej ****************************************************************************/
   1608        1.1  thorpej 
   1609        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_0
   1610        1.1  thorpej {
   1611        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1612        1.1  thorpej     U32                     Flags;                      /* 04h */
   1613        1.1  thorpej     U8                      MPIPortNumber;              /* 08h */
   1614        1.1  thorpej     U8                      LinkType;                   /* 09h */
   1615        1.1  thorpej     U8                      PortState;                  /* 0Ah */
   1616        1.1  thorpej     U8                      Reserved;                   /* 0Bh */
   1617        1.1  thorpej     U32                     PortIdentifier;             /* 0Ch */
   1618        1.1  thorpej     U64                     WWNN;                       /* 10h */
   1619        1.1  thorpej     U64                     WWPN;                       /* 18h */
   1620        1.1  thorpej     U32                     SupportedServiceClass;      /* 20h */
   1621        1.1  thorpej     U32                     SupportedSpeeds;            /* 24h */
   1622        1.1  thorpej     U32                     CurrentSpeed;               /* 28h */
   1623        1.1  thorpej     U32                     MaxFrameSize;               /* 2Ch */
   1624        1.1  thorpej     U64                     FabricWWNN;                 /* 30h */
   1625        1.1  thorpej     U64                     FabricWWPN;                 /* 38h */
   1626        1.1  thorpej     U32                     DiscoveredPortsCount;       /* 40h */
   1627        1.1  thorpej     U32                     MaxInitiators;              /* 44h */
   1628        1.1  thorpej } fCONFIG_PAGE_FC_PORT_0, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_0,
   1629        1.1  thorpej   FCPortPage0_t, MPI_POINTER pFCPortPage0_t;
   1630        1.1  thorpej 
   1631        1.1  thorpej #define MPI_FCPORTPAGE0_PAGEVERSION                     (0x01)
   1632        1.1  thorpej 
   1633        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_PROT_MASK                 (0x0000000F)
   1634        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_PROT_FCP_INIT             (MPI_PORTFACTS_PROTOCOL_INITIATOR)
   1635        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_PROT_FCP_TARG             (MPI_PORTFACTS_PROTOCOL_TARGET)
   1636        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_PROT_LAN                  (MPI_PORTFACTS_PROTOCOL_LAN)
   1637        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_PROT_LOGBUSADDR           (MPI_PORTFACTS_PROTOCOL_LOGBUSADDR)
   1638        1.1  thorpej 
   1639        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_ALIAS_ALPA_SUPPORTED      (0x00000010)
   1640        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_ALIAS_WWN_SUPPORTED       (0x00000020)
   1641        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_FABRIC_WWN_VALID          (0x00000030)
   1642        1.1  thorpej 
   1643        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_ATTACH_TYPE_MASK          (0x00000F00)
   1644        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_ATTACH_NO_INIT            (0x00000000)
   1645        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_ATTACH_POINT_TO_POINT     (0x00000100)
   1646        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_ATTACH_PRIVATE_LOOP       (0x00000200)
   1647        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_ATTACH_FABRIC_DIRECT      (0x00000400)
   1648        1.1  thorpej #define MPI_FCPORTPAGE0_FLAGS_ATTACH_PUBLIC_LOOP        (0x00000800)
   1649        1.1  thorpej 
   1650        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_RESERVED                  (0x00)
   1651        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_OTHER                     (0x01)
   1652        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_UNKNOWN                   (0x02)
   1653        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_COPPER                    (0x03)
   1654        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_SINGLE_1300               (0x04)
   1655        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_SINGLE_1500               (0x05)
   1656        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_50_LASER_MULTI            (0x06)
   1657        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_50_LED_MULTI              (0x07)
   1658        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_62_LASER_MULTI            (0x08)
   1659        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_62_LED_MULTI              (0x09)
   1660        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_MULTI_LONG_WAVE           (0x0A)
   1661        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_MULTI_SHORT_WAVE          (0x0B)
   1662        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_LASER_SHORT_WAVE          (0x0C)
   1663        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_LED_SHORT_WAVE            (0x0D)
   1664        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_1300_LONG_WAVE            (0x0E)
   1665        1.1  thorpej #define MPI_FCPORTPAGE0_LTYPE_1500_LONG_WAVE            (0x0F)
   1666        1.1  thorpej 
   1667        1.1  thorpej #define MPI_FCPORTPAGE0_PORTSTATE_UNKNOWN               (0x01)      /*(SNIA)HBA_PORTSTATE_UNKNOWN       1 Unknown */
   1668        1.1  thorpej #define MPI_FCPORTPAGE0_PORTSTATE_ONLINE                (0x02)      /*(SNIA)HBA_PORTSTATE_ONLINE        2 Operational */
   1669        1.1  thorpej #define MPI_FCPORTPAGE0_PORTSTATE_OFFLINE               (0x03)      /*(SNIA)HBA_PORTSTATE_OFFLINE       3 User Offline */
   1670        1.1  thorpej #define MPI_FCPORTPAGE0_PORTSTATE_BYPASSED              (0x04)      /*(SNIA)HBA_PORTSTATE_BYPASSED      4 Bypassed */
   1671        1.1  thorpej #define MPI_FCPORTPAGE0_PORTSTATE_DIAGNOST              (0x05)      /*(SNIA)HBA_PORTSTATE_DIAGNOSTICS   5 In diagnostics mode */
   1672        1.1  thorpej #define MPI_FCPORTPAGE0_PORTSTATE_LINKDOWN              (0x06)      /*(SNIA)HBA_PORTSTATE_LINKDOWN      6 Link Down */
   1673        1.1  thorpej #define MPI_FCPORTPAGE0_PORTSTATE_ERROR                 (0x07)      /*(SNIA)HBA_PORTSTATE_ERROR         7 Port Error */
   1674        1.1  thorpej #define MPI_FCPORTPAGE0_PORTSTATE_LOOPBACK              (0x08)      /*(SNIA)HBA_PORTSTATE_LOOPBACK      8 Loopback */
   1675        1.1  thorpej 
   1676        1.1  thorpej #define MPI_FCPORTPAGE0_SUPPORT_CLASS_1                 (0x00000001)
   1677        1.1  thorpej #define MPI_FCPORTPAGE0_SUPPORT_CLASS_2                 (0x00000002)
   1678        1.1  thorpej #define MPI_FCPORTPAGE0_SUPPORT_CLASS_3                 (0x00000004)
   1679        1.1  thorpej 
   1680        1.1  thorpej #define MPI_FCPORTPAGE0_SUPPORT_1GBIT_SPEED             (0x00000001) /* (SNIA)HBA_PORTSPEED_1GBIT 1  1 GBit/sec  */
   1681        1.1  thorpej #define MPI_FCPORTPAGE0_SUPPORT_2GBIT_SPEED             (0x00000002) /* (SNIA)HBA_PORTSPEED_2GBIT 2  2 GBit/sec  */
   1682        1.1  thorpej #define MPI_FCPORTPAGE0_SUPPORT_10GBIT_SPEED            (0x00000004) /* (SNIA)HBA_PORTSPEED_10GBIT 4 10 GBit/sec */
   1683        1.1  thorpej 
   1684        1.1  thorpej #define MPI_FCPORTPAGE0_CURRENT_SPEED_1GBIT             MPI_FCPORTPAGE0_SUPPORT_1GBIT_SPEED
   1685        1.1  thorpej #define MPI_FCPORTPAGE0_CURRENT_SPEED_2GBIT             MPI_FCPORTPAGE0_SUPPORT_2GBIT_SPEED
   1686        1.1  thorpej #define MPI_FCPORTPAGE0_CURRENT_SPEED_10GBIT            MPI_FCPORTPAGE0_SUPPORT_10GBIT_SPEED
   1687        1.1  thorpej 
   1688        1.1  thorpej 
   1689        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_1
   1690        1.1  thorpej {
   1691        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1692        1.1  thorpej     U32                     Flags;                      /* 04h */
   1693        1.1  thorpej     U64                     NoSEEPROMWWNN;              /* 08h */
   1694        1.1  thorpej     U64                     NoSEEPROMWWPN;              /* 10h */
   1695        1.1  thorpej     U8                      HardALPA;                   /* 18h */
   1696        1.1  thorpej     U8                      LinkConfig;                 /* 19h */
   1697        1.1  thorpej     U8                      TopologyConfig;             /* 1Ah */
   1698        1.1  thorpej     U8                      Reserved;                   /* 1Bh */
   1699        1.1  thorpej } fCONFIG_PAGE_FC_PORT_1, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_1,
   1700        1.1  thorpej   FCPortPage1_t, MPI_POINTER pFCPortPage1_t;
   1701        1.1  thorpej 
   1702        1.1  thorpej #define MPI_FCPORTPAGE1_PAGEVERSION                     (0x02)
   1703        1.1  thorpej 
   1704        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_EXT_FCP_STATUS_EN         (0x08000000)
   1705        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_IMMEDIATE_ERROR_REPLY     (0x04000000)
   1706        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_SORT_BY_DID               (0x00000001)
   1707        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_SORT_BY_WWN               (0x00000000)
   1708        1.1  thorpej 
   1709        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_PROT_MASK                 (0xF0000000)
   1710        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT                (28)
   1711        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_PROT_FCP_INIT             ((U32)MPI_PORTFACTS_PROTOCOL_INITIATOR << MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT)
   1712        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_PROT_FCP_TARG             ((U32)MPI_PORTFACTS_PROTOCOL_TARGET << MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT)
   1713        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_PROT_LAN                  ((U32)MPI_PORTFACTS_PROTOCOL_LAN << MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT)
   1714        1.1  thorpej #define MPI_FCPORTPAGE1_FLAGS_PROT_LOGBUSADDR           ((U32)MPI_PORTFACTS_PROTOCOL_LOGBUSADDR << MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT)
   1715        1.1  thorpej 
   1716        1.1  thorpej #define MPI_FCPORTPAGE1_HARD_ALPA_NOT_USED              (0xFF)
   1717        1.1  thorpej 
   1718        1.1  thorpej #define MPI_FCPORTPAGE1_LCONFIG_SPEED_MASK              (0x0F)
   1719        1.1  thorpej #define MPI_FCPORTPAGE1_LCONFIG_SPEED_1GIG              (0x00)
   1720        1.1  thorpej #define MPI_FCPORTPAGE1_LCONFIG_SPEED_2GIG              (0x01)
   1721        1.1  thorpej #define MPI_FCPORTPAGE1_LCONFIG_SPEED_4GIG              (0x02)
   1722        1.1  thorpej #define MPI_FCPORTPAGE1_LCONFIG_SPEED_10GIG             (0x03)
   1723        1.1  thorpej #define MPI_FCPORTPAGE1_LCONFIG_SPEED_AUTO              (0x0F)
   1724        1.1  thorpej 
   1725        1.1  thorpej #define MPI_FCPORTPAGE1_TOPOLOGY_MASK                   (0x0F)
   1726        1.1  thorpej #define MPI_FCPORTPAGE1_TOPOLOGY_NLPORT                 (0x01)
   1727        1.1  thorpej #define MPI_FCPORTPAGE1_TOPOLOGY_NPORT                  (0x02)
   1728        1.1  thorpej #define MPI_FCPORTPAGE1_TOPOLOGY_AUTO                   (0x0F)
   1729        1.1  thorpej 
   1730        1.1  thorpej 
   1731        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_2
   1732        1.1  thorpej {
   1733        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1734        1.1  thorpej     U8                      NumberActive;               /* 04h */
   1735        1.1  thorpej     U8                      ALPA[127];                  /* 05h */
   1736        1.1  thorpej } fCONFIG_PAGE_FC_PORT_2, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_2,
   1737        1.1  thorpej   FCPortPage2_t, MPI_POINTER pFCPortPage2_t;
   1738        1.1  thorpej 
   1739        1.1  thorpej #define MPI_FCPORTPAGE2_PAGEVERSION                     (0x01)
   1740        1.1  thorpej 
   1741        1.1  thorpej 
   1742        1.1  thorpej typedef struct _WWN_FORMAT
   1743        1.1  thorpej {
   1744        1.1  thorpej     U64                     WWNN;                       /* 00h */
   1745        1.1  thorpej     U64                     WWPN;                       /* 08h */
   1746        1.1  thorpej } WWN_FORMAT, MPI_POINTER PTR_WWN_FORMAT,
   1747        1.1  thorpej   WWNFormat, MPI_POINTER pWWNFormat;
   1748        1.1  thorpej 
   1749        1.1  thorpej typedef union _FC_PORT_PERSISTENT_PHYSICAL_ID
   1750        1.1  thorpej {
   1751        1.1  thorpej     WWN_FORMAT              WWN;
   1752        1.1  thorpej     U32                     Did;
   1753        1.1  thorpej } FC_PORT_PERSISTENT_PHYSICAL_ID, MPI_POINTER PTR_FC_PORT_PERSISTENT_PHYSICAL_ID,
   1754        1.1  thorpej   PersistentPhysicalId_t, MPI_POINTER pPersistentPhysicalId_t;
   1755        1.1  thorpej 
   1756        1.1  thorpej typedef struct _FC_PORT_PERSISTENT
   1757        1.1  thorpej {
   1758        1.1  thorpej     FC_PORT_PERSISTENT_PHYSICAL_ID  PhysicalIdentifier; /* 00h */
   1759        1.1  thorpej     U8                              TargetID;           /* 10h */
   1760        1.1  thorpej     U8                              Bus;                /* 11h */
   1761        1.1  thorpej     U16                             Flags;              /* 12h */
   1762        1.1  thorpej } FC_PORT_PERSISTENT, MPI_POINTER PTR_FC_PORT_PERSISTENT,
   1763        1.1  thorpej   PersistentData_t, MPI_POINTER pPersistentData_t;
   1764        1.1  thorpej 
   1765        1.1  thorpej #define MPI_PERSISTENT_FLAGS_SHIFT                      (16)
   1766        1.1  thorpej #define MPI_PERSISTENT_FLAGS_ENTRY_VALID                (0x0001)
   1767        1.1  thorpej #define MPI_PERSISTENT_FLAGS_SCAN_ID                    (0x0002)
   1768        1.1  thorpej #define MPI_PERSISTENT_FLAGS_SCAN_LUNS                  (0x0004)
   1769        1.1  thorpej #define MPI_PERSISTENT_FLAGS_BOOT_DEVICE                (0x0008)
   1770        1.1  thorpej #define MPI_PERSISTENT_FLAGS_BY_DID                     (0x0080)
   1771        1.1  thorpej 
   1772        1.1  thorpej /*
   1773        1.1  thorpej  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
   1774        1.1  thorpej  * one and check Header.PageLength at runtime.
   1775        1.1  thorpej  */
   1776        1.1  thorpej #ifndef MPI_FC_PORT_PAGE_3_ENTRY_MAX
   1777        1.1  thorpej #define MPI_FC_PORT_PAGE_3_ENTRY_MAX        (1)
   1778        1.1  thorpej #endif
   1779        1.1  thorpej 
   1780        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_3
   1781        1.1  thorpej {
   1782        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                                 /* 00h */
   1783        1.1  thorpej     FC_PORT_PERSISTENT      Entry[MPI_FC_PORT_PAGE_3_ENTRY_MAX];    /* 04h */
   1784        1.1  thorpej } fCONFIG_PAGE_FC_PORT_3, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_3,
   1785        1.1  thorpej   FCPortPage3_t, MPI_POINTER pFCPortPage3_t;
   1786        1.1  thorpej 
   1787        1.1  thorpej #define MPI_FCPORTPAGE3_PAGEVERSION                     (0x01)
   1788        1.1  thorpej 
   1789        1.1  thorpej 
   1790        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_4
   1791        1.1  thorpej {
   1792        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1793        1.1  thorpej     U32                     PortFlags;                  /* 04h */
   1794        1.1  thorpej     U32                     PortSettings;               /* 08h */
   1795        1.1  thorpej } fCONFIG_PAGE_FC_PORT_4, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_4,
   1796        1.1  thorpej   FCPortPage4_t, MPI_POINTER pFCPortPage4_t;
   1797        1.1  thorpej 
   1798        1.1  thorpej #define MPI_FCPORTPAGE4_PAGEVERSION                     (0x00)
   1799        1.1  thorpej 
   1800        1.1  thorpej #define MPI_FCPORTPAGE4_PORT_FLAGS_ALTERNATE_CHS        (0x00000008)
   1801        1.1  thorpej 
   1802        1.1  thorpej #define MPI_FCPORTPAGE4_PORT_MASK_INIT_HBA              (0x00000030)
   1803        1.1  thorpej #define MPI_FCPORTPAGE4_PORT_DISABLE_INIT_HBA           (0x00000000)
   1804        1.1  thorpej #define MPI_FCPORTPAGE4_PORT_BIOS_INIT_HBA              (0x00000010)
   1805        1.1  thorpej #define MPI_FCPORTPAGE4_PORT_OS_INIT_HBA                (0x00000020)
   1806        1.1  thorpej #define MPI_FCPORTPAGE4_PORT_BIOS_OS_INIT_HBA           (0x00000030)
   1807        1.1  thorpej #define MPI_FCPORTPAGE4_PORT_REMOVABLE_MEDIA            (0x000000C0)
   1808        1.1  thorpej #define MPI_FCPORTPAGE4_PORT_SPINUP_DELAY_MASK          (0x00000F00)
   1809        1.1  thorpej 
   1810        1.1  thorpej 
   1811        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_5_ALIAS_INFO
   1812        1.1  thorpej {
   1813        1.1  thorpej     U8      Flags;                                      /* 00h */
   1814        1.1  thorpej     U8      AliasAlpa;                                  /* 01h */
   1815        1.1  thorpej     U16     Reserved;                                   /* 02h */
   1816        1.1  thorpej     U64     AliasWWNN;                                  /* 04h */
   1817        1.1  thorpej     U64     AliasWWPN;                                  /* 0Ch */
   1818        1.1  thorpej } fCONFIG_PAGE_FC_PORT_5_ALIAS_INFO,
   1819        1.1  thorpej   MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_5_ALIAS_INFO,
   1820        1.1  thorpej   FcPortPage5AliasInfo_t, MPI_POINTER pFcPortPage5AliasInfo_t;
   1821        1.1  thorpej 
   1822        1.1  thorpej /*
   1823        1.1  thorpej  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
   1824        1.1  thorpej  * one and check Header.PageLength at runtime.
   1825        1.1  thorpej  */
   1826        1.1  thorpej #ifndef MPI_FC_PORT_PAGE_5_ALIAS_MAX
   1827        1.1  thorpej #define MPI_FC_PORT_PAGE_5_ALIAS_MAX        (1)
   1828        1.1  thorpej #endif
   1829        1.1  thorpej 
   1830        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_5
   1831        1.1  thorpej {
   1832        1.1  thorpej     fCONFIG_PAGE_HEADER                  Header;                     /* 00h */
   1833        1.1  thorpej     fCONFIG_PAGE_FC_PORT_5_ALIAS_INFO    AliasInfo[MPI_FC_PORT_PAGE_5_ALIAS_MAX];/* 04h */
   1834        1.1  thorpej } fCONFIG_PAGE_FC_PORT_5, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_5,
   1835        1.1  thorpej   FCPortPage5_t, MPI_POINTER pFCPortPage5_t;
   1836        1.1  thorpej 
   1837        1.1  thorpej #define MPI_FCPORTPAGE5_PAGEVERSION                     (0x00)
   1838        1.1  thorpej 
   1839        1.1  thorpej #define MPI_FCPORTPAGE5_FLAGS_ALIAS_ALPA_VALID          (0x01)
   1840        1.1  thorpej #define MPI_FCPORTPAGE5_FLAGS_ALIAS_WWN_VALID           (0x02)
   1841        1.1  thorpej 
   1842        1.1  thorpej 
   1843        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_6
   1844        1.1  thorpej {
   1845        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1846        1.1  thorpej     U32                     Reserved;                   /* 04h */
   1847        1.1  thorpej     U64                     TimeSinceReset;             /* 08h */
   1848        1.1  thorpej     U64                     TxFrames;                   /* 10h */
   1849        1.1  thorpej     U64                     RxFrames;                   /* 18h */
   1850        1.1  thorpej     U64                     TxWords;                    /* 20h */
   1851        1.1  thorpej     U64                     RxWords;                    /* 28h */
   1852        1.1  thorpej     U64                     LipCount;                   /* 30h */
   1853        1.1  thorpej     U64                     NosCount;                   /* 38h */
   1854        1.1  thorpej     U64                     ErrorFrames;                /* 40h */
   1855        1.1  thorpej     U64                     DumpedFrames;               /* 48h */
   1856        1.1  thorpej     U64                     LinkFailureCount;           /* 50h */
   1857        1.1  thorpej     U64                     LossOfSyncCount;            /* 58h */
   1858        1.1  thorpej     U64                     LossOfSignalCount;          /* 60h */
   1859        1.1  thorpej     U64                     PrimativeSeqErrCount;       /* 68h */
   1860        1.1  thorpej     U64                     InvalidTxWordCount;         /* 70h */
   1861        1.1  thorpej     U64                     InvalidCrcCount;            /* 78h */
   1862        1.1  thorpej     U64                     FcpInitiatorIoCount;        /* 80h */
   1863        1.1  thorpej } fCONFIG_PAGE_FC_PORT_6, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_6,
   1864        1.1  thorpej   FCPortPage6_t, MPI_POINTER pFCPortPage6_t;
   1865        1.1  thorpej 
   1866        1.1  thorpej #define MPI_FCPORTPAGE6_PAGEVERSION                     (0x00)
   1867        1.1  thorpej 
   1868        1.1  thorpej 
   1869        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_7
   1870        1.1  thorpej {
   1871        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1872        1.1  thorpej     U32                     Reserved;                   /* 04h */
   1873        1.1  thorpej     U8                      PortSymbolicName[256];      /* 08h */
   1874        1.1  thorpej } fCONFIG_PAGE_FC_PORT_7, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_7,
   1875        1.1  thorpej   FCPortPage7_t, MPI_POINTER pFCPortPage7_t;
   1876        1.1  thorpej 
   1877        1.1  thorpej #define MPI_FCPORTPAGE7_PAGEVERSION                     (0x00)
   1878        1.1  thorpej 
   1879        1.1  thorpej 
   1880        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_8
   1881        1.1  thorpej {
   1882        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1883        1.1  thorpej     U32                     BitVector[8];               /* 04h */
   1884        1.1  thorpej } fCONFIG_PAGE_FC_PORT_8, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_8,
   1885        1.1  thorpej   FCPortPage8_t, MPI_POINTER pFCPortPage8_t;
   1886        1.1  thorpej 
   1887        1.1  thorpej #define MPI_FCPORTPAGE8_PAGEVERSION                     (0x00)
   1888        1.1  thorpej 
   1889        1.1  thorpej 
   1890        1.1  thorpej typedef struct _CONFIG_PAGE_FC_PORT_9
   1891        1.1  thorpej {
   1892        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1893        1.1  thorpej     U32                     Reserved;                   /* 04h */
   1894        1.1  thorpej     U64                     GlobalWWPN;                 /* 08h */
   1895        1.1  thorpej     U64                     GlobalWWNN;                 /* 10h */
   1896        1.1  thorpej     U32                     UnitType;                   /* 18h */
   1897        1.1  thorpej     U32                     PhysicalPortNumber;         /* 1Ch */
   1898        1.1  thorpej     U32                     NumAttachedNodes;           /* 20h */
   1899        1.1  thorpej     U16                     IPVersion;                  /* 24h */
   1900        1.1  thorpej     U16                     UDPPortNumber;              /* 26h */
   1901        1.1  thorpej     U8                      IPAddress[16];              /* 28h */
   1902        1.1  thorpej     U16                     Reserved1;                  /* 38h */
   1903        1.1  thorpej     U16                     TopologyDiscoveryFlags;     /* 3Ah */
   1904        1.1  thorpej } fCONFIG_PAGE_FC_PORT_9, MPI_POINTER PTR_CONFIG_PAGE_FC_PORT_9,
   1905        1.1  thorpej   FCPortPage9_t, MPI_POINTER pFCPortPage9_t;
   1906        1.1  thorpej 
   1907        1.1  thorpej #define MPI_FCPORTPAGE9_PAGEVERSION                     (0x00)
   1908        1.1  thorpej 
   1909        1.1  thorpej 
   1910        1.1  thorpej /****************************************************************************
   1911        1.1  thorpej *   FC Device Config Pages
   1912        1.1  thorpej ****************************************************************************/
   1913        1.1  thorpej 
   1914        1.1  thorpej typedef struct _CONFIG_PAGE_FC_DEVICE_0
   1915        1.1  thorpej {
   1916        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;                     /* 00h */
   1917        1.1  thorpej     U64                     WWNN;                       /* 04h */
   1918        1.1  thorpej     U64                     WWPN;                       /* 0Ch */
   1919        1.1  thorpej     U32                     PortIdentifier;             /* 14h */
   1920        1.1  thorpej     U8                      Protocol;                   /* 18h */
   1921        1.1  thorpej     U8                      Flags;                      /* 19h */
   1922        1.1  thorpej     U16                     BBCredit;                   /* 1Ah */
   1923        1.1  thorpej     U16                     MaxRxFrameSize;             /* 1Ch */
   1924        1.1  thorpej     U8                      Reserved1;                  /* 1Eh */
   1925        1.1  thorpej     U8                      PortNumber;                 /* 1Fh */
   1926        1.1  thorpej     U8                      FcPhLowestVersion;          /* 20h */
   1927        1.1  thorpej     U8                      FcPhHighestVersion;         /* 21h */
   1928        1.1  thorpej     U8                      CurrentTargetID;            /* 22h */
   1929        1.1  thorpej     U8                      CurrentBus;                 /* 23h */
   1930        1.1  thorpej } fCONFIG_PAGE_FC_DEVICE_0, MPI_POINTER PTR_CONFIG_PAGE_FC_DEVICE_0,
   1931        1.1  thorpej   FCDevicePage0_t, MPI_POINTER pFCDevicePage0_t;
   1932        1.1  thorpej 
   1933        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PAGEVERSION                 (0x02)
   1934        1.1  thorpej 
   1935        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_FLAGS_TARGETID_BUS_VALID    (0x01)
   1936        1.1  thorpej 
   1937        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PROT_IP                     (0x01)
   1938        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PROT_FCP_TARGET             (0x02)
   1939        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PROT_FCP_INITIATOR          (0x04)
   1940        1.1  thorpej 
   1941        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PGAD_PORT_MASK      (MPI_FC_DEVICE_PGAD_PORT_MASK)
   1942        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PGAD_FORM_MASK      (MPI_FC_DEVICE_PGAD_FORM_MASK)
   1943        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PGAD_FORM_NEXT_DID  (MPI_FC_DEVICE_PGAD_FORM_NEXT_DID)
   1944        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PGAD_FORM_BUS_TID   (MPI_FC_DEVICE_PGAD_FORM_BUS_TID)
   1945        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PGAD_DID_MASK       (MPI_FC_DEVICE_PGAD_ND_DID_MASK)
   1946        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PGAD_BUS_MASK       (MPI_FC_DEVICE_PGAD_BT_BUS_MASK)
   1947        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PGAD_BUS_SHIFT      (MPI_FC_DEVICE_PGAD_BT_BUS_SHIFT)
   1948        1.1  thorpej #define MPI_FC_DEVICE_PAGE0_PGAD_TID_MASK       (MPI_FC_DEVICE_PGAD_BT_TID_MASK)
   1949        1.1  thorpej 
   1950        1.1  thorpej 
   1951        1.1  thorpej /****************************************************************************
   1952        1.1  thorpej *   RAID Volume Config Pages
   1953        1.1  thorpej ****************************************************************************/
   1954        1.1  thorpej 
   1955        1.1  thorpej typedef struct _RAID_VOL0_PHYS_DISK
   1956        1.1  thorpej {
   1957        1.1  thorpej     U16                         Reserved;               /* 00h */
   1958        1.1  thorpej     U8                          PhysDiskMap;            /* 02h */
   1959        1.1  thorpej     U8                          PhysDiskNum;            /* 03h */
   1960        1.1  thorpej } RAID_VOL0_PHYS_DISK, MPI_POINTER PTR_RAID_VOL0_PHYS_DISK,
   1961        1.1  thorpej   RaidVol0PhysDisk_t, MPI_POINTER pRaidVol0PhysDisk_t;
   1962        1.1  thorpej 
   1963        1.1  thorpej #define MPI_RAIDVOL0_PHYSDISK_PRIMARY                   (0x01)
   1964        1.1  thorpej #define MPI_RAIDVOL0_PHYSDISK_SECONDARY                 (0x02)
   1965        1.1  thorpej 
   1966        1.1  thorpej typedef struct _RAID_VOL0_STATUS
   1967        1.1  thorpej {
   1968        1.1  thorpej     U8                          Flags;                  /* 00h */
   1969        1.1  thorpej     U8                          State;                  /* 01h */
   1970        1.1  thorpej     U16                         Reserved;               /* 02h */
   1971        1.1  thorpej } RAID_VOL0_STATUS, MPI_POINTER PTR_RAID_VOL0_STATUS,
   1972        1.1  thorpej   RaidVol0Status_t, MPI_POINTER pRaidVol0Status_t;
   1973        1.1  thorpej 
   1974        1.1  thorpej /* RAID Volume Page 0 VolumeStatus defines */
   1975        1.1  thorpej 
   1976        1.1  thorpej #define MPI_RAIDVOL0_STATUS_FLAG_ENABLED                (0x01)
   1977        1.1  thorpej #define MPI_RAIDVOL0_STATUS_FLAG_QUIESCED               (0x02)
   1978        1.1  thorpej #define MPI_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS     (0x04)
   1979        1.1  thorpej 
   1980        1.1  thorpej #define MPI_RAIDVOL0_STATUS_STATE_OPTIMAL               (0x00)
   1981        1.1  thorpej #define MPI_RAIDVOL0_STATUS_STATE_DEGRADED              (0x01)
   1982        1.1  thorpej #define MPI_RAIDVOL0_STATUS_STATE_FAILED                (0x02)
   1983        1.1  thorpej 
   1984        1.1  thorpej typedef struct _RAID_VOL0_SETTINGS
   1985        1.1  thorpej {
   1986        1.1  thorpej     U16                         Settings;       /* 00h */
   1987        1.1  thorpej     U8                          HotSparePool;   /* 01h */ /* MPI_RAID_HOT_SPARE_POOL_ */
   1988        1.1  thorpej     U8                          Reserved;       /* 02h */
   1989        1.1  thorpej } RAID_VOL0_SETTINGS, MPI_POINTER PTR_RAID_VOL0_SETTINGS,
   1990        1.1  thorpej   RaidVol0Settings, MPI_POINTER pRaidVol0Settings;
   1991        1.1  thorpej 
   1992        1.1  thorpej /* RAID Volume Page 0 VolumeSettings defines */
   1993        1.1  thorpej 
   1994        1.1  thorpej #define MPI_RAIDVOL0_SETTING_WRITE_CACHING_ENABLE       (0x0001)
   1995        1.1  thorpej #define MPI_RAIDVOL0_SETTING_OFFLINE_ON_SMART           (0x0002)
   1996        1.1  thorpej #define MPI_RAIDVOL0_SETTING_AUTO_CONFIGURE             (0x0004)
   1997        1.1  thorpej #define MPI_RAIDVOL0_SETTING_PRIORITY_RESYNC            (0x0008)
   1998        1.1  thorpej #define MPI_RAIDVOL0_SETTING_USE_PRODUCT_ID_SUFFIX      (0x0010)
   1999        1.1  thorpej #define MPI_RAIDVOL0_SETTING_USE_DEFAULTS               (0x8000)
   2000        1.1  thorpej 
   2001        1.1  thorpej /* RAID Volume Page 0 HotSparePool defines, also used in RAID Physical Disk */
   2002        1.1  thorpej #define MPI_RAID_HOT_SPARE_POOL_0                       (0x01)
   2003        1.1  thorpej #define MPI_RAID_HOT_SPARE_POOL_1                       (0x02)
   2004        1.1  thorpej #define MPI_RAID_HOT_SPARE_POOL_2                       (0x04)
   2005        1.1  thorpej #define MPI_RAID_HOT_SPARE_POOL_3                       (0x08)
   2006        1.1  thorpej #define MPI_RAID_HOT_SPARE_POOL_4                       (0x10)
   2007        1.1  thorpej #define MPI_RAID_HOT_SPARE_POOL_5                       (0x20)
   2008        1.1  thorpej #define MPI_RAID_HOT_SPARE_POOL_6                       (0x40)
   2009        1.1  thorpej #define MPI_RAID_HOT_SPARE_POOL_7                       (0x80)
   2010        1.1  thorpej 
   2011        1.1  thorpej /*
   2012        1.1  thorpej  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
   2013        1.1  thorpej  * one and check Header.PageLength at runtime.
   2014        1.1  thorpej  */
   2015        1.1  thorpej #ifndef MPI_RAID_VOL_PAGE_0_PHYSDISK_MAX
   2016        1.1  thorpej #define MPI_RAID_VOL_PAGE_0_PHYSDISK_MAX        (1)
   2017        1.1  thorpej #endif
   2018        1.1  thorpej 
   2019        1.1  thorpej typedef struct _CONFIG_PAGE_RAID_VOL_0
   2020        1.1  thorpej {
   2021        1.1  thorpej     fCONFIG_PAGE_HEADER      Header;         /* 00h */
   2022        1.1  thorpej     U8                      VolumeID;       /* 04h */
   2023        1.1  thorpej     U8                      VolumeBus;      /* 05h */
   2024        1.1  thorpej     U8                      VolumeIOC;      /* 06h */
   2025        1.1  thorpej     U8                      VolumeType;     /* 07h */ /* MPI_RAID_VOL_TYPE_ */
   2026        1.1  thorpej     RAID_VOL0_STATUS        VolumeStatus;   /* 08h */
   2027        1.1  thorpej     RAID_VOL0_SETTINGS      VolumeSettings; /* 0Ch */
   2028        1.1  thorpej     U32                     MaxLBA;         /* 10h */
   2029        1.1  thorpej     U32                     Reserved1;      /* 14h */
   2030        1.1  thorpej     U32                     StripeSize;     /* 18h */
   2031        1.1  thorpej     U32                     Reserved2;      /* 1Ch */
   2032        1.1  thorpej     U32                     Reserved3;      /* 20h */
   2033        1.1  thorpej     U8                      NumPhysDisks;   /* 24h */
   2034        1.1  thorpej     U8                      Reserved4;      /* 25h */
   2035        1.1  thorpej     U16                     Reserved5;      /* 26h */
   2036        1.1  thorpej     RAID_VOL0_PHYS_DISK     PhysDisk[MPI_RAID_VOL_PAGE_0_PHYSDISK_MAX];/* 28h */
   2037        1.1  thorpej } fCONFIG_PAGE_RAID_VOL_0, MPI_POINTER PTR_CONFIG_PAGE_RAID_VOL_0,
   2038        1.1  thorpej   RaidVolumePage0_t, MPI_POINTER pRaidVolumePage0_t;
   2039        1.1  thorpej 
   2040        1.1  thorpej #define MPI_RAIDVOLPAGE0_PAGEVERSION                    (0x00)
   2041        1.1  thorpej 
   2042        1.1  thorpej 
   2043        1.1  thorpej /****************************************************************************
   2044        1.1  thorpej *   RAID Physical Disk Config Pages
   2045        1.1  thorpej ****************************************************************************/
   2046        1.1  thorpej 
   2047        1.1  thorpej typedef struct _RAID_PHYS_DISK0_ERROR_DATA
   2048        1.1  thorpej {
   2049        1.1  thorpej     U8                      ErrorCdbByte;               /* 00h */
   2050        1.1  thorpej     U8                      ErrorSenseKey;              /* 01h */
   2051        1.1  thorpej     U16                     Reserved;                   /* 02h */
   2052        1.1  thorpej     U16                     ErrorCount;                 /* 04h */
   2053        1.1  thorpej     U8                      ErrorASC;                   /* 06h */
   2054        1.1  thorpej     U8                      ErrorASCQ;                  /* 07h */
   2055        1.1  thorpej     U16                     SmartCount;                 /* 08h */
   2056        1.1  thorpej     U8                      SmartASC;                   /* 0Ah */
   2057        1.1  thorpej     U8                      SmartASCQ;                  /* 0Bh */
   2058        1.1  thorpej } RAID_PHYS_DISK0_ERROR_DATA, MPI_POINTER PTR_RAID_PHYS_DISK0_ERROR_DATA,
   2059        1.1  thorpej   RaidPhysDisk0ErrorData_t, MPI_POINTER pRaidPhysDisk0ErrorData_t;
   2060        1.1  thorpej 
   2061        1.1  thorpej typedef struct _RAID_PHYS_DISK_INQUIRY_DATA
   2062        1.1  thorpej {
   2063        1.1  thorpej     U8                          VendorID[8];            /* 00h */
   2064        1.1  thorpej     U8                          ProductID[16];          /* 08h */
   2065        1.1  thorpej     U8                          ProductRevLevel[4];     /* 18h */
   2066        1.1  thorpej     U8                          Info[32];               /* 1Ch */
   2067        1.1  thorpej } RAID_PHYS_DISK0_INQUIRY_DATA, MPI_POINTER PTR_RAID_PHYS_DISK0_INQUIRY_DATA,
   2068        1.1  thorpej   RaidPhysDisk0InquiryData, MPI_POINTER pRaidPhysDisk0InquiryData;
   2069        1.1  thorpej 
   2070        1.1  thorpej typedef struct _RAID_PHYS_DISK0_SETTINGS
   2071        1.1  thorpej {
   2072        1.1  thorpej     U8              SepID;              /* 00h */
   2073        1.1  thorpej     U8              SepBus;             /* 01h */
   2074        1.1  thorpej     U8              HotSparePool;       /* 02h */ /* MPI_RAID_HOT_SPARE_POOL_ */
   2075        1.1  thorpej     U8              PhysDiskSettings;   /* 03h */
   2076        1.1  thorpej } RAID_PHYS_DISK0_SETTINGS, MPI_POINTER PTR_RAID_PHYS_DISK0_SETTINGS,
   2077        1.1  thorpej   RaidPhysDiskSettings_t, MPI_POINTER pRaidPhysDiskSettings_t;
   2078        1.1  thorpej 
   2079        1.1  thorpej typedef struct _RAID_PHYS_DISK0_STATUS
   2080        1.1  thorpej {
   2081        1.1  thorpej     U8                              Flags;              /* 00h */
   2082        1.1  thorpej     U8                              State;              /* 01h */
   2083        1.1  thorpej     U16                             Reserved;           /* 02h */
   2084        1.1  thorpej } RAID_PHYS_DISK0_STATUS, MPI_POINTER PTR_RAID_PHYS_DISK0_STATUS,
   2085        1.1  thorpej   RaidPhysDiskStatus_t, MPI_POINTER pRaidPhysDiskStatus_t;
   2086        1.1  thorpej 
   2087        1.1  thorpej /* RAID Volume 2 IM Physical Disk DiskStatus flags */
   2088        1.1  thorpej 
   2089        1.1  thorpej #define MPI_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC           (0x01)
   2090        1.1  thorpej #define MPI_PHYSDISK0_STATUS_FLAG_QUIESCED              (0x02)
   2091        1.1  thorpej 
   2092        1.1  thorpej #define MPI_PHYSDISK0_STATUS_ONLINE                     (0x00)
   2093        1.1  thorpej #define MPI_PHYSDISK0_STATUS_MISSING                    (0x01)
   2094        1.1  thorpej #define MPI_PHYSDISK0_STATUS_NOT_COMPATIBLE             (0x02)
   2095        1.1  thorpej #define MPI_PHYSDISK0_STATUS_FAILED                     (0x03)
   2096        1.1  thorpej #define MPI_PHYSDISK0_STATUS_INITIALIZING               (0x04)
   2097        1.1  thorpej #define MPI_PHYSDISK0_STATUS_OFFLINE_REQUESTED          (0x05)
   2098        1.1  thorpej #define MPI_PHYSDISK0_STATUS_FAILED_REQUESTED           (0x06)
   2099        1.1  thorpej #define MPI_PHYSDISK0_STATUS_OTHER_OFFLINE              (0xFF)
   2100        1.1  thorpej 
   2101        1.1  thorpej typedef struct _CONFIG_PAGE_RAID_PHYS_DISK_0
   2102        1.1  thorpej {
   2103        1.1  thorpej     fCONFIG_PAGE_HEADER              Header;             /* 00h */
   2104        1.1  thorpej     U8                              PhysDiskID;         /* 04h */
   2105        1.1  thorpej     U8                              PhysDiskBus;        /* 05h */
   2106        1.1  thorpej     U8                              PhysDiskIOC;        /* 06h */
   2107        1.1  thorpej     U8                              PhysDiskNum;        /* 07h */
   2108        1.1  thorpej     RAID_PHYS_DISK0_SETTINGS        PhysDiskSettings;   /* 08h */
   2109        1.1  thorpej     U32                             Reserved1;          /* 0Ch */
   2110        1.1  thorpej     U32                             Reserved2;          /* 10h */
   2111        1.1  thorpej     U32                             Reserved3;          /* 14h */
   2112        1.1  thorpej     U8                              DiskIdentifier[16]; /* 18h */
   2113        1.1  thorpej     RAID_PHYS_DISK0_INQUIRY_DATA    InquiryData;        /* 28h */
   2114        1.1  thorpej     RAID_PHYS_DISK0_STATUS          PhysDiskStatus;     /* 64h */
   2115        1.1  thorpej     U32                             MaxLBA;             /* 68h */
   2116        1.1  thorpej     RAID_PHYS_DISK0_ERROR_DATA      ErrorData;          /* 6Ch */
   2117        1.1  thorpej } fCONFIG_PAGE_RAID_PHYS_DISK_0, MPI_POINTER PTR_CONFIG_PAGE_RAID_PHYS_DISK_0,
   2118        1.1  thorpej   RaidPhysDiskPage0_t, MPI_POINTER pRaidPhysDiskPage0_t;
   2119        1.1  thorpej 
   2120        1.1  thorpej #define MPI_RAIDPHYSDISKPAGE0_PAGEVERSION           (0x00)
   2121        1.1  thorpej 
   2122        1.1  thorpej 
   2123        1.1  thorpej /****************************************************************************
   2124        1.1  thorpej *   LAN Config Pages
   2125        1.1  thorpej ****************************************************************************/
   2126        1.1  thorpej 
   2127        1.1  thorpej typedef struct _CONFIG_PAGE_LAN_0
   2128        1.1  thorpej {
   2129        1.1  thorpej     ConfigPageHeader_t      Header;                     /* 00h */
   2130        1.1  thorpej     U16                     TxRxModes;                  /* 04h */
   2131        1.1  thorpej     U16                     Reserved;                   /* 06h */
   2132        1.1  thorpej     U32                     PacketPrePad;               /* 08h */
   2133        1.1  thorpej } fCONFIG_PAGE_LAN_0, MPI_POINTER PTR_CONFIG_PAGE_LAN_0,
   2134        1.1  thorpej   LANPage0_t, MPI_POINTER pLANPage0_t;
   2135        1.1  thorpej 
   2136        1.1  thorpej #define MPI_LAN_PAGE0_PAGEVERSION                       (0x01)
   2137        1.1  thorpej 
   2138        1.1  thorpej #define MPI_LAN_PAGE0_RETURN_LOOPBACK                   (0x0000)
   2139        1.1  thorpej #define MPI_LAN_PAGE0_SUPPRESS_LOOPBACK                 (0x0001)
   2140        1.1  thorpej #define MPI_LAN_PAGE0_LOOPBACK_MASK                     (0x0001)
   2141        1.1  thorpej 
   2142        1.1  thorpej typedef struct _CONFIG_PAGE_LAN_1
   2143        1.1  thorpej {
   2144        1.1  thorpej     ConfigPageHeader_t      Header;                     /* 00h */
   2145        1.1  thorpej     U16                     Reserved;                   /* 04h */
   2146        1.1  thorpej     U8                      CurrentDeviceState;         /* 06h */
   2147        1.1  thorpej     U8                      Reserved1;                  /* 07h */
   2148        1.1  thorpej     U32                     MinPacketSize;              /* 08h */
   2149        1.1  thorpej     U32                     MaxPacketSize;              /* 0Ch */
   2150        1.1  thorpej     U32                     HardwareAddressLow;         /* 10h */
   2151        1.1  thorpej     U32                     HardwareAddressHigh;        /* 14h */
   2152        1.1  thorpej     U32                     MaxWireSpeedLow;            /* 18h */
   2153        1.1  thorpej     U32                     MaxWireSpeedHigh;           /* 1Ch */
   2154        1.1  thorpej     U32                     BucketsRemaining;           /* 20h */
   2155        1.1  thorpej     U32                     MaxReplySize;               /* 24h */
   2156        1.1  thorpej     U32                     NegWireSpeedLow;            /* 28h */
   2157        1.1  thorpej     U32                     NegWireSpeedHigh;           /* 2Ch */
   2158        1.1  thorpej } fCONFIG_PAGE_LAN_1, MPI_POINTER PTR_CONFIG_PAGE_LAN_1,
   2159        1.1  thorpej   LANPage1_t, MPI_POINTER pLANPage1_t;
   2160        1.1  thorpej 
   2161        1.1  thorpej #define MPI_LAN_PAGE1_PAGEVERSION                       (0x03)
   2162        1.1  thorpej 
   2163        1.1  thorpej #define MPI_LAN_PAGE1_DEV_STATE_RESET                   (0x00)
   2164        1.1  thorpej #define MPI_LAN_PAGE1_DEV_STATE_OPERATIONAL             (0x01)
   2165        1.1  thorpej 
   2166        1.1  thorpej #endif
   2167        1.1  thorpej 
   2168        1.1  thorpej 
   2169        1.1  thorpej /*
   2170        1.1  thorpej  * Copyright (c) 2000, 2001 by LSI Logic Corporation
   2171        1.1  thorpej  *
   2172        1.1  thorpej  * Redistribution and use in source and binary forms, with or without
   2173        1.1  thorpej  * modification, are permitted provided that the following conditions
   2174        1.1  thorpej  * are met:
   2175        1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
   2176        1.1  thorpej  *    notice immediately at the beginning of the file, without modification,
   2177        1.1  thorpej  *    this list of conditions, and the following disclaimer.
   2178        1.1  thorpej  * 2. The name of the author may not be used to endorse or promote products
   2179        1.1  thorpej  *    derived from this software without specific prior written permission.
   2180        1.1  thorpej  *
   2181        1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   2182        1.1  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   2183        1.1  thorpej  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   2184        1.1  thorpej  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
   2185        1.1  thorpej  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   2186        1.1  thorpej  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   2187        1.1  thorpej  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   2188        1.1  thorpej  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   2189        1.1  thorpej  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   2190        1.1  thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   2191        1.1  thorpej  * SUCH DAMAGE.
   2192        1.1  thorpej  *
   2193        1.1  thorpej  *
   2194        1.1  thorpej  *           Name:  MPI_FC.H
   2195        1.1  thorpej  *          Title:  MPI Fibre Channel messages and structures
   2196        1.1  thorpej  *  Creation Date:  June 12, 2000
   2197        1.1  thorpej  *
   2198        1.1  thorpej  *    MPI Version:  01.02.02
   2199        1.1  thorpej  *
   2200        1.1  thorpej  *  Version History
   2201        1.1  thorpej  *  ---------------
   2202        1.1  thorpej  *
   2203        1.1  thorpej  *  Date      Version   Description
   2204        1.1  thorpej  *  --------  --------  ------------------------------------------------------
   2205        1.1  thorpej  *  05-08-00  00.10.01  Original release for 0.10 spec dated 4/26/2000.
   2206        1.1  thorpej  *  06-06-00  01.00.01  Update version number for 1.0 release.
   2207        1.1  thorpej  *  06-12-00  01.00.02  Added _MSG_FC_ABORT_REPLY structure.
   2208        1.1  thorpej  *  11-02-00  01.01.01  Original release for post 1.0 work
   2209        1.1  thorpej  *  12-04-00  01.01.02  Added messages for Common Transport Send and
   2210        1.1  thorpej  *                      Primitive Send.
   2211        1.1  thorpej  *  01-09-01  01.01.03  Modifed some of the new flags to have an MPI prefix
   2212        1.1  thorpej  *                      and modified the FcPrimitiveSend flags.
   2213        1.1  thorpej  *  01-25-01  01.01.04  Move InitiatorIndex in LinkServiceRsp reply to a larger
   2214        1.1  thorpej  *                      field.
   2215        1.1  thorpej  *                      Added FC_ABORT_TYPE_CT_SEND_REQUEST and
   2216        1.1  thorpej  *                      FC_ABORT_TYPE_EXLINKSEND_REQUEST for FcAbort request.
   2217        1.1  thorpej  *                      Added MPI_FC_PRIM_SEND_FLAGS_STOP_SEND.
   2218        1.1  thorpej  *  02-20-01  01.01.05  Started using MPI_POINTER.
   2219        1.1  thorpej  *  03-27-01  01.01.06  Added Flags field to MSG_LINK_SERVICE_BUFFER_POST_REPLY
   2220        1.1  thorpej  *                      and defined MPI_LS_BUF_POST_REPLY_FLAG_NO_RSP_NEEDED.
   2221        1.1  thorpej  *                      Added MPI_FC_PRIM_SEND_FLAGS_RESET_LINK define.
   2222        1.1  thorpej  *                      Added structure offset comments.
   2223        1.1  thorpej  *  04-09-01  01.01.07  Added RspLength field to MSG_LINK_SERVICE_RSP_REQUEST.
   2224        1.1  thorpej  *  08-08-01  01.02.01  Original release for v1.2 work.
   2225        1.1  thorpej  *  09-28-01  01.02.02  Change name of reserved field in
   2226        1.1  thorpej  *                      MSG_LINK_SERVICE_RSP_REPLY.
   2227        1.1  thorpej  *  --------------------------------------------------------------------------
   2228        1.1  thorpej  */
   2229        1.1  thorpej 
   2230        1.1  thorpej #ifndef MPI_FC_H
   2231        1.1  thorpej #define MPI_FC_H
   2232        1.1  thorpej 
   2233        1.1  thorpej 
   2234        1.1  thorpej /*****************************************************************************
   2235        1.1  thorpej *
   2236        1.1  thorpej *        F C    T a r g e t    M o d e    M e s s a g e s
   2237        1.1  thorpej *
   2238        1.1  thorpej *****************************************************************************/
   2239        1.1  thorpej 
   2240        1.1  thorpej /****************************************************************************/
   2241        1.1  thorpej /* Link Service Buffer Post messages                                        */
   2242        1.1  thorpej /****************************************************************************/
   2243        1.1  thorpej 
   2244        1.1  thorpej typedef struct _MSG_LINK_SERVICE_BUFFER_POST_REQUEST
   2245        1.1  thorpej {
   2246        1.1  thorpej     U8                      BufferPostFlags;    /* 00h */
   2247        1.1  thorpej     U8                      BufferCount;        /* 01h */
   2248        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   2249        1.1  thorpej     U8                      Function;           /* 03h */
   2250        1.1  thorpej     U16                     Reserved;           /* 04h */
   2251        1.1  thorpej     U8                      Reserved1;          /* 06h */
   2252        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2253        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2254        1.1  thorpej     SGE_TRANS_SIMPLE_UNION  SGL;
   2255        1.1  thorpej } MSG_LINK_SERVICE_BUFFER_POST_REQUEST,
   2256        1.1  thorpej  MPI_POINTER PTR_MSG_LINK_SERVICE_BUFFER_POST_REQUEST,
   2257        1.1  thorpej   LinkServiceBufferPostRequest_t, MPI_POINTER pLinkServiceBufferPostRequest_t;
   2258        1.1  thorpej 
   2259        1.1  thorpej #define LINK_SERVICE_BUFFER_POST_FLAGS_PORT_MASK (0x01)
   2260        1.1  thorpej 
   2261        1.1  thorpej typedef struct _WWNFORMAT
   2262        1.1  thorpej {
   2263        1.1  thorpej     U32                     PortNameHigh;       /* 00h */
   2264        1.1  thorpej     U32                     PortNameLow;        /* 04h */
   2265        1.1  thorpej     U32                     NodeNameHigh;       /* 08h */
   2266        1.1  thorpej     U32                     NodeNameLow;        /* 0Ch */
   2267        1.1  thorpej } WWNFORMAT,
   2268        1.1  thorpej   WwnFormat_t;
   2269        1.1  thorpej 
   2270        1.1  thorpej /* Link Service Buffer Post Reply */
   2271        1.1  thorpej typedef struct _MSG_LINK_SERVICE_BUFFER_POST_REPLY
   2272        1.1  thorpej {
   2273        1.1  thorpej     U8                      Flags;              /* 00h */
   2274        1.1  thorpej     U8                      Reserved;           /* 01h */
   2275        1.1  thorpej     U8                      MsgLength;          /* 02h */
   2276        1.1  thorpej     U8                      Function;           /* 03h */
   2277        1.1  thorpej     U16                     Reserved1;          /* 04h */
   2278        1.1  thorpej     U8                      PortNumber;         /* 06h */
   2279        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2280        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2281        1.1  thorpej     U16                     Reserved2;          /* 0Ch */
   2282        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   2283        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   2284        1.1  thorpej     U32                     TransferLength;     /* 14h */
   2285        1.1  thorpej     U32                     TransactionContext; /* 18h */
   2286        1.1  thorpej     U32                     Rctl_Did;           /* 1Ch */
   2287        1.1  thorpej     U32                     Csctl_Sid;          /* 20h */
   2288        1.1  thorpej     U32                     Type_Fctl;          /* 24h */
   2289        1.1  thorpej     U16                     SeqCnt;             /* 28h */
   2290        1.1  thorpej     U8                      Dfctl;              /* 2Ah */
   2291        1.1  thorpej     U8                      SeqId;              /* 2Bh */
   2292        1.1  thorpej     U16                     Rxid;               /* 2Ch */
   2293        1.1  thorpej     U16                     Oxid;               /* 2Eh */
   2294        1.1  thorpej     U32                     Parameter;          /* 30h */
   2295        1.1  thorpej     WWNFORMAT               Wwn;                /* 34h */
   2296        1.1  thorpej } MSG_LINK_SERVICE_BUFFER_POST_REPLY, MPI_POINTER PTR_MSG_LINK_SERVICE_BUFFER_POST_REPLY,
   2297        1.1  thorpej   LinkServiceBufferPostReply_t, MPI_POINTER pLinkServiceBufferPostReply_t;
   2298        1.1  thorpej 
   2299        1.1  thorpej #define MPI_LS_BUF_POST_REPLY_FLAG_NO_RSP_NEEDED    (0x80)
   2300        1.1  thorpej 
   2301        1.1  thorpej #define MPI_FC_DID_MASK                             (0x00FFFFFF)
   2302        1.1  thorpej #define MPI_FC_DID_SHIFT                            (0)
   2303        1.1  thorpej #define MPI_FC_RCTL_MASK                            (0xFF000000)
   2304        1.1  thorpej #define MPI_FC_RCTL_SHIFT                           (24)
   2305        1.1  thorpej #define MPI_FC_SID_MASK                             (0x00FFFFFF)
   2306        1.1  thorpej #define MPI_FC_SID_SHIFT                            (0)
   2307        1.1  thorpej #define MPI_FC_CSCTL_MASK                           (0xFF000000)
   2308        1.1  thorpej #define MPI_FC_CSCTL_SHIFT                          (24)
   2309        1.1  thorpej #define MPI_FC_FCTL_MASK                            (0x00FFFFFF)
   2310        1.1  thorpej #define MPI_FC_FCTL_SHIFT                           (0)
   2311        1.1  thorpej #define MPI_FC_TYPE_MASK                            (0xFF000000)
   2312        1.1  thorpej #define MPI_FC_TYPE_SHIFT                           (24)
   2313        1.1  thorpej 
   2314        1.1  thorpej /* obsolete name for the above */
   2315        1.1  thorpej #define FCP_TARGET_DID_MASK                         (0x00FFFFFF)
   2316        1.1  thorpej #define FCP_TARGET_DID_SHIFT                        (0)
   2317        1.1  thorpej #define FCP_TARGET_RCTL_MASK                        (0xFF000000)
   2318        1.1  thorpej #define FCP_TARGET_RCTL_SHIFT                       (24)
   2319        1.1  thorpej #define FCP_TARGET_SID_MASK                         (0x00FFFFFF)
   2320        1.1  thorpej #define FCP_TARGET_SID_SHIFT                        (0)
   2321        1.1  thorpej #define FCP_TARGET_CSCTL_MASK                       (0xFF000000)
   2322        1.1  thorpej #define FCP_TARGET_CSCTL_SHIFT                      (24)
   2323        1.1  thorpej #define FCP_TARGET_FCTL_MASK                        (0x00FFFFFF)
   2324        1.1  thorpej #define FCP_TARGET_FCTL_SHIFT                       (0)
   2325        1.1  thorpej #define FCP_TARGET_TYPE_MASK                        (0xFF000000)
   2326        1.1  thorpej #define FCP_TARGET_TYPE_SHIFT                       (24)
   2327        1.1  thorpej 
   2328        1.1  thorpej 
   2329        1.1  thorpej /****************************************************************************/
   2330        1.1  thorpej /* Link Service Response messages                                           */
   2331        1.1  thorpej /****************************************************************************/
   2332        1.1  thorpej 
   2333        1.1  thorpej typedef struct _MSG_LINK_SERVICE_RSP_REQUEST
   2334        1.1  thorpej {
   2335        1.1  thorpej     U8                      RspFlags;           /* 00h */
   2336        1.1  thorpej     U8                      RspLength;          /* 01h */
   2337        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   2338        1.1  thorpej     U8                      Function;           /* 03h */
   2339        1.1  thorpej     U16                     Reserved1;          /* 04h */
   2340        1.1  thorpej     U8                      Reserved2;          /* 06h */
   2341        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2342        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2343        1.1  thorpej     U32                     Rctl_Did;           /* 0Ch */
   2344        1.1  thorpej     U32                     Csctl_Sid;          /* 10h */
   2345        1.1  thorpej     U32                     Type_Fctl;          /* 14h */
   2346        1.1  thorpej     U16                     SeqCnt;             /* 18h */
   2347        1.1  thorpej     U8                      Dfctl;              /* 1Ah */
   2348        1.1  thorpej     U8                      SeqId;              /* 1Bh */
   2349        1.1  thorpej     U16                     Rxid;               /* 1Ch */
   2350        1.1  thorpej     U16                     Oxid;               /* 1Eh */
   2351        1.1  thorpej     U32                     Parameter;          /* 20h */
   2352        1.1  thorpej     SGE_SIMPLE_UNION        SGL;                /* 24h */
   2353        1.1  thorpej } MSG_LINK_SERVICE_RSP_REQUEST, MPI_POINTER PTR_MSG_LINK_SERVICE_RSP_REQUEST,
   2354        1.1  thorpej   LinkServiceRspRequest_t, MPI_POINTER pLinkServiceRspRequest_t;
   2355        1.1  thorpej 
   2356        1.1  thorpej #define LINK_SERVICE_RSP_FLAGS_IMMEDIATE        (0x80)
   2357        1.1  thorpej #define LINK_SERVICE_RSP_FLAGS_PORT_MASK        (0x01)
   2358        1.1  thorpej 
   2359        1.1  thorpej 
   2360        1.1  thorpej /* Link Service Response Reply  */
   2361        1.1  thorpej typedef struct _MSG_LINK_SERVICE_RSP_REPLY
   2362        1.1  thorpej {
   2363        1.1  thorpej     U16                     Reserved;           /* 00h */
   2364        1.1  thorpej     U8                      MsgLength;          /* 02h */
   2365        1.1  thorpej     U8                      Function;           /* 03h */
   2366        1.1  thorpej     U16                     Reserved1;          /* 04h */
   2367        1.1  thorpej     U8                      Reserved_0100_InitiatorIndex; /* 06h */ /* obsolete InitiatorIndex */
   2368        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2369        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2370        1.1  thorpej     U16                     Reserved3;          /* 0Ch */
   2371        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   2372        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   2373        1.1  thorpej     U32                     InitiatorIndex;     /* 14h */
   2374        1.1  thorpej } MSG_LINK_SERVICE_RSP_REPLY, MPI_POINTER PTR_MSG_LINK_SERVICE_RSP_REPLY,
   2375        1.1  thorpej   LinkServiceRspReply_t, MPI_POINTER pLinkServiceRspReply_t;
   2376        1.1  thorpej 
   2377        1.1  thorpej 
   2378        1.1  thorpej /****************************************************************************/
   2379        1.1  thorpej /* Extended Link Service Send messages                                      */
   2380        1.1  thorpej /****************************************************************************/
   2381        1.1  thorpej 
   2382        1.1  thorpej typedef struct _MSG_EXLINK_SERVICE_SEND_REQUEST
   2383        1.1  thorpej {
   2384        1.1  thorpej     U8                      SendFlags;          /* 00h */
   2385        1.1  thorpej     U8                      Reserved;           /* 01h */
   2386        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   2387        1.1  thorpej     U8                      Function;           /* 03h */
   2388        1.1  thorpej     U32                     MsgFlags_Did;       /* 04h */
   2389        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2390        1.1  thorpej     U32                     ElsCommandCode;     /* 0Ch */
   2391        1.1  thorpej     SGE_SIMPLE_UNION        SGL;                /* 10h */
   2392        1.1  thorpej } MSG_EXLINK_SERVICE_SEND_REQUEST, MPI_POINTER PTR_MSG_EXLINK_SERVICE_SEND_REQUEST,
   2393        1.1  thorpej   ExLinkServiceSendRequest_t, MPI_POINTER pExLinkServiceSendRequest_t;
   2394        1.1  thorpej 
   2395        1.1  thorpej #define EX_LINK_SERVICE_SEND_DID_MASK           (0x00FFFFFF)
   2396        1.1  thorpej #define EX_LINK_SERVICE_SEND_DID_SHIFT          (0)
   2397        1.1  thorpej #define EX_LINK_SERVICE_SEND_MSGFLAGS_MASK      (0xFF000000)
   2398        1.1  thorpej #define EX_LINK_SERVICE_SEND_MSGFLAGS_SHIFT     (24)
   2399        1.1  thorpej 
   2400        1.1  thorpej 
   2401        1.1  thorpej /* Extended Link Service Send Reply */
   2402        1.1  thorpej typedef struct _MSG_EXLINK_SERVICE_SEND_REPLY
   2403        1.1  thorpej {
   2404        1.1  thorpej     U16                     Reserved;           /* 00h */
   2405        1.1  thorpej     U8                      MsgLength;          /* 02h */
   2406        1.1  thorpej     U8                      Function;           /* 03h */
   2407        1.1  thorpej     U16                     Reserved1;          /* 04h */
   2408        1.1  thorpej     U8                      Reserved2;          /* 06h */
   2409        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2410        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2411        1.1  thorpej     U16                     Reserved3;          /* 0Ch */
   2412        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   2413        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   2414        1.1  thorpej     U32                     ResponseLength;     /* 14h */
   2415        1.1  thorpej } MSG_EXLINK_SERVICE_SEND_REPLY, MPI_POINTER PTR_MSG_EXLINK_SERVICE_SEND_REPLY,
   2416        1.1  thorpej   ExLinkServiceSendReply_t, MPI_POINTER pExLinkServiceSendReply_t;
   2417        1.1  thorpej 
   2418        1.1  thorpej /****************************************************************************/
   2419        1.1  thorpej /* FC Abort messages                                                        */
   2420        1.1  thorpej /****************************************************************************/
   2421        1.1  thorpej 
   2422        1.1  thorpej typedef struct _MSG_FC_ABORT_REQUEST
   2423        1.1  thorpej {
   2424        1.1  thorpej     U8                      AbortFlags;                 /* 00h */
   2425        1.1  thorpej     U8                      AbortType;                  /* 01h */
   2426        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   2427        1.1  thorpej     U8                      Function;                   /* 03h */
   2428        1.1  thorpej     U16                     Reserved1;                  /* 04h */
   2429        1.1  thorpej     U8                      Reserved2;                  /* 06h */
   2430        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   2431        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   2432        1.1  thorpej     U32                     TransactionContextToAbort;  /* 0Ch */
   2433        1.1  thorpej } MSG_FC_ABORT_REQUEST, MPI_POINTER PTR_MSG_FC_ABORT_REQUEST,
   2434        1.1  thorpej   FcAbortRequest_t, MPI_POINTER pFcAbortRequest_t;
   2435        1.1  thorpej 
   2436        1.1  thorpej #define FC_ABORT_FLAG_PORT_MASK                 (0x01)
   2437        1.1  thorpej 
   2438        1.1  thorpej #define FC_ABORT_TYPE_ALL_FC_BUFFERS            (0x00)
   2439        1.1  thorpej #define FC_ABORT_TYPE_EXACT_FC_BUFFER           (0x01)
   2440        1.1  thorpej #define FC_ABORT_TYPE_CT_SEND_REQUEST           (0x02)
   2441        1.1  thorpej #define FC_ABORT_TYPE_EXLINKSEND_REQUEST        (0x03)
   2442        1.1  thorpej 
   2443        1.1  thorpej /* FC Abort Reply */
   2444        1.1  thorpej typedef struct _MSG_FC_ABORT_REPLY
   2445        1.1  thorpej {
   2446        1.1  thorpej     U16                     Reserved;           /* 00h */
   2447        1.1  thorpej     U8                      MsgLength;          /* 02h */
   2448        1.1  thorpej     U8                      Function;           /* 03h */
   2449        1.1  thorpej     U16                     Reserved1;          /* 04h */
   2450        1.1  thorpej     U8                      Reserved2;          /* 06h */
   2451        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2452        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2453        1.1  thorpej     U16                     Reserved3;          /* 0Ch */
   2454        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   2455        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   2456        1.1  thorpej } MSG_FC_ABORT_REPLY, MPI_POINTER PTR_MSG_FC_ABORT_REPLY,
   2457        1.1  thorpej   FcAbortReply_t, MPI_POINTER pFcAbortReply_t;
   2458        1.1  thorpej 
   2459        1.1  thorpej 
   2460        1.1  thorpej /****************************************************************************/
   2461        1.1  thorpej /* FC Common Transport Send messages                                        */
   2462        1.1  thorpej /****************************************************************************/
   2463        1.1  thorpej 
   2464        1.1  thorpej typedef struct _MSG_FC_COMMON_TRANSPORT_SEND_REQUEST
   2465        1.1  thorpej {
   2466        1.1  thorpej     U8                      SendFlags;          /* 00h */
   2467        1.1  thorpej     U8                      Reserved;           /* 01h */
   2468        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   2469        1.1  thorpej     U8                      Function;           /* 03h */
   2470        1.1  thorpej     U32                     MsgFlags_Did;       /* 04h */
   2471        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2472        1.1  thorpej     U16                     CTCommandCode;      /* 0Ch */
   2473        1.1  thorpej     U8                      FsType;             /* 0Eh */
   2474        1.1  thorpej     U8                      Reserved1;          /* 0Fh */
   2475        1.1  thorpej     SGE_SIMPLE_UNION        SGL;                /* 10h */
   2476        1.1  thorpej } MSG_FC_COMMON_TRANSPORT_SEND_REQUEST,
   2477        1.1  thorpej  MPI_POINTER PTR_MSG_FC_COMMON_TRANSPORT_SEND_REQUEST,
   2478        1.1  thorpej   FcCommonTransportSendRequest_t, MPI_POINTER pFcCommonTransportSendRequest_t;
   2479        1.1  thorpej 
   2480        1.1  thorpej #define MPI_FC_CT_SEND_DID_MASK                 (0x00FFFFFF)
   2481        1.1  thorpej #define MPI_FC_CT_SEND_DID_SHIFT                (0)
   2482        1.1  thorpej #define MPI_FC_CT_SEND_MSGFLAGS_MASK            (0xFF000000)
   2483        1.1  thorpej #define MPI_FC_CT_SEND_MSGFLAGS_SHIFT           (24)
   2484        1.1  thorpej 
   2485        1.1  thorpej 
   2486        1.1  thorpej /* FC Common Transport Send Reply */
   2487        1.1  thorpej typedef struct _MSG_FC_COMMON_TRANSPORT_SEND_REPLY
   2488        1.1  thorpej {
   2489        1.1  thorpej     U16                     Reserved;           /* 00h */
   2490        1.1  thorpej     U8                      MsgLength;          /* 02h */
   2491        1.1  thorpej     U8                      Function;           /* 03h */
   2492        1.1  thorpej     U16                     Reserved1;          /* 04h */
   2493        1.1  thorpej     U8                      Reserved2;          /* 06h */
   2494        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2495        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2496        1.1  thorpej     U16                     Reserved3;          /* 0Ch */
   2497        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   2498        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   2499        1.1  thorpej     U32                     ResponseLength;     /* 14h */
   2500        1.1  thorpej } MSG_FC_COMMON_TRANSPORT_SEND_REPLY, MPI_POINTER PTR_MSG_FC_COMMON_TRANSPORT_SEND_REPLY,
   2501        1.1  thorpej   FcCommonTransportSendReply_t, MPI_POINTER pFcCommonTransportSendReply_t;
   2502        1.1  thorpej 
   2503        1.1  thorpej 
   2504        1.1  thorpej /****************************************************************************/
   2505        1.1  thorpej /* FC Primitive Send messages                                               */
   2506        1.1  thorpej /****************************************************************************/
   2507        1.1  thorpej 
   2508        1.1  thorpej typedef struct _MSG_FC_PRIMITIVE_SEND_REQUEST
   2509        1.1  thorpej {
   2510        1.1  thorpej     U8                      SendFlags;          /* 00h */
   2511        1.1  thorpej     U8                      Reserved;           /* 01h */
   2512        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   2513        1.1  thorpej     U8                      Function;           /* 03h */
   2514        1.1  thorpej     U16                     Reserved1;          /* 04h */
   2515        1.1  thorpej     U8                      Reserved2;          /* 06h */
   2516        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2517        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2518        1.1  thorpej     U8                      FcPrimitive[4];     /* 0Ch */
   2519        1.1  thorpej } MSG_FC_PRIMITIVE_SEND_REQUEST, MPI_POINTER PTR_MSG_FC_PRIMITIVE_SEND_REQUEST,
   2520        1.1  thorpej   FcPrimitiveSendRequest_t, MPI_POINTER pFcPrimitiveSendRequest_t;
   2521        1.1  thorpej 
   2522        1.1  thorpej #define MPI_FC_PRIM_SEND_FLAGS_PORT_MASK       (0x01)
   2523        1.1  thorpej #define MPI_FC_PRIM_SEND_FLAGS_RESET_LINK      (0x04)
   2524        1.1  thorpej #define MPI_FC_PRIM_SEND_FLAGS_STOP_SEND       (0x08)
   2525        1.1  thorpej #define MPI_FC_PRIM_SEND_FLAGS_SEND_ONCE       (0x10)
   2526        1.1  thorpej #define MPI_FC_PRIM_SEND_FLAGS_SEND_AROUND     (0x20)
   2527        1.1  thorpej #define MPI_FC_PRIM_SEND_FLAGS_UNTIL_FULL      (0x40)
   2528        1.1  thorpej #define MPI_FC_PRIM_SEND_FLAGS_FOREVER         (0x80)
   2529        1.1  thorpej 
   2530        1.1  thorpej /* FC Primitive Send Reply */
   2531        1.1  thorpej typedef struct _MSG_FC_PRIMITIVE_SEND_REPLY
   2532        1.1  thorpej {
   2533        1.1  thorpej     U8                      SendFlags;          /* 00h */
   2534        1.1  thorpej     U8                      Reserved;           /* 01h */
   2535        1.1  thorpej     U8                      MsgLength;          /* 02h */
   2536        1.1  thorpej     U8                      Function;           /* 03h */
   2537        1.1  thorpej     U16                     Reserved1;          /* 04h */
   2538        1.1  thorpej     U8                      Reserved2;          /* 06h */
   2539        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2540        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2541        1.1  thorpej     U16                     Reserved3;          /* 0Ch */
   2542        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   2543        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   2544        1.1  thorpej } MSG_FC_PRIMITIVE_SEND_REPLY, MPI_POINTER PTR_MSG_FC_PRIMITIVE_SEND_REPLY,
   2545        1.1  thorpej   FcPrimitiveSendReply_t, MPI_POINTER pFcPrimitiveSendReply_t;
   2546        1.1  thorpej 
   2547        1.1  thorpej #endif
   2548        1.1  thorpej 
   2549        1.1  thorpej 
   2550        1.1  thorpej /*
   2551        1.1  thorpej  * Copyright (c) 2000, 2001 by LSI Logic Corporation
   2552        1.1  thorpej  *
   2553        1.1  thorpej  * Redistribution and use in source and binary forms, with or without
   2554        1.1  thorpej  * modification, are permitted provided that the following conditions
   2555        1.1  thorpej  * are met:
   2556        1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
   2557        1.1  thorpej  *    notice immediately at the beginning of the file, without modification,
   2558        1.1  thorpej  *    this list of conditions, and the following disclaimer.
   2559        1.1  thorpej  * 2. The name of the author may not be used to endorse or promote products
   2560        1.1  thorpej  *    derived from this software without specific prior written permission.
   2561        1.1  thorpej  *
   2562        1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   2563        1.1  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   2564        1.1  thorpej  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   2565        1.1  thorpej  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
   2566        1.1  thorpej  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   2567        1.1  thorpej  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   2568        1.1  thorpej  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   2569        1.1  thorpej  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   2570        1.1  thorpej  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   2571        1.1  thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   2572        1.1  thorpej  * SUCH DAMAGE.
   2573        1.1  thorpej  *
   2574        1.1  thorpej  *
   2575        1.1  thorpej  *           Name:  MPI_INIT.H
   2576        1.1  thorpej  *          Title:  MPI initiator mode messages and structures
   2577        1.1  thorpej  *  Creation Date:  June 8, 2000
   2578        1.1  thorpej  *
   2579        1.1  thorpej  *    MPI Version:  01.02.04
   2580        1.1  thorpej  *
   2581        1.1  thorpej  *  Version History
   2582        1.1  thorpej  *  ---------------
   2583        1.1  thorpej  *
   2584        1.1  thorpej  *  Date      Version   Description
   2585        1.1  thorpej  *  --------  --------  ------------------------------------------------------
   2586        1.1  thorpej  *  05-08-00  00.10.01  Original release for 0.10 spec dated 4/26/2000.
   2587        1.1  thorpej  *  05-24-00  00.10.02  Added SenseBufferLength to _MSG_SCSI_IO_REPLY.
   2588        1.1  thorpej  *  06-06-00  01.00.01  Update version number for 1.0 release.
   2589        1.1  thorpej  *  06-08-00  01.00.02  Added MPI_SCSI_RSP_INFO_ definitions.
   2590        1.1  thorpej  *  11-02-00  01.01.01  Original release for post 1.0 work.
   2591        1.1  thorpej  *  12-04-00  01.01.02  Added MPI_SCSIIO_CONTROL_NO_DISCONNECT.
   2592        1.1  thorpej  *  02-20-01  01.01.03  Started using MPI_POINTER.
   2593        1.1  thorpej  *  03-27-01  01.01.04  Added structure offset comments.
   2594        1.1  thorpej  *  04-10-01  01.01.05  Added new MsgFlag for MSG_SCSI_TASK_MGMT.
   2595        1.1  thorpej  *  08-08-01  01.02.01  Original release for v1.2 work.
   2596        1.1  thorpej  *  08-29-01  01.02.02  Added MPI_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET.
   2597        1.1  thorpej  *                      Added MPI_SCSI_STATE_QUEUE_TAG_REJECTED for
   2598        1.1  thorpej  *                      MSG_SCSI_IO_REPLY.
   2599        1.1  thorpej  *  09-28-01  01.02.03  Added structures and defines for SCSI Enclosure
   2600        1.1  thorpej  *                      Processor messages.
   2601        1.1  thorpej  *  10-04-01  01.02.04  Added defines for SEP request Action field.
   2602        1.1  thorpej  *  --------------------------------------------------------------------------
   2603        1.1  thorpej  */
   2604        1.1  thorpej 
   2605        1.1  thorpej #ifndef MPI_INIT_H
   2606        1.1  thorpej #define MPI_INIT_H
   2607        1.1  thorpej 
   2608        1.1  thorpej 
   2609        1.1  thorpej /*****************************************************************************
   2610        1.1  thorpej *
   2611        1.1  thorpej *               S C S I    I n i t i a t o r    M e s s a g e s
   2612        1.1  thorpej *
   2613        1.1  thorpej *****************************************************************************/
   2614        1.1  thorpej 
   2615        1.1  thorpej /****************************************************************************/
   2616  1.3.138.1  thorpej /*  SCSI IO messages and associated structures                              */
   2617        1.1  thorpej /****************************************************************************/
   2618        1.1  thorpej 
   2619        1.1  thorpej typedef struct _MSG_SCSI_IO_REQUEST
   2620        1.1  thorpej {
   2621        1.1  thorpej     U8                      TargetID;           /* 00h */
   2622        1.1  thorpej     U8                      Bus;                /* 01h */
   2623        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   2624        1.1  thorpej     U8                      Function;           /* 03h */
   2625        1.1  thorpej     U8                      CDBLength;          /* 04h */
   2626        1.1  thorpej     U8                      SenseBufferLength;  /* 05h */
   2627        1.1  thorpej     U8                      Reserved;           /* 06h */
   2628        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2629        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2630        1.1  thorpej     U8                      LUN[8];             /* 0Ch */
   2631        1.1  thorpej     U32                     Control;            /* 14h */
   2632        1.1  thorpej     U8                      CDB[16];            /* 18h */
   2633        1.1  thorpej     U32                     DataLength;         /* 28h */
   2634        1.1  thorpej     U32                     SenseBufferLowAddr; /* 2Ch */
   2635        1.1  thorpej     SGE_IO_UNION            SGL;                /* 30h */
   2636        1.1  thorpej } MSG_SCSI_IO_REQUEST, MPI_POINTER PTR_MSG_SCSI_IO_REQUEST,
   2637        1.1  thorpej   SCSIIORequest_t, MPI_POINTER pSCSIIORequest_t;
   2638        1.1  thorpej 
   2639        1.1  thorpej 
   2640        1.1  thorpej /* SCSIO MsgFlags bits */
   2641        1.1  thorpej 
   2642        1.1  thorpej #define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH          (0x01)
   2643        1.1  thorpej #define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_32       (0x00)
   2644        1.1  thorpej #define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_64       (0x01)
   2645        1.1  thorpej #define MPI_SCSIIO_MSGFLGS_SENSE_LOCATION       (0x02)
   2646        1.1  thorpej #define MPI_SCSIIO_MSGFLGS_SENSE_LOC_HOST       (0x00)
   2647        1.1  thorpej #define MPI_SCSIIO_MSGFLGS_SENSE_LOC_IOC        (0x02)
   2648        1.1  thorpej 
   2649        1.1  thorpej /* SCSIIO LUN fields */
   2650        1.1  thorpej 
   2651        1.1  thorpej #define MPI_SCSIIO_LUN_FIRST_LEVEL_ADDRESSING   (0x0000FFFF)
   2652        1.1  thorpej #define MPI_SCSIIO_LUN_SECOND_LEVEL_ADDRESSING  (0xFFFF0000)
   2653        1.1  thorpej #define MPI_SCSIIO_LUN_THIRD_LEVEL_ADDRESSING   (0x0000FFFF)
   2654        1.1  thorpej #define MPI_SCSIIO_LUN_FOURTH_LEVEL_ADDRESSING  (0xFFFF0000)
   2655        1.1  thorpej #define MPI_SCSIIO_LUN_LEVEL_1_WORD             (0xFF00)
   2656        1.1  thorpej #define MPI_SCSIIO_LUN_LEVEL_1_DWORD            (0x0000FF00)
   2657        1.1  thorpej 
   2658        1.1  thorpej /* SCSIO Control bits */
   2659        1.1  thorpej 
   2660        1.1  thorpej #define MPI_SCSIIO_CONTROL_DATADIRECTION_MASK   (0x03000000)
   2661        1.1  thorpej #define MPI_SCSIIO_CONTROL_NODATATRANSFER       (0x00000000)
   2662        1.1  thorpej #define MPI_SCSIIO_CONTROL_WRITE                (0x01000000)
   2663        1.1  thorpej #define MPI_SCSIIO_CONTROL_READ                 (0x02000000)
   2664        1.1  thorpej 
   2665        1.1  thorpej #define MPI_SCSIIO_CONTROL_ADDCDBLEN_MASK       (0x3C000000)
   2666        1.1  thorpej #define MPI_SCSIIO_CONTROL_ADDCDBLEN_SHIFT      (26)
   2667        1.1  thorpej 
   2668        1.1  thorpej #define MPI_SCSIIO_CONTROL_TASKATTRIBUTE_MASK   (0x00000700)
   2669        1.1  thorpej #define MPI_SCSIIO_CONTROL_SIMPLEQ              (0x00000000)
   2670        1.1  thorpej #define MPI_SCSIIO_CONTROL_HEADOFQ              (0x00000100)
   2671        1.1  thorpej #define MPI_SCSIIO_CONTROL_ORDEREDQ             (0x00000200)
   2672        1.1  thorpej #define MPI_SCSIIO_CONTROL_ACAQ                 (0x00000400)
   2673        1.1  thorpej #define MPI_SCSIIO_CONTROL_UNTAGGED             (0x00000500)
   2674        1.1  thorpej #define MPI_SCSIIO_CONTROL_NO_DISCONNECT        (0x00000700)
   2675        1.1  thorpej 
   2676        1.1  thorpej #define MPI_SCSIIO_CONTROL_TASKMANAGE_MASK      (0x00FF0000)
   2677        1.1  thorpej #define MPI_SCSIIO_CONTROL_OBSOLETE             (0x00800000)
   2678        1.1  thorpej #define MPI_SCSIIO_CONTROL_CLEAR_ACA_RSV        (0x00400000)
   2679        1.1  thorpej #define MPI_SCSIIO_CONTROL_TARGET_RESET         (0x00200000)
   2680        1.1  thorpej #define MPI_SCSIIO_CONTROL_LUN_RESET_RSV        (0x00100000)
   2681        1.1  thorpej #define MPI_SCSIIO_CONTROL_RESERVED             (0x00080000)
   2682        1.1  thorpej #define MPI_SCSIIO_CONTROL_CLR_TASK_SET_RSV     (0x00040000)
   2683        1.1  thorpej #define MPI_SCSIIO_CONTROL_ABORT_TASK_SET       (0x00020000)
   2684        1.1  thorpej #define MPI_SCSIIO_CONTROL_RESERVED2            (0x00010000)
   2685        1.1  thorpej 
   2686        1.1  thorpej 
   2687        1.1  thorpej /* SCSIIO reply structure */
   2688        1.1  thorpej typedef struct _MSG_SCSI_IO_REPLY
   2689        1.1  thorpej {
   2690        1.1  thorpej     U8                      TargetID;           /* 00h */
   2691        1.1  thorpej     U8                      Bus;                /* 01h */
   2692        1.1  thorpej     U8                      MsgLength;          /* 02h */
   2693        1.1  thorpej     U8                      Function;           /* 03h */
   2694        1.1  thorpej     U8                      CDBLength;          /* 04h */
   2695        1.1  thorpej     U8                      SenseBufferLength;  /* 05h */
   2696        1.1  thorpej     U8                      Reserved;           /* 06h */
   2697        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2698        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2699        1.1  thorpej     U8                      SCSIStatus;         /* 0Ch */
   2700        1.1  thorpej     U8                      SCSIState;          /* 0Dh */
   2701        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   2702        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   2703        1.1  thorpej     U32                     TransferCount;      /* 14h */
   2704        1.1  thorpej     U32                     SenseCount;         /* 18h */
   2705        1.1  thorpej     U32                     ResponseInfo;       /* 1Ch */
   2706        1.1  thorpej } MSG_SCSI_IO_REPLY, MPI_POINTER PTR_MSG_SCSI_IO_REPLY,
   2707        1.1  thorpej   SCSIIOReply_t, MPI_POINTER pSCSIIOReply_t;
   2708        1.1  thorpej 
   2709        1.1  thorpej 
   2710        1.1  thorpej /* SCSIIO Reply SCSIStatus values (SAM-2 status codes) */
   2711        1.1  thorpej 
   2712        1.1  thorpej #define MPI_SCSI_STATUS_SUCCESS                 (0x00)
   2713        1.1  thorpej #define MPI_SCSI_STATUS_CHECK_CONDITION         (0x02)
   2714        1.1  thorpej #define MPI_SCSI_STATUS_CONDITION_MET           (0x04)
   2715        1.1  thorpej #define MPI_SCSI_STATUS_BUSY                    (0x08)
   2716        1.1  thorpej #define MPI_SCSI_STATUS_INTERMEDIATE            (0x10)
   2717        1.1  thorpej #define MPI_SCSI_STATUS_INTERMEDIATE_CONDMET    (0x14)
   2718        1.1  thorpej #define MPI_SCSI_STATUS_RESERVATION_CONFLICT    (0x18)
   2719        1.1  thorpej #define MPI_SCSI_STATUS_COMMAND_TERMINATED      (0x22)
   2720        1.1  thorpej #define MPI_SCSI_STATUS_TASK_SET_FULL           (0x28)
   2721        1.1  thorpej #define MPI_SCSI_STATUS_ACA_ACTIVE              (0x30)
   2722        1.1  thorpej 
   2723        1.1  thorpej 
   2724        1.1  thorpej /* SCSIIO Reply SCSIState values */
   2725        1.1  thorpej 
   2726        1.1  thorpej #define MPI_SCSI_STATE_AUTOSENSE_VALID          (0x01)
   2727        1.1  thorpej #define MPI_SCSI_STATE_AUTOSENSE_FAILED         (0x02)
   2728        1.1  thorpej #define MPI_SCSI_STATE_NO_SCSI_STATUS           (0x04)
   2729        1.1  thorpej #define MPI_SCSI_STATE_TERMINATED               (0x08)
   2730        1.1  thorpej #define MPI_SCSI_STATE_RESPONSE_INFO_VALID      (0x10)
   2731        1.1  thorpej #define MPI_SCSI_STATE_QUEUE_TAG_REJECTED       (0x20)
   2732        1.1  thorpej 
   2733        1.1  thorpej /* SCSIIO Reply ResponseInfo values */
   2734        1.1  thorpej /* (FCP-1 RSP_CODE values and SPI-3 Packetized Failure codes) */
   2735        1.1  thorpej 
   2736        1.1  thorpej #define MPI_SCSI_RSP_INFO_FUNCTION_COMPLETE     (0x00000000)
   2737        1.1  thorpej #define MPI_SCSI_RSP_INFO_FCP_BURST_LEN_ERROR   (0x01000000)
   2738        1.1  thorpej #define MPI_SCSI_RSP_INFO_CMND_FIELDS_INVALID   (0x02000000)
   2739        1.1  thorpej #define MPI_SCSI_RSP_INFO_FCP_DATA_RO_ERROR     (0x03000000)
   2740        1.1  thorpej #define MPI_SCSI_RSP_INFO_TASK_MGMT_UNSUPPORTED (0x04000000)
   2741        1.1  thorpej #define MPI_SCSI_RSP_INFO_TASK_MGMT_FAILED      (0x05000000)
   2742        1.1  thorpej #define MPI_SCSI_RSP_INFO_SPI_LQ_INVALID_TYPE   (0x06000000)
   2743        1.1  thorpej 
   2744        1.1  thorpej 
   2745        1.1  thorpej /****************************************************************************/
   2746        1.1  thorpej /*  SCSI Task Management messages                                           */
   2747        1.1  thorpej /****************************************************************************/
   2748        1.1  thorpej 
   2749        1.1  thorpej typedef struct _MSG_SCSI_TASK_MGMT
   2750        1.1  thorpej {
   2751        1.1  thorpej     U8                      TargetID;           /* 00h */
   2752        1.1  thorpej     U8                      Bus;                /* 01h */
   2753        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   2754        1.1  thorpej     U8                      Function;           /* 03h */
   2755        1.1  thorpej     U8                      Reserved;           /* 04h */
   2756        1.1  thorpej     U8                      TaskType;           /* 05h */
   2757        1.1  thorpej     U8                      Reserved1;          /* 06h */
   2758        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2759        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2760        1.1  thorpej     U8                      LUN[8];             /* 0Ch */
   2761        1.1  thorpej     U32                     Reserved2[7];       /* 14h */
   2762        1.1  thorpej     U32                     TaskMsgContext;     /* 30h */
   2763        1.1  thorpej } MSG_SCSI_TASK_MGMT, MPI_POINTER PTR_SCSI_TASK_MGMT,
   2764        1.1  thorpej   SCSITaskMgmt_t, MPI_POINTER pSCSITaskMgmt_t;
   2765        1.1  thorpej 
   2766        1.1  thorpej /* TaskType values */
   2767        1.1  thorpej 
   2768        1.1  thorpej #define MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK            (0x01)
   2769        1.1  thorpej #define MPI_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET         (0x02)
   2770        1.1  thorpej #define MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET          (0x03)
   2771        1.1  thorpej #define MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS             (0x04)
   2772        1.1  thorpej #define MPI_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET    (0x05)
   2773        1.1  thorpej 
   2774        1.1  thorpej /* MsgFlags bits */
   2775        1.1  thorpej #define MPI_SCSITASKMGMT_MSGFLAGS_TARGET_RESET_OPTION   (0x00)
   2776        1.1  thorpej #define MPI_SCSITASKMGMT_MSGFLAGS_LIP_RESET_OPTION      (0x02)
   2777        1.1  thorpej #define MPI_SCSITASKMGMT_MSGFLAGS_LIPRESET_RESET_OPTION (0x04)
   2778        1.1  thorpej 
   2779        1.1  thorpej /* SCSI Task Management Reply */
   2780        1.1  thorpej typedef struct _MSG_SCSI_TASK_MGMT_REPLY
   2781        1.1  thorpej {
   2782        1.1  thorpej     U8                      TargetID;           /* 00h */
   2783        1.1  thorpej     U8                      Bus;                /* 01h */
   2784        1.1  thorpej     U8                      MsgLength;          /* 02h */
   2785        1.1  thorpej     U8                      Function;           /* 03h */
   2786        1.1  thorpej     U8                      Reserved;           /* 04h */
   2787        1.1  thorpej     U8                      TaskType;           /* 05h */
   2788        1.1  thorpej     U8                      Reserved1;          /* 06h */
   2789        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2790        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2791        1.1  thorpej     U8                      Reserved2[2];       /* 0Ch */
   2792        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   2793        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   2794        1.1  thorpej     U32                     TerminationCount;   /* 14h */
   2795        1.1  thorpej } MSG_SCSI_TASK_MGMT_REPLY, MPI_POINTER PTR_MSG_SCSI_TASK_MGMT_REPLY,
   2796        1.1  thorpej   SCSITaskMgmtReply_t, MPI_POINTER pSCSITaskMgmtReply_t;
   2797        1.1  thorpej 
   2798        1.1  thorpej 
   2799        1.1  thorpej /****************************************************************************/
   2800        1.1  thorpej /*  SCSI Enclosure Processor messages                                       */
   2801        1.1  thorpej /****************************************************************************/
   2802        1.1  thorpej 
   2803        1.1  thorpej typedef struct _MSG_SEP_REQUEST
   2804        1.1  thorpej {
   2805        1.1  thorpej     U8                      TargetID;           /* 00h */
   2806        1.1  thorpej     U8                      Bus;                /* 01h */
   2807        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   2808        1.1  thorpej     U8                      Function;           /* 03h */
   2809        1.1  thorpej     U8                      Action;             /* 04h */
   2810        1.1  thorpej     U8                      Reserved1;          /* 05h */
   2811        1.1  thorpej     U8                      Reserved2;          /* 06h */
   2812        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2813        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2814        1.1  thorpej     U32                     SlotStatus;         /* 0Ch */
   2815        1.1  thorpej } MSG_SEP_REQUEST, MPI_POINTER PTR_MSG_SEP_REQUEST,
   2816        1.1  thorpej   SEPRequest_t, MPI_POINTER pSEPRequest_t;
   2817        1.1  thorpej 
   2818        1.1  thorpej /* Action defines */
   2819        1.1  thorpej #define MPI_SEP_REQ_ACTION_WRITE_STATUS                 (0x00)
   2820        1.1  thorpej #define MPI_SEP_REQ_ACTION_READ_STATUS                  (0x01)
   2821        1.1  thorpej 
   2822        1.1  thorpej /* SlotStatus bits for MSG_SEP_REQUEST */
   2823        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_NO_ERROR                 (0x00000001)
   2824        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_DEV_FAULTY               (0x00000002)
   2825        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_DEV_REBUILDING           (0x00000004)
   2826        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_IN_FAILED_ARRAY          (0x00000008)
   2827        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_IN_CRITICAL_ARRAY        (0x00000010)
   2828        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_PARITY_CHECK             (0x00000020)
   2829        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_PREDICTED_FAULT          (0x00000040)
   2830        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_UNCONFIGURED             (0x00000080)
   2831        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_HOT_SPARE                (0x00000100)
   2832        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED          (0x00000200)
   2833        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST         (0x00020000)
   2834        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE           (0x00040000)
   2835        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_REQUEST_INSERT           (0x00080000)
   2836        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_DO_NOT_MOVE              (0x00400000)
   2837        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_B_ENABLE_BYPASS          (0x04000000)
   2838        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_A_ENABLE_BYPASS          (0x08000000)
   2839        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_DEV_OFF                  (0x10000000)
   2840        1.1  thorpej #define MPI_SEP_REQ_SLOTSTATUS_SWAP_RESET               (0x80000000)
   2841        1.1  thorpej 
   2842        1.1  thorpej 
   2843        1.1  thorpej typedef struct _MSG_SEP_REPLY
   2844        1.1  thorpej {
   2845        1.1  thorpej     U8                      TargetID;           /* 00h */
   2846        1.1  thorpej     U8                      Bus;                /* 01h */
   2847        1.1  thorpej     U8                      MsgLength;          /* 02h */
   2848        1.1  thorpej     U8                      Function;           /* 03h */
   2849        1.1  thorpej     U8                      Action;             /* 04h */
   2850        1.1  thorpej     U8                      Reserved1;          /* 05h */
   2851        1.1  thorpej     U8                      Reserved2;          /* 06h */
   2852        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   2853        1.1  thorpej     U32                     MsgContext;         /* 08h */
   2854        1.1  thorpej     U16                     Reserved3;          /* 0Ch */
   2855        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   2856        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   2857        1.1  thorpej     U32                     SlotStatus;         /* 14h */
   2858        1.1  thorpej } MSG_SEP_REPLY, MPI_POINTER PTR_MSG_SEP_REPLY,
   2859        1.1  thorpej   SEPReply_t, MPI_POINTER pSEPReply_t;
   2860        1.1  thorpej 
   2861        1.1  thorpej /* SlotStatus bits for MSG_SEP_REPLY */
   2862        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_NO_ERROR               (0x00000001)
   2863        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_DEV_FAULTY             (0x00000002)
   2864        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_DEV_REBUILDING         (0x00000004)
   2865        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_IN_FAILED_ARRAY        (0x00000008)
   2866        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_IN_CRITICAL_ARRAY      (0x00000010)
   2867        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_PARITY_CHECK           (0x00000020)
   2868        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_PREDICTED_FAULT        (0x00000040)
   2869        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_UNCONFIGURED           (0x00000080)
   2870        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_HOT_SPARE              (0x00000100)
   2871        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED        (0x00000200)
   2872        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_REPORT                 (0x00010000)
   2873        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST       (0x00020000)
   2874        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_REMOVE_READY           (0x00040000)
   2875        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_INSERT_READY           (0x00080000)
   2876        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_DO_NOT_REMOVE          (0x00400000)
   2877        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_B_BYPASS_ENABLED       (0x01000000)
   2878        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_A_BYPASS_ENABLED       (0x02000000)
   2879        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_B_ENABLE_BYPASS        (0x04000000)
   2880        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_A_ENABLE_BYPASS        (0x08000000)
   2881        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_DEV_OFF                (0x10000000)
   2882        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_FAULT_SENSED           (0x40000000)
   2883        1.1  thorpej #define MPI_SEP_REPLY_SLOTSTATUS_SWAPPED                (0x80000000)
   2884        1.1  thorpej 
   2885        1.1  thorpej #endif
   2886        1.1  thorpej 
   2887        1.1  thorpej /*
   2888        1.1  thorpej  * Copyright (c) 2000, 2001 by LSI Logic Corporation
   2889        1.1  thorpej  *
   2890        1.1  thorpej  * Redistribution and use in source and binary forms, with or without
   2891        1.1  thorpej  * modification, are permitted provided that the following conditions
   2892        1.1  thorpej  * are met:
   2893        1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
   2894        1.1  thorpej  *    notice immediately at the beginning of the file, without modification,
   2895        1.1  thorpej  *    this list of conditions, and the following disclaimer.
   2896        1.1  thorpej  * 2. The name of the author may not be used to endorse or promote products
   2897        1.1  thorpej  *    derived from this software without specific prior written permission.
   2898        1.1  thorpej  *
   2899        1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   2900        1.1  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   2901        1.1  thorpej  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   2902        1.1  thorpej  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
   2903        1.1  thorpej  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   2904        1.1  thorpej  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   2905        1.1  thorpej  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   2906        1.1  thorpej  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   2907        1.1  thorpej  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   2908        1.1  thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   2909        1.1  thorpej  * SUCH DAMAGE.
   2910        1.1  thorpej  *
   2911        1.1  thorpej  *
   2912        1.1  thorpej  *           Name:  MPI_IOC.H
   2913        1.1  thorpej  *          Title:  MPI IOC, Port, Event, FW Download, and FW Upload messages
   2914        1.1  thorpej  *  Creation Date:  August 11, 2000
   2915        1.1  thorpej  *
   2916        1.1  thorpej  *    MPI Version:  01.02.04
   2917        1.1  thorpej  *
   2918        1.1  thorpej  *  Version History
   2919        1.1  thorpej  *  ---------------
   2920        1.1  thorpej  *
   2921        1.1  thorpej  *  Date      Version   Description
   2922        1.1  thorpej  *  --------  --------  ------------------------------------------------------
   2923        1.1  thorpej  *  05-08-00  00.10.01  Original release for 0.10 spec dated 4/26/2000.
   2924        1.1  thorpej  *  05-24-00  00.10.02  Added _MSG_IOC_INIT_REPLY structure.
   2925        1.1  thorpej  *  06-06-00  01.00.01  Added CurReplyFrameSize field to _MSG_IOC_FACTS_REPLY.
   2926        1.1  thorpej  *  06-12-00  01.00.02  Added _MSG_PORT_ENABLE_REPLY structure.
   2927        1.1  thorpej  *                      Added _MSG_EVENT_ACK_REPLY structure.
   2928        1.1  thorpej  *                      Added _MSG_FW_DOWNLOAD_REPLY structure.
   2929        1.1  thorpej  *                      Added _MSG_TOOLBOX_REPLY structure.
   2930        1.1  thorpej  *  06-30-00  01.00.03  Added MaxLanBuckets to _PORT_FACT_REPLY structure.
   2931        1.1  thorpej  *  07-27-00  01.00.04  Added _EVENT_DATA structure definitions for _SCSI,
   2932        1.1  thorpej  *                      _LINK_STATUS, _LOOP_STATE and _LOGOUT.
   2933        1.1  thorpej  *  08-11-00  01.00.05  Switched positions of MsgLength and Function fields in
   2934        1.1  thorpej  *                      _MSG_EVENT_ACK_REPLY structure to match specification.
   2935        1.1  thorpej  *  11-02-00  01.01.01  Original release for post 1.0 work.
   2936        1.1  thorpej  *                      Added a value for Manufacturer to WhoInit.
   2937        1.1  thorpej  *  12-04-00  01.01.02  Modified IOCFacts reply, added FWUpload messages, and
   2938        1.1  thorpej  *                      removed toolbox message.
   2939        1.1  thorpej  *  01-09-01  01.01.03  Added event enabled and disabled defines.
   2940        1.1  thorpej  *                      Added structures for FwHeader and DataHeader.
   2941        1.1  thorpej  *                      Added ImageType to FwUpload reply.
   2942        1.1  thorpej  *  02-20-01  01.01.04  Started using MPI_POINTER.
   2943        1.1  thorpej  *  02-27-01  01.01.05  Added event for RAID status change and its event data.
   2944        1.1  thorpej  *                      Added IocNumber field to MSG_IOC_FACTS_REPLY.
   2945        1.1  thorpej  *  03-27-01  01.01.06  Added defines for ProductId field of MPI_FW_HEADER.
   2946        1.1  thorpej  *                      Added structure offset comments.
   2947        1.1  thorpej  *  04-09-01  01.01.07  Added structure EVENT_DATA_EVENT_CHANGE.
   2948        1.1  thorpej  *  08-08-01  01.02.01  Original release for v1.2 work.
   2949        1.1  thorpej  *                      New format for FWVersion and ProductId in
   2950        1.1  thorpej  *                      MSG_IOC_FACTS_REPLY and MPI_FW_HEADER.
   2951        1.1  thorpej  *  08-31-01  01.02.02  Addded event MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE and
   2952        1.1  thorpej  *                      related structure and defines.
   2953        1.1  thorpej  *                      Added event MPI_EVENT_ON_BUS_TIMER_EXPIRED.
   2954        1.1  thorpej  *                      Added MPI_IOCINIT_FLAGS_DISCARD_FW_IMAGE.
   2955        1.1  thorpej  *                      Replaced a reserved field in MSG_IOC_FACTS_REPLY with
   2956        1.1  thorpej  *                      IOCExceptions and changed DataImageSize to reserved.
   2957        1.1  thorpej  *                      Added MPI_FW_DOWNLOAD_ITYPE_NVSTORE_DATA and
   2958        1.1  thorpej  *                      MPI_FW_UPLOAD_ITYPE_NVDATA.
   2959        1.1  thorpej  *  09-28-01  01.02.03  Modified Event Data for Integrated RAID.
   2960        1.1  thorpej  *  11-01-01  01.02.04  Added defines for MPI_EXT_IMAGE_HEADER ImageType field.
   2961        1.1  thorpej  *  --------------------------------------------------------------------------
   2962        1.1  thorpej  */
   2963        1.1  thorpej 
   2964        1.1  thorpej #ifndef MPI_IOC_H
   2965        1.1  thorpej #define MPI_IOC_H
   2966        1.1  thorpej 
   2967        1.1  thorpej 
   2968        1.1  thorpej /*****************************************************************************
   2969        1.1  thorpej *
   2970        1.1  thorpej *               I O C    M e s s a g e s
   2971        1.1  thorpej *
   2972        1.1  thorpej *****************************************************************************/
   2973        1.1  thorpej 
   2974        1.1  thorpej /****************************************************************************/
   2975        1.1  thorpej /*  IOCInit message                                                         */
   2976        1.1  thorpej /****************************************************************************/
   2977        1.1  thorpej 
   2978        1.1  thorpej typedef struct _MSG_IOC_INIT
   2979        1.1  thorpej {
   2980        1.1  thorpej     U8                      WhoInit;                    /* 00h */
   2981        1.1  thorpej     U8                      Reserved;                   /* 01h */
   2982        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   2983        1.1  thorpej     U8                      Function;                   /* 03h */
   2984        1.1  thorpej     U8                      Flags;                      /* 04h */
   2985        1.1  thorpej     U8                      MaxDevices;                 /* 05h */
   2986        1.1  thorpej     U8                      MaxBuses;                   /* 06h */
   2987        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   2988        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   2989        1.1  thorpej     U16                     ReplyFrameSize;             /* 0Ch */
   2990        1.1  thorpej     U8                      Reserved1[2];               /* 0Eh */
   2991        1.1  thorpej     U32                     HostMfaHighAddr;            /* 10h */
   2992        1.1  thorpej     U32                     SenseBufferHighAddr;        /* 14h */
   2993        1.1  thorpej } MSG_IOC_INIT, MPI_POINTER PTR_MSG_IOC_INIT,
   2994        1.1  thorpej   IOCInit_t, MPI_POINTER pIOCInit_t;
   2995        1.1  thorpej 
   2996        1.1  thorpej /* WhoInit values */
   2997        1.1  thorpej #define MPI_WHOINIT_NO_ONE                      (0x00)
   2998        1.1  thorpej #define MPI_WHOINIT_SYSTEM_BIOS                 (0x01)
   2999        1.1  thorpej #define MPI_WHOINIT_ROM_BIOS                    (0x02)
   3000        1.1  thorpej #define MPI_WHOINIT_PCI_PEER                    (0x03)
   3001        1.1  thorpej #define MPI_WHOINIT_HOST_DRIVER                 (0x04)
   3002        1.1  thorpej #define MPI_WHOINIT_MANUFACTURER                (0x05)
   3003        1.1  thorpej 
   3004        1.1  thorpej /* Flags values */
   3005        1.1  thorpej #define MPI_IOCINIT_FLAGS_DISCARD_FW_IMAGE      (0x01)
   3006        1.1  thorpej 
   3007        1.1  thorpej typedef struct _MSG_IOC_INIT_REPLY
   3008        1.1  thorpej {
   3009        1.1  thorpej     U8                      WhoInit;                    /* 00h */
   3010        1.1  thorpej     U8                      Reserved;                   /* 01h */
   3011        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   3012        1.1  thorpej     U8                      Function;                   /* 03h */
   3013        1.1  thorpej     U8                      Flags;                      /* 04h */
   3014        1.1  thorpej     U8                      MaxDevices;                 /* 05h */
   3015        1.1  thorpej     U8                      MaxBuses;                   /* 06h */
   3016        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3017        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3018        1.1  thorpej     U16                     Reserved2;                  /* 0Ch */
   3019        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   3020        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   3021        1.1  thorpej } MSG_IOC_INIT_REPLY, MPI_POINTER PTR_MSG_IOC_INIT_REPLY,
   3022        1.1  thorpej   IOCInitReply_t, MPI_POINTER pIOCInitReply_t;
   3023        1.1  thorpej 
   3024        1.1  thorpej 
   3025        1.1  thorpej 
   3026        1.1  thorpej /****************************************************************************/
   3027        1.1  thorpej /*  IOC Facts message                                                       */
   3028        1.1  thorpej /****************************************************************************/
   3029        1.1  thorpej 
   3030        1.1  thorpej typedef struct _MSG_IOC_FACTS
   3031        1.1  thorpej {
   3032        1.1  thorpej     U8                      Reserved[2];                /* 00h */
   3033        1.1  thorpej     U8                      ChainOffset;                /* 01h */
   3034        1.1  thorpej     U8                      Function;                   /* 02h */
   3035        1.1  thorpej     U8                      Reserved1[3];               /* 03h */
   3036        1.1  thorpej     U8                      MsgFlags;                   /* 04h */
   3037        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3038        1.1  thorpej } MSG_IOC_FACTS, MPI_POINTER PTR_IOC_FACTS,
   3039        1.1  thorpej   IOCFacts_t, MPI_POINTER pIOCFacts_t;
   3040        1.1  thorpej 
   3041        1.1  thorpej typedef struct _MPI_FW_VERSION_STRUCT
   3042        1.1  thorpej {
   3043        1.1  thorpej     U8                      Dev;                        /* 00h */
   3044        1.1  thorpej     U8                      Unit;                       /* 01h */
   3045        1.1  thorpej     U8                      Minor;                      /* 02h */
   3046        1.1  thorpej     U8                      Major;                      /* 03h */
   3047        1.1  thorpej } MPI_FW_VERSION_STRUCT;
   3048        1.1  thorpej 
   3049        1.1  thorpej typedef union _MPI_FW_VERSION
   3050        1.1  thorpej {
   3051        1.1  thorpej     MPI_FW_VERSION_STRUCT   Struct;
   3052        1.1  thorpej     U32                     Word;
   3053        1.1  thorpej } MPI_FW_VERSION;
   3054        1.1  thorpej 
   3055        1.1  thorpej /* IOC Facts Reply */
   3056        1.1  thorpej typedef struct _MSG_IOC_FACTS_REPLY
   3057        1.1  thorpej {
   3058        1.1  thorpej     U16                     MsgVersion;                 /* 00h */
   3059        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   3060        1.1  thorpej     U8                      Function;                   /* 03h */
   3061        1.1  thorpej     U16                     Reserved;                   /* 04h */
   3062        1.1  thorpej     U8                      IOCNumber;                  /* 06h */
   3063        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3064        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3065        1.1  thorpej     U16                     IOCExceptions;              /* 0Ch */
   3066        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   3067        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   3068        1.1  thorpej     U8                      MaxChainDepth;              /* 14h */
   3069        1.1  thorpej     U8                      WhoInit;                    /* 15h */
   3070        1.1  thorpej     U8                      BlockSize;                  /* 16h */
   3071        1.1  thorpej     U8                      Flags;                      /* 17h */
   3072        1.1  thorpej     U16                     ReplyQueueDepth;            /* 18h */
   3073        1.1  thorpej     U16                     RequestFrameSize;           /* 1Ah */
   3074        1.1  thorpej     U16                     Reserved_0101_FWVersion;    /* 1Ch */ /* obsolete 16-bit FWVersion */
   3075        1.1  thorpej     U16                     ProductID;                  /* 1Eh */
   3076        1.1  thorpej     U32                     CurrentHostMfaHighAddr;     /* 20h */
   3077        1.1  thorpej     U16                     GlobalCredits;              /* 24h */
   3078        1.1  thorpej     U8                      NumberOfPorts;              /* 26h */
   3079        1.1  thorpej     U8                      EventState;                 /* 27h */
   3080        1.1  thorpej     U32                     CurrentSenseBufferHighAddr; /* 28h */
   3081        1.1  thorpej     U16                     CurReplyFrameSize;          /* 2Ch */
   3082        1.1  thorpej     U8                      MaxDevices;                 /* 2Eh */
   3083        1.1  thorpej     U8                      MaxBuses;                   /* 2Fh */
   3084        1.1  thorpej     U32                     FWImageSize;                /* 30h */
   3085        1.1  thorpej     U32                     Reserved4;                  /* 34h */
   3086        1.1  thorpej     MPI_FW_VERSION          FWVersion;                  /* 38h */
   3087        1.1  thorpej } MSG_IOC_FACTS_REPLY, MPI_POINTER PTR_MSG_IOC_FACTS_REPLY,
   3088        1.1  thorpej   IOCFactsReply_t, MPI_POINTER pIOCFactsReply_t;
   3089        1.1  thorpej 
   3090        1.1  thorpej #define MPI_IOCFACTS_MSGVERSION_MAJOR_MASK          (0xFF00)
   3091        1.1  thorpej #define MPI_IOCFACTS_MSGVERSION_MINOR_MASK          (0x00FF)
   3092        1.1  thorpej 
   3093        1.1  thorpej #define MPI_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL    (0x0001)
   3094        1.1  thorpej 
   3095        1.1  thorpej #define MPI_IOCFACTS_FLAGS_FW_DOWNLOAD_BOOT         (0x01)
   3096        1.1  thorpej 
   3097        1.1  thorpej #define MPI_IOCFACTS_EVENTSTATE_DISABLED            (0x00)
   3098        1.1  thorpej #define MPI_IOCFACTS_EVENTSTATE_ENABLED             (0x01)
   3099        1.1  thorpej 
   3100        1.1  thorpej 
   3101        1.1  thorpej 
   3102        1.1  thorpej /*****************************************************************************
   3103        1.1  thorpej *
   3104        1.1  thorpej *               P o r t    M e s s a g e s
   3105        1.1  thorpej *
   3106        1.1  thorpej *****************************************************************************/
   3107        1.1  thorpej 
   3108        1.1  thorpej /****************************************************************************/
   3109        1.1  thorpej /*  Port Facts message and Reply                                            */
   3110        1.1  thorpej /****************************************************************************/
   3111        1.1  thorpej 
   3112        1.1  thorpej typedef struct _MSG_PORT_FACTS
   3113        1.1  thorpej {
   3114        1.1  thorpej      U8                     Reserved[2];                /* 00h */
   3115        1.1  thorpej      U8                     ChainOffset;                /* 02h */
   3116        1.1  thorpej      U8                     Function;                   /* 03h */
   3117        1.1  thorpej      U8                     Reserved1[2];               /* 04h */
   3118        1.1  thorpej      U8                     PortNumber;                 /* 06h */
   3119        1.1  thorpej      U8                     MsgFlags;                   /* 07h */
   3120        1.1  thorpej      U32                    MsgContext;                 /* 08h */
   3121        1.1  thorpej } MSG_PORT_FACTS, MPI_POINTER PTR_MSG_PORT_FACTS,
   3122        1.1  thorpej   PortFacts_t, MPI_POINTER pPortFacts_t;
   3123        1.1  thorpej 
   3124        1.1  thorpej typedef struct _MSG_PORT_FACTS_REPLY
   3125        1.1  thorpej {
   3126        1.1  thorpej      U16                    Reserved;                   /* 00h */
   3127        1.1  thorpej      U8                     MsgLength;                  /* 02h */
   3128        1.1  thorpej      U8                     Function;                   /* 03h */
   3129        1.1  thorpej      U16                    Reserved1;                  /* 04h */
   3130        1.1  thorpej      U8                     PortNumber;                 /* 06h */
   3131        1.1  thorpej      U8                     MsgFlags;                   /* 07h */
   3132        1.1  thorpej      U32                    MsgContext;                 /* 08h */
   3133        1.1  thorpej      U16                    Reserved2;                  /* 0Ch */
   3134        1.1  thorpej      U16                    IOCStatus;                  /* 0Eh */
   3135        1.1  thorpej      U32                    IOCLogInfo;                 /* 10h */
   3136        1.1  thorpej      U8                     Reserved3;                  /* 14h */
   3137        1.1  thorpej      U8                     PortType;                   /* 15h */
   3138        1.1  thorpej      U16                    MaxDevices;                 /* 16h */
   3139        1.1  thorpej      U16                    PortSCSIID;                 /* 18h */
   3140        1.1  thorpej      U16                    ProtocolFlags;              /* 1Ah */
   3141        1.1  thorpej      U16                    MaxPostedCmdBuffers;        /* 1Ch */
   3142        1.1  thorpej      U16                    MaxPersistentIDs;           /* 1Eh */
   3143        1.1  thorpej      U16                    MaxLanBuckets;              /* 20h */
   3144        1.1  thorpej      U16                    Reserved4;                  /* 22h */
   3145        1.1  thorpej      U32                    Reserved5;                  /* 24h */
   3146        1.1  thorpej } MSG_PORT_FACTS_REPLY, MPI_POINTER PTR_MSG_PORT_FACTS_REPLY,
   3147        1.1  thorpej   PortFactsReply_t, MPI_POINTER pPortFactsReply_t;
   3148        1.1  thorpej 
   3149        1.1  thorpej 
   3150        1.1  thorpej /* PortTypes values */
   3151        1.1  thorpej 
   3152        1.1  thorpej #define MPI_PORTFACTS_PORTTYPE_INACTIVE         (0x00)
   3153        1.1  thorpej #define MPI_PORTFACTS_PORTTYPE_SCSI             (0x01)
   3154        1.1  thorpej #define MPI_PORTFACTS_PORTTYPE_FC               (0x10)
   3155        1.3     tron #define	MPI_PORTFACTS_PORTTYPE_ISCSI		(0x20)
   3156        1.3     tron #define	MPI_PORTFACTS_PORTTYPE_SAS		(0x30)
   3157        1.1  thorpej 
   3158        1.1  thorpej /* ProtocolFlags values */
   3159        1.1  thorpej 
   3160        1.1  thorpej #define MPI_PORTFACTS_PROTOCOL_LOGBUSADDR       (0x01)
   3161        1.1  thorpej #define MPI_PORTFACTS_PROTOCOL_LAN              (0x02)
   3162        1.1  thorpej #define MPI_PORTFACTS_PROTOCOL_TARGET           (0x04)
   3163        1.1  thorpej #define MPI_PORTFACTS_PROTOCOL_INITIATOR        (0x08)
   3164        1.1  thorpej 
   3165        1.1  thorpej 
   3166        1.1  thorpej /****************************************************************************/
   3167        1.1  thorpej /*  Port Enable Message                                                     */
   3168        1.1  thorpej /****************************************************************************/
   3169        1.1  thorpej 
   3170        1.1  thorpej typedef struct _MSG_PORT_ENABLE
   3171        1.1  thorpej {
   3172        1.1  thorpej     U8                      Reserved[2];                /* 00h */
   3173        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   3174        1.1  thorpej     U8                      Function;                   /* 03h */
   3175        1.1  thorpej     U8                      Reserved1[2];               /* 04h */
   3176        1.1  thorpej     U8                      PortNumber;                 /* 06h */
   3177        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3178        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3179        1.1  thorpej } MSG_PORT_ENABLE, MPI_POINTER PTR_MSG_PORT_ENABLE,
   3180        1.1  thorpej   PortEnable_t, MPI_POINTER pPortEnable_t;
   3181        1.1  thorpej 
   3182        1.1  thorpej typedef struct _MSG_PORT_ENABLE_REPLY
   3183        1.1  thorpej {
   3184        1.1  thorpej     U8                      Reserved[2];                /* 00h */
   3185        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   3186        1.1  thorpej     U8                      Function;                   /* 03h */
   3187        1.1  thorpej     U8                      Reserved1[2];               /* 04h */
   3188        1.1  thorpej     U8                      PortNumber;                 /* 05h */
   3189        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3190        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3191        1.1  thorpej     U16                     Reserved2;                  /* 0Ch */
   3192        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   3193        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   3194        1.1  thorpej } MSG_PORT_ENABLE_REPLY, MPI_POINTER PTR_MSG_PORT_ENABLE_REPLY,
   3195        1.1  thorpej   PortEnableReply_t, MPI_POINTER pPortEnableReply_t;
   3196        1.1  thorpej 
   3197        1.1  thorpej 
   3198        1.1  thorpej /*****************************************************************************
   3199        1.1  thorpej *
   3200        1.1  thorpej *               E v e n t    M e s s a g e s
   3201        1.1  thorpej *
   3202        1.1  thorpej *****************************************************************************/
   3203        1.1  thorpej 
   3204        1.1  thorpej /****************************************************************************/
   3205        1.1  thorpej /*  Event Notification messages                                             */
   3206        1.1  thorpej /****************************************************************************/
   3207        1.1  thorpej 
   3208        1.1  thorpej typedef struct _MSG_EVENT_NOTIFY
   3209        1.1  thorpej {
   3210        1.1  thorpej     U8                      Switch;                     /* 00h */
   3211        1.1  thorpej     U8                      Reserved;                   /* 01h */
   3212        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   3213        1.1  thorpej     U8                      Function;                   /* 03h */
   3214        1.1  thorpej     U8                      Reserved1[3];               /* 04h */
   3215        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3216        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3217        1.1  thorpej } MSG_EVENT_NOTIFY, MPI_POINTER PTR_MSG_EVENT_NOTIFY,
   3218        1.1  thorpej   EventNotification_t, MPI_POINTER pEventNotification_t;
   3219        1.1  thorpej 
   3220        1.1  thorpej /* Event Notification Reply */
   3221        1.1  thorpej 
   3222        1.1  thorpej typedef struct _MSG_EVENT_NOTIFY_REPLY
   3223        1.1  thorpej {
   3224        1.1  thorpej      U16                    EventDataLength;            /* 00h */
   3225        1.1  thorpej      U8                     MsgLength;                  /* 02h */
   3226        1.1  thorpej      U8                     Function;                   /* 03h */
   3227        1.1  thorpej      U8                     Reserved1[2];               /* 04h */
   3228        1.1  thorpej      U8                     AckRequired;                /* 06h */
   3229        1.1  thorpej      U8                     MsgFlags;                   /* 07h */
   3230        1.1  thorpej      U32                    MsgContext;                 /* 08h */
   3231        1.1  thorpej      U8                     Reserved2[2];               /* 0Ch */
   3232        1.1  thorpej      U16                    IOCStatus;                  /* 0Eh */
   3233        1.1  thorpej      U32                    IOCLogInfo;                 /* 10h */
   3234        1.1  thorpej      U32                    Event;                      /* 14h */
   3235        1.1  thorpej      U32                    EventContext;               /* 18h */
   3236        1.1  thorpej      U32                    Data[1];                    /* 1Ch */
   3237        1.1  thorpej } MSG_EVENT_NOTIFY_REPLY, MPI_POINTER PTR_MSG_EVENT_NOTIFY_REPLY,
   3238        1.1  thorpej   EventNotificationReply_t, MPI_POINTER pEventNotificationReply_t;
   3239        1.1  thorpej 
   3240        1.1  thorpej /* Event Acknowledge */
   3241        1.1  thorpej 
   3242        1.1  thorpej typedef struct _MSG_EVENT_ACK
   3243        1.1  thorpej {
   3244        1.1  thorpej     U8                      Reserved[2];                /* 00h */
   3245        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   3246        1.1  thorpej     U8                      Function;                   /* 03h */
   3247        1.1  thorpej     U8                      Reserved1[3];               /* 04h */
   3248        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3249        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3250        1.1  thorpej     U32                     Event;                      /* 0Ch */
   3251        1.1  thorpej     U32                     EventContext;               /* 10h */
   3252        1.1  thorpej } MSG_EVENT_ACK, MPI_POINTER PTR_MSG_EVENT_ACK,
   3253        1.1  thorpej   EventAck_t, MPI_POINTER pEventAck_t;
   3254        1.1  thorpej 
   3255        1.1  thorpej typedef struct _MSG_EVENT_ACK_REPLY
   3256        1.1  thorpej {
   3257        1.1  thorpej     U8                      Reserved[2];                /* 00h */
   3258        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   3259        1.1  thorpej     U8                      Function;                   /* 03h */
   3260        1.1  thorpej     U8                      Reserved1[3];               /* 04h */
   3261        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3262        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3263        1.1  thorpej     U16                     Reserved2;                  /* 0Ch */
   3264        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   3265        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   3266        1.1  thorpej } MSG_EVENT_ACK_REPLY, MPI_POINTER PTR_MSG_EVENT_ACK_REPLY,
   3267        1.1  thorpej   EventAckReply_t, MPI_POINTER pEventAckReply_t;
   3268        1.1  thorpej 
   3269        1.1  thorpej /* Switch */
   3270        1.1  thorpej 
   3271        1.1  thorpej #define MPI_EVENT_NOTIFICATION_SWITCH_OFF   (0x00)
   3272        1.1  thorpej #define MPI_EVENT_NOTIFICATION_SWITCH_ON    (0x01)
   3273        1.1  thorpej 
   3274        1.1  thorpej /* Event */
   3275        1.1  thorpej 
   3276        1.1  thorpej #define MPI_EVENT_NONE                      (0x00000000)
   3277        1.1  thorpej #define MPI_EVENT_LOG_DATA                  (0x00000001)
   3278        1.1  thorpej #define MPI_EVENT_STATE_CHANGE              (0x00000002)
   3279        1.1  thorpej #define MPI_EVENT_UNIT_ATTENTION            (0x00000003)
   3280        1.1  thorpej #define MPI_EVENT_IOC_BUS_RESET             (0x00000004)
   3281        1.1  thorpej #define MPI_EVENT_EXT_BUS_RESET             (0x00000005)
   3282        1.1  thorpej #define MPI_EVENT_RESCAN                    (0x00000006)
   3283        1.1  thorpej #define MPI_EVENT_LINK_STATUS_CHANGE        (0x00000007)
   3284        1.1  thorpej #define MPI_EVENT_LOOP_STATE_CHANGE         (0x00000008)
   3285        1.1  thorpej #define MPI_EVENT_LOGOUT                    (0x00000009)
   3286        1.1  thorpej #define MPI_EVENT_EVENT_CHANGE              (0x0000000A)
   3287        1.1  thorpej #define MPI_EVENT_INTEGRATED_RAID           (0x0000000B)
   3288        1.1  thorpej #define MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE (0x0000000C)
   3289        1.1  thorpej #define MPI_EVENT_ON_BUS_TIMER_EXPIRED      (0x0000000D)
   3290        1.3     tron #define	MPI_EVENT_QUEUE_FULL                (0x0000000E)
   3291        1.3     tron #define	MPI_EVENT_SAS_DEVICE_STATUS_CHANGE  (0x0000000F)
   3292        1.3     tron #define	MPI_EVENT_SAS_SES                   (0x00000010)
   3293        1.3     tron #define	MPI_EVENT_PERSISTENT_TABLE_FULL     (0x00000011)
   3294        1.3     tron #define MPI_EVENT_SAS_PHY_LINK_STATUS       (0x00000012)
   3295        1.3     tron #define MPI_EVENT_SAS_DISCOVERY_ERROR       (0x00000013)
   3296        1.3     tron #define MPI_EVENT_IR_RESYNC_UPDATE          (0x00000014)
   3297        1.3     tron #define MPI_EVENT_IR2                       (0x00000015)
   3298        1.3     tron #define	MPI_EVENT_SAS_DISCOVERY		    (0x00000016)
   3299        1.1  thorpej 
   3300        1.1  thorpej /* AckRequired field values */
   3301        1.1  thorpej 
   3302        1.1  thorpej #define MPI_EVENT_NOTIFICATION_ACK_NOT_REQUIRED (0x00)
   3303        1.1  thorpej #define MPI_EVENT_NOTIFICATION_ACK_REQUIRED     (0x01)
   3304        1.1  thorpej 
   3305        1.1  thorpej /* EventChange Event data */
   3306        1.1  thorpej 
   3307        1.1  thorpej typedef struct _EVENT_DATA_EVENT_CHANGE
   3308        1.1  thorpej {
   3309        1.1  thorpej     U8                      EventState;                 /* 00h */
   3310        1.1  thorpej     U8                      Reserved;                   /* 01h */
   3311        1.1  thorpej     U16                     Reserved1;                  /* 02h */
   3312        1.1  thorpej } EVENT_DATA_EVENT_CHANGE, MPI_POINTER PTR_EVENT_DATA_EVENT_CHANGE,
   3313        1.1  thorpej   EventDataEventChange_t, MPI_POINTER pEventDataEventChange_t;
   3314        1.1  thorpej 
   3315        1.1  thorpej /* SCSI Event data for Port, Bus and Device forms */
   3316        1.1  thorpej 
   3317        1.1  thorpej typedef struct _EVENT_DATA_SCSI
   3318        1.1  thorpej {
   3319        1.1  thorpej     U8                      TargetID;                   /* 00h */
   3320        1.1  thorpej     U8                      BusPort;                    /* 01h */
   3321        1.1  thorpej     U16                     Reserved;                   /* 02h */
   3322        1.1  thorpej } EVENT_DATA_SCSI, MPI_POINTER PTR_EVENT_DATA_SCSI,
   3323        1.1  thorpej   EventDataScsi_t, MPI_POINTER pEventDataScsi_t;
   3324        1.1  thorpej 
   3325        1.1  thorpej /* SCSI Device Status Change Event data */
   3326        1.1  thorpej 
   3327        1.1  thorpej typedef struct _EVENT_DATA_SCSI_DEVICE_STATUS_CHANGE
   3328        1.1  thorpej {
   3329        1.1  thorpej     U8                      TargetID;                   /* 00h */
   3330        1.1  thorpej     U8                      Bus;                        /* 01h */
   3331        1.1  thorpej     U8                      ReasonCode;                 /* 02h */
   3332        1.1  thorpej     U8                      LUN;                        /* 03h */
   3333        1.1  thorpej     U8                      ASC;                        /* 04h */
   3334        1.1  thorpej     U8                      ASCQ;                       /* 05h */
   3335        1.1  thorpej     U16                     Reserved;                   /* 06h */
   3336        1.1  thorpej } EVENT_DATA_SCSI_DEVICE_STATUS_CHANGE,
   3337        1.1  thorpej   MPI_POINTER PTR_EVENT_DATA_SCSI_DEVICE_STATUS_CHANGE,
   3338        1.1  thorpej   MpiEventDataScsiDeviceStatusChange_t,
   3339        1.1  thorpej   MPI_POINTER pMpiEventDataScsiDeviceStatusChange_t;
   3340        1.1  thorpej 
   3341        1.1  thorpej /* MPI SCSI Device Status Change Event data ReasonCode values */
   3342        1.1  thorpej #define MPI_EVENT_SCSI_DEV_STAT_RC_ADDED                (0x03)
   3343        1.1  thorpej #define MPI_EVENT_SCSI_DEV_STAT_RC_NOT_RESPONDING       (0x04)
   3344        1.1  thorpej #define MPI_EVENT_SCSI_DEV_STAT_RC_SMART_DATA           (0x05)
   3345        1.1  thorpej 
   3346        1.1  thorpej /* MPI Link Status Change Event data */
   3347        1.1  thorpej 
   3348        1.1  thorpej typedef struct _EVENT_DATA_LINK_STATUS
   3349        1.1  thorpej {
   3350        1.1  thorpej     U8                      State;                      /* 00h */
   3351        1.1  thorpej     U8                      Reserved;                   /* 01h */
   3352        1.1  thorpej     U16                     Reserved1;                  /* 02h */
   3353        1.1  thorpej     U8                      Reserved2;                  /* 04h */
   3354        1.1  thorpej     U8                      Port;                       /* 05h */
   3355        1.1  thorpej     U16                     Reserved3;                  /* 06h */
   3356        1.1  thorpej } EVENT_DATA_LINK_STATUS, MPI_POINTER PTR_EVENT_DATA_LINK_STATUS,
   3357        1.1  thorpej   EventDataLinkStatus_t, MPI_POINTER pEventDataLinkStatus_t;
   3358        1.1  thorpej 
   3359        1.1  thorpej #define MPI_EVENT_LINK_STATUS_FAILURE       (0x00000000)
   3360        1.1  thorpej #define MPI_EVENT_LINK_STATUS_ACTIVE        (0x00000001)
   3361        1.1  thorpej 
   3362        1.1  thorpej /* MPI Loop State Change Event data */
   3363        1.1  thorpej 
   3364        1.1  thorpej typedef struct _EVENT_DATA_LOOP_STATE
   3365        1.1  thorpej {
   3366        1.1  thorpej     U8                      Character4;                 /* 00h */
   3367        1.1  thorpej     U8                      Character3;                 /* 01h */
   3368        1.1  thorpej     U8                      Type;                       /* 02h */
   3369        1.1  thorpej     U8                      Reserved;                   /* 03h */
   3370        1.1  thorpej     U8                      Reserved1;                  /* 04h */
   3371        1.1  thorpej     U8                      Port;                       /* 05h */
   3372        1.1  thorpej     U16                     Reserved2;                  /* 06h */
   3373        1.1  thorpej } EVENT_DATA_LOOP_STATE, MPI_POINTER PTR_EVENT_DATA_LOOP_STATE,
   3374        1.1  thorpej   EventDataLoopState_t, MPI_POINTER pEventDataLoopState_t;
   3375        1.1  thorpej 
   3376        1.1  thorpej #define MPI_EVENT_LOOP_STATE_CHANGE_LIP     (0x0001)
   3377        1.1  thorpej #define MPI_EVENT_LOOP_STATE_CHANGE_LPE     (0x0002)
   3378        1.1  thorpej #define MPI_EVENT_LOOP_STATE_CHANGE_LPB     (0x0003)
   3379        1.1  thorpej 
   3380        1.1  thorpej /* MPI LOGOUT Event data */
   3381        1.1  thorpej 
   3382        1.1  thorpej typedef struct _EVENT_DATA_LOGOUT
   3383        1.1  thorpej {
   3384        1.1  thorpej     U32                     NPortID;                    /* 00h */
   3385        1.1  thorpej     U8                      Reserved;                   /* 04h */
   3386        1.1  thorpej     U8                      Port;                       /* 05h */
   3387        1.1  thorpej     U16                     Reserved1;                  /* 06h */
   3388        1.1  thorpej } EVENT_DATA_LOGOUT, MPI_POINTER PTR_EVENT_DATA_LOGOUT,
   3389        1.1  thorpej   EventDataLogout_t, MPI_POINTER pEventDataLogout_t;
   3390        1.1  thorpej 
   3391        1.1  thorpej /* MPI Integrated RAID Event data */
   3392        1.1  thorpej 
   3393        1.1  thorpej typedef struct _EVENT_DATA_RAID
   3394        1.1  thorpej {
   3395        1.1  thorpej     U8                      VolumeID;                   /* 00h */
   3396        1.1  thorpej     U8                      VolumeBus;                  /* 01h */
   3397        1.1  thorpej     U8                      ReasonCode;                 /* 02h */
   3398        1.1  thorpej     U8                      PhysDiskNum;                /* 03h */
   3399        1.1  thorpej     U8                      ASC;                        /* 04h */
   3400        1.1  thorpej     U8                      ASCQ;                       /* 05h */
   3401        1.1  thorpej     U16                     Reserved;                   /* 06h */
   3402        1.1  thorpej     U32                     SettingsStatus;             /* 08h */
   3403        1.1  thorpej } EVENT_DATA_RAID, MPI_POINTER PTR_EVENT_DATA_RAID,
   3404        1.1  thorpej   MpiEventDataRaid_t, MPI_POINTER pMpiEventDataRaid_t;
   3405        1.1  thorpej 
   3406        1.1  thorpej /* MPI Integrated RAID Event data ReasonCode values */
   3407        1.1  thorpej #define MPI_EVENT_RAID_RC_VOLUME_CREATED                (0x00)
   3408        1.1  thorpej #define MPI_EVENT_RAID_RC_VOLUME_DELETED                (0x01)
   3409        1.1  thorpej #define MPI_EVENT_RAID_RC_VOLUME_SETTINGS_CHANGED       (0x02)
   3410        1.1  thorpej #define MPI_EVENT_RAID_RC_VOLUME_STATUS_CHANGED         (0x03)
   3411        1.1  thorpej #define MPI_EVENT_RAID_RC_VOLUME_PHYSDISK_CHANGED       (0x04)
   3412        1.1  thorpej #define MPI_EVENT_RAID_RC_PHYSDISK_CREATED              (0x05)
   3413        1.1  thorpej #define MPI_EVENT_RAID_RC_PHYSDISK_DELETED              (0x06)
   3414        1.1  thorpej #define MPI_EVENT_RAID_RC_PHYSDISK_SETTINGS_CHANGED     (0x07)
   3415        1.1  thorpej #define MPI_EVENT_RAID_RC_PHYSDISK_STATUS_CHANGED       (0x08)
   3416        1.1  thorpej #define MPI_EVENT_RAID_RC_DOMAIN_VAL_NEEDED             (0x09)
   3417        1.1  thorpej #define MPI_EVENT_RAID_RC_SMART_DATA                    (0x0A)
   3418        1.1  thorpej #define MPI_EVENT_RAID_RC_REPLACE_ACTION_STARTED        (0x0B)
   3419        1.1  thorpej 
   3420        1.3     tron /* MPI SAS Phy Link Event data */
   3421        1.3     tron 
   3422        1.3     tron typedef struct _EVENT_DATA_SAS_PHY_LINK_STATUS
   3423        1.3     tron {
   3424        1.3     tron     U8                      PhyNum;                     /* 00h */
   3425        1.3     tron     U8                      LinkRates;                  /* 01h */
   3426        1.3     tron     U16                     DevHandle;                  /* 02h */
   3427        1.3     tron     U64                     SASAddress;                 /* 04h */
   3428        1.3     tron } EVENT_DATA_SAS_PHY_LINK_STATUS,
   3429        1.3     tron   MPI_POINTER PTR_EVENT_DATA_SAS_PHY_LINK_STATUS,
   3430        1.3     tron   EventDataSASPhyLinkStatus_t, MPI_POINTER pEventDataSASPhyLinkStatus_t;
   3431        1.3     tron 
   3432        1.3     tron #define MPI_EVENT_SAS_PLS_LR_CURRENT_MASK               (0xF0)
   3433        1.3     tron #define MPI_EVENT_SAS_PLS_LR_CURRENT_SHIFT              (4)
   3434        1.3     tron #define MPI_EVENT_SAS_PLS_LR_PREVIOUS_MASK              (0x0F)
   3435        1.3     tron #define MPI_EVENT_SAS_PLS_LR_PREVIOUS_SHIFT             (0)
   3436        1.3     tron #define MPI_EVENT_SAS_PLS_LR_RATE_UNKNOWN               (0x00)
   3437        1.3     tron #define MPI_EVENT_SAS_PLS_LR_RATE_PHY_DISABLED          (0x01)
   3438        1.3     tron #define MPI_EVENT_SAS_PLS_LR_RATE_FAILED_SPEED_NEG      (0x02)
   3439        1.3     tron #define MPI_EVENT_SAS_PLS_LR_RATE_SATA_OOB_COMPLETE     (0x03)
   3440        1.3     tron #define MPI_EVENT_SAS_PLS_LR_RATE_1_5                   (0x08)
   3441        1.3     tron #define MPI_EVENT_SAS_PLS_LR_RATE_3_0                   (0x09)
   3442        1.1  thorpej 
   3443        1.1  thorpej /*****************************************************************************
   3444        1.1  thorpej *
   3445        1.1  thorpej *               F i r m w a r e    L o a d    M e s s a g e s
   3446        1.1  thorpej *
   3447        1.1  thorpej *****************************************************************************/
   3448        1.1  thorpej 
   3449        1.1  thorpej /****************************************************************************/
   3450        1.1  thorpej /*  Firmware Download message and associated structures                     */
   3451        1.1  thorpej /****************************************************************************/
   3452        1.1  thorpej 
   3453        1.1  thorpej typedef struct _MSG_FW_DOWNLOAD
   3454        1.1  thorpej {
   3455        1.1  thorpej     U8                      ImageType;                  /* 00h */
   3456        1.1  thorpej     U8                      Reserved;                   /* 01h */
   3457        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   3458        1.1  thorpej     U8                      Function;                   /* 03h */
   3459        1.1  thorpej     U8                      Reserved1[3];               /* 04h */
   3460        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3461        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3462        1.1  thorpej     SGE_MPI_UNION           SGL;                        /* 0Ch */
   3463        1.1  thorpej } MSG_FW_DOWNLOAD, MPI_POINTER PTR_MSG_FW_DOWNLOAD,
   3464        1.1  thorpej   FWDownload_t, MPI_POINTER pFWDownload_t;
   3465        1.1  thorpej 
   3466        1.1  thorpej #define MPI_FW_DOWNLOAD_ITYPE_RESERVED      (0x00)
   3467        1.1  thorpej #define MPI_FW_DOWNLOAD_ITYPE_FW            (0x01)
   3468        1.1  thorpej #define MPI_FW_DOWNLOAD_ITYPE_BIOS          (0x02)
   3469        1.1  thorpej #define MPI_FW_DOWNLOAD_ITYPE_NVDATA        (0x03)
   3470        1.1  thorpej 
   3471        1.1  thorpej 
   3472        1.1  thorpej typedef struct _FWDownloadTCSGE
   3473        1.1  thorpej {
   3474        1.1  thorpej     U8                      Reserved;                   /* 00h */
   3475        1.1  thorpej     U8                      ContextSize;                /* 01h */
   3476        1.1  thorpej     U8                      DetailsLength;              /* 02h */
   3477        1.1  thorpej     U8                      Flags;                      /* 03h */
   3478        1.1  thorpej     U32                     Reserved_0100_Checksum;     /* 04h */ /* obsolete Checksum */
   3479        1.1  thorpej     U32                     ImageOffset;                /* 08h */
   3480        1.1  thorpej     U32                     ImageSize;                  /* 0Ch */
   3481        1.1  thorpej } FW_DOWNLOAD_TCSGE, MPI_POINTER PTR_FW_DOWNLOAD_TCSGE,
   3482        1.1  thorpej   FWDownloadTCSGE_t, MPI_POINTER pFWDownloadTCSGE_t;
   3483        1.1  thorpej 
   3484        1.1  thorpej /* Firmware Download reply */
   3485        1.1  thorpej typedef struct _MSG_FW_DOWNLOAD_REPLY
   3486        1.1  thorpej {
   3487        1.1  thorpej     U8                      ImageType;                  /* 00h */
   3488        1.1  thorpej     U8                      Reserved;                   /* 01h */
   3489        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   3490        1.1  thorpej     U8                      Function;                   /* 03h */
   3491        1.1  thorpej     U8                      Reserved1[3];               /* 04h */
   3492        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3493        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3494        1.1  thorpej     U16                     Reserved2;                  /* 0Ch */
   3495        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   3496        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   3497        1.1  thorpej } MSG_FW_DOWNLOAD_REPLY, MPI_POINTER PTR_MSG_FW_DOWNLOAD_REPLY,
   3498        1.1  thorpej   FWDownloadReply_t, MPI_POINTER pFWDownloadReply_t;
   3499        1.1  thorpej 
   3500        1.1  thorpej 
   3501        1.1  thorpej /****************************************************************************/
   3502        1.1  thorpej /*  Firmware Upload message and associated structures                       */
   3503        1.1  thorpej /****************************************************************************/
   3504        1.1  thorpej 
   3505        1.1  thorpej typedef struct _MSG_FW_UPLOAD
   3506        1.1  thorpej {
   3507        1.1  thorpej     U8                      ImageType;                  /* 00h */
   3508        1.1  thorpej     U8                      Reserved;                   /* 01h */
   3509        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   3510        1.1  thorpej     U8                      Function;                   /* 03h */
   3511        1.1  thorpej     U8                      Reserved1[3];               /* 04h */
   3512        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3513        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3514        1.1  thorpej     SGE_MPI_UNION           SGL;                        /* 0Ch */
   3515        1.1  thorpej } MSG_FW_UPLOAD, MPI_POINTER PTR_MSG_FW_UPLOAD,
   3516        1.1  thorpej   FWUpload_t, MPI_POINTER pFWUpload_t;
   3517        1.1  thorpej 
   3518        1.1  thorpej #define MPI_FW_UPLOAD_ITYPE_FW_IOC_MEM      (0x00)
   3519        1.1  thorpej #define MPI_FW_UPLOAD_ITYPE_FW_FLASH        (0x01)
   3520        1.1  thorpej #define MPI_FW_UPLOAD_ITYPE_BIOS_FLASH      (0x02)
   3521        1.1  thorpej #define MPI_FW_UPLOAD_ITYPE_NVDATA          (0x03)
   3522        1.1  thorpej 
   3523        1.1  thorpej typedef struct _FWUploadTCSGE
   3524        1.1  thorpej {
   3525        1.1  thorpej     U8                      Reserved;                   /* 00h */
   3526        1.1  thorpej     U8                      ContextSize;                /* 01h */
   3527        1.1  thorpej     U8                      DetailsLength;              /* 02h */
   3528        1.1  thorpej     U8                      Flags;                      /* 03h */
   3529        1.1  thorpej     U32                     Reserved1;                  /* 04h */
   3530        1.1  thorpej     U32                     ImageOffset;                /* 08h */
   3531        1.1  thorpej     U32                     ImageSize;                  /* 0Ch */
   3532        1.1  thorpej } FW_UPLOAD_TCSGE, MPI_POINTER PTR_FW_UPLOAD_TCSGE,
   3533        1.1  thorpej   FWUploadTCSGE_t, MPI_POINTER pFWUploadTCSGE_t;
   3534        1.1  thorpej 
   3535        1.1  thorpej /* Firmware Upload reply */
   3536        1.1  thorpej typedef struct _MSG_FW_UPLOAD_REPLY
   3537        1.1  thorpej {
   3538        1.1  thorpej     U8                      ImageType;                  /* 00h */
   3539        1.1  thorpej     U8                      Reserved;                   /* 01h */
   3540        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   3541        1.1  thorpej     U8                      Function;                   /* 03h */
   3542        1.1  thorpej     U8                      Reserved1[3];               /* 04h */
   3543        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3544        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3545        1.1  thorpej     U16                     Reserved2;                  /* 0Ch */
   3546        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   3547        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   3548        1.1  thorpej     U32                     ActualImageSize;            /* 14h */
   3549        1.1  thorpej } MSG_FW_UPLOAD_REPLY, MPI_POINTER PTR_MSG_FW_UPLOAD_REPLY,
   3550        1.1  thorpej   FWUploadReply_t, MPI_POINTER pFWUploadReply_t;
   3551        1.1  thorpej 
   3552        1.1  thorpej 
   3553        1.1  thorpej typedef struct _MPI_FW_HEADER
   3554        1.1  thorpej {
   3555        1.1  thorpej     U32                     ArmBranchInstruction0;      /* 00h */
   3556        1.1  thorpej     U32                     Signature0;                 /* 04h */
   3557        1.1  thorpej     U32                     Signature1;                 /* 08h */
   3558        1.1  thorpej     U32                     Signature2;                 /* 0Ch */
   3559        1.1  thorpej     U32                     ArmBranchInstruction1;      /* 10h */
   3560        1.1  thorpej     U32                     ArmBranchInstruction2;      /* 14h */
   3561        1.1  thorpej     U32                     Reserved;                   /* 18h */
   3562        1.1  thorpej     U32                     Checksum;                   /* 1Ch */
   3563        1.1  thorpej     U16                     VendorId;                   /* 20h */
   3564        1.1  thorpej     U16                     ProductId;                  /* 22h */
   3565        1.1  thorpej     MPI_FW_VERSION          FWVersion;                  /* 24h */
   3566        1.1  thorpej     U32                     SeqCodeVersion;             /* 28h */
   3567        1.1  thorpej     U32                     ImageSize;                  /* 2Ch */
   3568        1.1  thorpej     U32                     NextImageHeaderOffset;      /* 30h */
   3569        1.1  thorpej     U32                     LoadStartAddress;           /* 34h */
   3570        1.1  thorpej     U32                     IopResetVectorValue;        /* 38h */
   3571        1.1  thorpej     U32                     IopResetRegAddr;            /* 3Ch */
   3572        1.1  thorpej     U32                     VersionNameWhat;            /* 40h */
   3573        1.1  thorpej     U8                      VersionName[32];            /* 44h */
   3574        1.1  thorpej     U32                     VendorNameWhat;             /* 64h */
   3575        1.1  thorpej     U8                      VendorName[32];             /* 68h */
   3576        1.1  thorpej } MPI_FW_HEADER, MPI_POINTER PTR_MPI_FW_HEADER,
   3577        1.1  thorpej   MpiFwHeader_t, MPI_POINTER pMpiFwHeader_t;
   3578        1.1  thorpej 
   3579        1.1  thorpej #define MPI_FW_HEADER_WHAT_SIGNATURE        (0x29232840)
   3580        1.1  thorpej 
   3581        1.1  thorpej /* defines for using the ProductId field */
   3582        1.1  thorpej #define MPI_FW_HEADER_PID_TYPE_MASK             (0xF000)
   3583        1.1  thorpej #define MPI_FW_HEADER_PID_TYPE_SCSI             (0x0000)
   3584        1.1  thorpej #define MPI_FW_HEADER_PID_TYPE_FC               (0x1000)
   3585        1.1  thorpej 
   3586        1.1  thorpej #define MPI_FW_HEADER_PID_PROD_MASK                     (0x0F00)
   3587        1.1  thorpej #define MPI_FW_HEADER_PID_PROD_INITIATOR_SCSI           (0x0100)
   3588        1.1  thorpej #define MPI_FW_HEADER_PID_PROD_TARGET_INITIATOR_SCSI    (0x0200)
   3589        1.1  thorpej #define MPI_FW_HEADER_PID_PROD_TARGET_SCSI              (0x0300)
   3590        1.1  thorpej #define MPI_FW_HEADER_PID_PROD_IM_SCSI                  (0x0400)
   3591        1.1  thorpej #define MPI_FW_HEADER_PID_PROD_IS_SCSI                  (0x0500)
   3592        1.1  thorpej #define MPI_FW_HEADER_PID_PROD_CTX_SCSI                 (0x0600)
   3593        1.1  thorpej 
   3594        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_MASK           (0x00FF)
   3595        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1030A0_SCSI    (0x0001)
   3596        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1030B0_SCSI    (0x0002)
   3597        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1030B1_SCSI    (0x0003)
   3598        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1030C0_SCSI    (0x0004)
   3599        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1020A0_SCSI    (0x0005)
   3600        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1020B0_SCSI    (0x0006)
   3601        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1020B1_SCSI    (0x0007)
   3602        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1020C0_SCSI    (0x0008)
   3603        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1035A0_SCSI    (0x0009)
   3604        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_1035B0_SCSI    (0x000A)
   3605        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_909_FC         (0x0000)
   3606        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_919_FC         (0x0001)
   3607        1.1  thorpej #define MPI_FW_HEADER_PID_FAMILY_919X_FC        (0x0002)
   3608        1.1  thorpej 
   3609        1.1  thorpej typedef struct _MPI_EXT_IMAGE_HEADER
   3610        1.1  thorpej {
   3611        1.1  thorpej     U8                      ImageType;                  /* 00h */
   3612        1.1  thorpej     U8                      Reserved;                   /* 01h */
   3613        1.1  thorpej     U16                     Reserved1;                  /* 02h */
   3614        1.1  thorpej     U32                     Checksum;                   /* 04h */
   3615        1.1  thorpej     U32                     ImageSize;                  /* 08h */
   3616        1.1  thorpej     U32                     NextImageHeaderOffset;      /* 0Ch */
   3617        1.1  thorpej     U32                     LoadStartAddress;           /* 10h */
   3618        1.1  thorpej     U32                     Reserved2;                  /* 14h */
   3619        1.1  thorpej } MPI_EXT_IMAGE_HEADER, MPI_POINTER PTR_MPI_EXT_IMAGE_HEADER,
   3620        1.1  thorpej   MpiExtImageHeader_t, MPI_POINTER pMpiExtImageHeader_t;
   3621        1.1  thorpej 
   3622        1.1  thorpej /* defines for the ImageType field */
   3623        1.1  thorpej #define MPI_EXT_IMAGE_TYPE_UNSPECIFIED          (0x00)
   3624        1.1  thorpej #define MPI_EXT_IMAGE_TYPE_FW                   (0x01)
   3625        1.1  thorpej #define MPI_EXT_IMAGE_TYPE_NVDATA               (0x03)
   3626        1.1  thorpej 
   3627        1.1  thorpej #endif
   3628        1.1  thorpej 
   3629        1.1  thorpej /*
   3630        1.1  thorpej  * Copyright (c) 2000, 2001 by LSI Logic Corporation
   3631        1.1  thorpej  *
   3632        1.1  thorpej  * Redistribution and use in source and binary forms, with or without
   3633        1.1  thorpej  * modification, are permitted provided that the following conditions
   3634        1.1  thorpej  * are met:
   3635        1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
   3636        1.1  thorpej  *    notice immediately at the beginning of the file, without modification,
   3637        1.1  thorpej  *    this list of conditions, and the following disclaimer.
   3638        1.1  thorpej  * 2. The name of the author may not be used to endorse or promote products
   3639        1.1  thorpej  *    derived from this software without specific prior written permission.
   3640        1.1  thorpej  *
   3641        1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   3642        1.1  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   3643        1.1  thorpej  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   3644        1.1  thorpej  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
   3645        1.1  thorpej  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   3646        1.1  thorpej  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   3647        1.1  thorpej  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   3648        1.1  thorpej  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   3649        1.1  thorpej  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   3650        1.1  thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   3651        1.1  thorpej  * SUCH DAMAGE.
   3652        1.1  thorpej  *
   3653        1.1  thorpej  *
   3654        1.1  thorpej  *           Name:  MPI_LAN.H
   3655        1.1  thorpej  *          Title:  MPI LAN messages and structures
   3656        1.1  thorpej  *  Creation Date:  June 30, 2000
   3657        1.1  thorpej  *
   3658        1.1  thorpej  *    MPI Version:  01.02.01
   3659        1.1  thorpej  *
   3660        1.1  thorpej  *  Version History
   3661        1.1  thorpej  *  ---------------
   3662        1.1  thorpej  *
   3663        1.1  thorpej  *  Date      Version   Description
   3664        1.1  thorpej  *  --------  --------  ------------------------------------------------------
   3665        1.1  thorpej  *  05-08-00  00.10.01  Original release for 0.10 spec dated 4/26/2000.
   3666        1.1  thorpej  *  05-24-00  00.10.02  Added LANStatus field to _MSG_LAN_SEND_REPLY.
   3667        1.1  thorpej  *                      Added LANStatus field to _MSG_LAN_RECEIVE_POST_REPLY.
   3668        1.1  thorpej  *                      Moved ListCount field in _MSG_LAN_RECEIVE_POST_REPLY.
   3669        1.1  thorpej  *  06-06-00  01.00.01  Update version number for 1.0 release.
   3670        1.1  thorpej  *  06-12-00  01.00.02  Added MPI_ to BUCKETSTATUS_ definitions.
   3671        1.1  thorpej  *  06-22-00  01.00.03  Major changes to match new LAN definition in 1.0 spec.
   3672        1.1  thorpej  *  06-30-00  01.00.04  Added Context Reply definitions per revised proposal.
   3673        1.1  thorpej  *                      Changed transaction context usage to bucket/buffer.
   3674        1.1  thorpej  *  07-05-00  01.00.05  Removed LAN_RECEIVE_POST_BUCKET_CONTEXT_MASK definition
   3675        1.1  thorpej  *                      to lan private header file
   3676        1.1  thorpej  *  11-02-00  01.01.01  Original release for post 1.0 work
   3677        1.1  thorpej  *  02-20-01  01.01.02  Started using MPI_POINTER.
   3678        1.1  thorpej  *  03-27-01  01.01.03  Added structure offset comments.
   3679        1.1  thorpej  *  08-08-01  01.02.01  Original release for v1.2 work.
   3680        1.1  thorpej  *  --------------------------------------------------------------------------
   3681        1.1  thorpej  */
   3682        1.1  thorpej 
   3683        1.1  thorpej #ifndef MPI_LAN_H
   3684        1.1  thorpej #define MPI_LAN_H
   3685        1.1  thorpej 
   3686        1.1  thorpej 
   3687        1.1  thorpej /******************************************************************************
   3688        1.1  thorpej *
   3689        1.1  thorpej *               L A N    M e s s a g e s
   3690        1.1  thorpej *
   3691        1.1  thorpej *******************************************************************************/
   3692        1.1  thorpej 
   3693        1.1  thorpej /* LANSend messages */
   3694        1.1  thorpej 
   3695        1.1  thorpej typedef struct _MSG_LAN_SEND_REQUEST
   3696        1.1  thorpej {
   3697        1.1  thorpej     U16                     Reserved;           /* 00h */
   3698        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   3699        1.1  thorpej     U8                      Function;           /* 03h */
   3700        1.1  thorpej     U16                     Reserved2;          /* 04h */
   3701        1.1  thorpej     U8                      PortNumber;         /* 06h */
   3702        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   3703        1.1  thorpej     U32                     MsgContext;         /* 08h */
   3704        1.1  thorpej     SGE_MPI_UNION           SG_List[1];         /* 0Ch */
   3705        1.1  thorpej } MSG_LAN_SEND_REQUEST, MPI_POINTER PTR_MSG_LAN_SEND_REQUEST,
   3706        1.1  thorpej   LANSendRequest_t, MPI_POINTER pLANSendRequest_t;
   3707        1.1  thorpej 
   3708        1.1  thorpej 
   3709        1.1  thorpej typedef struct _MSG_LAN_SEND_REPLY
   3710        1.1  thorpej {
   3711        1.1  thorpej     U16                     Reserved;           /* 00h */
   3712        1.1  thorpej     U8                      MsgLength;          /* 02h */
   3713        1.1  thorpej     U8                      Function;           /* 03h */
   3714        1.1  thorpej     U8                      Reserved2;          /* 04h */
   3715        1.1  thorpej     U8                      NumberOfContexts;   /* 05h */
   3716        1.1  thorpej     U8                      PortNumber;         /* 06h */
   3717        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   3718        1.1  thorpej     U32                     MsgContext;         /* 08h */
   3719        1.1  thorpej     U16                     Reserved3;          /* 0Ch */
   3720        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   3721        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   3722        1.1  thorpej     U32                     BufferContext;      /* 14h */
   3723        1.1  thorpej } MSG_LAN_SEND_REPLY, MPI_POINTER PTR_MSG_LAN_SEND_REPLY,
   3724        1.1  thorpej   LANSendReply_t, MPI_POINTER pLANSendReply_t;
   3725        1.1  thorpej 
   3726        1.1  thorpej 
   3727        1.1  thorpej /* LANReceivePost */
   3728        1.1  thorpej 
   3729        1.1  thorpej typedef struct _MSG_LAN_RECEIVE_POST_REQUEST
   3730        1.1  thorpej {
   3731        1.1  thorpej     U16                     Reserved;           /* 00h */
   3732        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   3733        1.1  thorpej     U8                      Function;           /* 03h */
   3734        1.1  thorpej     U16                     Reserved2;          /* 04h */
   3735        1.1  thorpej     U8                      PortNumber;         /* 06h */
   3736        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   3737        1.1  thorpej     U32                     MsgContext;         /* 08h */
   3738        1.1  thorpej     U32                     BucketCount;        /* 0Ch */
   3739        1.1  thorpej     SGE_MPI_UNION           SG_List[1];         /* 10h */
   3740        1.1  thorpej } MSG_LAN_RECEIVE_POST_REQUEST, MPI_POINTER PTR_MSG_LAN_RECEIVE_POST_REQUEST,
   3741        1.1  thorpej   LANReceivePostRequest_t, MPI_POINTER pLANReceivePostRequest_t;
   3742        1.1  thorpej 
   3743        1.1  thorpej 
   3744        1.1  thorpej typedef struct _MSG_LAN_RECEIVE_POST_REPLY
   3745        1.1  thorpej {
   3746        1.1  thorpej     U16                     Reserved;           /* 00h */
   3747        1.1  thorpej     U8                      MsgLength;          /* 02h */
   3748        1.1  thorpej     U8                      Function;           /* 03h */
   3749        1.1  thorpej     U8                      Reserved2;          /* 04h */
   3750        1.1  thorpej     U8                      NumberOfContexts;   /* 05h */
   3751        1.1  thorpej     U8                      PortNumber;         /* 06h */
   3752        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   3753        1.1  thorpej     U32                     MsgContext;         /* 08h */
   3754        1.1  thorpej     U16                     Reserved3;          /* 0Ch */
   3755        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   3756        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   3757        1.1  thorpej     U32                     BucketsRemaining;   /* 14h */
   3758        1.1  thorpej     U32                     PacketOffset;       /* 18h */
   3759        1.1  thorpej     U32                     PacketLength;       /* 1Ch */
   3760        1.1  thorpej     U32                     BucketContext[1];   /* 20h */
   3761        1.1  thorpej } MSG_LAN_RECEIVE_POST_REPLY, MPI_POINTER PTR_MSG_LAN_RECEIVE_POST_REPLY,
   3762        1.1  thorpej   LANReceivePostReply_t, MPI_POINTER pLANReceivePostReply_t;
   3763        1.1  thorpej 
   3764        1.1  thorpej 
   3765        1.1  thorpej /* LANReset */
   3766        1.1  thorpej 
   3767        1.1  thorpej typedef struct _MSG_LAN_RESET_REQUEST
   3768        1.1  thorpej {
   3769        1.1  thorpej     U16                     Reserved;           /* 00h */
   3770        1.1  thorpej     U8                      ChainOffset;        /* 02h */
   3771        1.1  thorpej     U8                      Function;           /* 03h */
   3772        1.1  thorpej     U16                     Reserved2;          /* 04h */
   3773        1.1  thorpej     U8                      PortNumber;         /* 05h */
   3774        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   3775        1.1  thorpej     U32                     MsgContext;         /* 08h */
   3776        1.1  thorpej } MSG_LAN_RESET_REQUEST, MPI_POINTER PTR_MSG_LAN_RESET_REQUEST,
   3777        1.1  thorpej   LANResetRequest_t, MPI_POINTER pLANResetRequest_t;
   3778        1.1  thorpej 
   3779        1.1  thorpej 
   3780        1.1  thorpej typedef struct _MSG_LAN_RESET_REPLY
   3781        1.1  thorpej {
   3782        1.1  thorpej     U16                     Reserved;           /* 00h */
   3783        1.1  thorpej     U8                      MsgLength;          /* 02h */
   3784        1.1  thorpej     U8                      Function;           /* 03h */
   3785        1.1  thorpej     U16                     Reserved2;          /* 04h */
   3786        1.1  thorpej     U8                      PortNumber;         /* 06h */
   3787        1.1  thorpej     U8                      MsgFlags;           /* 07h */
   3788        1.1  thorpej     U32                     MsgContext;         /* 08h */
   3789        1.1  thorpej     U16                     Reserved3;          /* 0Ch */
   3790        1.1  thorpej     U16                     IOCStatus;          /* 0Eh */
   3791        1.1  thorpej     U32                     IOCLogInfo;         /* 10h */
   3792        1.1  thorpej } MSG_LAN_RESET_REPLY, MPI_POINTER PTR_MSG_LAN_RESET_REPLY,
   3793        1.1  thorpej   LANResetReply_t, MPI_POINTER pLANResetReply_t;
   3794        1.1  thorpej 
   3795        1.1  thorpej 
   3796        1.1  thorpej /****************************************************************************/
   3797        1.1  thorpej /* LAN Context Reply defines and macros                                     */
   3798        1.1  thorpej /****************************************************************************/
   3799        1.1  thorpej 
   3800        1.1  thorpej #define LAN_REPLY_PACKET_LENGTH_MASK            (0x0000FFFF)
   3801        1.1  thorpej #define LAN_REPLY_PACKET_LENGTH_SHIFT           (0)
   3802        1.1  thorpej #define LAN_REPLY_BUCKET_CONTEXT_MASK           (0x07FF0000)
   3803        1.1  thorpej #define LAN_REPLY_BUCKET_CONTEXT_SHIFT          (16)
   3804        1.1  thorpej #define LAN_REPLY_BUFFER_CONTEXT_MASK           (0x07FFFFFF)
   3805        1.1  thorpej #define LAN_REPLY_BUFFER_CONTEXT_SHIFT          (0)
   3806        1.1  thorpej #define LAN_REPLY_FORM_MASK                     (0x18000000)
   3807        1.1  thorpej #define LAN_REPLY_FORM_RECEIVE_SINGLE           (0x00)
   3808        1.1  thorpej #define LAN_REPLY_FORM_RECEIVE_MULTIPLE         (0x01)
   3809        1.1  thorpej #define LAN_REPLY_FORM_SEND_SINGLE              (0x02)
   3810        1.1  thorpej #define LAN_REPLY_FORM_MESSAGE_CONTEXT          (0x03)
   3811        1.1  thorpej #define LAN_REPLY_FORM_SHIFT                    (27)
   3812        1.1  thorpej 
   3813        1.1  thorpej #define GET_LAN_PACKET_LENGTH(x)    (((x) & LAN_REPLY_PACKET_LENGTH_MASK)   \
   3814        1.1  thorpej                                         >> LAN_REPLY_PACKET_LENGTH_SHIFT)
   3815        1.1  thorpej 
   3816        1.1  thorpej #define SET_LAN_PACKET_LENGTH(x, lth)                                       \
   3817        1.1  thorpej             ((x) = ((x) & ~LAN_REPLY_PACKET_LENGTH_MASK) |                  \
   3818        1.1  thorpej                             (((lth) << LAN_REPLY_PACKET_LENGTH_SHIFT) &     \
   3819        1.1  thorpej                                         LAN_REPLY_PACKET_LENGTH_MASK))
   3820        1.1  thorpej 
   3821        1.1  thorpej #define GET_LAN_BUCKET_CONTEXT(x)   (((x) & LAN_REPLY_BUCKET_CONTEXT_MASK)  \
   3822        1.1  thorpej                                         >> LAN_REPLY_BUCKET_CONTEXT_SHIFT)
   3823        1.1  thorpej 
   3824        1.1  thorpej #define SET_LAN_BUCKET_CONTEXT(x, ctx)                                      \
   3825        1.1  thorpej             ((x) = ((x) & ~LAN_REPLY_BUCKET_CONTEXT_MASK) |                 \
   3826        1.1  thorpej                             (((ctx) << LAN_REPLY_BUCKET_CONTEXT_SHIFT) &    \
   3827        1.1  thorpej                                         LAN_REPLY_BUCKET_CONTEXT_MASK))
   3828        1.1  thorpej 
   3829        1.1  thorpej #define GET_LAN_BUFFER_CONTEXT(x)   (((x) & LAN_REPLY_BUFFER_CONTEXT_MASK)  \
   3830        1.1  thorpej                                         >> LAN_REPLY_BUFFER_CONTEXT_SHIFT)
   3831        1.1  thorpej 
   3832        1.1  thorpej #define SET_LAN_BUFFER_CONTEXT(x, ctx)                                      \
   3833        1.1  thorpej             ((x) = ((x) & ~LAN_REPLY_BUFFER_CONTEXT_MASK) |                 \
   3834        1.1  thorpej                             (((ctx) << LAN_REPLY_BUFFER_CONTEXT_SHIFT) &    \
   3835        1.1  thorpej                                         LAN_REPLY_BUFFER_CONTEXT_MASK))
   3836        1.1  thorpej 
   3837        1.1  thorpej #define GET_LAN_FORM(x)             (((x) & LAN_REPLY_FORM_MASK)            \
   3838        1.1  thorpej                                         >> LAN_REPLY_FORM_SHIFT)
   3839        1.1  thorpej 
   3840        1.1  thorpej #define SET_LAN_FORM(x, frm)                                                \
   3841        1.1  thorpej             ((x) = ((x) & ~LAN_REPLY_FORM_MASK) |                           \
   3842        1.1  thorpej                             (((frm) << LAN_REPLY_FORM_SHIFT) &              \
   3843        1.1  thorpej                                         LAN_REPLY_FORM_MASK))
   3844        1.1  thorpej 
   3845        1.1  thorpej 
   3846        1.1  thorpej /****************************************************************************/
   3847        1.1  thorpej /* LAN Current Device State defines                                         */
   3848        1.1  thorpej /****************************************************************************/
   3849        1.1  thorpej 
   3850        1.1  thorpej #define MPI_LAN_DEVICE_STATE_RESET                     (0x00)
   3851        1.1  thorpej #define MPI_LAN_DEVICE_STATE_OPERATIONAL               (0x01)
   3852        1.1  thorpej 
   3853        1.1  thorpej 
   3854        1.1  thorpej /****************************************************************************/
   3855        1.1  thorpej /* LAN Loopback defines                                                     */
   3856        1.1  thorpej /****************************************************************************/
   3857        1.1  thorpej 
   3858        1.1  thorpej #define MPI_LAN_TX_MODES_ENABLE_LOOPBACK_SUPPRESSION   (0x01)
   3859        1.1  thorpej 
   3860        1.1  thorpej #endif
   3861        1.1  thorpej 
   3862        1.1  thorpej 
   3863        1.1  thorpej /*
   3864        1.1  thorpej  * Copyright (c) 2000, 2001 by LSI Logic Corporation
   3865        1.1  thorpej  *
   3866        1.1  thorpej  * Redistribution and use in source and binary forms, with or without
   3867        1.1  thorpej  * modification, are permitted provided that the following conditions
   3868        1.1  thorpej  * are met:
   3869        1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
   3870        1.1  thorpej  *    notice immediately at the beginning of the file, without modification,
   3871        1.1  thorpej  *    this list of conditions, and the following disclaimer.
   3872        1.1  thorpej  * 2. The name of the author may not be used to endorse or promote products
   3873        1.1  thorpej  *    derived from this software without specific prior written permission.
   3874        1.1  thorpej  *
   3875        1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   3876        1.1  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   3877        1.1  thorpej  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   3878        1.1  thorpej  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
   3879        1.1  thorpej  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   3880        1.1  thorpej  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   3881        1.1  thorpej  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   3882        1.1  thorpej  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   3883        1.1  thorpej  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   3884        1.1  thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   3885        1.1  thorpej  * SUCH DAMAGE.
   3886        1.1  thorpej  *
   3887        1.1  thorpej  *
   3888        1.1  thorpej  *           Name:  MPI_TARG.H
   3889        1.1  thorpej  *          Title:  MPI Target mode messages and structures
   3890        1.1  thorpej  *  Creation Date:  June 22, 2000
   3891        1.1  thorpej  *
   3892        1.1  thorpej  *    MPI Version:  01.02.04
   3893        1.1  thorpej  *
   3894        1.1  thorpej  *  Version History
   3895        1.1  thorpej  *  ---------------
   3896        1.1  thorpej  *
   3897        1.1  thorpej  *  Date      Version   Description
   3898        1.1  thorpej  *  --------  --------  ------------------------------------------------------
   3899        1.1  thorpej  *  05-08-00  00.10.01  Original release for 0.10 spec dated 4/26/2000.
   3900        1.1  thorpej  *  06-06-00  01.00.01  Update version number for 1.0 release.
   3901        1.1  thorpej  *  06-22-00  01.00.02  Added _MSG_TARGET_CMD_BUFFER_POST_REPLY structure.
   3902        1.1  thorpej  *                      Corrected DECSRIPTOR typo to DESCRIPTOR.
   3903        1.1  thorpej  *  11-02-00  01.01.01  Original release for post 1.0 work
   3904        1.1  thorpej  *                      Modified target mode to use IoIndex instead of
   3905        1.1  thorpej  *                      HostIndex and IocIndex. Added Alias.
   3906        1.1  thorpej  *  01-09-01  01.01.02  Added defines for TARGET_ASSIST_FLAGS_REPOST_CMD_BUFFER
   3907        1.1  thorpej  *                      and TARGET_STATUS_SEND_FLAGS_REPOST_CMD_BUFFER.
   3908        1.1  thorpej  *  02-20-01  01.01.03  Started using MPI_POINTER.
   3909        1.1  thorpej  *                      Added structures for MPI_TARGET_SCSI_SPI_CMD_BUFFER and
   3910        1.1  thorpej  *                      MPI_TARGET_FCP_CMD_BUFFER.
   3911        1.1  thorpej  *  03-27-01  01.01.04  Added structure offset comments.
   3912        1.1  thorpej  *  08-08-01  01.02.01  Original release for v1.2 work.
   3913        1.1  thorpej  *  09-28-01  01.02.02  Added structure for MPI_TARGET_SCSI_SPI_STATUS_IU.
   3914        1.1  thorpej  *                      Added PriorityReason field to some replies and
   3915        1.1  thorpej  *                      defined more PriorityReason codes.
   3916        1.1  thorpej  *                      Added some defines for to support previous version
   3917        1.1  thorpej  *                      of MPI.
   3918        1.1  thorpej  *  10-04-01  01.02.03  Added PriorityReason to MSG_TARGET_ERROR_REPLY.
   3919        1.1  thorpej  *  11-01-01  01.02.04  Added define for TARGET_STATUS_SEND_FLAGS_HIGH_PRIORITY.
   3920        1.1  thorpej  *  --------------------------------------------------------------------------
   3921        1.1  thorpej  */
   3922        1.1  thorpej 
   3923        1.1  thorpej #ifndef MPI_TARG_H
   3924        1.1  thorpej #define MPI_TARG_H
   3925        1.1  thorpej 
   3926        1.1  thorpej 
   3927        1.1  thorpej /******************************************************************************
   3928        1.1  thorpej *
   3929        1.1  thorpej *        S C S I    T a r g e t    M e s s a g e s
   3930        1.1  thorpej *
   3931        1.1  thorpej *******************************************************************************/
   3932        1.1  thorpej 
   3933        1.1  thorpej typedef struct _CMD_BUFFER_DESCRIPTOR
   3934        1.1  thorpej {
   3935        1.1  thorpej     U16                     IoIndex;                    /* 00h */
   3936        1.1  thorpej     U16                     Reserved;                   /* 02h */
   3937        1.1  thorpej     union                                               /* 04h */
   3938        1.1  thorpej     {
   3939        1.1  thorpej         U32                 PhysicalAddress32;
   3940        1.1  thorpej         U64                 PhysicalAddress64;
   3941        1.1  thorpej     } _u;
   3942        1.1  thorpej } CMD_BUFFER_DESCRIPTOR, MPI_POINTER PTR_CMD_BUFFER_DESCRIPTOR,
   3943        1.1  thorpej   CmdBufferDescriptor_t, MPI_POINTER pCmdBufferDescriptor_t;
   3944        1.1  thorpej 
   3945        1.1  thorpej 
   3946        1.1  thorpej /****************************************************************************/
   3947        1.1  thorpej /* Target Command Buffer Post Request                                       */
   3948        1.1  thorpej /****************************************************************************/
   3949        1.1  thorpej 
   3950        1.1  thorpej typedef struct _MSG_TARGET_CMD_BUFFER_POST_REQUEST
   3951        1.1  thorpej {
   3952        1.1  thorpej     U8                      BufferPostFlags;            /* 00h */
   3953        1.1  thorpej     U8                      BufferCount;                /* 01h */
   3954        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   3955        1.1  thorpej     U8                      Function;                   /* 03h */
   3956        1.1  thorpej     U8                      BufferLength;               /* 04h */
   3957        1.1  thorpej     U8                      Reserved;                   /* 05h */
   3958        1.1  thorpej     U8                      Reserved1;                  /* 06h */
   3959        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3960        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3961        1.1  thorpej     CMD_BUFFER_DESCRIPTOR   Buffer[1];                  /* 0Ch */
   3962        1.1  thorpej } MSG_TARGET_CMD_BUFFER_POST_REQUEST, MPI_POINTER PTR_MSG_TARGET_CMD_BUFFER_POST_REQUEST,
   3963        1.1  thorpej   TargetCmdBufferPostRequest_t, MPI_POINTER pTargetCmdBufferPostRequest_t;
   3964        1.1  thorpej 
   3965        1.1  thorpej #define CMD_BUFFER_POST_FLAGS_PORT_MASK         (0x01)
   3966        1.1  thorpej #define CMD_BUFFER_POST_FLAGS_ADDR_MODE_MASK    (0x80)
   3967        1.1  thorpej #define CMD_BUFFER_POST_FLAGS_ADDR_MODE_32      (0)
   3968        1.1  thorpej #define CMD_BUFFER_POST_FLAGS_ADDR_MODE_64      (1)
   3969        1.1  thorpej #define CMD_BUFFER_POST_FLAGS_64_BIT_ADDR       (0x80)
   3970        1.1  thorpej 
   3971        1.1  thorpej #define CMD_BUFFER_POST_IO_INDEX_MASK           (0x00003FFF)
   3972        1.1  thorpej #define CMD_BUFFER_POST_IO_INDEX_MASK_0100      (0x000003FF) /* obsolete */
   3973        1.1  thorpej 
   3974        1.1  thorpej 
   3975        1.1  thorpej typedef struct _MSG_TARGET_CMD_BUFFER_POST_REPLY
   3976        1.1  thorpej {
   3977        1.1  thorpej     U8                      BufferPostFlags;            /* 00h */
   3978        1.1  thorpej     U8                      BufferCount;                /* 01h */
   3979        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   3980        1.1  thorpej     U8                      Function;                   /* 03h */
   3981        1.1  thorpej     U8                      BufferLength;               /* 04h */
   3982        1.1  thorpej     U8                      Reserved;                   /* 05h */
   3983        1.1  thorpej     U8                      Reserved1;                  /* 06h */
   3984        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   3985        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   3986        1.1  thorpej     U16                     Reserved2;                  /* 0Ch */
   3987        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   3988        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   3989        1.1  thorpej } MSG_TARGET_CMD_BUFFER_POST_REPLY, MPI_POINTER PTR_MSG_TARGET_CMD_BUFFER_POST_REPLY,
   3990        1.1  thorpej   TargetCmdBufferPostReply_t, MPI_POINTER pTargetCmdBufferPostReply_t;
   3991        1.1  thorpej 
   3992        1.1  thorpej /* the following structure is obsolete as of MPI v1.2 */
   3993        1.1  thorpej typedef struct _MSG_PRIORITY_CMD_RECEIVED_REPLY
   3994        1.1  thorpej {
   3995        1.1  thorpej     U16                     Reserved;                   /* 00h */
   3996        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   3997        1.1  thorpej     U8                      Function;                   /* 03h */
   3998        1.1  thorpej     U16                     Reserved1;                  /* 04h */
   3999        1.1  thorpej     U8                      Reserved2;                  /* 06h */
   4000        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   4001        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   4002        1.1  thorpej     U8                      PriorityReason;             /* 0Ch */
   4003        1.1  thorpej     U8                      Reserved3;                  /* 0Dh */
   4004        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   4005        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   4006        1.1  thorpej     U32                     ReplyWord;                  /* 14h */
   4007        1.1  thorpej } MSG_PRIORITY_CMD_RECEIVED_REPLY, MPI_POINTER PTR_MSG_PRIORITY_CMD_RECEIVED_REPLY,
   4008        1.1  thorpej   PriorityCommandReceivedReply_t, MPI_POINTER pPriorityCommandReceivedReply_t;
   4009        1.1  thorpej 
   4010        1.1  thorpej #define PRIORITY_REASON_NO_DISCONNECT           (0x00)
   4011        1.1  thorpej #define PRIORITY_REASON_SCSI_TASK_MANAGEMENT    (0x01)
   4012        1.1  thorpej #define PRIORITY_REASON_CMD_PARITY_ERR          (0x02)
   4013        1.1  thorpej #define PRIORITY_REASON_MSG_OUT_PARITY_ERR      (0x03)
   4014        1.1  thorpej #define PRIORITY_REASON_LQ_CRC_ERR              (0x04)
   4015        1.1  thorpej #define PRIORITY_REASON_CMD_CRC_ERR             (0x05)
   4016        1.1  thorpej #define PRIORITY_REASON_PROTOCOL_ERR            (0x06)
   4017        1.1  thorpej #define PRIORITY_REASON_DATA_OUT_PARITY_ERR     (0x07)
   4018        1.1  thorpej #define PRIORITY_REASON_DATA_OUT_CRC_ERR        (0x08)
   4019        1.1  thorpej #define PRIORITY_REASON_UNKNOWN                 (0xFF)
   4020        1.1  thorpej 
   4021        1.1  thorpej 
   4022        1.1  thorpej typedef struct _MSG_TARGET_CMD_BUFFER_POST_ERROR_REPLY
   4023        1.1  thorpej {
   4024        1.1  thorpej     U16                     Reserved;                   /* 00h */
   4025        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   4026        1.1  thorpej     U8                      Function;                   /* 03h */
   4027        1.1  thorpej     U16                     Reserved1;                  /* 04h */
   4028        1.1  thorpej     U8                      Reserved2;                  /* 06h */
   4029        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   4030        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   4031        1.1  thorpej     U8                      PriorityReason;             /* 0Ch */
   4032        1.1  thorpej     U8                      Reserved3;                  /* 0Dh */
   4033        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   4034        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   4035        1.1  thorpej     U32                     ReplyWord;                  /* 14h */
   4036        1.1  thorpej } MSG_TARGET_CMD_BUFFER_POST_ERROR_REPLY,
   4037        1.1  thorpej   MPI_POINTER PTR_MSG_TARGET_CMD_BUFFER_POST_ERROR_REPLY,
   4038        1.1  thorpej   TargetCmdBufferPostErrorReply_t, MPI_POINTER pTargetCmdBufferPostErrorReply_t;
   4039        1.1  thorpej 
   4040        1.1  thorpej 
   4041        1.1  thorpej typedef struct _MPI_TARGET_FCP_CMD_BUFFER
   4042        1.1  thorpej {
   4043        1.1  thorpej     U8      FcpLun[8];                                  /* 00h */
   4044        1.1  thorpej     U8      FcpCntl[4];                                 /* 08h */
   4045        1.1  thorpej     U8      FcpCdb[16];                                 /* 0Ch */
   4046        1.1  thorpej     U32     FcpDl;                                      /* 1Ch */
   4047        1.1  thorpej } MPI_TARGET_FCP_CMD_BUFFER, MPI_POINTER PTR_MPI_TARGET_FCP_CMD_BUFFER,
   4048        1.1  thorpej   MpiTargetFcpCmdBuffer, MPI_POINTER pMpiTargetFcpCmdBuffer;
   4049        1.1  thorpej 
   4050        1.1  thorpej 
   4051        1.1  thorpej typedef struct _MPI_TARGET_SCSI_SPI_CMD_BUFFER
   4052        1.1  thorpej {
   4053        1.1  thorpej     /* SPI L_Q information unit */
   4054        1.1  thorpej     U8      L_QType;                                    /* 00h */
   4055        1.1  thorpej     U8      Reserved;                                   /* 01h */
   4056        1.1  thorpej     U16     Tag;                                        /* 02h */
   4057        1.1  thorpej     U8      LogicalUnitNumber[8];                       /* 04h */
   4058        1.1  thorpej     U32     DataLength;                                 /* 0Ch */
   4059        1.1  thorpej     /* SPI command information unit */
   4060        1.1  thorpej     U8      ReservedFirstByteOfCommandIU;               /* 10h */
   4061        1.1  thorpej     U8      TaskAttribute;                              /* 11h */
   4062        1.1  thorpej     U8      TaskManagementFlags;                        /* 12h */
   4063        1.1  thorpej     U8      AdditionalCDBLength;                        /* 13h */
   4064        1.1  thorpej     U8      CDB[16];                                    /* 14h */
   4065        1.1  thorpej } MPI_TARGET_SCSI_SPI_CMD_BUFFER,
   4066        1.1  thorpej   MPI_POINTER PTR_MPI_TARGET_SCSI_SPI_CMD_BUFFER,
   4067        1.1  thorpej   MpiTargetScsiSpiCmdBuffer, MPI_POINTER pMpiTargetScsiSpiCmdBuffer;
   4068        1.1  thorpej 
   4069        1.1  thorpej 
   4070        1.1  thorpej /****************************************************************************/
   4071        1.1  thorpej /* Target Assist Request                                                    */
   4072        1.1  thorpej /****************************************************************************/
   4073        1.1  thorpej 
   4074        1.1  thorpej typedef struct _MSG_TARGET_ASSIST_REQUEST
   4075        1.1  thorpej {
   4076        1.1  thorpej     U8                      StatusCode;                 /* 00h */
   4077        1.1  thorpej     U8                      TargetAssistFlags;          /* 01h */
   4078        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   4079        1.1  thorpej     U8                      Function;                   /* 03h */
   4080        1.1  thorpej     U16                     QueueTag;                   /* 04h */
   4081        1.1  thorpej     U8                      Reserved;                   /* 06h */
   4082        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   4083        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   4084        1.1  thorpej     U32                     ReplyWord;                  /* 0Ch */
   4085        1.1  thorpej     U8                      LUN[8];                     /* 10h */
   4086        1.1  thorpej     U32                     RelativeOffset;             /* 18h */
   4087        1.1  thorpej     U32                     DataLength;                 /* 1Ch */
   4088        1.1  thorpej     SGE_IO_UNION            SGL[1];                     /* 20h */
   4089        1.1  thorpej } MSG_TARGET_ASSIST_REQUEST, MPI_POINTER PTR_MSG_TARGET_ASSIST_REQUEST,
   4090        1.1  thorpej   TargetAssistRequest_t, MPI_POINTER pTargetAssistRequest_t;
   4091        1.1  thorpej 
   4092        1.1  thorpej #define TARGET_ASSIST_FLAGS_DATA_DIRECTION          (0x01)
   4093        1.1  thorpej #define TARGET_ASSIST_FLAGS_AUTO_STATUS             (0x02)
   4094        1.1  thorpej #define TARGET_ASSIST_FLAGS_HIGH_PRIORITY           (0x04)
   4095        1.1  thorpej #define TARGET_ASSIST_FLAGS_REPOST_CMD_BUFFER       (0x80)
   4096        1.1  thorpej 
   4097        1.1  thorpej 
   4098        1.1  thorpej typedef struct _MSG_TARGET_ERROR_REPLY
   4099        1.1  thorpej {
   4100        1.1  thorpej     U16                     Reserved;                   /* 00h */
   4101        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   4102        1.1  thorpej     U8                      Function;                   /* 03h */
   4103        1.1  thorpej     U16                     Reserved1;                  /* 04h */
   4104        1.1  thorpej     U8                      Reserved2;                  /* 06h */
   4105        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   4106        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   4107        1.1  thorpej     U8                      PriorityReason;             /* 0Ch */
   4108        1.1  thorpej     U8                      Reserved3;                  /* 0Dh */
   4109        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   4110        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   4111        1.1  thorpej     U32                     ReplyWord;                  /* 14h */
   4112        1.1  thorpej     U32                     TransferCount;              /* 18h */
   4113        1.1  thorpej } MSG_TARGET_ERROR_REPLY, MPI_POINTER PTR_MSG_TARGET_ERROR_REPLY,
   4114        1.1  thorpej   TargetErrorReply_t, MPI_POINTER pTargetErrorReply_t;
   4115        1.1  thorpej 
   4116        1.1  thorpej 
   4117        1.1  thorpej /****************************************************************************/
   4118        1.1  thorpej /* Target Status Send Request                                               */
   4119        1.1  thorpej /****************************************************************************/
   4120        1.1  thorpej 
   4121        1.1  thorpej typedef struct _MSG_TARGET_STATUS_SEND_REQUEST
   4122        1.1  thorpej {
   4123        1.1  thorpej     U8                      StatusCode;                 /* 00h */
   4124        1.1  thorpej     U8                      StatusFlags;                /* 01h */
   4125        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   4126        1.1  thorpej     U8                      Function;                   /* 03h */
   4127        1.1  thorpej     U16                     QueueTag;                   /* 04h */
   4128        1.1  thorpej     U8                      Reserved;                   /* 06h */
   4129        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   4130        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   4131        1.1  thorpej     U32                     ReplyWord;                  /* 0Ch */
   4132        1.1  thorpej     U8                      LUN[8];                     /* 10h */
   4133        1.1  thorpej     SGE_SIMPLE_UNION        StatusDataSGE;              /* 18h */
   4134        1.1  thorpej } MSG_TARGET_STATUS_SEND_REQUEST, MPI_POINTER PTR_MSG_TARGET_STATUS_SEND_REQUEST,
   4135        1.1  thorpej   TargetStatusSendRequest_t, MPI_POINTER pTargetStatusSendRequest_t;
   4136        1.1  thorpej 
   4137        1.1  thorpej #define TARGET_STATUS_SEND_FLAGS_AUTO_GOOD_STATUS   (0x01)
   4138        1.1  thorpej #define TARGET_STATUS_SEND_FLAGS_HIGH_PRIORITY      (0x04)
   4139        1.1  thorpej #define TARGET_STATUS_SEND_FLAGS_REPOST_CMD_BUFFER  (0x80)
   4140        1.1  thorpej 
   4141        1.1  thorpej typedef struct _MPI_TARGET_FCP_RSP_BUFFER
   4142        1.1  thorpej {
   4143        1.1  thorpej     U8      Reserved0[8];                               /* 00h */
   4144        1.1  thorpej     U8      FcpStatus;                                  /* 08h */
   4145        1.1  thorpej     U8      FcpFlags;                                   /* 09h */
   4146        1.1  thorpej     U8      Reserved1[2];                               /* 0Ah */
   4147        1.1  thorpej     U32     FcpResid;                                   /* 0Ch */
   4148        1.1  thorpej     U32     FcpSenseLength;                             /* 10h */
   4149        1.1  thorpej     U32     FcpResponseLength;                          /* 14h */
   4150        1.1  thorpej     U8      FcpResponseData[8];                         /* 18h */
   4151        1.1  thorpej     U8      FcpSenseData[32]; /* Pad to 64 bytes */     /* 20h */
   4152        1.1  thorpej } MPI_TARGET_FCP_RSP_BUFFER, MPI_POINTER PTR_MPI_TARGET_FCP_RSP_BUFFER,
   4153        1.1  thorpej   MpiTargetFcpRspBuffer, MPI_POINTER pMpiTargetFcpRspBuffer;
   4154        1.1  thorpej 
   4155        1.1  thorpej typedef struct _MPI_TARGET_SCSI_SPI_STATUS_IU
   4156        1.1  thorpej {
   4157        1.1  thorpej     U8      Reserved0;                                  /* 00h */
   4158        1.1  thorpej     U8      Reserved1;                                  /* 01h */
   4159        1.1  thorpej     U8      Valid;                                      /* 02h */
   4160        1.1  thorpej     U8      Status;                                     /* 03h */
   4161        1.1  thorpej     U32     SenseDataListLength;                        /* 04h */
   4162        1.1  thorpej     U32     PktFailuresListLength;                      /* 08h */
   4163        1.1  thorpej     U8      SenseData[52]; /* Pad the IU to 64 bytes */ /* 0Ch */
   4164        1.1  thorpej } MPI_TARGET_SCSI_SPI_STATUS_IU, MPI_POINTER PTR_MPI_TARGET_SCSI_SPI_STATUS_IU,
   4165        1.1  thorpej   TargetScsiSpiStatusIU_t, MPI_POINTER pTargetScsiSpiStatusIU_t;
   4166        1.1  thorpej 
   4167        1.1  thorpej /****************************************************************************/
   4168        1.1  thorpej /* Target Mode Abort Request                                                */
   4169        1.1  thorpej /****************************************************************************/
   4170        1.1  thorpej 
   4171        1.1  thorpej typedef struct _MSG_TARGET_MODE_ABORT_REQUEST
   4172        1.1  thorpej {
   4173        1.1  thorpej     U8                      AbortType;                  /* 00h */
   4174        1.1  thorpej     U8                      Reserved;                   /* 01h */
   4175        1.1  thorpej     U8                      ChainOffset;                /* 02h */
   4176        1.1  thorpej     U8                      Function;                   /* 03h */
   4177        1.1  thorpej     U16                     Reserved1;                  /* 04h */
   4178        1.1  thorpej     U8                      Reserved2;                  /* 06h */
   4179        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   4180        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   4181        1.1  thorpej     U32                     ReplyWord;                  /* 0Ch */
   4182        1.1  thorpej     U32                     MsgContextToAbort;          /* 10h */
   4183        1.1  thorpej } MSG_TARGET_MODE_ABORT, MPI_POINTER PTR_MSG_TARGET_MODE_ABORT,
   4184        1.1  thorpej   TargetModeAbort_t, MPI_POINTER pTargetModeAbort_t;
   4185        1.1  thorpej 
   4186        1.1  thorpej #define TARGET_MODE_ABORT_TYPE_ALL_CMD_BUFFERS      (0x00)
   4187        1.1  thorpej #define TARGET_MODE_ABORT_TYPE_ALL_IO               (0x01)
   4188        1.1  thorpej #define TARGET_MODE_ABORT_TYPE_EXACT_IO             (0x02)
   4189        1.1  thorpej #define TARGET_MODE_ABORT_TYPE_EXACT_IO_REQUEST     (0x03)
   4190        1.1  thorpej 
   4191        1.1  thorpej /* Target Mode Abort Reply */
   4192        1.1  thorpej 
   4193        1.1  thorpej typedef struct _MSG_TARGET_MODE_ABORT_REPLY
   4194        1.1  thorpej {
   4195        1.1  thorpej     U16                     Reserved;                   /* 00h */
   4196        1.1  thorpej     U8                      MsgLength;                  /* 02h */
   4197        1.1  thorpej     U8                      Function;                   /* 03h */
   4198        1.1  thorpej     U16                     Reserved1;                  /* 04h */
   4199        1.1  thorpej     U8                      Reserved2;                  /* 06h */
   4200        1.1  thorpej     U8                      MsgFlags;                   /* 07h */
   4201        1.1  thorpej     U32                     MsgContext;                 /* 08h */
   4202        1.1  thorpej     U16                     Reserved3;                  /* 0Ch */
   4203        1.1  thorpej     U16                     IOCStatus;                  /* 0Eh */
   4204        1.1  thorpej     U32                     IOCLogInfo;                 /* 10h */
   4205        1.1  thorpej     U32                     AbortCount;                 /* 14h */
   4206        1.1  thorpej } MSG_TARGET_MODE_ABORT_REPLY, MPI_POINTER PTR_MSG_TARGET_MODE_ABORT_REPLY,
   4207        1.1  thorpej   TargetModeAbortReply_t, MPI_POINTER pTargetModeAbortReply_t;
   4208        1.1  thorpej 
   4209        1.1  thorpej 
   4210        1.1  thorpej /****************************************************************************/
   4211        1.1  thorpej /* Target Mode Context Reply                                                */
   4212        1.1  thorpej /****************************************************************************/
   4213        1.1  thorpej 
   4214        1.1  thorpej #define TARGET_MODE_REPLY_IO_INDEX_MASK         (0x00003FFF)
   4215        1.1  thorpej #define TARGET_MODE_REPLY_IO_INDEX_SHIFT        (0)
   4216        1.1  thorpej #define TARGET_MODE_REPLY_INITIATOR_INDEX_MASK  (0x03FFC000)
   4217        1.1  thorpej #define TARGET_MODE_REPLY_INITIATOR_INDEX_SHIFT (14)
   4218        1.1  thorpej #define TARGET_MODE_REPLY_ALIAS_MASK            (0x0C000000)
   4219        1.1  thorpej #define TARGET_MODE_REPLY_ALIAS_SHIFT           (26)
   4220        1.1  thorpej #define TARGET_MODE_REPLY_PORT_MASK             (0x10000000)
   4221        1.1  thorpej #define TARGET_MODE_REPLY_PORT_SHIFT            (28)
   4222        1.1  thorpej 
   4223        1.1  thorpej 
   4224        1.1  thorpej #define GET_IO_INDEX(x)     (((x) & TARGET_MODE_REPLY_IO_INDEX_MASK)           \
   4225        1.1  thorpej                                     >> TARGET_MODE_REPLY_IO_INDEX_SHIFT)
   4226        1.1  thorpej 
   4227        1.1  thorpej #define SET_IO_INDEX(t, i)                                                     \
   4228        1.1  thorpej             ((t) = ((t) & ~TARGET_MODE_REPLY_IO_INDEX_MASK) |                  \
   4229        1.1  thorpej                               (((i) << TARGET_MODE_REPLY_IO_INDEX_SHIFT) &     \
   4230        1.1  thorpej                                              TARGET_MODE_REPLY_IO_INDEX_MASK))
   4231        1.1  thorpej 
   4232        1.1  thorpej #define GET_INITIATOR_INDEX(x) (((x) & TARGET_MODE_REPLY_INITIATOR_INDEX_MASK) \
   4233        1.1  thorpej                                    >> TARGET_MODE_REPLY_INITIATOR_INDEX_SHIFT)
   4234        1.1  thorpej 
   4235        1.1  thorpej #define SET_INITIATOR_INDEX(t, ii)                                             \
   4236        1.1  thorpej         ((t) = ((t) & ~TARGET_MODE_REPLY_INITIATOR_INDEX_MASK) |               \
   4237        1.1  thorpej                         (((ii) << TARGET_MODE_REPLY_INITIATOR_INDEX_SHIFT) &   \
   4238        1.1  thorpej                                       TARGET_MODE_REPLY_INITIATOR_INDEX_MASK))
   4239        1.1  thorpej 
   4240        1.1  thorpej #define GET_ALIAS(x) (((x) & TARGET_MODE_REPLY_ALIAS_MASK)                     \
   4241        1.1  thorpej                                                >> TARGET_MODE_REPLY_ALIAS_SHIFT)
   4242        1.1  thorpej 
   4243        1.1  thorpej #define SET_ALIAS(t, a)  ((t) = ((t) & ~TARGET_MODE_REPLY_ALIAS_MASK) |        \
   4244        1.1  thorpej                                     (((a) << TARGET_MODE_REPLY_ALIAS_SHIFT) &  \
   4245        1.1  thorpej                                                  TARGET_MODE_REPLY_ALIAS_MASK))
   4246        1.1  thorpej 
   4247        1.1  thorpej #define GET_PORT(x) (((x) & TARGET_MODE_REPLY_PORT_MASK)                       \
   4248        1.1  thorpej                                                >> TARGET_MODE_REPLY_PORT_SHIFT)
   4249        1.1  thorpej 
   4250        1.1  thorpej #define SET_PORT(t, p)  ((t) = ((t) & ~TARGET_MODE_REPLY_PORT_MASK) |          \
   4251        1.1  thorpej                                     (((p) << TARGET_MODE_REPLY_PORT_SHIFT) &   \
   4252        1.1  thorpej                                                   TARGET_MODE_REPLY_PORT_MASK))
   4253        1.1  thorpej 
   4254        1.1  thorpej /* the following obsolete values are for MPI v1.0 support */
   4255        1.1  thorpej #define TARGET_MODE_REPLY_0100_MASK_HOST_INDEX       (0x000003FF)
   4256        1.1  thorpej #define TARGET_MODE_REPLY_0100_SHIFT_HOST_INDEX      (0)
   4257        1.1  thorpej #define TARGET_MODE_REPLY_0100_MASK_IOC_INDEX        (0x001FF800)
   4258        1.1  thorpej #define TARGET_MODE_REPLY_0100_SHIFT_IOC_INDEX       (11)
   4259        1.1  thorpej #define TARGET_MODE_REPLY_0100_PORT_MASK             (0x00400000)
   4260        1.1  thorpej #define TARGET_MODE_REPLY_0100_PORT_SHIFT            (22)
   4261        1.1  thorpej #define TARGET_MODE_REPLY_0100_MASK_INITIATOR_INDEX  (0x1F800000)
   4262        1.1  thorpej #define TARGET_MODE_REPLY_0100_SHIFT_INITIATOR_INDEX (23)
   4263        1.1  thorpej 
   4264        1.1  thorpej #define GET_HOST_INDEX_0100(x) (((x) & TARGET_MODE_REPLY_0100_MASK_HOST_INDEX) \
   4265        1.1  thorpej                                   >> TARGET_MODE_REPLY_0100_SHIFT_HOST_INDEX)
   4266        1.1  thorpej 
   4267        1.1  thorpej #define SET_HOST_INDEX_0100(t, hi)                                             \
   4268        1.1  thorpej             ((t) = ((t) & ~TARGET_MODE_REPLY_0100_MASK_HOST_INDEX) |           \
   4269        1.1  thorpej                          (((hi) << TARGET_MODE_REPLY_0100_SHIFT_HOST_INDEX) &  \
   4270        1.1  thorpej                                       TARGET_MODE_REPLY_0100_MASK_HOST_INDEX))
   4271        1.1  thorpej 
   4272        1.1  thorpej #define GET_IOC_INDEX_0100(x)   (((x) & TARGET_MODE_REPLY_0100_MASK_IOC_INDEX) \
   4273        1.1  thorpej                                   >> TARGET_MODE_REPLY_0100_SHIFT_IOC_INDEX)
   4274        1.1  thorpej 
   4275        1.1  thorpej #define SET_IOC_INDEX_0100(t, ii)                                              \
   4276        1.1  thorpej             ((t) = ((t) & ~TARGET_MODE_REPLY_0100_MASK_IOC_INDEX) |            \
   4277        1.1  thorpej                         (((ii) << TARGET_MODE_REPLY_0100_SHIFT_IOC_INDEX) &    \
   4278        1.1  thorpej                                      TARGET_MODE_REPLY_0100_MASK_IOC_INDEX))
   4279        1.1  thorpej 
   4280        1.1  thorpej #define GET_INITIATOR_INDEX_0100(x)                                            \
   4281        1.1  thorpej             (((x) & TARGET_MODE_REPLY_0100_MASK_INITIATOR_INDEX)               \
   4282        1.1  thorpej                               >> TARGET_MODE_REPLY_0100_SHIFT_INITIATOR_INDEX)
   4283        1.1  thorpej 
   4284        1.1  thorpej #define SET_INITIATOR_INDEX_0100(t, ii)                                        \
   4285        1.1  thorpej         ((t) = ((t) & ~TARGET_MODE_REPLY_0100_MASK_INITIATOR_INDEX) |          \
   4286        1.1  thorpej                    (((ii) << TARGET_MODE_REPLY_0100_SHIFT_INITIATOR_INDEX) &   \
   4287        1.1  thorpej                                 TARGET_MODE_REPLY_0100_MASK_INITIATOR_INDEX))
   4288        1.1  thorpej 
   4289        1.1  thorpej 
   4290        1.1  thorpej #endif
   4291        1.1  thorpej 
   4292