1265236Sken/*- 2283990Sslm * Copyright (c) 2012-2015 LSI Corp. 3283990Sslm * Copyright (c) 2013-2015 Avago Technologies 4265236Sken * All rights reserved. 5265236Sken * 6265236Sken * Redistribution and use in source and binary forms, with or without 7265236Sken * modification, are permitted provided that the following conditions 8265236Sken * are met: 9265236Sken * 1. Redistributions of source code must retain the above copyright 10265236Sken * notice, this list of conditions and the following disclaimer. 11265236Sken * 2. Redistributions in binary form must reproduce the above copyright 12265236Sken * notice, this list of conditions and the following disclaimer in the 13265236Sken * documentation and/or other materials provided with the distribution. 14265236Sken * 3. Neither the name of the author nor the names of any co-contributors 15265236Sken * may be used to endorse or promote products derived from this software 16265236Sken * without specific prior written permission. 17265236Sken * 18265236Sken * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19265236Sken * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20265236Sken * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21265236Sken * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22265236Sken * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23265236Sken * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24265236Sken * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25265236Sken * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26265236Sken * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27265236Sken * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28265236Sken * SUCH DAMAGE. 29265236Sken * 30283990Sslm * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD 31265236Sken * 32265236Sken * $FreeBSD: releng/10.3/sys/dev/mpr/mpi/mpi2.h 283990 2015-06-04 16:27:18Z slm $ 33265236Sken */ 34265236Sken 35265236Sken/* 36283990Sslm * Copyright (c) 2000-2015 LSI Corporation. 37283990Sslm * Copyright (c) 2013-2015 Avago Technologies 38265236Sken * 39265236Sken * 40265236Sken * Name: mpi2.h 41265236Sken * Title: MPI Message independent structures and definitions 42265236Sken * including System Interface Register Set and 43265236Sken * scatter/gather formats. 44265236Sken * Creation Date: June 21, 2006 45265236Sken * 46265236Sken * mpi2.h Version: 02.00.33 47265236Sken * 48265236Sken * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 49265236Sken * prefix are for use only on MPI v2.5 products, and must not be used 50265236Sken * with MPI v2.0 products. Unless otherwise noted, names beginning with 51265236Sken * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. 52265236Sken * 53265236Sken * Version History 54265236Sken * --------------- 55265236Sken * 56265236Sken * Date Version Description 57265236Sken * -------- -------- ------------------------------------------------------ 58265236Sken * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 59265236Sken * 06-04-07 02.00.01 Bumped MPI2_HEADER_VERSION_UNIT. 60265236Sken * 06-26-07 02.00.02 Bumped MPI2_HEADER_VERSION_UNIT. 61265236Sken * 08-31-07 02.00.03 Bumped MPI2_HEADER_VERSION_UNIT. 62265236Sken * Moved ReplyPostHostIndex register to offset 0x6C of the 63265236Sken * MPI2_SYSTEM_INTERFACE_REGS and modified the define for 64265236Sken * MPI2_REPLY_POST_HOST_INDEX_OFFSET. 65265236Sken * Added union of request descriptors. 66265236Sken * Added union of reply descriptors. 67265236Sken * 10-31-07 02.00.04 Bumped MPI2_HEADER_VERSION_UNIT. 68265236Sken * Added define for MPI2_VERSION_02_00. 69265236Sken * Fixed the size of the FunctionDependent5 field in the 70265236Sken * MPI2_DEFAULT_REPLY structure. 71265236Sken * 12-18-07 02.00.05 Bumped MPI2_HEADER_VERSION_UNIT. 72265236Sken * Removed the MPI-defined Fault Codes and extended the 73265236Sken * product specific codes up to 0xEFFF. 74265236Sken * Added a sixth key value for the WriteSequence register 75265236Sken * and changed the flush value to 0x0. 76265236Sken * Added message function codes for Diagnostic Buffer Post 77265236Sken * and Diagnsotic Release. 78265236Sken * New IOCStatus define: MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED 79265236Sken * Moved MPI2_VERSION_UNION from mpi2_ioc.h. 80265236Sken * 02-29-08 02.00.06 Bumped MPI2_HEADER_VERSION_UNIT. 81265236Sken * 03-03-08 02.00.07 Bumped MPI2_HEADER_VERSION_UNIT. 82265236Sken * 05-21-08 02.00.08 Bumped MPI2_HEADER_VERSION_UNIT. 83265236Sken * Added #defines for marking a reply descriptor as unused. 84265236Sken * 06-27-08 02.00.09 Bumped MPI2_HEADER_VERSION_UNIT. 85265236Sken * 10-02-08 02.00.10 Bumped MPI2_HEADER_VERSION_UNIT. 86265236Sken * Moved LUN field defines from mpi2_init.h. 87265236Sken * 01-19-09 02.00.11 Bumped MPI2_HEADER_VERSION_UNIT. 88265236Sken * 05-06-09 02.00.12 Bumped MPI2_HEADER_VERSION_UNIT. 89265236Sken * In all request and reply descriptors, replaced VF_ID 90265236Sken * field with MSIxIndex field. 91265236Sken * Removed DevHandle field from 92265236Sken * MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR and made those 93265236Sken * bytes reserved. 94265236Sken * Added RAID Accelerator functionality. 95265236Sken * 07-30-09 02.00.13 Bumped MPI2_HEADER_VERSION_UNIT. 96265236Sken * 10-28-09 02.00.14 Bumped MPI2_HEADER_VERSION_UNIT. 97265236Sken * Added MSI-x index mask and shift for Reply Post Host 98265236Sken * Index register. 99265236Sken * Added function code for Host Based Discovery Action. 100265236Sken * 02-10-10 02.00.15 Bumped MPI2_HEADER_VERSION_UNIT. 101265236Sken * Added define for MPI2_FUNCTION_PWR_MGMT_CONTROL. 102265236Sken * Added defines for product-specific range of message 103265236Sken * function codes, 0xF0 to 0xFF. 104265236Sken * 05-12-10 02.00.16 Bumped MPI2_HEADER_VERSION_UNIT. 105265236Sken * Added alternative defines for the SGE Direction bit. 106265236Sken * 08-11-10 02.00.17 Bumped MPI2_HEADER_VERSION_UNIT. 107265236Sken * 11-10-10 02.00.18 Bumped MPI2_HEADER_VERSION_UNIT. 108265236Sken * Added MPI2_IEEE_SGE_FLAGS_SYSTEMPLBCPI_ADDR define. 109265236Sken * 02-23-11 02.00.19 Bumped MPI2_HEADER_VERSION_UNIT. 110265236Sken * Added MPI2_FUNCTION_SEND_HOST_MESSAGE. 111265236Sken * 03-09-11 02.00.20 Bumped MPI2_HEADER_VERSION_UNIT. 112265236Sken * 05-25-11 02.00.21 Bumped MPI2_HEADER_VERSION_UNIT. 113265236Sken * 08-24-11 02.00.22 Bumped MPI2_HEADER_VERSION_UNIT. 114265236Sken * 11-18-11 02.00.23 Bumped MPI2_HEADER_VERSION_UNIT. 115265236Sken * Incorporating additions for MPI v2.5. 116265236Sken * 02-06-12 02.00.24 Bumped MPI2_HEADER_VERSION_UNIT. 117265236Sken * 03-29-12 02.00.25 Bumped MPI2_HEADER_VERSION_UNIT. 118265236Sken * Added Hard Reset delay timings. 119265236Sken * 07-10-12 02.00.26 Bumped MPI2_HEADER_VERSION_UNIT. 120265236Sken * 07-26-12 02.00.27 Bumped MPI2_HEADER_VERSION_UNIT. 121265236Sken * 11-27-12 02.00.28 Bumped MPI2_HEADER_VERSION_UNIT. 122265236Sken * 12-20-12 02.00.29 Bumped MPI2_HEADER_VERSION_UNIT. 123265236Sken * Added MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET. 124265236Sken * 04-09-13 02.00.30 Bumped MPI2_HEADER_VERSION_UNIT. 125265236Sken * 04-17-13 02.00.31 Bumped MPI2_HEADER_VERSION_UNIT. 126265236Sken * 08-19-13 02.00.32 Bumped MPI2_HEADER_VERSION_UNIT. 127265236Sken * 12-05-13 02.00.33 Bumped MPI2_HEADER_VERSION_UNIT. 128265236Sken * -------------------------------------------------------------------------- 129265236Sken */ 130265236Sken 131265236Sken#ifndef MPI2_H 132265236Sken#define MPI2_H 133265236Sken 134265236Sken 135265236Sken/***************************************************************************** 136265236Sken* 137265236Sken* MPI Version Definitions 138265236Sken* 139265236Sken*****************************************************************************/ 140265236Sken 141265236Sken#define MPI2_VERSION_MAJOR_MASK (0xFF00) 142265236Sken#define MPI2_VERSION_MAJOR_SHIFT (8) 143265236Sken#define MPI2_VERSION_MINOR_MASK (0x00FF) 144265236Sken#define MPI2_VERSION_MINOR_SHIFT (0) 145265236Sken 146265236Sken/* major version for all MPI v2.x */ 147265236Sken#define MPI2_VERSION_MAJOR (0x02) 148265236Sken 149265236Sken/* minor version for MPI v2.0 compatible products */ 150265236Sken#define MPI2_VERSION_MINOR (0x00) 151265236Sken#define MPI2_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \ 152265236Sken MPI2_VERSION_MINOR) 153265236Sken#define MPI2_VERSION_02_00 (0x0200) 154265236Sken 155265236Sken 156265236Sken/* minor version for MPI v2.5 compatible products */ 157265236Sken#define MPI25_VERSION_MINOR (0x05) 158265236Sken#define MPI25_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \ 159265236Sken MPI25_VERSION_MINOR) 160265236Sken#define MPI2_VERSION_02_05 (0x0205) 161265236Sken 162265236Sken 163265236Sken/* Unit and Dev versioning for this MPI header set */ 164265236Sken#define MPI2_HEADER_VERSION_UNIT (0x21) 165265236Sken#define MPI2_HEADER_VERSION_DEV (0x00) 166265236Sken#define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00) 167265236Sken#define MPI2_HEADER_VERSION_UNIT_SHIFT (8) 168265236Sken#define MPI2_HEADER_VERSION_DEV_MASK (0x00FF) 169265236Sken#define MPI2_HEADER_VERSION_DEV_SHIFT (0) 170265236Sken#define MPI2_HEADER_VERSION ((MPI2_HEADER_VERSION_UNIT << 8) | MPI2_HEADER_VERSION_DEV) 171265236Sken 172265236Sken 173265236Sken/***************************************************************************** 174265236Sken* 175265236Sken* IOC State Definitions 176265236Sken* 177265236Sken*****************************************************************************/ 178265236Sken 179265236Sken#define MPI2_IOC_STATE_RESET (0x00000000) 180265236Sken#define MPI2_IOC_STATE_READY (0x10000000) 181265236Sken#define MPI2_IOC_STATE_OPERATIONAL (0x20000000) 182265236Sken#define MPI2_IOC_STATE_FAULT (0x40000000) 183265236Sken 184265236Sken#define MPI2_IOC_STATE_MASK (0xF0000000) 185265236Sken#define MPI2_IOC_STATE_SHIFT (28) 186265236Sken 187265236Sken/* Fault state range for prodcut specific codes */ 188265236Sken#define MPI2_FAULT_PRODUCT_SPECIFIC_MIN (0x0000) 189265236Sken#define MPI2_FAULT_PRODUCT_SPECIFIC_MAX (0xEFFF) 190265236Sken 191265236Sken 192265236Sken/***************************************************************************** 193265236Sken* 194265236Sken* System Interface Register Definitions 195265236Sken* 196265236Sken*****************************************************************************/ 197265236Sken 198265236Skentypedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS 199265236Sken{ 200265236Sken U32 Doorbell; /* 0x00 */ 201265236Sken U32 WriteSequence; /* 0x04 */ 202265236Sken U32 HostDiagnostic; /* 0x08 */ 203265236Sken U32 Reserved1; /* 0x0C */ 204265236Sken U32 DiagRWData; /* 0x10 */ 205265236Sken U32 DiagRWAddressLow; /* 0x14 */ 206265236Sken U32 DiagRWAddressHigh; /* 0x18 */ 207265236Sken U32 Reserved2[5]; /* 0x1C */ 208265236Sken U32 HostInterruptStatus; /* 0x30 */ 209265236Sken U32 HostInterruptMask; /* 0x34 */ 210265236Sken U32 DCRData; /* 0x38 */ 211265236Sken U32 DCRAddress; /* 0x3C */ 212265236Sken U32 Reserved3[2]; /* 0x40 */ 213265236Sken U32 ReplyFreeHostIndex; /* 0x48 */ 214265236Sken U32 Reserved4[8]; /* 0x4C */ 215265236Sken U32 ReplyPostHostIndex; /* 0x6C */ 216265236Sken U32 Reserved5; /* 0x70 */ 217265236Sken U32 HCBSize; /* 0x74 */ 218265236Sken U32 HCBAddressLow; /* 0x78 */ 219265236Sken U32 HCBAddressHigh; /* 0x7C */ 220265236Sken U32 Reserved6[16]; /* 0x80 */ 221265236Sken U32 RequestDescriptorPostLow; /* 0xC0 */ 222265236Sken U32 RequestDescriptorPostHigh; /* 0xC4 */ 223265236Sken U32 Reserved7[14]; /* 0xC8 */ 224265236Sken} MPI2_SYSTEM_INTERFACE_REGS, MPI2_POINTER PTR_MPI2_SYSTEM_INTERFACE_REGS, 225265236Sken Mpi2SystemInterfaceRegs_t, MPI2_POINTER pMpi2SystemInterfaceRegs_t; 226265236Sken 227265236Sken/* 228265236Sken * Defines for working with the Doorbell register. 229265236Sken */ 230265236Sken#define MPI2_DOORBELL_OFFSET (0x00000000) 231265236Sken 232265236Sken/* IOC --> System values */ 233265236Sken#define MPI2_DOORBELL_USED (0x08000000) 234265236Sken#define MPI2_DOORBELL_WHO_INIT_MASK (0x07000000) 235265236Sken#define MPI2_DOORBELL_WHO_INIT_SHIFT (24) 236265236Sken#define MPI2_DOORBELL_FAULT_CODE_MASK (0x0000FFFF) 237265236Sken#define MPI2_DOORBELL_DATA_MASK (0x0000FFFF) 238265236Sken 239265236Sken/* System --> IOC values */ 240265236Sken#define MPI2_DOORBELL_FUNCTION_MASK (0xFF000000) 241265236Sken#define MPI2_DOORBELL_FUNCTION_SHIFT (24) 242265236Sken#define MPI2_DOORBELL_ADD_DWORDS_MASK (0x00FF0000) 243265236Sken#define MPI2_DOORBELL_ADD_DWORDS_SHIFT (16) 244265236Sken 245265236Sken 246265236Sken/* 247265236Sken * Defines for the WriteSequence register 248265236Sken */ 249265236Sken#define MPI2_WRITE_SEQUENCE_OFFSET (0x00000004) 250265236Sken#define MPI2_WRSEQ_KEY_VALUE_MASK (0x0000000F) 251265236Sken#define MPI2_WRSEQ_FLUSH_KEY_VALUE (0x0) 252265236Sken#define MPI2_WRSEQ_1ST_KEY_VALUE (0xF) 253265236Sken#define MPI2_WRSEQ_2ND_KEY_VALUE (0x4) 254265236Sken#define MPI2_WRSEQ_3RD_KEY_VALUE (0xB) 255265236Sken#define MPI2_WRSEQ_4TH_KEY_VALUE (0x2) 256265236Sken#define MPI2_WRSEQ_5TH_KEY_VALUE (0x7) 257265236Sken#define MPI2_WRSEQ_6TH_KEY_VALUE (0xD) 258265236Sken 259265236Sken/* 260265236Sken * Defines for the HostDiagnostic register 261265236Sken */ 262265236Sken#define MPI2_HOST_DIAGNOSTIC_OFFSET (0x00000008) 263265236Sken 264265236Sken#define MPI2_DIAG_BOOT_DEVICE_SELECT_MASK (0x00001800) 265265236Sken#define MPI2_DIAG_BOOT_DEVICE_SELECT_DEFAULT (0x00000000) 266265236Sken#define MPI2_DIAG_BOOT_DEVICE_SELECT_HCDW (0x00000800) 267265236Sken 268265236Sken#define MPI2_DIAG_CLEAR_FLASH_BAD_SIG (0x00000400) 269265236Sken#define MPI2_DIAG_FORCE_HCB_ON_RESET (0x00000200) 270265236Sken#define MPI2_DIAG_HCB_MODE (0x00000100) 271265236Sken#define MPI2_DIAG_DIAG_WRITE_ENABLE (0x00000080) 272265236Sken#define MPI2_DIAG_FLASH_BAD_SIG (0x00000040) 273265236Sken#define MPI2_DIAG_RESET_HISTORY (0x00000020) 274265236Sken#define MPI2_DIAG_DIAG_RW_ENABLE (0x00000010) 275265236Sken#define MPI2_DIAG_RESET_ADAPTER (0x00000004) 276265236Sken#define MPI2_DIAG_HOLD_IOC_RESET (0x00000002) 277265236Sken 278265236Sken/* 279265236Sken * Offsets for DiagRWData and address 280265236Sken */ 281265236Sken#define MPI2_DIAG_RW_DATA_OFFSET (0x00000010) 282265236Sken#define MPI2_DIAG_RW_ADDRESS_LOW_OFFSET (0x00000014) 283265236Sken#define MPI2_DIAG_RW_ADDRESS_HIGH_OFFSET (0x00000018) 284265236Sken 285265236Sken/* 286265236Sken * Defines for the HostInterruptStatus register 287265236Sken */ 288265236Sken#define MPI2_HOST_INTERRUPT_STATUS_OFFSET (0x00000030) 289265236Sken#define MPI2_HIS_SYS2IOC_DB_STATUS (0x80000000) 290265236Sken#define MPI2_HIS_IOP_DOORBELL_STATUS MPI2_HIS_SYS2IOC_DB_STATUS 291265236Sken#define MPI2_HIS_RESET_IRQ_STATUS (0x40000000) 292265236Sken#define MPI2_HIS_REPLY_DESCRIPTOR_INTERRUPT (0x00000008) 293265236Sken#define MPI2_HIS_IOC2SYS_DB_STATUS (0x00000001) 294265236Sken#define MPI2_HIS_DOORBELL_INTERRUPT MPI2_HIS_IOC2SYS_DB_STATUS 295265236Sken 296265236Sken/* 297265236Sken * Defines for the HostInterruptMask register 298265236Sken */ 299265236Sken#define MPI2_HOST_INTERRUPT_MASK_OFFSET (0x00000034) 300265236Sken#define MPI2_HIM_RESET_IRQ_MASK (0x40000000) 301265236Sken#define MPI2_HIM_REPLY_INT_MASK (0x00000008) 302265236Sken#define MPI2_HIM_RIM MPI2_HIM_REPLY_INT_MASK 303265236Sken#define MPI2_HIM_IOC2SYS_DB_MASK (0x00000001) 304265236Sken#define MPI2_HIM_DIM MPI2_HIM_IOC2SYS_DB_MASK 305265236Sken 306265236Sken/* 307265236Sken * Offsets for DCRData and address 308265236Sken */ 309265236Sken#define MPI2_DCR_DATA_OFFSET (0x00000038) 310265236Sken#define MPI2_DCR_ADDRESS_OFFSET (0x0000003C) 311265236Sken 312265236Sken/* 313265236Sken * Offset for the Reply Free Queue 314265236Sken */ 315265236Sken#define MPI2_REPLY_FREE_HOST_INDEX_OFFSET (0x00000048) 316265236Sken 317265236Sken/* 318265236Sken * Defines for the Reply Descriptor Post Queue 319265236Sken */ 320265236Sken#define MPI2_REPLY_POST_HOST_INDEX_OFFSET (0x0000006C) 321265236Sken#define MPI2_REPLY_POST_HOST_INDEX_MASK (0x00FFFFFF) 322265236Sken#define MPI2_RPHI_MSIX_INDEX_MASK (0xFF000000) 323265236Sken#define MPI2_RPHI_MSIX_INDEX_SHIFT (24) 324265236Sken#define MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET (0x0000030C) /* MPI v2.5 only */ 325265236Sken 326265236Sken 327265236Sken/* 328265236Sken * Defines for the HCBSize and address 329265236Sken */ 330265236Sken#define MPI2_HCB_SIZE_OFFSET (0x00000074) 331265236Sken#define MPI2_HCB_SIZE_SIZE_MASK (0xFFFFF000) 332265236Sken#define MPI2_HCB_SIZE_HCB_ENABLE (0x00000001) 333265236Sken 334265236Sken#define MPI2_HCB_ADDRESS_LOW_OFFSET (0x00000078) 335265236Sken#define MPI2_HCB_ADDRESS_HIGH_OFFSET (0x0000007C) 336265236Sken 337265236Sken/* 338265236Sken * Offsets for the Request Queue 339265236Sken */ 340265236Sken#define MPI2_REQUEST_DESCRIPTOR_POST_LOW_OFFSET (0x000000C0) 341265236Sken#define MPI2_REQUEST_DESCRIPTOR_POST_HIGH_OFFSET (0x000000C4) 342265236Sken 343265236Sken 344265236Sken/* Hard Reset delay timings */ 345265236Sken#define MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC (50000) 346265236Sken#define MPI2_HARD_RESET_PCIE_RESET_READ_WINDOW_MICRO_SEC (255000) 347265236Sken#define MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC (256000) 348265236Sken 349265236Sken/***************************************************************************** 350265236Sken* 351265236Sken* Message Descriptors 352265236Sken* 353265236Sken*****************************************************************************/ 354265236Sken 355265236Sken/* Request Descriptors */ 356265236Sken 357265236Sken/* Default Request Descriptor */ 358265236Skentypedef struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR 359265236Sken{ 360265236Sken U8 RequestFlags; /* 0x00 */ 361265236Sken U8 MSIxIndex; /* 0x01 */ 362265236Sken U16 SMID; /* 0x02 */ 363265236Sken U16 LMID; /* 0x04 */ 364265236Sken U16 DescriptorTypeDependent; /* 0x06 */ 365265236Sken} MPI2_DEFAULT_REQUEST_DESCRIPTOR, 366265236Sken MPI2_POINTER PTR_MPI2_DEFAULT_REQUEST_DESCRIPTOR, 367265236Sken Mpi2DefaultRequestDescriptor_t, MPI2_POINTER pMpi2DefaultRequestDescriptor_t; 368265236Sken 369265236Sken/* defines for the RequestFlags field */ 370265236Sken#define MPI2_REQ_DESCRIPT_FLAGS_TYPE_MASK (0x0E) 371265236Sken#define MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO (0x00) 372265236Sken#define MPI2_REQ_DESCRIPT_FLAGS_SCSI_TARGET (0x02) 373265236Sken#define MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY (0x06) 374265236Sken#define MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE (0x08) 375265236Sken#define MPI2_REQ_DESCRIPT_FLAGS_RAID_ACCELERATOR (0x0A) 376265236Sken#define MPI25_REQ_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO (0x0C) 377265236Sken 378265236Sken#define MPI2_REQ_DESCRIPT_FLAGS_IOC_FIFO_MARKER (0x01) 379265236Sken 380265236Sken 381265236Sken/* High Priority Request Descriptor */ 382265236Skentypedef struct _MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR 383265236Sken{ 384265236Sken U8 RequestFlags; /* 0x00 */ 385265236Sken U8 MSIxIndex; /* 0x01 */ 386265236Sken U16 SMID; /* 0x02 */ 387265236Sken U16 LMID; /* 0x04 */ 388265236Sken U16 Reserved1; /* 0x06 */ 389265236Sken} MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR, 390265236Sken MPI2_POINTER PTR_MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR, 391265236Sken Mpi2HighPriorityRequestDescriptor_t, 392265236Sken MPI2_POINTER pMpi2HighPriorityRequestDescriptor_t; 393265236Sken 394265236Sken 395265236Sken/* SCSI IO Request Descriptor */ 396265236Skentypedef struct _MPI2_SCSI_IO_REQUEST_DESCRIPTOR 397265236Sken{ 398265236Sken U8 RequestFlags; /* 0x00 */ 399265236Sken U8 MSIxIndex; /* 0x01 */ 400265236Sken U16 SMID; /* 0x02 */ 401265236Sken U16 LMID; /* 0x04 */ 402265236Sken U16 DevHandle; /* 0x06 */ 403265236Sken} MPI2_SCSI_IO_REQUEST_DESCRIPTOR, 404265236Sken MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST_DESCRIPTOR, 405265236Sken Mpi2SCSIIORequestDescriptor_t, MPI2_POINTER pMpi2SCSIIORequestDescriptor_t; 406265236Sken 407265236Sken 408265236Sken/* SCSI Target Request Descriptor */ 409265236Skentypedef struct _MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR 410265236Sken{ 411265236Sken U8 RequestFlags; /* 0x00 */ 412265236Sken U8 MSIxIndex; /* 0x01 */ 413265236Sken U16 SMID; /* 0x02 */ 414265236Sken U16 LMID; /* 0x04 */ 415265236Sken U16 IoIndex; /* 0x06 */ 416265236Sken} MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR, 417265236Sken MPI2_POINTER PTR_MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR, 418265236Sken Mpi2SCSITargetRequestDescriptor_t, 419265236Sken MPI2_POINTER pMpi2SCSITargetRequestDescriptor_t; 420265236Sken 421265236Sken 422265236Sken/* RAID Accelerator Request Descriptor */ 423265236Skentypedef struct _MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR 424265236Sken{ 425265236Sken U8 RequestFlags; /* 0x00 */ 426265236Sken U8 MSIxIndex; /* 0x01 */ 427265236Sken U16 SMID; /* 0x02 */ 428265236Sken U16 LMID; /* 0x04 */ 429265236Sken U16 Reserved; /* 0x06 */ 430265236Sken} MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR, 431265236Sken MPI2_POINTER PTR_MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR, 432265236Sken Mpi2RAIDAcceleratorRequestDescriptor_t, 433265236Sken MPI2_POINTER pMpi2RAIDAcceleratorRequestDescriptor_t; 434265236Sken 435265236Sken 436265236Sken/* Fast Path SCSI IO Request Descriptor */ 437265236Skentypedef MPI2_SCSI_IO_REQUEST_DESCRIPTOR 438265236Sken MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR, 439265236Sken MPI2_POINTER PTR_MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR, 440265236Sken Mpi25FastPathSCSIIORequestDescriptor_t, 441265236Sken MPI2_POINTER pMpi25FastPathSCSIIORequestDescriptor_t; 442265236Sken 443265236Sken 444265236Sken/* union of Request Descriptors */ 445265236Skentypedef union _MPI2_REQUEST_DESCRIPTOR_UNION 446265236Sken{ 447265236Sken MPI2_DEFAULT_REQUEST_DESCRIPTOR Default; 448265236Sken MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR HighPriority; 449265236Sken MPI2_SCSI_IO_REQUEST_DESCRIPTOR SCSIIO; 450265236Sken MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR SCSITarget; 451265236Sken MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR RAIDAccelerator; 452265236Sken MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR FastPathSCSIIO; 453265236Sken U64 Words; 454265236Sken} MPI2_REQUEST_DESCRIPTOR_UNION, MPI2_POINTER PTR_MPI2_REQUEST_DESCRIPTOR_UNION, 455265236Sken Mpi2RequestDescriptorUnion_t, MPI2_POINTER pMpi2RequestDescriptorUnion_t; 456265236Sken 457265236Sken 458265236Sken/* Reply Descriptors */ 459265236Sken 460265236Sken/* Default Reply Descriptor */ 461265236Skentypedef struct _MPI2_DEFAULT_REPLY_DESCRIPTOR 462265236Sken{ 463265236Sken U8 ReplyFlags; /* 0x00 */ 464265236Sken U8 MSIxIndex; /* 0x01 */ 465265236Sken U16 DescriptorTypeDependent1; /* 0x02 */ 466265236Sken U32 DescriptorTypeDependent2; /* 0x04 */ 467265236Sken} MPI2_DEFAULT_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_DEFAULT_REPLY_DESCRIPTOR, 468265236Sken Mpi2DefaultReplyDescriptor_t, MPI2_POINTER pMpi2DefaultReplyDescriptor_t; 469265236Sken 470265236Sken/* defines for the ReplyFlags field */ 471265236Sken#define MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK (0x0F) 472265236Sken#define MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS (0x00) 473265236Sken#define MPI2_RPY_DESCRIPT_FLAGS_ADDRESS_REPLY (0x01) 474265236Sken#define MPI2_RPY_DESCRIPT_FLAGS_TARGETASSIST_SUCCESS (0x02) 475265236Sken#define MPI2_RPY_DESCRIPT_FLAGS_TARGET_COMMAND_BUFFER (0x03) 476265236Sken#define MPI2_RPY_DESCRIPT_FLAGS_RAID_ACCELERATOR_SUCCESS (0x05) 477265236Sken#define MPI25_RPY_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO_SUCCESS (0x06) 478265236Sken#define MPI2_RPY_DESCRIPT_FLAGS_UNUSED (0x0F) 479265236Sken 480265236Sken/* values for marking a reply descriptor as unused */ 481265236Sken#define MPI2_RPY_DESCRIPT_UNUSED_WORD0_MARK (0xFFFFFFFF) 482265236Sken#define MPI2_RPY_DESCRIPT_UNUSED_WORD1_MARK (0xFFFFFFFF) 483265236Sken 484265236Sken/* Address Reply Descriptor */ 485265236Skentypedef struct _MPI2_ADDRESS_REPLY_DESCRIPTOR 486265236Sken{ 487265236Sken U8 ReplyFlags; /* 0x00 */ 488265236Sken U8 MSIxIndex; /* 0x01 */ 489265236Sken U16 SMID; /* 0x02 */ 490265236Sken U32 ReplyFrameAddress; /* 0x04 */ 491265236Sken} MPI2_ADDRESS_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_ADDRESS_REPLY_DESCRIPTOR, 492265236Sken Mpi2AddressReplyDescriptor_t, MPI2_POINTER pMpi2AddressReplyDescriptor_t; 493265236Sken 494265236Sken#define MPI2_ADDRESS_REPLY_SMID_INVALID (0x00) 495265236Sken 496265236Sken 497265236Sken/* SCSI IO Success Reply Descriptor */ 498265236Skentypedef struct _MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR 499265236Sken{ 500265236Sken U8 ReplyFlags; /* 0x00 */ 501265236Sken U8 MSIxIndex; /* 0x01 */ 502265236Sken U16 SMID; /* 0x02 */ 503265236Sken U16 TaskTag; /* 0x04 */ 504265236Sken U16 Reserved1; /* 0x06 */ 505265236Sken} MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 506265236Sken MPI2_POINTER PTR_MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 507265236Sken Mpi2SCSIIOSuccessReplyDescriptor_t, 508265236Sken MPI2_POINTER pMpi2SCSIIOSuccessReplyDescriptor_t; 509265236Sken 510265236Sken 511265236Sken/* TargetAssist Success Reply Descriptor */ 512265236Skentypedef struct _MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR 513265236Sken{ 514265236Sken U8 ReplyFlags; /* 0x00 */ 515265236Sken U8 MSIxIndex; /* 0x01 */ 516265236Sken U16 SMID; /* 0x02 */ 517265236Sken U8 SequenceNumber; /* 0x04 */ 518265236Sken U8 Reserved1; /* 0x05 */ 519265236Sken U16 IoIndex; /* 0x06 */ 520265236Sken} MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR, 521265236Sken MPI2_POINTER PTR_MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR, 522265236Sken Mpi2TargetAssistSuccessReplyDescriptor_t, 523265236Sken MPI2_POINTER pMpi2TargetAssistSuccessReplyDescriptor_t; 524265236Sken 525265236Sken 526265236Sken/* Target Command Buffer Reply Descriptor */ 527265236Skentypedef struct _MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR 528265236Sken{ 529265236Sken U8 ReplyFlags; /* 0x00 */ 530265236Sken U8 MSIxIndex; /* 0x01 */ 531265236Sken U8 VP_ID; /* 0x02 */ 532265236Sken U8 Flags; /* 0x03 */ 533265236Sken U16 InitiatorDevHandle; /* 0x04 */ 534265236Sken U16 IoIndex; /* 0x06 */ 535265236Sken} MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR, 536265236Sken MPI2_POINTER PTR_MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR, 537265236Sken Mpi2TargetCommandBufferReplyDescriptor_t, 538265236Sken MPI2_POINTER pMpi2TargetCommandBufferReplyDescriptor_t; 539265236Sken 540265236Sken/* defines for Flags field */ 541265236Sken#define MPI2_RPY_DESCRIPT_TCB_FLAGS_PHYNUM_MASK (0x3F) 542265236Sken 543265236Sken 544265236Sken/* RAID Accelerator Success Reply Descriptor */ 545265236Skentypedef struct _MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR 546265236Sken{ 547265236Sken U8 ReplyFlags; /* 0x00 */ 548265236Sken U8 MSIxIndex; /* 0x01 */ 549265236Sken U16 SMID; /* 0x02 */ 550265236Sken U32 Reserved; /* 0x04 */ 551265236Sken} MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR, 552265236Sken MPI2_POINTER PTR_MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR, 553265236Sken Mpi2RAIDAcceleratorSuccessReplyDescriptor_t, 554265236Sken MPI2_POINTER pMpi2RAIDAcceleratorSuccessReplyDescriptor_t; 555265236Sken 556265236Sken 557265236Sken/* Fast Path SCSI IO Success Reply Descriptor */ 558265236Skentypedef MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR 559265236Sken MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 560265236Sken MPI2_POINTER PTR_MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 561265236Sken Mpi25FastPathSCSIIOSuccessReplyDescriptor_t, 562265236Sken MPI2_POINTER pMpi25FastPathSCSIIOSuccessReplyDescriptor_t; 563265236Sken 564265236Sken 565265236Sken/* union of Reply Descriptors */ 566265236Skentypedef union _MPI2_REPLY_DESCRIPTORS_UNION 567265236Sken{ 568265236Sken MPI2_DEFAULT_REPLY_DESCRIPTOR Default; 569265236Sken MPI2_ADDRESS_REPLY_DESCRIPTOR AddressReply; 570265236Sken MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR SCSIIOSuccess; 571265236Sken MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR TargetAssistSuccess; 572265236Sken MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR TargetCommandBuffer; 573265236Sken MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR RAIDAcceleratorSuccess; 574265236Sken MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR FastPathSCSIIOSuccess; 575265236Sken U64 Words; 576265236Sken} MPI2_REPLY_DESCRIPTORS_UNION, MPI2_POINTER PTR_MPI2_REPLY_DESCRIPTORS_UNION, 577265236Sken Mpi2ReplyDescriptorsUnion_t, MPI2_POINTER pMpi2ReplyDescriptorsUnion_t; 578265236Sken 579265236Sken 580265236Sken 581265236Sken/***************************************************************************** 582265236Sken* 583265236Sken* Message Functions 584265236Sken* 585265236Sken*****************************************************************************/ 586265236Sken 587265236Sken#define MPI2_FUNCTION_SCSI_IO_REQUEST (0x00) /* SCSI IO */ 588265236Sken#define MPI2_FUNCTION_SCSI_TASK_MGMT (0x01) /* SCSI Task Management */ 589265236Sken#define MPI2_FUNCTION_IOC_INIT (0x02) /* IOC Init */ 590265236Sken#define MPI2_FUNCTION_IOC_FACTS (0x03) /* IOC Facts */ 591265236Sken#define MPI2_FUNCTION_CONFIG (0x04) /* Configuration */ 592265236Sken#define MPI2_FUNCTION_PORT_FACTS (0x05) /* Port Facts */ 593265236Sken#define MPI2_FUNCTION_PORT_ENABLE (0x06) /* Port Enable */ 594265236Sken#define MPI2_FUNCTION_EVENT_NOTIFICATION (0x07) /* Event Notification */ 595265236Sken#define MPI2_FUNCTION_EVENT_ACK (0x08) /* Event Acknowledge */ 596265236Sken#define MPI2_FUNCTION_FW_DOWNLOAD (0x09) /* FW Download */ 597265236Sken#define MPI2_FUNCTION_TARGET_ASSIST (0x0B) /* Target Assist */ 598265236Sken#define MPI2_FUNCTION_TARGET_STATUS_SEND (0x0C) /* Target Status Send */ 599265236Sken#define MPI2_FUNCTION_TARGET_MODE_ABORT (0x0D) /* Target Mode Abort */ 600265236Sken#define MPI2_FUNCTION_FW_UPLOAD (0x12) /* FW Upload */ 601265236Sken#define MPI2_FUNCTION_RAID_ACTION (0x15) /* RAID Action */ 602265236Sken#define MPI2_FUNCTION_RAID_SCSI_IO_PASSTHROUGH (0x16) /* SCSI IO RAID Passthrough */ 603265236Sken#define MPI2_FUNCTION_TOOLBOX (0x17) /* Toolbox */ 604265236Sken#define MPI2_FUNCTION_SCSI_ENCLOSURE_PROCESSOR (0x18) /* SCSI Enclosure Processor */ 605265236Sken#define MPI2_FUNCTION_SMP_PASSTHROUGH (0x1A) /* SMP Passthrough */ 606265236Sken#define MPI2_FUNCTION_SAS_IO_UNIT_CONTROL (0x1B) /* SAS IO Unit Control */ 607265236Sken#define MPI2_FUNCTION_SATA_PASSTHROUGH (0x1C) /* SATA Passthrough */ 608265236Sken#define MPI2_FUNCTION_DIAG_BUFFER_POST (0x1D) /* Diagnostic Buffer Post */ 609265236Sken#define MPI2_FUNCTION_DIAG_RELEASE (0x1E) /* Diagnostic Release */ 610265236Sken#define MPI2_FUNCTION_TARGET_CMD_BUF_BASE_POST (0x24) /* Target Command Buffer Post Base */ 611265236Sken#define MPI2_FUNCTION_TARGET_CMD_BUF_LIST_POST (0x25) /* Target Command Buffer Post List */ 612265236Sken#define MPI2_FUNCTION_RAID_ACCELERATOR (0x2C) /* RAID Accelerator */ 613265236Sken#define MPI2_FUNCTION_HOST_BASED_DISCOVERY_ACTION (0x2F) /* Host Based Discovery Action */ 614265236Sken#define MPI2_FUNCTION_PWR_MGMT_CONTROL (0x30) /* Power Management Control */ 615265236Sken#define MPI2_FUNCTION_SEND_HOST_MESSAGE (0x31) /* Send Host Message */ 616265236Sken#define MPI2_FUNCTION_MIN_PRODUCT_SPECIFIC (0xF0) /* beginning of product-specific range */ 617265236Sken#define MPI2_FUNCTION_MAX_PRODUCT_SPECIFIC (0xFF) /* end of product-specific range */ 618265236Sken 619265236Sken 620265236Sken 621265236Sken/* Doorbell functions */ 622265236Sken#define MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET (0x40) 623265236Sken#define MPI2_FUNCTION_HANDSHAKE (0x42) 624265236Sken 625265236Sken 626265236Sken/***************************************************************************** 627265236Sken* 628265236Sken* IOC Status Values 629265236Sken* 630265236Sken*****************************************************************************/ 631265236Sken 632265236Sken/* mask for IOCStatus status value */ 633265236Sken#define MPI2_IOCSTATUS_MASK (0x7FFF) 634265236Sken 635265236Sken/**************************************************************************** 636265236Sken* Common IOCStatus values for all replies 637265236Sken****************************************************************************/ 638265236Sken 639265236Sken#define MPI2_IOCSTATUS_SUCCESS (0x0000) 640265236Sken#define MPI2_IOCSTATUS_INVALID_FUNCTION (0x0001) 641265236Sken#define MPI2_IOCSTATUS_BUSY (0x0002) 642265236Sken#define MPI2_IOCSTATUS_INVALID_SGL (0x0003) 643265236Sken#define MPI2_IOCSTATUS_INTERNAL_ERROR (0x0004) 644265236Sken#define MPI2_IOCSTATUS_INVALID_VPID (0x0005) 645265236Sken#define MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES (0x0006) 646265236Sken#define MPI2_IOCSTATUS_INVALID_FIELD (0x0007) 647265236Sken#define MPI2_IOCSTATUS_INVALID_STATE (0x0008) 648265236Sken#define MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED (0x0009) 649265236Sken 650265236Sken/**************************************************************************** 651265236Sken* Config IOCStatus values 652265236Sken****************************************************************************/ 653265236Sken 654265236Sken#define MPI2_IOCSTATUS_CONFIG_INVALID_ACTION (0x0020) 655265236Sken#define MPI2_IOCSTATUS_CONFIG_INVALID_TYPE (0x0021) 656265236Sken#define MPI2_IOCSTATUS_CONFIG_INVALID_PAGE (0x0022) 657265236Sken#define MPI2_IOCSTATUS_CONFIG_INVALID_DATA (0x0023) 658265236Sken#define MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS (0x0024) 659265236Sken#define MPI2_IOCSTATUS_CONFIG_CANT_COMMIT (0x0025) 660265236Sken 661265236Sken/**************************************************************************** 662265236Sken* SCSI IO Reply 663265236Sken****************************************************************************/ 664265236Sken 665265236Sken#define MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR (0x0040) 666265236Sken#define MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE (0x0042) 667265236Sken#define MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE (0x0043) 668265236Sken#define MPI2_IOCSTATUS_SCSI_DATA_OVERRUN (0x0044) 669265236Sken#define MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN (0x0045) 670265236Sken#define MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR (0x0046) 671265236Sken#define MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR (0x0047) 672265236Sken#define MPI2_IOCSTATUS_SCSI_TASK_TERMINATED (0x0048) 673265236Sken#define MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH (0x0049) 674265236Sken#define MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED (0x004A) 675265236Sken#define MPI2_IOCSTATUS_SCSI_IOC_TERMINATED (0x004B) 676265236Sken#define MPI2_IOCSTATUS_SCSI_EXT_TERMINATED (0x004C) 677265236Sken 678265236Sken/**************************************************************************** 679265236Sken* For use by SCSI Initiator and SCSI Target end-to-end data protection 680265236Sken****************************************************************************/ 681265236Sken 682265236Sken#define MPI2_IOCSTATUS_EEDP_GUARD_ERROR (0x004D) 683265236Sken#define MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR (0x004E) 684265236Sken#define MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR (0x004F) 685265236Sken 686265236Sken/**************************************************************************** 687265236Sken* SCSI Target values 688265236Sken****************************************************************************/ 689265236Sken 690265236Sken#define MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX (0x0062) 691265236Sken#define MPI2_IOCSTATUS_TARGET_ABORTED (0x0063) 692265236Sken#define MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE (0x0064) 693265236Sken#define MPI2_IOCSTATUS_TARGET_NO_CONNECTION (0x0065) 694265236Sken#define MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH (0x006A) 695265236Sken#define MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR (0x006D) 696265236Sken#define MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA (0x006E) 697265236Sken#define MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT (0x006F) 698265236Sken#define MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT (0x0070) 699265236Sken#define MPI2_IOCSTATUS_TARGET_NAK_RECEIVED (0x0071) 700265236Sken 701265236Sken/**************************************************************************** 702265236Sken* Serial Attached SCSI values 703265236Sken****************************************************************************/ 704265236Sken 705265236Sken#define MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED (0x0090) 706265236Sken#define MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN (0x0091) 707265236Sken 708265236Sken/**************************************************************************** 709265236Sken* Diagnostic Buffer Post / Diagnostic Release values 710265236Sken****************************************************************************/ 711265236Sken 712265236Sken#define MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED (0x00A0) 713265236Sken 714265236Sken/**************************************************************************** 715265236Sken* RAID Accelerator values 716265236Sken****************************************************************************/ 717265236Sken 718265236Sken#define MPI2_IOCSTATUS_RAID_ACCEL_ERROR (0x00B0) 719265236Sken 720265236Sken/**************************************************************************** 721265236Sken* IOCStatus flag to indicate that log info is available 722265236Sken****************************************************************************/ 723265236Sken 724265236Sken#define MPI2_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE (0x8000) 725265236Sken 726265236Sken/**************************************************************************** 727265236Sken* IOCLogInfo Types 728265236Sken****************************************************************************/ 729265236Sken 730265236Sken#define MPI2_IOCLOGINFO_TYPE_MASK (0xF0000000) 731265236Sken#define MPI2_IOCLOGINFO_TYPE_SHIFT (28) 732265236Sken#define MPI2_IOCLOGINFO_TYPE_NONE (0x0) 733265236Sken#define MPI2_IOCLOGINFO_TYPE_SCSI (0x1) 734265236Sken#define MPI2_IOCLOGINFO_TYPE_FC (0x2) 735265236Sken#define MPI2_IOCLOGINFO_TYPE_SAS (0x3) 736265236Sken#define MPI2_IOCLOGINFO_TYPE_ISCSI (0x4) 737265236Sken#define MPI2_IOCLOGINFO_LOG_DATA_MASK (0x0FFFFFFF) 738265236Sken 739265236Sken 740265236Sken/***************************************************************************** 741265236Sken* 742265236Sken* Standard Message Structures 743265236Sken* 744265236Sken*****************************************************************************/ 745265236Sken 746265236Sken/**************************************************************************** 747265236Sken* Request Message Header for all request messages 748265236Sken****************************************************************************/ 749265236Sken 750265236Skentypedef struct _MPI2_REQUEST_HEADER 751265236Sken{ 752265236Sken U16 FunctionDependent1; /* 0x00 */ 753265236Sken U8 ChainOffset; /* 0x02 */ 754265236Sken U8 Function; /* 0x03 */ 755265236Sken U16 FunctionDependent2; /* 0x04 */ 756265236Sken U8 FunctionDependent3; /* 0x06 */ 757265236Sken U8 MsgFlags; /* 0x07 */ 758265236Sken U8 VP_ID; /* 0x08 */ 759265236Sken U8 VF_ID; /* 0x09 */ 760265236Sken U16 Reserved1; /* 0x0A */ 761265236Sken} MPI2_REQUEST_HEADER, MPI2_POINTER PTR_MPI2_REQUEST_HEADER, 762265236Sken MPI2RequestHeader_t, MPI2_POINTER pMPI2RequestHeader_t; 763265236Sken 764265236Sken 765265236Sken/**************************************************************************** 766265236Sken* Default Reply 767265236Sken****************************************************************************/ 768265236Sken 769265236Skentypedef struct _MPI2_DEFAULT_REPLY 770265236Sken{ 771265236Sken U16 FunctionDependent1; /* 0x00 */ 772265236Sken U8 MsgLength; /* 0x02 */ 773265236Sken U8 Function; /* 0x03 */ 774265236Sken U16 FunctionDependent2; /* 0x04 */ 775265236Sken U8 FunctionDependent3; /* 0x06 */ 776265236Sken U8 MsgFlags; /* 0x07 */ 777265236Sken U8 VP_ID; /* 0x08 */ 778265236Sken U8 VF_ID; /* 0x09 */ 779265236Sken U16 Reserved1; /* 0x0A */ 780265236Sken U16 FunctionDependent5; /* 0x0C */ 781265236Sken U16 IOCStatus; /* 0x0E */ 782265236Sken U32 IOCLogInfo; /* 0x10 */ 783265236Sken} MPI2_DEFAULT_REPLY, MPI2_POINTER PTR_MPI2_DEFAULT_REPLY, 784265236Sken MPI2DefaultReply_t, MPI2_POINTER pMPI2DefaultReply_t; 785265236Sken 786265236Sken 787265236Sken/* common version structure/union used in messages and configuration pages */ 788265236Sken 789265236Skentypedef struct _MPI2_VERSION_STRUCT 790265236Sken{ 791265236Sken U8 Dev; /* 0x00 */ 792265236Sken U8 Unit; /* 0x01 */ 793265236Sken U8 Minor; /* 0x02 */ 794265236Sken U8 Major; /* 0x03 */ 795265236Sken} MPI2_VERSION_STRUCT; 796265236Sken 797265236Skentypedef union _MPI2_VERSION_UNION 798265236Sken{ 799265236Sken MPI2_VERSION_STRUCT Struct; 800265236Sken U32 Word; 801265236Sken} MPI2_VERSION_UNION; 802265236Sken 803265236Sken 804265236Sken/* LUN field defines, common to many structures */ 805265236Sken#define MPI2_LUN_FIRST_LEVEL_ADDRESSING (0x0000FFFF) 806265236Sken#define MPI2_LUN_SECOND_LEVEL_ADDRESSING (0xFFFF0000) 807265236Sken#define MPI2_LUN_THIRD_LEVEL_ADDRESSING (0x0000FFFF) 808265236Sken#define MPI2_LUN_FOURTH_LEVEL_ADDRESSING (0xFFFF0000) 809265236Sken#define MPI2_LUN_LEVEL_1_WORD (0xFF00) 810265236Sken#define MPI2_LUN_LEVEL_1_DWORD (0x0000FF00) 811265236Sken 812265236Sken 813265236Sken/***************************************************************************** 814265236Sken* 815265236Sken* Fusion-MPT MPI Scatter Gather Elements 816265236Sken* 817265236Sken*****************************************************************************/ 818265236Sken 819265236Sken/**************************************************************************** 820265236Sken* MPI Simple Element structures 821265236Sken****************************************************************************/ 822265236Sken 823265236Skentypedef struct _MPI2_SGE_SIMPLE32 824265236Sken{ 825265236Sken U32 FlagsLength; 826265236Sken U32 Address; 827265236Sken} MPI2_SGE_SIMPLE32, MPI2_POINTER PTR_MPI2_SGE_SIMPLE32, 828265236Sken Mpi2SGESimple32_t, MPI2_POINTER pMpi2SGESimple32_t; 829265236Sken 830265236Skentypedef struct _MPI2_SGE_SIMPLE64 831265236Sken{ 832265236Sken U32 FlagsLength; 833265236Sken U64 Address; 834265236Sken} MPI2_SGE_SIMPLE64, MPI2_POINTER PTR_MPI2_SGE_SIMPLE64, 835265236Sken Mpi2SGESimple64_t, MPI2_POINTER pMpi2SGESimple64_t; 836265236Sken 837265236Skentypedef struct _MPI2_SGE_SIMPLE_UNION 838265236Sken{ 839265236Sken U32 FlagsLength; 840265236Sken union 841265236Sken { 842265236Sken U32 Address32; 843265236Sken U64 Address64; 844265236Sken } u; 845265236Sken} MPI2_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_SGE_SIMPLE_UNION, 846265236Sken Mpi2SGESimpleUnion_t, MPI2_POINTER pMpi2SGESimpleUnion_t; 847265236Sken 848265236Sken 849265236Sken/**************************************************************************** 850265236Sken* MPI Chain Element structures - for MPI v2.0 products only 851265236Sken****************************************************************************/ 852265236Sken 853265236Skentypedef struct _MPI2_SGE_CHAIN32 854265236Sken{ 855265236Sken U16 Length; 856265236Sken U8 NextChainOffset; 857265236Sken U8 Flags; 858265236Sken U32 Address; 859265236Sken} MPI2_SGE_CHAIN32, MPI2_POINTER PTR_MPI2_SGE_CHAIN32, 860265236Sken Mpi2SGEChain32_t, MPI2_POINTER pMpi2SGEChain32_t; 861265236Sken 862265236Skentypedef struct _MPI2_SGE_CHAIN64 863265236Sken{ 864265236Sken U16 Length; 865265236Sken U8 NextChainOffset; 866265236Sken U8 Flags; 867265236Sken U64 Address; 868265236Sken} MPI2_SGE_CHAIN64, MPI2_POINTER PTR_MPI2_SGE_CHAIN64, 869265236Sken Mpi2SGEChain64_t, MPI2_POINTER pMpi2SGEChain64_t; 870265236Sken 871265236Skentypedef struct _MPI2_SGE_CHAIN_UNION 872265236Sken{ 873265236Sken U16 Length; 874265236Sken U8 NextChainOffset; 875265236Sken U8 Flags; 876265236Sken union 877265236Sken { 878265236Sken U32 Address32; 879265236Sken U64 Address64; 880265236Sken } u; 881265236Sken} MPI2_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_SGE_CHAIN_UNION, 882265236Sken Mpi2SGEChainUnion_t, MPI2_POINTER pMpi2SGEChainUnion_t; 883265236Sken 884265236Sken 885265236Sken/**************************************************************************** 886265236Sken* MPI Transaction Context Element structures - for MPI v2.0 products only 887265236Sken****************************************************************************/ 888265236Sken 889265236Skentypedef struct _MPI2_SGE_TRANSACTION32 890265236Sken{ 891265236Sken U8 Reserved; 892265236Sken U8 ContextSize; 893265236Sken U8 DetailsLength; 894265236Sken U8 Flags; 895265236Sken U32 TransactionContext[1]; 896265236Sken U32 TransactionDetails[1]; 897265236Sken} MPI2_SGE_TRANSACTION32, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION32, 898265236Sken Mpi2SGETransaction32_t, MPI2_POINTER pMpi2SGETransaction32_t; 899265236Sken 900265236Skentypedef struct _MPI2_SGE_TRANSACTION64 901265236Sken{ 902265236Sken U8 Reserved; 903265236Sken U8 ContextSize; 904265236Sken U8 DetailsLength; 905265236Sken U8 Flags; 906265236Sken U32 TransactionContext[2]; 907265236Sken U32 TransactionDetails[1]; 908265236Sken} MPI2_SGE_TRANSACTION64, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION64, 909265236Sken Mpi2SGETransaction64_t, MPI2_POINTER pMpi2SGETransaction64_t; 910265236Sken 911265236Skentypedef struct _MPI2_SGE_TRANSACTION96 912265236Sken{ 913265236Sken U8 Reserved; 914265236Sken U8 ContextSize; 915265236Sken U8 DetailsLength; 916265236Sken U8 Flags; 917265236Sken U32 TransactionContext[3]; 918265236Sken U32 TransactionDetails[1]; 919265236Sken} MPI2_SGE_TRANSACTION96, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION96, 920265236Sken Mpi2SGETransaction96_t, MPI2_POINTER pMpi2SGETransaction96_t; 921265236Sken 922265236Skentypedef struct _MPI2_SGE_TRANSACTION128 923265236Sken{ 924265236Sken U8 Reserved; 925265236Sken U8 ContextSize; 926265236Sken U8 DetailsLength; 927265236Sken U8 Flags; 928265236Sken U32 TransactionContext[4]; 929265236Sken U32 TransactionDetails[1]; 930265236Sken} MPI2_SGE_TRANSACTION128, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION128, 931265236Sken Mpi2SGETransaction_t128, MPI2_POINTER pMpi2SGETransaction_t128; 932265236Sken 933265236Skentypedef struct _MPI2_SGE_TRANSACTION_UNION 934265236Sken{ 935265236Sken U8 Reserved; 936265236Sken U8 ContextSize; 937265236Sken U8 DetailsLength; 938265236Sken U8 Flags; 939265236Sken union 940265236Sken { 941265236Sken U32 TransactionContext32[1]; 942265236Sken U32 TransactionContext64[2]; 943265236Sken U32 TransactionContext96[3]; 944265236Sken U32 TransactionContext128[4]; 945265236Sken } u; 946265236Sken U32 TransactionDetails[1]; 947265236Sken} MPI2_SGE_TRANSACTION_UNION, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION_UNION, 948265236Sken Mpi2SGETransactionUnion_t, MPI2_POINTER pMpi2SGETransactionUnion_t; 949265236Sken 950265236Sken 951265236Sken/**************************************************************************** 952265236Sken* MPI SGE union for IO SGL's - for MPI v2.0 products only 953265236Sken****************************************************************************/ 954265236Sken 955265236Skentypedef struct _MPI2_MPI_SGE_IO_UNION 956265236Sken{ 957265236Sken union 958265236Sken { 959265236Sken MPI2_SGE_SIMPLE_UNION Simple; 960265236Sken MPI2_SGE_CHAIN_UNION Chain; 961265236Sken } u; 962265236Sken} MPI2_MPI_SGE_IO_UNION, MPI2_POINTER PTR_MPI2_MPI_SGE_IO_UNION, 963265236Sken Mpi2MpiSGEIOUnion_t, MPI2_POINTER pMpi2MpiSGEIOUnion_t; 964265236Sken 965265236Sken 966265236Sken/**************************************************************************** 967265236Sken* MPI SGE union for SGL's with Simple and Transaction elements - for MPI v2.0 products only 968265236Sken****************************************************************************/ 969265236Sken 970265236Skentypedef struct _MPI2_SGE_TRANS_SIMPLE_UNION 971265236Sken{ 972265236Sken union 973265236Sken { 974265236Sken MPI2_SGE_SIMPLE_UNION Simple; 975265236Sken MPI2_SGE_TRANSACTION_UNION Transaction; 976265236Sken } u; 977265236Sken} MPI2_SGE_TRANS_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_SGE_TRANS_SIMPLE_UNION, 978265236Sken Mpi2SGETransSimpleUnion_t, MPI2_POINTER pMpi2SGETransSimpleUnion_t; 979265236Sken 980265236Sken 981265236Sken/**************************************************************************** 982265236Sken* All MPI SGE types union 983265236Sken****************************************************************************/ 984265236Sken 985265236Skentypedef struct _MPI2_MPI_SGE_UNION 986265236Sken{ 987265236Sken union 988265236Sken { 989265236Sken MPI2_SGE_SIMPLE_UNION Simple; 990265236Sken MPI2_SGE_CHAIN_UNION Chain; 991265236Sken MPI2_SGE_TRANSACTION_UNION Transaction; 992265236Sken } u; 993265236Sken} MPI2_MPI_SGE_UNION, MPI2_POINTER PTR_MPI2_MPI_SGE_UNION, 994265236Sken Mpi2MpiSgeUnion_t, MPI2_POINTER pMpi2MpiSgeUnion_t; 995265236Sken 996265236Sken 997265236Sken/**************************************************************************** 998265236Sken* MPI SGE field definition and masks 999265236Sken****************************************************************************/ 1000265236Sken 1001265236Sken/* Flags field bit definitions */ 1002265236Sken 1003265236Sken#define MPI2_SGE_FLAGS_LAST_ELEMENT (0x80) 1004265236Sken#define MPI2_SGE_FLAGS_END_OF_BUFFER (0x40) 1005265236Sken#define MPI2_SGE_FLAGS_ELEMENT_TYPE_MASK (0x30) 1006265236Sken#define MPI2_SGE_FLAGS_LOCAL_ADDRESS (0x08) 1007265236Sken#define MPI2_SGE_FLAGS_DIRECTION (0x04) 1008265236Sken#define MPI2_SGE_FLAGS_ADDRESS_SIZE (0x02) 1009265236Sken#define MPI2_SGE_FLAGS_END_OF_LIST (0x01) 1010265236Sken 1011265236Sken#define MPI2_SGE_FLAGS_SHIFT (24) 1012265236Sken 1013265236Sken#define MPI2_SGE_LENGTH_MASK (0x00FFFFFF) 1014265236Sken#define MPI2_SGE_CHAIN_LENGTH_MASK (0x0000FFFF) 1015265236Sken 1016265236Sken/* Element Type */ 1017265236Sken 1018265236Sken#define MPI2_SGE_FLAGS_TRANSACTION_ELEMENT (0x00) /* for MPI v2.0 products only */ 1019265236Sken#define MPI2_SGE_FLAGS_SIMPLE_ELEMENT (0x10) 1020265236Sken#define MPI2_SGE_FLAGS_CHAIN_ELEMENT (0x30) /* for MPI v2.0 products only */ 1021265236Sken#define MPI2_SGE_FLAGS_ELEMENT_MASK (0x30) 1022265236Sken 1023265236Sken/* Address location */ 1024265236Sken 1025265236Sken#define MPI2_SGE_FLAGS_SYSTEM_ADDRESS (0x00) 1026265236Sken 1027265236Sken/* Direction */ 1028265236Sken 1029265236Sken#define MPI2_SGE_FLAGS_IOC_TO_HOST (0x00) 1030265236Sken#define MPI2_SGE_FLAGS_HOST_TO_IOC (0x04) 1031265236Sken 1032265236Sken#define MPI2_SGE_FLAGS_DEST (MPI2_SGE_FLAGS_IOC_TO_HOST) 1033265236Sken#define MPI2_SGE_FLAGS_SOURCE (MPI2_SGE_FLAGS_HOST_TO_IOC) 1034265236Sken 1035265236Sken/* Address Size */ 1036265236Sken 1037265236Sken#define MPI2_SGE_FLAGS_32_BIT_ADDRESSING (0x00) 1038265236Sken#define MPI2_SGE_FLAGS_64_BIT_ADDRESSING (0x02) 1039265236Sken 1040265236Sken/* Context Size */ 1041265236Sken 1042265236Sken#define MPI2_SGE_FLAGS_32_BIT_CONTEXT (0x00) 1043265236Sken#define MPI2_SGE_FLAGS_64_BIT_CONTEXT (0x02) 1044265236Sken#define MPI2_SGE_FLAGS_96_BIT_CONTEXT (0x04) 1045265236Sken#define MPI2_SGE_FLAGS_128_BIT_CONTEXT (0x06) 1046265236Sken 1047265236Sken#define MPI2_SGE_CHAIN_OFFSET_MASK (0x00FF0000) 1048265236Sken#define MPI2_SGE_CHAIN_OFFSET_SHIFT (16) 1049265236Sken 1050265236Sken/**************************************************************************** 1051265236Sken* MPI SGE operation Macros 1052265236Sken****************************************************************************/ 1053265236Sken 1054265236Sken/* SIMPLE FlagsLength manipulations... */ 1055265236Sken#define MPI2_SGE_SET_FLAGS(f) ((U32)(f) << MPI2_SGE_FLAGS_SHIFT) 1056265236Sken#define MPI2_SGE_GET_FLAGS(f) (((f) & ~MPI2_SGE_LENGTH_MASK) >> MPI2_SGE_FLAGS_SHIFT) 1057265236Sken#define MPI2_SGE_LENGTH(f) ((f) & MPI2_SGE_LENGTH_MASK) 1058265236Sken#define MPI2_SGE_CHAIN_LENGTH(f) ((f) & MPI2_SGE_CHAIN_LENGTH_MASK) 1059265236Sken 1060265236Sken#define MPI2_SGE_SET_FLAGS_LENGTH(f,l) (MPI2_SGE_SET_FLAGS(f) | MPI2_SGE_LENGTH(l)) 1061265236Sken 1062265236Sken#define MPI2_pSGE_GET_FLAGS(psg) MPI2_SGE_GET_FLAGS((psg)->FlagsLength) 1063265236Sken#define MPI2_pSGE_GET_LENGTH(psg) MPI2_SGE_LENGTH((psg)->FlagsLength) 1064265236Sken#define MPI2_pSGE_SET_FLAGS_LENGTH(psg,f,l) (psg)->FlagsLength = MPI2_SGE_SET_FLAGS_LENGTH(f,l) 1065265236Sken 1066265236Sken/* CAUTION - The following are READ-MODIFY-WRITE! */ 1067265236Sken#define MPI2_pSGE_SET_FLAGS(psg,f) (psg)->FlagsLength |= MPI2_SGE_SET_FLAGS(f) 1068265236Sken#define MPI2_pSGE_SET_LENGTH(psg,l) (psg)->FlagsLength |= MPI2_SGE_LENGTH(l) 1069265236Sken 1070265236Sken#define MPI2_GET_CHAIN_OFFSET(x) ((x & MPI2_SGE_CHAIN_OFFSET_MASK) >> MPI2_SGE_CHAIN_OFFSET_SHIFT) 1071265236Sken 1072265236Sken 1073265236Sken/***************************************************************************** 1074265236Sken* 1075265236Sken* Fusion-MPT IEEE Scatter Gather Elements 1076265236Sken* 1077265236Sken*****************************************************************************/ 1078265236Sken 1079265236Sken/**************************************************************************** 1080265236Sken* IEEE Simple Element structures 1081265236Sken****************************************************************************/ 1082265236Sken 1083265236Sken/* MPI2_IEEE_SGE_SIMPLE32 is for MPI v2.0 products only */ 1084265236Skentypedef struct _MPI2_IEEE_SGE_SIMPLE32 1085265236Sken{ 1086265236Sken U32 Address; 1087265236Sken U32 FlagsLength; 1088265236Sken} MPI2_IEEE_SGE_SIMPLE32, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE32, 1089265236Sken Mpi2IeeeSgeSimple32_t, MPI2_POINTER pMpi2IeeeSgeSimple32_t; 1090265236Sken 1091265236Skentypedef struct _MPI2_IEEE_SGE_SIMPLE64 1092265236Sken{ 1093265236Sken U64 Address; 1094265236Sken U32 Length; 1095265236Sken U16 Reserved1; 1096265236Sken U8 Reserved2; 1097265236Sken U8 Flags; 1098265236Sken} MPI2_IEEE_SGE_SIMPLE64, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE64, 1099265236Sken Mpi2IeeeSgeSimple64_t, MPI2_POINTER pMpi2IeeeSgeSimple64_t; 1100265236Sken 1101265236Skentypedef union _MPI2_IEEE_SGE_SIMPLE_UNION 1102265236Sken{ 1103265236Sken MPI2_IEEE_SGE_SIMPLE32 Simple32; 1104265236Sken MPI2_IEEE_SGE_SIMPLE64 Simple64; 1105265236Sken} MPI2_IEEE_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE_UNION, 1106265236Sken Mpi2IeeeSgeSimpleUnion_t, MPI2_POINTER pMpi2IeeeSgeSimpleUnion_t; 1107265236Sken 1108265236Sken 1109265236Sken/**************************************************************************** 1110265236Sken* IEEE Chain Element structures 1111265236Sken****************************************************************************/ 1112265236Sken 1113265236Sken/* MPI2_IEEE_SGE_CHAIN32 is for MPI v2.0 products only */ 1114265236Skentypedef MPI2_IEEE_SGE_SIMPLE32 MPI2_IEEE_SGE_CHAIN32; 1115265236Sken 1116265236Sken/* MPI2_IEEE_SGE_CHAIN64 is for MPI v2.0 products only */ 1117265236Skentypedef MPI2_IEEE_SGE_SIMPLE64 MPI2_IEEE_SGE_CHAIN64; 1118265236Sken 1119265236Skentypedef union _MPI2_IEEE_SGE_CHAIN_UNION 1120265236Sken{ 1121265236Sken MPI2_IEEE_SGE_CHAIN32 Chain32; 1122265236Sken MPI2_IEEE_SGE_CHAIN64 Chain64; 1123265236Sken} MPI2_IEEE_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_CHAIN_UNION, 1124265236Sken Mpi2IeeeSgeChainUnion_t, MPI2_POINTER pMpi2IeeeSgeChainUnion_t; 1125265236Sken 1126265236Sken/* MPI25_IEEE_SGE_CHAIN64 is for MPI v2.5 products only */ 1127265236Skentypedef struct _MPI25_IEEE_SGE_CHAIN64 1128265236Sken{ 1129265236Sken U64 Address; 1130265236Sken U32 Length; 1131265236Sken U16 Reserved1; 1132265236Sken U8 NextChainOffset; 1133265236Sken U8 Flags; 1134265236Sken} MPI25_IEEE_SGE_CHAIN64, MPI2_POINTER PTR_MPI25_IEEE_SGE_CHAIN64, 1135265236Sken Mpi25IeeeSgeChain64_t, MPI2_POINTER pMpi25IeeeSgeChain64_t; 1136265236Sken 1137265236Sken 1138265236Sken/**************************************************************************** 1139265236Sken* All IEEE SGE types union 1140265236Sken****************************************************************************/ 1141265236Sken 1142265236Sken/* MPI2_IEEE_SGE_UNION is for MPI v2.0 products only */ 1143265236Skentypedef struct _MPI2_IEEE_SGE_UNION 1144265236Sken{ 1145265236Sken union 1146265236Sken { 1147265236Sken MPI2_IEEE_SGE_SIMPLE_UNION Simple; 1148265236Sken MPI2_IEEE_SGE_CHAIN_UNION Chain; 1149265236Sken } u; 1150265236Sken} MPI2_IEEE_SGE_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_UNION, 1151265236Sken Mpi2IeeeSgeUnion_t, MPI2_POINTER pMpi2IeeeSgeUnion_t; 1152265236Sken 1153265236Sken 1154265236Sken/**************************************************************************** 1155265236Sken* IEEE SGE union for IO SGL's 1156265236Sken****************************************************************************/ 1157265236Sken 1158265236Skentypedef union _MPI25_SGE_IO_UNION 1159265236Sken{ 1160265236Sken MPI2_IEEE_SGE_SIMPLE64 IeeeSimple; 1161265236Sken MPI25_IEEE_SGE_CHAIN64 IeeeChain; 1162265236Sken} MPI25_SGE_IO_UNION, MPI2_POINTER PTR_MPI25_SGE_IO_UNION, 1163265236Sken Mpi25SGEIOUnion_t, MPI2_POINTER pMpi25SGEIOUnion_t; 1164265236Sken 1165265236Sken 1166265236Sken/**************************************************************************** 1167265236Sken* IEEE SGE field definitions and masks 1168265236Sken****************************************************************************/ 1169265236Sken 1170265236Sken/* Flags field bit definitions */ 1171265236Sken 1172265236Sken#define MPI2_IEEE_SGE_FLAGS_ELEMENT_TYPE_MASK (0x80) 1173265236Sken#define MPI25_IEEE_SGE_FLAGS_END_OF_LIST (0x40) 1174265236Sken 1175265236Sken#define MPI2_IEEE32_SGE_FLAGS_SHIFT (24) 1176265236Sken 1177265236Sken#define MPI2_IEEE32_SGE_LENGTH_MASK (0x00FFFFFF) 1178265236Sken 1179265236Sken/* Element Type */ 1180265236Sken 1181265236Sken#define MPI2_IEEE_SGE_FLAGS_SIMPLE_ELEMENT (0x00) 1182265236Sken#define MPI2_IEEE_SGE_FLAGS_CHAIN_ELEMENT (0x80) 1183265236Sken 1184265236Sken/* Data Location Address Space */ 1185265236Sken 1186265236Sken#define MPI2_IEEE_SGE_FLAGS_ADDR_MASK (0x03) 1187265236Sken#define MPI2_IEEE_SGE_FLAGS_SYSTEM_ADDR (0x00) /* for MPI v2.0, use in IEEE Simple Element only; for MPI v2.5, use in IEEE Simple or Chain element */ 1188265236Sken#define MPI2_IEEE_SGE_FLAGS_IOCDDR_ADDR (0x01) /* use in IEEE Simple Element only */ 1189265236Sken#define MPI2_IEEE_SGE_FLAGS_IOCPLB_ADDR (0x02) 1190265236Sken#define MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR (0x03) /* for MPI v2.0, use in IEEE Simple Element only; for MPI v2.5, use in IEEE Simple or Chain element */ 1191265236Sken#define MPI2_IEEE_SGE_FLAGS_SYSTEMPLBPCI_ADDR (0x03) /* use in MPI v2.0 IEEE Chain Element only */ 1192265236Sken#define MPI2_IEEE_SGE_FLAGS_SYSTEMPLBCPI_ADDR (MPI2_IEEE_SGE_FLAGS_SYSTEMPLBPCI_ADDR) /* typo in name */ 1193265236Sken 1194265236Sken/**************************************************************************** 1195265236Sken* IEEE SGE operation Macros 1196265236Sken****************************************************************************/ 1197265236Sken 1198265236Sken/* SIMPLE FlagsLength manipulations... */ 1199265236Sken#define MPI2_IEEE32_SGE_SET_FLAGS(f) ((U32)(f) << MPI2_IEEE32_SGE_FLAGS_SHIFT) 1200265236Sken#define MPI2_IEEE32_SGE_GET_FLAGS(f) (((f) & ~MPI2_IEEE32_SGE_LENGTH_MASK) >> MPI2_IEEE32_SGE_FLAGS_SHIFT) 1201265236Sken#define MPI2_IEEE32_SGE_LENGTH(f) ((f) & MPI2_IEEE32_SGE_LENGTH_MASK) 1202265236Sken 1203265236Sken#define MPI2_IEEE32_SGE_SET_FLAGS_LENGTH(f, l) (MPI2_IEEE32_SGE_SET_FLAGS(f) | MPI2_IEEE32_SGE_LENGTH(l)) 1204265236Sken 1205265236Sken#define MPI2_IEEE32_pSGE_GET_FLAGS(psg) MPI2_IEEE32_SGE_GET_FLAGS((psg)->FlagsLength) 1206265236Sken#define MPI2_IEEE32_pSGE_GET_LENGTH(psg) MPI2_IEEE32_SGE_LENGTH((psg)->FlagsLength) 1207265236Sken#define MPI2_IEEE32_pSGE_SET_FLAGS_LENGTH(psg,f,l) (psg)->FlagsLength = MPI2_IEEE32_SGE_SET_FLAGS_LENGTH(f,l) 1208265236Sken 1209265236Sken/* CAUTION - The following are READ-MODIFY-WRITE! */ 1210265236Sken#define MPI2_IEEE32_pSGE_SET_FLAGS(psg,f) (psg)->FlagsLength |= MPI2_IEEE32_SGE_SET_FLAGS(f) 1211265236Sken#define MPI2_IEEE32_pSGE_SET_LENGTH(psg,l) (psg)->FlagsLength |= MPI2_IEEE32_SGE_LENGTH(l) 1212265236Sken 1213265236Sken 1214265236Sken 1215265236Sken/***************************************************************************** 1216265236Sken* 1217265236Sken* Fusion-MPT MPI/IEEE Scatter Gather Unions 1218265236Sken* 1219265236Sken*****************************************************************************/ 1220265236Sken 1221265236Skentypedef union _MPI2_SIMPLE_SGE_UNION 1222265236Sken{ 1223265236Sken MPI2_SGE_SIMPLE_UNION MpiSimple; 1224265236Sken MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple; 1225265236Sken} MPI2_SIMPLE_SGE_UNION, MPI2_POINTER PTR_MPI2_SIMPLE_SGE_UNION, 1226265236Sken Mpi2SimpleSgeUntion_t, MPI2_POINTER pMpi2SimpleSgeUntion_t; 1227265236Sken 1228265236Sken 1229265236Skentypedef union _MPI2_SGE_IO_UNION 1230265236Sken{ 1231265236Sken MPI2_SGE_SIMPLE_UNION MpiSimple; 1232265236Sken MPI2_SGE_CHAIN_UNION MpiChain; 1233265236Sken MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple; 1234265236Sken MPI2_IEEE_SGE_CHAIN_UNION IeeeChain; 1235265236Sken} MPI2_SGE_IO_UNION, MPI2_POINTER PTR_MPI2_SGE_IO_UNION, 1236265236Sken Mpi2SGEIOUnion_t, MPI2_POINTER pMpi2SGEIOUnion_t; 1237265236Sken 1238265236Sken 1239265236Sken/**************************************************************************** 1240265236Sken* 1241265236Sken* Values for SGLFlags field, used in many request messages with an SGL 1242265236Sken* 1243265236Sken****************************************************************************/ 1244265236Sken 1245265236Sken/* values for MPI SGL Data Location Address Space subfield */ 1246265236Sken#define MPI2_SGLFLAGS_ADDRESS_SPACE_MASK (0x0C) 1247265236Sken#define MPI2_SGLFLAGS_SYSTEM_ADDRESS_SPACE (0x00) 1248265236Sken#define MPI2_SGLFLAGS_IOCDDR_ADDRESS_SPACE (0x04) 1249265236Sken#define MPI2_SGLFLAGS_IOCPLB_ADDRESS_SPACE (0x08) 1250265236Sken#define MPI2_SGLFLAGS_IOCPLBNTA_ADDRESS_SPACE (0x0C) 1251265236Sken/* values for SGL Type subfield */ 1252265236Sken#define MPI2_SGLFLAGS_SGL_TYPE_MASK (0x03) 1253265236Sken#define MPI2_SGLFLAGS_SGL_TYPE_MPI (0x00) 1254265236Sken#define MPI2_SGLFLAGS_SGL_TYPE_IEEE32 (0x01) /* MPI v2.0 products only */ 1255265236Sken#define MPI2_SGLFLAGS_SGL_TYPE_IEEE64 (0x02) 1256265236Sken 1257265236Sken 1258265236Sken#endif 1259265236Sken 1260