1991554f2SKenneth D. Merry /*- 2*8736c018SKashyap D Desai * Copyright 2000-2020 Broadcom Inc. All rights reserved. 3991554f2SKenneth D. Merry * 4991554f2SKenneth D. Merry * Redistribution and use in source and binary forms, with or without 5991554f2SKenneth D. Merry * modification, are permitted provided that the following conditions 6991554f2SKenneth D. Merry * are met: 7991554f2SKenneth D. Merry * 1. Redistributions of source code must retain the above copyright 8991554f2SKenneth D. Merry * notice, this list of conditions and the following disclaimer. 9991554f2SKenneth D. Merry * 2. Redistributions in binary form must reproduce the above copyright 10991554f2SKenneth D. Merry * notice, this list of conditions and the following disclaimer in the 11991554f2SKenneth D. Merry * documentation and/or other materials provided with the distribution. 12991554f2SKenneth D. Merry * 3. Neither the name of the author nor the names of any co-contributors 13991554f2SKenneth D. Merry * may be used to endorse or promote products derived from this software 14991554f2SKenneth D. Merry * without specific prior written permission. 15991554f2SKenneth D. Merry * 16991554f2SKenneth D. Merry * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17991554f2SKenneth D. Merry * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18991554f2SKenneth D. Merry * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19991554f2SKenneth D. Merry * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20991554f2SKenneth D. Merry * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21991554f2SKenneth D. Merry * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22991554f2SKenneth D. Merry * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23991554f2SKenneth D. Merry * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24991554f2SKenneth D. Merry * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25991554f2SKenneth D. Merry * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26991554f2SKenneth D. Merry * SUCH DAMAGE. 27991554f2SKenneth D. Merry * 28*8736c018SKashyap D Desai * Broadcom Inc. (LSI) MPT-Fusion Host Adapter FreeBSD 29991554f2SKenneth D. Merry */ 30991554f2SKenneth D. Merry 31991554f2SKenneth D. Merry /* 32*8736c018SKashyap D Desai * Copyright 2000-2020 Broadcom Inc. All rights reserved. 33991554f2SKenneth D. Merry * 34991554f2SKenneth D. Merry * 35991554f2SKenneth D. Merry * Name: mpi2.h 36991554f2SKenneth D. Merry * Title: MPI Message independent structures and definitions 37991554f2SKenneth D. Merry * including System Interface Register Set and 38991554f2SKenneth D. Merry * scatter/gather formats. 39991554f2SKenneth D. Merry * Creation Date: June 21, 2006 40991554f2SKenneth D. Merry * 41*8736c018SKashyap D Desai * mpi2.h Version: 02.00.52 42991554f2SKenneth D. Merry * 43991554f2SKenneth D. Merry * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 44991554f2SKenneth D. Merry * prefix are for use only on MPI v2.5 products, and must not be used 45991554f2SKenneth D. Merry * with MPI v2.0 products. Unless otherwise noted, names beginning with 46991554f2SKenneth D. Merry * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. 47991554f2SKenneth D. Merry * 48991554f2SKenneth D. Merry * Version History 49991554f2SKenneth D. Merry * --------------- 50991554f2SKenneth D. Merry * 51991554f2SKenneth D. Merry * Date Version Description 52991554f2SKenneth D. Merry * -------- -------- ------------------------------------------------------ 53991554f2SKenneth D. Merry * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 54991554f2SKenneth D. Merry * 06-04-07 02.00.01 Bumped MPI2_HEADER_VERSION_UNIT. 55991554f2SKenneth D. Merry * 06-26-07 02.00.02 Bumped MPI2_HEADER_VERSION_UNIT. 56991554f2SKenneth D. Merry * 08-31-07 02.00.03 Bumped MPI2_HEADER_VERSION_UNIT. 57991554f2SKenneth D. Merry * Moved ReplyPostHostIndex register to offset 0x6C of the 58991554f2SKenneth D. Merry * MPI2_SYSTEM_INTERFACE_REGS and modified the define for 59991554f2SKenneth D. Merry * MPI2_REPLY_POST_HOST_INDEX_OFFSET. 60991554f2SKenneth D. Merry * Added union of request descriptors. 61991554f2SKenneth D. Merry * Added union of reply descriptors. 62991554f2SKenneth D. Merry * 10-31-07 02.00.04 Bumped MPI2_HEADER_VERSION_UNIT. 63991554f2SKenneth D. Merry * Added define for MPI2_VERSION_02_00. 64991554f2SKenneth D. Merry * Fixed the size of the FunctionDependent5 field in the 65991554f2SKenneth D. Merry * MPI2_DEFAULT_REPLY structure. 66991554f2SKenneth D. Merry * 12-18-07 02.00.05 Bumped MPI2_HEADER_VERSION_UNIT. 67991554f2SKenneth D. Merry * Removed the MPI-defined Fault Codes and extended the 68991554f2SKenneth D. Merry * product specific codes up to 0xEFFF. 69991554f2SKenneth D. Merry * Added a sixth key value for the WriteSequence register 70991554f2SKenneth D. Merry * and changed the flush value to 0x0. 71991554f2SKenneth D. Merry * Added message function codes for Diagnostic Buffer Post 72991554f2SKenneth D. Merry * and Diagnsotic Release. 73991554f2SKenneth D. Merry * New IOCStatus define: MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED 74991554f2SKenneth D. Merry * Moved MPI2_VERSION_UNION from mpi2_ioc.h. 75991554f2SKenneth D. Merry * 02-29-08 02.00.06 Bumped MPI2_HEADER_VERSION_UNIT. 76991554f2SKenneth D. Merry * 03-03-08 02.00.07 Bumped MPI2_HEADER_VERSION_UNIT. 77991554f2SKenneth D. Merry * 05-21-08 02.00.08 Bumped MPI2_HEADER_VERSION_UNIT. 78991554f2SKenneth D. Merry * Added #defines for marking a reply descriptor as unused. 79991554f2SKenneth D. Merry * 06-27-08 02.00.09 Bumped MPI2_HEADER_VERSION_UNIT. 80991554f2SKenneth D. Merry * 10-02-08 02.00.10 Bumped MPI2_HEADER_VERSION_UNIT. 81991554f2SKenneth D. Merry * Moved LUN field defines from mpi2_init.h. 82991554f2SKenneth D. Merry * 01-19-09 02.00.11 Bumped MPI2_HEADER_VERSION_UNIT. 83991554f2SKenneth D. Merry * 05-06-09 02.00.12 Bumped MPI2_HEADER_VERSION_UNIT. 84991554f2SKenneth D. Merry * In all request and reply descriptors, replaced VF_ID 85991554f2SKenneth D. Merry * field with MSIxIndex field. 86991554f2SKenneth D. Merry * Removed DevHandle field from 87991554f2SKenneth D. Merry * MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR and made those 88991554f2SKenneth D. Merry * bytes reserved. 89991554f2SKenneth D. Merry * Added RAID Accelerator functionality. 90991554f2SKenneth D. Merry * 07-30-09 02.00.13 Bumped MPI2_HEADER_VERSION_UNIT. 91991554f2SKenneth D. Merry * 10-28-09 02.00.14 Bumped MPI2_HEADER_VERSION_UNIT. 92991554f2SKenneth D. Merry * Added MSI-x index mask and shift for Reply Post Host 93991554f2SKenneth D. Merry * Index register. 94991554f2SKenneth D. Merry * Added function code for Host Based Discovery Action. 95991554f2SKenneth D. Merry * 02-10-10 02.00.15 Bumped MPI2_HEADER_VERSION_UNIT. 96991554f2SKenneth D. Merry * Added define for MPI2_FUNCTION_PWR_MGMT_CONTROL. 97991554f2SKenneth D. Merry * Added defines for product-specific range of message 98991554f2SKenneth D. Merry * function codes, 0xF0 to 0xFF. 99991554f2SKenneth D. Merry * 05-12-10 02.00.16 Bumped MPI2_HEADER_VERSION_UNIT. 100991554f2SKenneth D. Merry * Added alternative defines for the SGE Direction bit. 101991554f2SKenneth D. Merry * 08-11-10 02.00.17 Bumped MPI2_HEADER_VERSION_UNIT. 102991554f2SKenneth D. Merry * 11-10-10 02.00.18 Bumped MPI2_HEADER_VERSION_UNIT. 103991554f2SKenneth D. Merry * Added MPI2_IEEE_SGE_FLAGS_SYSTEMPLBCPI_ADDR define. 104991554f2SKenneth D. Merry * 02-23-11 02.00.19 Bumped MPI2_HEADER_VERSION_UNIT. 105991554f2SKenneth D. Merry * Added MPI2_FUNCTION_SEND_HOST_MESSAGE. 106991554f2SKenneth D. Merry * 03-09-11 02.00.20 Bumped MPI2_HEADER_VERSION_UNIT. 107991554f2SKenneth D. Merry * 05-25-11 02.00.21 Bumped MPI2_HEADER_VERSION_UNIT. 108991554f2SKenneth D. Merry * 08-24-11 02.00.22 Bumped MPI2_HEADER_VERSION_UNIT. 109991554f2SKenneth D. Merry * 11-18-11 02.00.23 Bumped MPI2_HEADER_VERSION_UNIT. 110991554f2SKenneth D. Merry * Incorporating additions for MPI v2.5. 111991554f2SKenneth D. Merry * 02-06-12 02.00.24 Bumped MPI2_HEADER_VERSION_UNIT. 112991554f2SKenneth D. Merry * 03-29-12 02.00.25 Bumped MPI2_HEADER_VERSION_UNIT. 113991554f2SKenneth D. Merry * Added Hard Reset delay timings. 114991554f2SKenneth D. Merry * 07-10-12 02.00.26 Bumped MPI2_HEADER_VERSION_UNIT. 115991554f2SKenneth D. Merry * 07-26-12 02.00.27 Bumped MPI2_HEADER_VERSION_UNIT. 116991554f2SKenneth D. Merry * 11-27-12 02.00.28 Bumped MPI2_HEADER_VERSION_UNIT. 117991554f2SKenneth D. Merry * 12-20-12 02.00.29 Bumped MPI2_HEADER_VERSION_UNIT. 118991554f2SKenneth D. Merry * Added MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET. 119991554f2SKenneth D. Merry * 04-09-13 02.00.30 Bumped MPI2_HEADER_VERSION_UNIT. 120991554f2SKenneth D. Merry * 04-17-13 02.00.31 Bumped MPI2_HEADER_VERSION_UNIT. 121991554f2SKenneth D. Merry * 08-19-13 02.00.32 Bumped MPI2_HEADER_VERSION_UNIT. 122991554f2SKenneth D. Merry * 12-05-13 02.00.33 Bumped MPI2_HEADER_VERSION_UNIT. 12328ae62b0SStephen McConnell * 01-08-14 02.00.34 Bumped MPI2_HEADER_VERSION_UNIT. 12428ae62b0SStephen McConnell * 06-13-14 02.00.35 Bumped MPI2_HEADER_VERSION_UNIT. 12528ae62b0SStephen McConnell * 11-18-14 02.00.36 Updated copyright information. 12628ae62b0SStephen McConnell * Bumped MPI2_HEADER_VERSION_UNIT. 12728ae62b0SStephen McConnell * 03-16-15 02.00.37 Updated for MPI v2.6. 12828ae62b0SStephen McConnell * Bumped MPI2_HEADER_VERSION_UNIT. 12967feec50SStephen McConnell * Added Scratchpad registers and 13067feec50SStephen McConnell * AtomicRequestDescriptorPost register to 13128ae62b0SStephen McConnell * MPI2_SYSTEM_INTERFACE_REGS. 13228ae62b0SStephen McConnell * Added MPI2_DIAG_SBR_RELOAD. 13328ae62b0SStephen McConnell * Added MPI2_IOCSTATUS_INSUFFICIENT_POWER. 13428ae62b0SStephen McConnell * 03-19-15 02.00.38 Bumped MPI2_HEADER_VERSION_UNIT. 13528ae62b0SStephen McConnell * 05-25-15 02.00.39 Bumped MPI2_HEADER_VERSION_UNIT 13628ae62b0SStephen McConnell * 08-25-15 02.00.40 Bumped MPI2_HEADER_VERSION_UNIT. 13728ae62b0SStephen McConnell * Added V7 HostDiagnostic register defines 13828ae62b0SStephen McConnell * 12-15-15 02.00.41 Bumped MPI_HEADER_VERSION_UNIT 13928ae62b0SStephen McConnell * 01-01-16 02.00.42 Bumped MPI_HEADER_VERSION_UNIT 14067feec50SStephen McConnell * 04-05-16 02.00.43 Modified MPI26_DIAG_BOOT_DEVICE_SELECT defines 14167feec50SStephen McConnell * to be unique within first 32 characters. 14267feec50SStephen McConnell * Removed AHCI support. 14367feec50SStephen McConnell * Removed SOP support. 14467feec50SStephen McConnell * Bumped MPI2_HEADER_VERSION_UNIT. 14567feec50SStephen McConnell * 04-10-16 02.00.44 Bumped MPI2_HEADER_VERSION_UNIT. 14667feec50SStephen McConnell * 07-06-16 02.00.45 Bumped MPI2_HEADER_VERSION_UNIT. 14767feec50SStephen McConnell * 09-02-16 02.00.46 Bumped MPI2_HEADER_VERSION_UNIT. 1485f5baf0eSAlexander Motin * 11-23-16 02.00.47 Bumped MPI2_HEADER_VERSION_UNIT. 1495f5baf0eSAlexander Motin * 02-03-17 02.00.48 Bumped MPI2_HEADER_VERSION_UNIT. 150*8736c018SKashyap D Desai * 06-13-17 02.00.49 Bumped MPI2_HEADER_VERSION_UNIT. 151*8736c018SKashyap D Desai * 09-29-17 02.00.50 Bumped MPI2_HEADER_VERSION_UNIT. 152*8736c018SKashyap D Desai * 07-22-18 02.00.51 Added SECURE_BOOT define. 153*8736c018SKashyap D Desai * Bumped MPI2_HEADER_VERSION_UNIT 154*8736c018SKashyap D Desai * 08-15-18 02.00.52 Bumped MPI2_HEADER_VERSION_UNIT. 155991554f2SKenneth D. Merry * -------------------------------------------------------------------------- 156991554f2SKenneth D. Merry */ 157991554f2SKenneth D. Merry 158991554f2SKenneth D. Merry #ifndef MPI2_H 159991554f2SKenneth D. Merry #define MPI2_H 160991554f2SKenneth D. Merry 161991554f2SKenneth D. Merry /***************************************************************************** 162991554f2SKenneth D. Merry * 163991554f2SKenneth D. Merry * MPI Version Definitions 164991554f2SKenneth D. Merry * 165991554f2SKenneth D. Merry *****************************************************************************/ 166991554f2SKenneth D. Merry 167991554f2SKenneth D. Merry #define MPI2_VERSION_MAJOR_MASK (0xFF00) 168991554f2SKenneth D. Merry #define MPI2_VERSION_MAJOR_SHIFT (8) 169991554f2SKenneth D. Merry #define MPI2_VERSION_MINOR_MASK (0x00FF) 170991554f2SKenneth D. Merry #define MPI2_VERSION_MINOR_SHIFT (0) 171991554f2SKenneth D. Merry 172991554f2SKenneth D. Merry /* major version for all MPI v2.x */ 173991554f2SKenneth D. Merry #define MPI2_VERSION_MAJOR (0x02) 174991554f2SKenneth D. Merry 175991554f2SKenneth D. Merry /* minor version for MPI v2.0 compatible products */ 176991554f2SKenneth D. Merry #define MPI2_VERSION_MINOR (0x00) 177991554f2SKenneth D. Merry #define MPI2_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \ 178991554f2SKenneth D. Merry MPI2_VERSION_MINOR) 179991554f2SKenneth D. Merry #define MPI2_VERSION_02_00 (0x0200) 180991554f2SKenneth D. Merry 181991554f2SKenneth D. Merry /* minor version for MPI v2.5 compatible products */ 182991554f2SKenneth D. Merry #define MPI25_VERSION_MINOR (0x05) 183991554f2SKenneth D. Merry #define MPI25_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \ 184991554f2SKenneth D. Merry MPI25_VERSION_MINOR) 185991554f2SKenneth D. Merry #define MPI2_VERSION_02_05 (0x0205) 186991554f2SKenneth D. Merry 18728ae62b0SStephen McConnell /* minor version for MPI v2.6 compatible products */ 18828ae62b0SStephen McConnell #define MPI26_VERSION_MINOR (0x06) 18928ae62b0SStephen McConnell #define MPI26_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \ 19028ae62b0SStephen McConnell MPI26_VERSION_MINOR) 19128ae62b0SStephen McConnell #define MPI2_VERSION_02_06 (0x0206) 19228ae62b0SStephen McConnell 193991554f2SKenneth D. Merry /* Unit and Dev versioning for this MPI header set */ 194*8736c018SKashyap D Desai #define MPI2_HEADER_VERSION_UNIT (0x34) 195991554f2SKenneth D. Merry #define MPI2_HEADER_VERSION_DEV (0x00) 196991554f2SKenneth D. Merry #define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00) 197991554f2SKenneth D. Merry #define MPI2_HEADER_VERSION_UNIT_SHIFT (8) 198991554f2SKenneth D. Merry #define MPI2_HEADER_VERSION_DEV_MASK (0x00FF) 199991554f2SKenneth D. Merry #define MPI2_HEADER_VERSION_DEV_SHIFT (0) 200991554f2SKenneth D. Merry #define MPI2_HEADER_VERSION ((MPI2_HEADER_VERSION_UNIT << 8) | MPI2_HEADER_VERSION_DEV) 201991554f2SKenneth D. Merry 202991554f2SKenneth D. Merry /***************************************************************************** 203991554f2SKenneth D. Merry * 204991554f2SKenneth D. Merry * IOC State Definitions 205991554f2SKenneth D. Merry * 206991554f2SKenneth D. Merry *****************************************************************************/ 207991554f2SKenneth D. Merry 208991554f2SKenneth D. Merry #define MPI2_IOC_STATE_RESET (0x00000000) 209991554f2SKenneth D. Merry #define MPI2_IOC_STATE_READY (0x10000000) 210991554f2SKenneth D. Merry #define MPI2_IOC_STATE_OPERATIONAL (0x20000000) 211991554f2SKenneth D. Merry #define MPI2_IOC_STATE_FAULT (0x40000000) 212991554f2SKenneth D. Merry 213991554f2SKenneth D. Merry #define MPI2_IOC_STATE_MASK (0xF0000000) 214991554f2SKenneth D. Merry #define MPI2_IOC_STATE_SHIFT (28) 215991554f2SKenneth D. Merry 216991554f2SKenneth D. Merry /* Fault state range for prodcut specific codes */ 217991554f2SKenneth D. Merry #define MPI2_FAULT_PRODUCT_SPECIFIC_MIN (0x0000) 218991554f2SKenneth D. Merry #define MPI2_FAULT_PRODUCT_SPECIFIC_MAX (0xEFFF) 219991554f2SKenneth D. Merry 220991554f2SKenneth D. Merry /***************************************************************************** 221991554f2SKenneth D. Merry * 222991554f2SKenneth D. Merry * System Interface Register Definitions 223991554f2SKenneth D. Merry * 224991554f2SKenneth D. Merry *****************************************************************************/ 225991554f2SKenneth D. Merry 226991554f2SKenneth D. Merry typedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS 227991554f2SKenneth D. Merry { 228991554f2SKenneth D. Merry U32 Doorbell; /* 0x00 */ 229991554f2SKenneth D. Merry U32 WriteSequence; /* 0x04 */ 230991554f2SKenneth D. Merry U32 HostDiagnostic; /* 0x08 */ 231991554f2SKenneth D. Merry U32 Reserved1; /* 0x0C */ 232991554f2SKenneth D. Merry U32 DiagRWData; /* 0x10 */ 233991554f2SKenneth D. Merry U32 DiagRWAddressLow; /* 0x14 */ 234991554f2SKenneth D. Merry U32 DiagRWAddressHigh; /* 0x18 */ 235991554f2SKenneth D. Merry U32 Reserved2[5]; /* 0x1C */ 236991554f2SKenneth D. Merry U32 HostInterruptStatus; /* 0x30 */ 237991554f2SKenneth D. Merry U32 HostInterruptMask; /* 0x34 */ 238991554f2SKenneth D. Merry U32 DCRData; /* 0x38 */ 239991554f2SKenneth D. Merry U32 DCRAddress; /* 0x3C */ 240991554f2SKenneth D. Merry U32 Reserved3[2]; /* 0x40 */ 241991554f2SKenneth D. Merry U32 ReplyFreeHostIndex; /* 0x48 */ 242991554f2SKenneth D. Merry U32 Reserved4[8]; /* 0x4C */ 243991554f2SKenneth D. Merry U32 ReplyPostHostIndex; /* 0x6C */ 244991554f2SKenneth D. Merry U32 Reserved5; /* 0x70 */ 245991554f2SKenneth D. Merry U32 HCBSize; /* 0x74 */ 246991554f2SKenneth D. Merry U32 HCBAddressLow; /* 0x78 */ 247991554f2SKenneth D. Merry U32 HCBAddressHigh; /* 0x7C */ 24828ae62b0SStephen McConnell U32 Reserved6[12]; /* 0x80 */ 24928ae62b0SStephen McConnell U32 Scratchpad[4]; /* 0xB0 */ 250991554f2SKenneth D. Merry U32 RequestDescriptorPostLow; /* 0xC0 */ 251991554f2SKenneth D. Merry U32 RequestDescriptorPostHigh; /* 0xC4 */ 25267feec50SStephen McConnell U32 AtomicRequestDescriptorPost;/* 0xC8 */ /* MPI v2.6 and later; reserved in earlier versions */ 25367feec50SStephen McConnell U32 Reserved7[13]; /* 0xCC */ 254991554f2SKenneth D. Merry } MPI2_SYSTEM_INTERFACE_REGS, MPI2_POINTER PTR_MPI2_SYSTEM_INTERFACE_REGS, 255991554f2SKenneth D. Merry Mpi2SystemInterfaceRegs_t, MPI2_POINTER pMpi2SystemInterfaceRegs_t; 256991554f2SKenneth D. Merry 257991554f2SKenneth D. Merry /* 258991554f2SKenneth D. Merry * Defines for working with the Doorbell register. 259991554f2SKenneth D. Merry */ 260991554f2SKenneth D. Merry #define MPI2_DOORBELL_OFFSET (0x00000000) 261991554f2SKenneth D. Merry 262991554f2SKenneth D. Merry /* IOC --> System values */ 263991554f2SKenneth D. Merry #define MPI2_DOORBELL_USED (0x08000000) 264991554f2SKenneth D. Merry #define MPI2_DOORBELL_WHO_INIT_MASK (0x07000000) 265991554f2SKenneth D. Merry #define MPI2_DOORBELL_WHO_INIT_SHIFT (24) 266991554f2SKenneth D. Merry #define MPI2_DOORBELL_FAULT_CODE_MASK (0x0000FFFF) 267991554f2SKenneth D. Merry #define MPI2_DOORBELL_DATA_MASK (0x0000FFFF) 268991554f2SKenneth D. Merry 269991554f2SKenneth D. Merry /* System --> IOC values */ 270991554f2SKenneth D. Merry #define MPI2_DOORBELL_FUNCTION_MASK (0xFF000000) 271991554f2SKenneth D. Merry #define MPI2_DOORBELL_FUNCTION_SHIFT (24) 272991554f2SKenneth D. Merry #define MPI2_DOORBELL_ADD_DWORDS_MASK (0x00FF0000) 273991554f2SKenneth D. Merry #define MPI2_DOORBELL_ADD_DWORDS_SHIFT (16) 274991554f2SKenneth D. Merry 275991554f2SKenneth D. Merry /* 276991554f2SKenneth D. Merry * Defines for the WriteSequence register 277991554f2SKenneth D. Merry */ 278991554f2SKenneth D. Merry #define MPI2_WRITE_SEQUENCE_OFFSET (0x00000004) 279991554f2SKenneth D. Merry #define MPI2_WRSEQ_KEY_VALUE_MASK (0x0000000F) 280991554f2SKenneth D. Merry #define MPI2_WRSEQ_FLUSH_KEY_VALUE (0x0) 281991554f2SKenneth D. Merry #define MPI2_WRSEQ_1ST_KEY_VALUE (0xF) 282991554f2SKenneth D. Merry #define MPI2_WRSEQ_2ND_KEY_VALUE (0x4) 283991554f2SKenneth D. Merry #define MPI2_WRSEQ_3RD_KEY_VALUE (0xB) 284991554f2SKenneth D. Merry #define MPI2_WRSEQ_4TH_KEY_VALUE (0x2) 285991554f2SKenneth D. Merry #define MPI2_WRSEQ_5TH_KEY_VALUE (0x7) 286991554f2SKenneth D. Merry #define MPI2_WRSEQ_6TH_KEY_VALUE (0xD) 287991554f2SKenneth D. Merry 288991554f2SKenneth D. Merry /* 289991554f2SKenneth D. Merry * Defines for the HostDiagnostic register 290991554f2SKenneth D. Merry */ 291991554f2SKenneth D. Merry #define MPI2_HOST_DIAGNOSTIC_OFFSET (0x00000008) 292991554f2SKenneth D. Merry 293*8736c018SKashyap D Desai #define MPI26_DIAG_SECURE_BOOT (0x80000000) 294*8736c018SKashyap D Desai 29528ae62b0SStephen McConnell #define MPI2_DIAG_SBR_RELOAD (0x00002000) 29628ae62b0SStephen McConnell 297991554f2SKenneth D. Merry #define MPI2_DIAG_BOOT_DEVICE_SELECT_MASK (0x00001800) 298991554f2SKenneth D. Merry #define MPI2_DIAG_BOOT_DEVICE_SELECT_DEFAULT (0x00000000) 299991554f2SKenneth D. Merry #define MPI2_DIAG_BOOT_DEVICE_SELECT_HCDW (0x00000800) 300991554f2SKenneth D. Merry 30128ae62b0SStephen McConnell /* Defines for V7A/V7R HostDiagnostic Register */ 30267feec50SStephen McConnell #define MPI26_DIAG_BOOT_DEVICE_SEL_64FLASH (0x00000000) 30367feec50SStephen McConnell #define MPI26_DIAG_BOOT_DEVICE_SEL_64HCDW (0x00000800) 30467feec50SStephen McConnell #define MPI26_DIAG_BOOT_DEVICE_SEL_32FLASH (0x00001000) 30567feec50SStephen McConnell #define MPI26_DIAG_BOOT_DEVICE_SEL_32HCDW (0x00001800) 30667feec50SStephen McConnell 307991554f2SKenneth D. Merry #define MPI2_DIAG_CLEAR_FLASH_BAD_SIG (0x00000400) 308991554f2SKenneth D. Merry #define MPI2_DIAG_FORCE_HCB_ON_RESET (0x00000200) 309991554f2SKenneth D. Merry #define MPI2_DIAG_HCB_MODE (0x00000100) 310991554f2SKenneth D. Merry #define MPI2_DIAG_DIAG_WRITE_ENABLE (0x00000080) 311991554f2SKenneth D. Merry #define MPI2_DIAG_FLASH_BAD_SIG (0x00000040) 312991554f2SKenneth D. Merry #define MPI2_DIAG_RESET_HISTORY (0x00000020) 313991554f2SKenneth D. Merry #define MPI2_DIAG_DIAG_RW_ENABLE (0x00000010) 314991554f2SKenneth D. Merry #define MPI2_DIAG_RESET_ADAPTER (0x00000004) 315991554f2SKenneth D. Merry #define MPI2_DIAG_HOLD_IOC_RESET (0x00000002) 316991554f2SKenneth D. Merry 317991554f2SKenneth D. Merry /* 318991554f2SKenneth D. Merry * Offsets for DiagRWData and address 319991554f2SKenneth D. Merry */ 320991554f2SKenneth D. Merry #define MPI2_DIAG_RW_DATA_OFFSET (0x00000010) 321991554f2SKenneth D. Merry #define MPI2_DIAG_RW_ADDRESS_LOW_OFFSET (0x00000014) 322991554f2SKenneth D. Merry #define MPI2_DIAG_RW_ADDRESS_HIGH_OFFSET (0x00000018) 323991554f2SKenneth D. Merry 324991554f2SKenneth D. Merry /* 325991554f2SKenneth D. Merry * Defines for the HostInterruptStatus register 326991554f2SKenneth D. Merry */ 327991554f2SKenneth D. Merry #define MPI2_HOST_INTERRUPT_STATUS_OFFSET (0x00000030) 328991554f2SKenneth D. Merry #define MPI2_HIS_SYS2IOC_DB_STATUS (0x80000000) 329991554f2SKenneth D. Merry #define MPI2_HIS_IOP_DOORBELL_STATUS MPI2_HIS_SYS2IOC_DB_STATUS 330991554f2SKenneth D. Merry #define MPI2_HIS_RESET_IRQ_STATUS (0x40000000) 331991554f2SKenneth D. Merry #define MPI2_HIS_REPLY_DESCRIPTOR_INTERRUPT (0x00000008) 332991554f2SKenneth D. Merry #define MPI2_HIS_IOC2SYS_DB_STATUS (0x00000001) 333991554f2SKenneth D. Merry #define MPI2_HIS_DOORBELL_INTERRUPT MPI2_HIS_IOC2SYS_DB_STATUS 334991554f2SKenneth D. Merry 335991554f2SKenneth D. Merry /* 336991554f2SKenneth D. Merry * Defines for the HostInterruptMask register 337991554f2SKenneth D. Merry */ 338991554f2SKenneth D. Merry #define MPI2_HOST_INTERRUPT_MASK_OFFSET (0x00000034) 339991554f2SKenneth D. Merry #define MPI2_HIM_RESET_IRQ_MASK (0x40000000) 340991554f2SKenneth D. Merry #define MPI2_HIM_REPLY_INT_MASK (0x00000008) 341991554f2SKenneth D. Merry #define MPI2_HIM_RIM MPI2_HIM_REPLY_INT_MASK 342991554f2SKenneth D. Merry #define MPI2_HIM_IOC2SYS_DB_MASK (0x00000001) 343991554f2SKenneth D. Merry #define MPI2_HIM_DIM MPI2_HIM_IOC2SYS_DB_MASK 344991554f2SKenneth D. Merry 345991554f2SKenneth D. Merry /* 346991554f2SKenneth D. Merry * Offsets for DCRData and address 347991554f2SKenneth D. Merry */ 348991554f2SKenneth D. Merry #define MPI2_DCR_DATA_OFFSET (0x00000038) 349991554f2SKenneth D. Merry #define MPI2_DCR_ADDRESS_OFFSET (0x0000003C) 350991554f2SKenneth D. Merry 351991554f2SKenneth D. Merry /* 352991554f2SKenneth D. Merry * Offset for the Reply Free Queue 353991554f2SKenneth D. Merry */ 354991554f2SKenneth D. Merry #define MPI2_REPLY_FREE_HOST_INDEX_OFFSET (0x00000048) 355991554f2SKenneth D. Merry 356991554f2SKenneth D. Merry /* 357991554f2SKenneth D. Merry * Defines for the Reply Descriptor Post Queue 358991554f2SKenneth D. Merry */ 359991554f2SKenneth D. Merry #define MPI2_REPLY_POST_HOST_INDEX_OFFSET (0x0000006C) 360991554f2SKenneth D. Merry #define MPI2_REPLY_POST_HOST_INDEX_MASK (0x00FFFFFF) 361991554f2SKenneth D. Merry #define MPI2_RPHI_MSIX_INDEX_MASK (0xFF000000) 362991554f2SKenneth D. Merry #define MPI2_RPHI_MSIX_INDEX_SHIFT (24) 363991554f2SKenneth D. Merry #define MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET (0x0000030C) /* MPI v2.5 only */ 364991554f2SKenneth D. Merry 365991554f2SKenneth D. Merry /* 366991554f2SKenneth D. Merry * Defines for the HCBSize and address 367991554f2SKenneth D. Merry */ 368991554f2SKenneth D. Merry #define MPI2_HCB_SIZE_OFFSET (0x00000074) 369991554f2SKenneth D. Merry #define MPI2_HCB_SIZE_SIZE_MASK (0xFFFFF000) 370991554f2SKenneth D. Merry #define MPI2_HCB_SIZE_HCB_ENABLE (0x00000001) 371991554f2SKenneth D. Merry 372991554f2SKenneth D. Merry #define MPI2_HCB_ADDRESS_LOW_OFFSET (0x00000078) 373991554f2SKenneth D. Merry #define MPI2_HCB_ADDRESS_HIGH_OFFSET (0x0000007C) 374991554f2SKenneth D. Merry 375991554f2SKenneth D. Merry /* 37628ae62b0SStephen McConnell * Offsets for the Scratchpad registers 37728ae62b0SStephen McConnell */ 37828ae62b0SStephen McConnell #define MPI26_SCRATCHPAD0_OFFSET (0x000000B0) 37928ae62b0SStephen McConnell #define MPI26_SCRATCHPAD1_OFFSET (0x000000B4) 38028ae62b0SStephen McConnell #define MPI26_SCRATCHPAD2_OFFSET (0x000000B8) 38128ae62b0SStephen McConnell #define MPI26_SCRATCHPAD3_OFFSET (0x000000BC) 38228ae62b0SStephen McConnell 38328ae62b0SStephen McConnell /* 38428ae62b0SStephen McConnell * Offsets for the Request Descriptor Post Queue 385991554f2SKenneth D. Merry */ 386991554f2SKenneth D. Merry #define MPI2_REQUEST_DESCRIPTOR_POST_LOW_OFFSET (0x000000C0) 387991554f2SKenneth D. Merry #define MPI2_REQUEST_DESCRIPTOR_POST_HIGH_OFFSET (0x000000C4) 38867feec50SStephen McConnell #define MPI26_ATOMIC_REQUEST_DESCRIPTOR_POST_OFFSET (0x000000C8) 389991554f2SKenneth D. Merry 390991554f2SKenneth D. Merry /* Hard Reset delay timings */ 391991554f2SKenneth D. Merry #define MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC (50000) 392991554f2SKenneth D. Merry #define MPI2_HARD_RESET_PCIE_RESET_READ_WINDOW_MICRO_SEC (255000) 393991554f2SKenneth D. Merry #define MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC (256000) 394991554f2SKenneth D. Merry 395991554f2SKenneth D. Merry /***************************************************************************** 396991554f2SKenneth D. Merry * 397991554f2SKenneth D. Merry * Message Descriptors 398991554f2SKenneth D. Merry * 399991554f2SKenneth D. Merry *****************************************************************************/ 400991554f2SKenneth D. Merry 401991554f2SKenneth D. Merry /* Request Descriptors */ 402991554f2SKenneth D. Merry 403991554f2SKenneth D. Merry /* Default Request Descriptor */ 404991554f2SKenneth D. Merry typedef struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR 405991554f2SKenneth D. Merry { 406991554f2SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 407991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 408991554f2SKenneth D. Merry U16 SMID; /* 0x02 */ 409991554f2SKenneth D. Merry U16 LMID; /* 0x04 */ 410991554f2SKenneth D. Merry U16 DescriptorTypeDependent; /* 0x06 */ 411991554f2SKenneth D. Merry } MPI2_DEFAULT_REQUEST_DESCRIPTOR, 412991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_DEFAULT_REQUEST_DESCRIPTOR, 413991554f2SKenneth D. Merry Mpi2DefaultRequestDescriptor_t, MPI2_POINTER pMpi2DefaultRequestDescriptor_t; 414991554f2SKenneth D. Merry 415991554f2SKenneth D. Merry /* defines for the RequestFlags field */ 41628ae62b0SStephen McConnell #define MPI2_REQ_DESCRIPT_FLAGS_TYPE_MASK (0x1E) 41728ae62b0SStephen McConnell #define MPI2_REQ_DESCRIPT_FLAGS_TYPE_RSHIFT (1) /* use carefully; values below are pre-shifted left */ 418991554f2SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO (0x00) 419991554f2SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_SCSI_TARGET (0x02) 420991554f2SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY (0x06) 421991554f2SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE (0x08) 422991554f2SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_RAID_ACCELERATOR (0x0A) 423991554f2SKenneth D. Merry #define MPI25_REQ_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO (0x0C) 42467feec50SStephen McConnell #define MPI26_REQ_DESCRIPT_FLAGS_PCIE_ENCAPSULATED (0x10) 425991554f2SKenneth D. Merry 426991554f2SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_IOC_FIFO_MARKER (0x01) 427991554f2SKenneth D. Merry 428991554f2SKenneth D. Merry /* High Priority Request Descriptor */ 429991554f2SKenneth D. Merry typedef struct _MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR 430991554f2SKenneth D. Merry { 431991554f2SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 432991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 433991554f2SKenneth D. Merry U16 SMID; /* 0x02 */ 434991554f2SKenneth D. Merry U16 LMID; /* 0x04 */ 435991554f2SKenneth D. Merry U16 Reserved1; /* 0x06 */ 436991554f2SKenneth D. Merry } MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR, 437991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR, 438991554f2SKenneth D. Merry Mpi2HighPriorityRequestDescriptor_t, 439991554f2SKenneth D. Merry MPI2_POINTER pMpi2HighPriorityRequestDescriptor_t; 440991554f2SKenneth D. Merry 441991554f2SKenneth D. Merry /* SCSI IO Request Descriptor */ 442991554f2SKenneth D. Merry typedef struct _MPI2_SCSI_IO_REQUEST_DESCRIPTOR 443991554f2SKenneth D. Merry { 444991554f2SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 445991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 446991554f2SKenneth D. Merry U16 SMID; /* 0x02 */ 447991554f2SKenneth D. Merry U16 LMID; /* 0x04 */ 448991554f2SKenneth D. Merry U16 DevHandle; /* 0x06 */ 449991554f2SKenneth D. Merry } MPI2_SCSI_IO_REQUEST_DESCRIPTOR, 450991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST_DESCRIPTOR, 451991554f2SKenneth D. Merry Mpi2SCSIIORequestDescriptor_t, MPI2_POINTER pMpi2SCSIIORequestDescriptor_t; 452991554f2SKenneth D. Merry 453991554f2SKenneth D. Merry /* SCSI Target Request Descriptor */ 454991554f2SKenneth D. Merry typedef struct _MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR 455991554f2SKenneth D. Merry { 456991554f2SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 457991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 458991554f2SKenneth D. Merry U16 SMID; /* 0x02 */ 459991554f2SKenneth D. Merry U16 LMID; /* 0x04 */ 460991554f2SKenneth D. Merry U16 IoIndex; /* 0x06 */ 461991554f2SKenneth D. Merry } MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR, 462991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR, 463991554f2SKenneth D. Merry Mpi2SCSITargetRequestDescriptor_t, 464991554f2SKenneth D. Merry MPI2_POINTER pMpi2SCSITargetRequestDescriptor_t; 465991554f2SKenneth D. Merry 466991554f2SKenneth D. Merry /* RAID Accelerator Request Descriptor */ 467991554f2SKenneth D. Merry typedef struct _MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR 468991554f2SKenneth D. Merry { 469991554f2SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 470991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 471991554f2SKenneth D. Merry U16 SMID; /* 0x02 */ 472991554f2SKenneth D. Merry U16 LMID; /* 0x04 */ 473991554f2SKenneth D. Merry U16 Reserved; /* 0x06 */ 474991554f2SKenneth D. Merry } MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR, 475991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR, 476991554f2SKenneth D. Merry Mpi2RAIDAcceleratorRequestDescriptor_t, 477991554f2SKenneth D. Merry MPI2_POINTER pMpi2RAIDAcceleratorRequestDescriptor_t; 478991554f2SKenneth D. Merry 479991554f2SKenneth D. Merry /* Fast Path SCSI IO Request Descriptor */ 480991554f2SKenneth D. Merry typedef MPI2_SCSI_IO_REQUEST_DESCRIPTOR 481991554f2SKenneth D. Merry MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR, 482991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR, 483991554f2SKenneth D. Merry Mpi25FastPathSCSIIORequestDescriptor_t, 484991554f2SKenneth D. Merry MPI2_POINTER pMpi25FastPathSCSIIORequestDescriptor_t; 485991554f2SKenneth D. Merry 48667feec50SStephen McConnell /* PCIe Encapsulated Request Descriptor */ 48767feec50SStephen McConnell typedef MPI2_SCSI_IO_REQUEST_DESCRIPTOR 48867feec50SStephen McConnell MPI26_PCIE_ENCAPSULATED_REQUEST_DESCRIPTOR, 48967feec50SStephen McConnell MPI2_POINTER PTR_MPI26_PCIE_ENCAPSULATED_REQUEST_DESCRIPTOR, 49067feec50SStephen McConnell Mpi26PCIeEncapsulatedRequestDescriptor_t, 49167feec50SStephen McConnell MPI2_POINTER pMpi26PCIeEncapsulatedRequestDescriptor_t; 49267feec50SStephen McConnell 493991554f2SKenneth D. Merry /* union of Request Descriptors */ 494991554f2SKenneth D. Merry typedef union _MPI2_REQUEST_DESCRIPTOR_UNION 495991554f2SKenneth D. Merry { 496991554f2SKenneth D. Merry MPI2_DEFAULT_REQUEST_DESCRIPTOR Default; 497991554f2SKenneth D. Merry MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR HighPriority; 498991554f2SKenneth D. Merry MPI2_SCSI_IO_REQUEST_DESCRIPTOR SCSIIO; 499991554f2SKenneth D. Merry MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR SCSITarget; 500991554f2SKenneth D. Merry MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR RAIDAccelerator; 501991554f2SKenneth D. Merry MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR FastPathSCSIIO; 50267feec50SStephen McConnell MPI26_PCIE_ENCAPSULATED_REQUEST_DESCRIPTOR PCIeEncapsulated; 503991554f2SKenneth D. Merry U64 Words; 504991554f2SKenneth D. Merry } MPI2_REQUEST_DESCRIPTOR_UNION, MPI2_POINTER PTR_MPI2_REQUEST_DESCRIPTOR_UNION, 505991554f2SKenneth D. Merry Mpi2RequestDescriptorUnion_t, MPI2_POINTER pMpi2RequestDescriptorUnion_t; 506991554f2SKenneth D. Merry 50767feec50SStephen McConnell /* Atomic Request Descriptors */ 50867feec50SStephen McConnell 50967feec50SStephen McConnell /* 51067feec50SStephen McConnell * All Atomic Request Descriptors have the same format, so the following 51167feec50SStephen McConnell * structure is used for all Atomic Request Descriptors: 51267feec50SStephen McConnell * Atomic Default Request Descriptor 51367feec50SStephen McConnell * Atomic High Priority Request Descriptor 51467feec50SStephen McConnell * Atomic SCSI IO Request Descriptor 51567feec50SStephen McConnell * Atomic SCSI Target Request Descriptor 51667feec50SStephen McConnell * Atomic RAID Accelerator Request Descriptor 51767feec50SStephen McConnell * Atomic Fast Path SCSI IO Request Descriptor 51867feec50SStephen McConnell * Atomic PCIe Encapsulated Request Descriptor 51967feec50SStephen McConnell */ 52067feec50SStephen McConnell 52167feec50SStephen McConnell /* Atomic Request Descriptor */ 52267feec50SStephen McConnell typedef struct _MPI26_ATOMIC_REQUEST_DESCRIPTOR 52367feec50SStephen McConnell { 52467feec50SStephen McConnell U8 RequestFlags; /* 0x00 */ 52567feec50SStephen McConnell U8 MSIxIndex; /* 0x01 */ 52667feec50SStephen McConnell U16 SMID; /* 0x02 */ 52767feec50SStephen McConnell } MPI26_ATOMIC_REQUEST_DESCRIPTOR, 52867feec50SStephen McConnell MPI2_POINTER PTR_MPI26_ATOMIC_REQUEST_DESCRIPTOR, 52967feec50SStephen McConnell Mpi26AtomicRequestDescriptor_t, MPI2_POINTER pMpi26AtomicRequestDescriptor_t; 53028ae62b0SStephen McConnell 53128ae62b0SStephen McConnell /* for the RequestFlags field, use the same defines as MPI2_DEFAULT_REQUEST_DESCRIPTOR */ 53228ae62b0SStephen McConnell 533991554f2SKenneth D. Merry /* Reply Descriptors */ 534991554f2SKenneth D. Merry 535991554f2SKenneth D. Merry /* Default Reply Descriptor */ 536991554f2SKenneth D. Merry typedef struct _MPI2_DEFAULT_REPLY_DESCRIPTOR 537991554f2SKenneth D. Merry { 538991554f2SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 539991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 540991554f2SKenneth D. Merry U16 DescriptorTypeDependent1; /* 0x02 */ 541991554f2SKenneth D. Merry U32 DescriptorTypeDependent2; /* 0x04 */ 542991554f2SKenneth D. Merry } MPI2_DEFAULT_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_DEFAULT_REPLY_DESCRIPTOR, 543991554f2SKenneth D. Merry Mpi2DefaultReplyDescriptor_t, MPI2_POINTER pMpi2DefaultReplyDescriptor_t; 544991554f2SKenneth D. Merry 545991554f2SKenneth D. Merry /* defines for the ReplyFlags field */ 546991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK (0x0F) 547991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS (0x00) 548991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_ADDRESS_REPLY (0x01) 549991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_TARGETASSIST_SUCCESS (0x02) 550991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_TARGET_COMMAND_BUFFER (0x03) 551991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_RAID_ACCELERATOR_SUCCESS (0x05) 552991554f2SKenneth D. Merry #define MPI25_RPY_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO_SUCCESS (0x06) 55367feec50SStephen McConnell #define MPI26_RPY_DESCRIPT_FLAGS_PCIE_ENCAPSULATED_SUCCESS (0x08) 554991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_UNUSED (0x0F) 555991554f2SKenneth D. Merry 556991554f2SKenneth D. Merry /* values for marking a reply descriptor as unused */ 557991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_UNUSED_WORD0_MARK (0xFFFFFFFF) 558991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_UNUSED_WORD1_MARK (0xFFFFFFFF) 559991554f2SKenneth D. Merry 560991554f2SKenneth D. Merry /* Address Reply Descriptor */ 561991554f2SKenneth D. Merry typedef struct _MPI2_ADDRESS_REPLY_DESCRIPTOR 562991554f2SKenneth D. Merry { 563991554f2SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 564991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 565991554f2SKenneth D. Merry U16 SMID; /* 0x02 */ 566991554f2SKenneth D. Merry U32 ReplyFrameAddress; /* 0x04 */ 567991554f2SKenneth D. Merry } MPI2_ADDRESS_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_ADDRESS_REPLY_DESCRIPTOR, 568991554f2SKenneth D. Merry Mpi2AddressReplyDescriptor_t, MPI2_POINTER pMpi2AddressReplyDescriptor_t; 569991554f2SKenneth D. Merry 570991554f2SKenneth D. Merry #define MPI2_ADDRESS_REPLY_SMID_INVALID (0x00) 571991554f2SKenneth D. Merry 572991554f2SKenneth D. Merry /* SCSI IO Success Reply Descriptor */ 573991554f2SKenneth D. Merry typedef struct _MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR 574991554f2SKenneth D. Merry { 575991554f2SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 576991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 577991554f2SKenneth D. Merry U16 SMID; /* 0x02 */ 578991554f2SKenneth D. Merry U16 TaskTag; /* 0x04 */ 579991554f2SKenneth D. Merry U16 Reserved1; /* 0x06 */ 580991554f2SKenneth D. Merry } MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 581991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 582991554f2SKenneth D. Merry Mpi2SCSIIOSuccessReplyDescriptor_t, 583991554f2SKenneth D. Merry MPI2_POINTER pMpi2SCSIIOSuccessReplyDescriptor_t; 584991554f2SKenneth D. Merry 585991554f2SKenneth D. Merry /* TargetAssist Success Reply Descriptor */ 586991554f2SKenneth D. Merry typedef struct _MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR 587991554f2SKenneth D. Merry { 588991554f2SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 589991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 590991554f2SKenneth D. Merry U16 SMID; /* 0x02 */ 591991554f2SKenneth D. Merry U8 SequenceNumber; /* 0x04 */ 592991554f2SKenneth D. Merry U8 Reserved1; /* 0x05 */ 593991554f2SKenneth D. Merry U16 IoIndex; /* 0x06 */ 594991554f2SKenneth D. Merry } MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR, 595991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR, 596991554f2SKenneth D. Merry Mpi2TargetAssistSuccessReplyDescriptor_t, 597991554f2SKenneth D. Merry MPI2_POINTER pMpi2TargetAssistSuccessReplyDescriptor_t; 598991554f2SKenneth D. Merry 599991554f2SKenneth D. Merry /* Target Command Buffer Reply Descriptor */ 600991554f2SKenneth D. Merry typedef struct _MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR 601991554f2SKenneth D. Merry { 602991554f2SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 603991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 604991554f2SKenneth D. Merry U8 VP_ID; /* 0x02 */ 605991554f2SKenneth D. Merry U8 Flags; /* 0x03 */ 606991554f2SKenneth D. Merry U16 InitiatorDevHandle; /* 0x04 */ 607991554f2SKenneth D. Merry U16 IoIndex; /* 0x06 */ 608991554f2SKenneth D. Merry } MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR, 609991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR, 610991554f2SKenneth D. Merry Mpi2TargetCommandBufferReplyDescriptor_t, 611991554f2SKenneth D. Merry MPI2_POINTER pMpi2TargetCommandBufferReplyDescriptor_t; 612991554f2SKenneth D. Merry 613991554f2SKenneth D. Merry /* defines for Flags field */ 614991554f2SKenneth D. Merry #define MPI2_RPY_DESCRIPT_TCB_FLAGS_PHYNUM_MASK (0x3F) 615991554f2SKenneth D. Merry 616991554f2SKenneth D. Merry /* RAID Accelerator Success Reply Descriptor */ 617991554f2SKenneth D. Merry typedef struct _MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR 618991554f2SKenneth D. Merry { 619991554f2SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 620991554f2SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 621991554f2SKenneth D. Merry U16 SMID; /* 0x02 */ 622991554f2SKenneth D. Merry U32 Reserved; /* 0x04 */ 623991554f2SKenneth D. Merry } MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR, 624991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR, 625991554f2SKenneth D. Merry Mpi2RAIDAcceleratorSuccessReplyDescriptor_t, 626991554f2SKenneth D. Merry MPI2_POINTER pMpi2RAIDAcceleratorSuccessReplyDescriptor_t; 627991554f2SKenneth D. Merry 628991554f2SKenneth D. Merry /* Fast Path SCSI IO Success Reply Descriptor */ 629991554f2SKenneth D. Merry typedef MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR 630991554f2SKenneth D. Merry MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 631991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 632991554f2SKenneth D. Merry Mpi25FastPathSCSIIOSuccessReplyDescriptor_t, 633991554f2SKenneth D. Merry MPI2_POINTER pMpi25FastPathSCSIIOSuccessReplyDescriptor_t; 634991554f2SKenneth D. Merry 63567feec50SStephen McConnell /* PCIe Encapsulated Success Reply Descriptor */ 63667feec50SStephen McConnell typedef MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR 63767feec50SStephen McConnell MPI26_PCIE_ENCAPSULATED_SUCCESS_REPLY_DESCRIPTOR, 63867feec50SStephen McConnell MPI2_POINTER PTR_MPI26_PCIE_ENCAPSULATED_SUCCESS_REPLY_DESCRIPTOR, 63967feec50SStephen McConnell Mpi26PCIeEncapsulatedSuccessReplyDescriptor_t, 64067feec50SStephen McConnell MPI2_POINTER pMpi26PCIeEncapsulatedSuccessReplyDescriptor_t; 64167feec50SStephen McConnell 642991554f2SKenneth D. Merry /* union of Reply Descriptors */ 643991554f2SKenneth D. Merry typedef union _MPI2_REPLY_DESCRIPTORS_UNION 644991554f2SKenneth D. Merry { 645991554f2SKenneth D. Merry MPI2_DEFAULT_REPLY_DESCRIPTOR Default; 646991554f2SKenneth D. Merry MPI2_ADDRESS_REPLY_DESCRIPTOR AddressReply; 647991554f2SKenneth D. Merry MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR SCSIIOSuccess; 648991554f2SKenneth D. Merry MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR TargetAssistSuccess; 649991554f2SKenneth D. Merry MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR TargetCommandBuffer; 650991554f2SKenneth D. Merry MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR RAIDAcceleratorSuccess; 651991554f2SKenneth D. Merry MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR FastPathSCSIIOSuccess; 65267feec50SStephen McConnell MPI26_PCIE_ENCAPSULATED_SUCCESS_REPLY_DESCRIPTOR PCIeEncapsulatedSuccess; 653991554f2SKenneth D. Merry U64 Words; 654991554f2SKenneth D. Merry } MPI2_REPLY_DESCRIPTORS_UNION, MPI2_POINTER PTR_MPI2_REPLY_DESCRIPTORS_UNION, 655991554f2SKenneth D. Merry Mpi2ReplyDescriptorsUnion_t, MPI2_POINTER pMpi2ReplyDescriptorsUnion_t; 656991554f2SKenneth D. Merry 657991554f2SKenneth D. Merry /***************************************************************************** 658991554f2SKenneth D. Merry * 659991554f2SKenneth D. Merry * Message Functions 660991554f2SKenneth D. Merry * 661991554f2SKenneth D. Merry *****************************************************************************/ 662991554f2SKenneth D. Merry 663991554f2SKenneth D. Merry #define MPI2_FUNCTION_SCSI_IO_REQUEST (0x00) /* SCSI IO */ 664991554f2SKenneth D. Merry #define MPI2_FUNCTION_SCSI_TASK_MGMT (0x01) /* SCSI Task Management */ 665991554f2SKenneth D. Merry #define MPI2_FUNCTION_IOC_INIT (0x02) /* IOC Init */ 666991554f2SKenneth D. Merry #define MPI2_FUNCTION_IOC_FACTS (0x03) /* IOC Facts */ 667991554f2SKenneth D. Merry #define MPI2_FUNCTION_CONFIG (0x04) /* Configuration */ 668991554f2SKenneth D. Merry #define MPI2_FUNCTION_PORT_FACTS (0x05) /* Port Facts */ 669991554f2SKenneth D. Merry #define MPI2_FUNCTION_PORT_ENABLE (0x06) /* Port Enable */ 670991554f2SKenneth D. Merry #define MPI2_FUNCTION_EVENT_NOTIFICATION (0x07) /* Event Notification */ 671991554f2SKenneth D. Merry #define MPI2_FUNCTION_EVENT_ACK (0x08) /* Event Acknowledge */ 672991554f2SKenneth D. Merry #define MPI2_FUNCTION_FW_DOWNLOAD (0x09) /* FW Download */ 673991554f2SKenneth D. Merry #define MPI2_FUNCTION_TARGET_ASSIST (0x0B) /* Target Assist */ 674991554f2SKenneth D. Merry #define MPI2_FUNCTION_TARGET_STATUS_SEND (0x0C) /* Target Status Send */ 675991554f2SKenneth D. Merry #define MPI2_FUNCTION_TARGET_MODE_ABORT (0x0D) /* Target Mode Abort */ 676991554f2SKenneth D. Merry #define MPI2_FUNCTION_FW_UPLOAD (0x12) /* FW Upload */ 677991554f2SKenneth D. Merry #define MPI2_FUNCTION_RAID_ACTION (0x15) /* RAID Action */ 678991554f2SKenneth D. Merry #define MPI2_FUNCTION_RAID_SCSI_IO_PASSTHROUGH (0x16) /* SCSI IO RAID Passthrough */ 679991554f2SKenneth D. Merry #define MPI2_FUNCTION_TOOLBOX (0x17) /* Toolbox */ 680991554f2SKenneth D. Merry #define MPI2_FUNCTION_SCSI_ENCLOSURE_PROCESSOR (0x18) /* SCSI Enclosure Processor */ 681991554f2SKenneth D. Merry #define MPI2_FUNCTION_SMP_PASSTHROUGH (0x1A) /* SMP Passthrough */ 68228ae62b0SStephen McConnell #define MPI2_FUNCTION_SAS_IO_UNIT_CONTROL (0x1B) /* SAS IO Unit Control */ /* for MPI v2.5 and earlier */ 68328ae62b0SStephen McConnell #define MPI2_FUNCTION_IO_UNIT_CONTROL (0x1B) /* IO Unit Control */ /* for MPI v2.6 and later */ 684991554f2SKenneth D. Merry #define MPI2_FUNCTION_SATA_PASSTHROUGH (0x1C) /* SATA Passthrough */ 685991554f2SKenneth D. Merry #define MPI2_FUNCTION_DIAG_BUFFER_POST (0x1D) /* Diagnostic Buffer Post */ 686991554f2SKenneth D. Merry #define MPI2_FUNCTION_DIAG_RELEASE (0x1E) /* Diagnostic Release */ 687991554f2SKenneth D. Merry #define MPI2_FUNCTION_TARGET_CMD_BUF_BASE_POST (0x24) /* Target Command Buffer Post Base */ 688991554f2SKenneth D. Merry #define MPI2_FUNCTION_TARGET_CMD_BUF_LIST_POST (0x25) /* Target Command Buffer Post List */ 689991554f2SKenneth D. Merry #define MPI2_FUNCTION_RAID_ACCELERATOR (0x2C) /* RAID Accelerator */ 690991554f2SKenneth D. Merry #define MPI2_FUNCTION_HOST_BASED_DISCOVERY_ACTION (0x2F) /* Host Based Discovery Action */ 691991554f2SKenneth D. Merry #define MPI2_FUNCTION_PWR_MGMT_CONTROL (0x30) /* Power Management Control */ 692991554f2SKenneth D. Merry #define MPI2_FUNCTION_SEND_HOST_MESSAGE (0x31) /* Send Host Message */ 69367feec50SStephen McConnell #define MPI2_FUNCTION_NVME_ENCAPSULATED (0x33) /* NVMe Encapsulated (MPI v2.6) */ 694991554f2SKenneth D. Merry #define MPI2_FUNCTION_MIN_PRODUCT_SPECIFIC (0xF0) /* beginning of product-specific range */ 695991554f2SKenneth D. Merry #define MPI2_FUNCTION_MAX_PRODUCT_SPECIFIC (0xFF) /* end of product-specific range */ 696991554f2SKenneth D. Merry 697991554f2SKenneth D. Merry /* Doorbell functions */ 698991554f2SKenneth D. Merry #define MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET (0x40) 699991554f2SKenneth D. Merry #define MPI2_FUNCTION_HANDSHAKE (0x42) 700991554f2SKenneth D. Merry 701991554f2SKenneth D. Merry /***************************************************************************** 702991554f2SKenneth D. Merry * 703991554f2SKenneth D. Merry * IOC Status Values 704991554f2SKenneth D. Merry * 705991554f2SKenneth D. Merry *****************************************************************************/ 706991554f2SKenneth D. Merry 707991554f2SKenneth D. Merry /* mask for IOCStatus status value */ 708991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_MASK (0x7FFF) 709991554f2SKenneth D. Merry 710991554f2SKenneth D. Merry /**************************************************************************** 711991554f2SKenneth D. Merry * Common IOCStatus values for all replies 712991554f2SKenneth D. Merry ****************************************************************************/ 713991554f2SKenneth D. Merry 714991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SUCCESS (0x0000) 715991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_FUNCTION (0x0001) 716991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_BUSY (0x0002) 717991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_SGL (0x0003) 718991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_INTERNAL_ERROR (0x0004) 719991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_VPID (0x0005) 720991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES (0x0006) 721991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_FIELD (0x0007) 722991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_STATE (0x0008) 723991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED (0x0009) 72428ae62b0SStephen McConnell #define MPI2_IOCSTATUS_INSUFFICIENT_POWER (0x000A) /* MPI v2.6 and later */ 725991554f2SKenneth D. Merry 726991554f2SKenneth D. Merry /**************************************************************************** 727991554f2SKenneth D. Merry * Config IOCStatus values 728991554f2SKenneth D. Merry ****************************************************************************/ 729991554f2SKenneth D. Merry 730991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_INVALID_ACTION (0x0020) 731991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_INVALID_TYPE (0x0021) 732991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_INVALID_PAGE (0x0022) 733991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_INVALID_DATA (0x0023) 734991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS (0x0024) 735991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_CANT_COMMIT (0x0025) 736991554f2SKenneth D. Merry 737991554f2SKenneth D. Merry /**************************************************************************** 738991554f2SKenneth D. Merry * SCSI IO Reply 739991554f2SKenneth D. Merry ****************************************************************************/ 740991554f2SKenneth D. Merry 741991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR (0x0040) 742991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE (0x0042) 743991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE (0x0043) 744991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_DATA_OVERRUN (0x0044) 745991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN (0x0045) 746991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR (0x0046) 747991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR (0x0047) 748991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_TASK_TERMINATED (0x0048) 749991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH (0x0049) 750991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED (0x004A) 751991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_IOC_TERMINATED (0x004B) 752991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_EXT_TERMINATED (0x004C) 753991554f2SKenneth D. Merry 754991554f2SKenneth D. Merry /**************************************************************************** 755991554f2SKenneth D. Merry * For use by SCSI Initiator and SCSI Target end-to-end data protection 756991554f2SKenneth D. Merry ****************************************************************************/ 757991554f2SKenneth D. Merry 758991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_EEDP_GUARD_ERROR (0x004D) 759991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR (0x004E) 760991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR (0x004F) 761991554f2SKenneth D. Merry 762991554f2SKenneth D. Merry /**************************************************************************** 763991554f2SKenneth D. Merry * SCSI Target values 764991554f2SKenneth D. Merry ****************************************************************************/ 765991554f2SKenneth D. Merry 766991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX (0x0062) 767991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_ABORTED (0x0063) 768991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE (0x0064) 769991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_NO_CONNECTION (0x0065) 770991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH (0x006A) 771991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR (0x006D) 772991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA (0x006E) 773991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT (0x006F) 774991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT (0x0070) 775991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_NAK_RECEIVED (0x0071) 776991554f2SKenneth D. Merry 777991554f2SKenneth D. Merry /**************************************************************************** 778991554f2SKenneth D. Merry * Serial Attached SCSI values 779991554f2SKenneth D. Merry ****************************************************************************/ 780991554f2SKenneth D. Merry 781991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED (0x0090) 782991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN (0x0091) 783991554f2SKenneth D. Merry 784991554f2SKenneth D. Merry /**************************************************************************** 785991554f2SKenneth D. Merry * Diagnostic Buffer Post / Diagnostic Release values 786991554f2SKenneth D. Merry ****************************************************************************/ 787991554f2SKenneth D. Merry 788991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED (0x00A0) 789991554f2SKenneth D. Merry 790991554f2SKenneth D. Merry /**************************************************************************** 791991554f2SKenneth D. Merry * RAID Accelerator values 792991554f2SKenneth D. Merry ****************************************************************************/ 793991554f2SKenneth D. Merry 794991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_RAID_ACCEL_ERROR (0x00B0) 795991554f2SKenneth D. Merry 796991554f2SKenneth D. Merry /**************************************************************************** 797991554f2SKenneth D. Merry * IOCStatus flag to indicate that log info is available 798991554f2SKenneth D. Merry ****************************************************************************/ 799991554f2SKenneth D. Merry 800991554f2SKenneth D. Merry #define MPI2_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE (0x8000) 801991554f2SKenneth D. Merry 802991554f2SKenneth D. Merry /**************************************************************************** 803991554f2SKenneth D. Merry * IOCLogInfo Types 804991554f2SKenneth D. Merry ****************************************************************************/ 805991554f2SKenneth D. Merry 806991554f2SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_MASK (0xF0000000) 807991554f2SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_SHIFT (28) 808991554f2SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_NONE (0x0) 809991554f2SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_SCSI (0x1) 810991554f2SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_FC (0x2) 811991554f2SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_SAS (0x3) 812991554f2SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_ISCSI (0x4) 813991554f2SKenneth D. Merry #define MPI2_IOCLOGINFO_LOG_DATA_MASK (0x0FFFFFFF) 814991554f2SKenneth D. Merry 815991554f2SKenneth D. Merry /***************************************************************************** 816991554f2SKenneth D. Merry * 817991554f2SKenneth D. Merry * Standard Message Structures 818991554f2SKenneth D. Merry * 819991554f2SKenneth D. Merry *****************************************************************************/ 820991554f2SKenneth D. Merry 821991554f2SKenneth D. Merry /**************************************************************************** 822991554f2SKenneth D. Merry * Request Message Header for all request messages 823991554f2SKenneth D. Merry ****************************************************************************/ 824991554f2SKenneth D. Merry 825991554f2SKenneth D. Merry typedef struct _MPI2_REQUEST_HEADER 826991554f2SKenneth D. Merry { 827991554f2SKenneth D. Merry U16 FunctionDependent1; /* 0x00 */ 828991554f2SKenneth D. Merry U8 ChainOffset; /* 0x02 */ 829991554f2SKenneth D. Merry U8 Function; /* 0x03 */ 830991554f2SKenneth D. Merry U16 FunctionDependent2; /* 0x04 */ 831991554f2SKenneth D. Merry U8 FunctionDependent3; /* 0x06 */ 832991554f2SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 833991554f2SKenneth D. Merry U8 VP_ID; /* 0x08 */ 834991554f2SKenneth D. Merry U8 VF_ID; /* 0x09 */ 835991554f2SKenneth D. Merry U16 Reserved1; /* 0x0A */ 836991554f2SKenneth D. Merry } MPI2_REQUEST_HEADER, MPI2_POINTER PTR_MPI2_REQUEST_HEADER, 837991554f2SKenneth D. Merry MPI2RequestHeader_t, MPI2_POINTER pMPI2RequestHeader_t; 838991554f2SKenneth D. Merry 839991554f2SKenneth D. Merry /**************************************************************************** 840991554f2SKenneth D. Merry * Default Reply 841991554f2SKenneth D. Merry ****************************************************************************/ 842991554f2SKenneth D. Merry 843991554f2SKenneth D. Merry typedef struct _MPI2_DEFAULT_REPLY 844991554f2SKenneth D. Merry { 845991554f2SKenneth D. Merry U16 FunctionDependent1; /* 0x00 */ 846991554f2SKenneth D. Merry U8 MsgLength; /* 0x02 */ 847991554f2SKenneth D. Merry U8 Function; /* 0x03 */ 848991554f2SKenneth D. Merry U16 FunctionDependent2; /* 0x04 */ 849991554f2SKenneth D. Merry U8 FunctionDependent3; /* 0x06 */ 850991554f2SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 851991554f2SKenneth D. Merry U8 VP_ID; /* 0x08 */ 852991554f2SKenneth D. Merry U8 VF_ID; /* 0x09 */ 853991554f2SKenneth D. Merry U16 Reserved1; /* 0x0A */ 854991554f2SKenneth D. Merry U16 FunctionDependent5; /* 0x0C */ 855991554f2SKenneth D. Merry U16 IOCStatus; /* 0x0E */ 856991554f2SKenneth D. Merry U32 IOCLogInfo; /* 0x10 */ 857991554f2SKenneth D. Merry } MPI2_DEFAULT_REPLY, MPI2_POINTER PTR_MPI2_DEFAULT_REPLY, 858991554f2SKenneth D. Merry MPI2DefaultReply_t, MPI2_POINTER pMPI2DefaultReply_t; 859991554f2SKenneth D. Merry 860991554f2SKenneth D. Merry /* common version structure/union used in messages and configuration pages */ 861991554f2SKenneth D. Merry 862991554f2SKenneth D. Merry typedef struct _MPI2_VERSION_STRUCT 863991554f2SKenneth D. Merry { 864991554f2SKenneth D. Merry U8 Dev; /* 0x00 */ 865991554f2SKenneth D. Merry U8 Unit; /* 0x01 */ 866991554f2SKenneth D. Merry U8 Minor; /* 0x02 */ 867991554f2SKenneth D. Merry U8 Major; /* 0x03 */ 868991554f2SKenneth D. Merry } MPI2_VERSION_STRUCT; 869991554f2SKenneth D. Merry 870991554f2SKenneth D. Merry typedef union _MPI2_VERSION_UNION 871991554f2SKenneth D. Merry { 872991554f2SKenneth D. Merry MPI2_VERSION_STRUCT Struct; 873991554f2SKenneth D. Merry U32 Word; 874991554f2SKenneth D. Merry } MPI2_VERSION_UNION; 875991554f2SKenneth D. Merry 876991554f2SKenneth D. Merry /* LUN field defines, common to many structures */ 877991554f2SKenneth D. Merry #define MPI2_LUN_FIRST_LEVEL_ADDRESSING (0x0000FFFF) 878991554f2SKenneth D. Merry #define MPI2_LUN_SECOND_LEVEL_ADDRESSING (0xFFFF0000) 879991554f2SKenneth D. Merry #define MPI2_LUN_THIRD_LEVEL_ADDRESSING (0x0000FFFF) 880991554f2SKenneth D. Merry #define MPI2_LUN_FOURTH_LEVEL_ADDRESSING (0xFFFF0000) 881991554f2SKenneth D. Merry #define MPI2_LUN_LEVEL_1_WORD (0xFF00) 882991554f2SKenneth D. Merry #define MPI2_LUN_LEVEL_1_DWORD (0x0000FF00) 883991554f2SKenneth D. Merry 884991554f2SKenneth D. Merry /***************************************************************************** 885991554f2SKenneth D. Merry * 886991554f2SKenneth D. Merry * Fusion-MPT MPI Scatter Gather Elements 887991554f2SKenneth D. Merry * 888991554f2SKenneth D. Merry *****************************************************************************/ 889991554f2SKenneth D. Merry 890991554f2SKenneth D. Merry /**************************************************************************** 891991554f2SKenneth D. Merry * MPI Simple Element structures 892991554f2SKenneth D. Merry ****************************************************************************/ 893991554f2SKenneth D. Merry 894991554f2SKenneth D. Merry typedef struct _MPI2_SGE_SIMPLE32 895991554f2SKenneth D. Merry { 896991554f2SKenneth D. Merry U32 FlagsLength; 897991554f2SKenneth D. Merry U32 Address; 898991554f2SKenneth D. Merry } MPI2_SGE_SIMPLE32, MPI2_POINTER PTR_MPI2_SGE_SIMPLE32, 899991554f2SKenneth D. Merry Mpi2SGESimple32_t, MPI2_POINTER pMpi2SGESimple32_t; 900991554f2SKenneth D. Merry 901991554f2SKenneth D. Merry typedef struct _MPI2_SGE_SIMPLE64 902991554f2SKenneth D. Merry { 903991554f2SKenneth D. Merry U32 FlagsLength; 904991554f2SKenneth D. Merry U64 Address; 905991554f2SKenneth D. Merry } MPI2_SGE_SIMPLE64, MPI2_POINTER PTR_MPI2_SGE_SIMPLE64, 906991554f2SKenneth D. Merry Mpi2SGESimple64_t, MPI2_POINTER pMpi2SGESimple64_t; 907991554f2SKenneth D. Merry 908991554f2SKenneth D. Merry typedef struct _MPI2_SGE_SIMPLE_UNION 909991554f2SKenneth D. Merry { 910991554f2SKenneth D. Merry U32 FlagsLength; 911991554f2SKenneth D. Merry union 912991554f2SKenneth D. Merry { 913991554f2SKenneth D. Merry U32 Address32; 914991554f2SKenneth D. Merry U64 Address64; 915991554f2SKenneth D. Merry } u; 916991554f2SKenneth D. Merry } MPI2_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_SGE_SIMPLE_UNION, 917991554f2SKenneth D. Merry Mpi2SGESimpleUnion_t, MPI2_POINTER pMpi2SGESimpleUnion_t; 918991554f2SKenneth D. Merry 919991554f2SKenneth D. Merry /**************************************************************************** 920991554f2SKenneth D. Merry * MPI Chain Element structures - for MPI v2.0 products only 921991554f2SKenneth D. Merry ****************************************************************************/ 922991554f2SKenneth D. Merry 923991554f2SKenneth D. Merry typedef struct _MPI2_SGE_CHAIN32 924991554f2SKenneth D. Merry { 925991554f2SKenneth D. Merry U16 Length; 926991554f2SKenneth D. Merry U8 NextChainOffset; 927991554f2SKenneth D. Merry U8 Flags; 928991554f2SKenneth D. Merry U32 Address; 929991554f2SKenneth D. Merry } MPI2_SGE_CHAIN32, MPI2_POINTER PTR_MPI2_SGE_CHAIN32, 930991554f2SKenneth D. Merry Mpi2SGEChain32_t, MPI2_POINTER pMpi2SGEChain32_t; 931991554f2SKenneth D. Merry 932991554f2SKenneth D. Merry typedef struct _MPI2_SGE_CHAIN64 933991554f2SKenneth D. Merry { 934991554f2SKenneth D. Merry U16 Length; 935991554f2SKenneth D. Merry U8 NextChainOffset; 936991554f2SKenneth D. Merry U8 Flags; 937991554f2SKenneth D. Merry U64 Address; 938991554f2SKenneth D. Merry } MPI2_SGE_CHAIN64, MPI2_POINTER PTR_MPI2_SGE_CHAIN64, 939991554f2SKenneth D. Merry Mpi2SGEChain64_t, MPI2_POINTER pMpi2SGEChain64_t; 940991554f2SKenneth D. Merry 941991554f2SKenneth D. Merry typedef struct _MPI2_SGE_CHAIN_UNION 942991554f2SKenneth D. Merry { 943991554f2SKenneth D. Merry U16 Length; 944991554f2SKenneth D. Merry U8 NextChainOffset; 945991554f2SKenneth D. Merry U8 Flags; 946991554f2SKenneth D. Merry union 947991554f2SKenneth D. Merry { 948991554f2SKenneth D. Merry U32 Address32; 949991554f2SKenneth D. Merry U64 Address64; 950991554f2SKenneth D. Merry } u; 951991554f2SKenneth D. Merry } MPI2_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_SGE_CHAIN_UNION, 952991554f2SKenneth D. Merry Mpi2SGEChainUnion_t, MPI2_POINTER pMpi2SGEChainUnion_t; 953991554f2SKenneth D. Merry 954991554f2SKenneth D. Merry /**************************************************************************** 955991554f2SKenneth D. Merry * MPI Transaction Context Element structures - for MPI v2.0 products only 956991554f2SKenneth D. Merry ****************************************************************************/ 957991554f2SKenneth D. Merry 958991554f2SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION32 959991554f2SKenneth D. Merry { 960991554f2SKenneth D. Merry U8 Reserved; 961991554f2SKenneth D. Merry U8 ContextSize; 962991554f2SKenneth D. Merry U8 DetailsLength; 963991554f2SKenneth D. Merry U8 Flags; 964991554f2SKenneth D. Merry U32 TransactionContext[1]; 965991554f2SKenneth D. Merry U32 TransactionDetails[1]; 966991554f2SKenneth D. Merry } MPI2_SGE_TRANSACTION32, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION32, 967991554f2SKenneth D. Merry Mpi2SGETransaction32_t, MPI2_POINTER pMpi2SGETransaction32_t; 968991554f2SKenneth D. Merry 969991554f2SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION64 970991554f2SKenneth D. Merry { 971991554f2SKenneth D. Merry U8 Reserved; 972991554f2SKenneth D. Merry U8 ContextSize; 973991554f2SKenneth D. Merry U8 DetailsLength; 974991554f2SKenneth D. Merry U8 Flags; 975991554f2SKenneth D. Merry U32 TransactionContext[2]; 976991554f2SKenneth D. Merry U32 TransactionDetails[1]; 977991554f2SKenneth D. Merry } MPI2_SGE_TRANSACTION64, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION64, 978991554f2SKenneth D. Merry Mpi2SGETransaction64_t, MPI2_POINTER pMpi2SGETransaction64_t; 979991554f2SKenneth D. Merry 980991554f2SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION96 981991554f2SKenneth D. Merry { 982991554f2SKenneth D. Merry U8 Reserved; 983991554f2SKenneth D. Merry U8 ContextSize; 984991554f2SKenneth D. Merry U8 DetailsLength; 985991554f2SKenneth D. Merry U8 Flags; 986991554f2SKenneth D. Merry U32 TransactionContext[3]; 987991554f2SKenneth D. Merry U32 TransactionDetails[1]; 988991554f2SKenneth D. Merry } MPI2_SGE_TRANSACTION96, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION96, 989991554f2SKenneth D. Merry Mpi2SGETransaction96_t, MPI2_POINTER pMpi2SGETransaction96_t; 990991554f2SKenneth D. Merry 991991554f2SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION128 992991554f2SKenneth D. Merry { 993991554f2SKenneth D. Merry U8 Reserved; 994991554f2SKenneth D. Merry U8 ContextSize; 995991554f2SKenneth D. Merry U8 DetailsLength; 996991554f2SKenneth D. Merry U8 Flags; 997991554f2SKenneth D. Merry U32 TransactionContext[4]; 998991554f2SKenneth D. Merry U32 TransactionDetails[1]; 999991554f2SKenneth D. Merry } MPI2_SGE_TRANSACTION128, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION128, 1000991554f2SKenneth D. Merry Mpi2SGETransaction_t128, MPI2_POINTER pMpi2SGETransaction_t128; 1001991554f2SKenneth D. Merry 1002991554f2SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION_UNION 1003991554f2SKenneth D. Merry { 1004991554f2SKenneth D. Merry U8 Reserved; 1005991554f2SKenneth D. Merry U8 ContextSize; 1006991554f2SKenneth D. Merry U8 DetailsLength; 1007991554f2SKenneth D. Merry U8 Flags; 1008991554f2SKenneth D. Merry union 1009991554f2SKenneth D. Merry { 1010991554f2SKenneth D. Merry U32 TransactionContext32[1]; 1011991554f2SKenneth D. Merry U32 TransactionContext64[2]; 1012991554f2SKenneth D. Merry U32 TransactionContext96[3]; 1013991554f2SKenneth D. Merry U32 TransactionContext128[4]; 1014991554f2SKenneth D. Merry } u; 1015991554f2SKenneth D. Merry U32 TransactionDetails[1]; 1016991554f2SKenneth D. Merry } MPI2_SGE_TRANSACTION_UNION, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION_UNION, 1017991554f2SKenneth D. Merry Mpi2SGETransactionUnion_t, MPI2_POINTER pMpi2SGETransactionUnion_t; 1018991554f2SKenneth D. Merry 1019991554f2SKenneth D. Merry /**************************************************************************** 1020991554f2SKenneth D. Merry * MPI SGE union for IO SGL's - for MPI v2.0 products only 1021991554f2SKenneth D. Merry ****************************************************************************/ 1022991554f2SKenneth D. Merry 1023991554f2SKenneth D. Merry typedef struct _MPI2_MPI_SGE_IO_UNION 1024991554f2SKenneth D. Merry { 1025991554f2SKenneth D. Merry union 1026991554f2SKenneth D. Merry { 1027991554f2SKenneth D. Merry MPI2_SGE_SIMPLE_UNION Simple; 1028991554f2SKenneth D. Merry MPI2_SGE_CHAIN_UNION Chain; 1029991554f2SKenneth D. Merry } u; 1030991554f2SKenneth D. Merry } MPI2_MPI_SGE_IO_UNION, MPI2_POINTER PTR_MPI2_MPI_SGE_IO_UNION, 1031991554f2SKenneth D. Merry Mpi2MpiSGEIOUnion_t, MPI2_POINTER pMpi2MpiSGEIOUnion_t; 1032991554f2SKenneth D. Merry 1033991554f2SKenneth D. Merry /**************************************************************************** 1034991554f2SKenneth D. Merry * MPI SGE union for SGL's with Simple and Transaction elements - for MPI v2.0 products only 1035991554f2SKenneth D. Merry ****************************************************************************/ 1036991554f2SKenneth D. Merry 1037991554f2SKenneth D. Merry typedef struct _MPI2_SGE_TRANS_SIMPLE_UNION 1038991554f2SKenneth D. Merry { 1039991554f2SKenneth D. Merry union 1040991554f2SKenneth D. Merry { 1041991554f2SKenneth D. Merry MPI2_SGE_SIMPLE_UNION Simple; 1042991554f2SKenneth D. Merry MPI2_SGE_TRANSACTION_UNION Transaction; 1043991554f2SKenneth D. Merry } u; 1044991554f2SKenneth D. Merry } MPI2_SGE_TRANS_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_SGE_TRANS_SIMPLE_UNION, 1045991554f2SKenneth D. Merry Mpi2SGETransSimpleUnion_t, MPI2_POINTER pMpi2SGETransSimpleUnion_t; 1046991554f2SKenneth D. Merry 1047991554f2SKenneth D. Merry /**************************************************************************** 1048991554f2SKenneth D. Merry * All MPI SGE types union 1049991554f2SKenneth D. Merry ****************************************************************************/ 1050991554f2SKenneth D. Merry 1051991554f2SKenneth D. Merry typedef struct _MPI2_MPI_SGE_UNION 1052991554f2SKenneth D. Merry { 1053991554f2SKenneth D. Merry union 1054991554f2SKenneth D. Merry { 1055991554f2SKenneth D. Merry MPI2_SGE_SIMPLE_UNION Simple; 1056991554f2SKenneth D. Merry MPI2_SGE_CHAIN_UNION Chain; 1057991554f2SKenneth D. Merry MPI2_SGE_TRANSACTION_UNION Transaction; 1058991554f2SKenneth D. Merry } u; 1059991554f2SKenneth D. Merry } MPI2_MPI_SGE_UNION, MPI2_POINTER PTR_MPI2_MPI_SGE_UNION, 1060991554f2SKenneth D. Merry Mpi2MpiSgeUnion_t, MPI2_POINTER pMpi2MpiSgeUnion_t; 1061991554f2SKenneth D. Merry 1062991554f2SKenneth D. Merry /**************************************************************************** 1063991554f2SKenneth D. Merry * MPI SGE field definition and masks 1064991554f2SKenneth D. Merry ****************************************************************************/ 1065991554f2SKenneth D. Merry 1066991554f2SKenneth D. Merry /* Flags field bit definitions */ 1067991554f2SKenneth D. Merry 1068991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_LAST_ELEMENT (0x80) 1069991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_END_OF_BUFFER (0x40) 1070991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_ELEMENT_TYPE_MASK (0x30) 1071991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_LOCAL_ADDRESS (0x08) 1072991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_DIRECTION (0x04) 1073991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_ADDRESS_SIZE (0x02) 1074991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_END_OF_LIST (0x01) 1075991554f2SKenneth D. Merry 1076991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_SHIFT (24) 1077991554f2SKenneth D. Merry 1078991554f2SKenneth D. Merry #define MPI2_SGE_LENGTH_MASK (0x00FFFFFF) 1079991554f2SKenneth D. Merry #define MPI2_SGE_CHAIN_LENGTH_MASK (0x0000FFFF) 1080991554f2SKenneth D. Merry 1081991554f2SKenneth D. Merry /* Element Type */ 1082991554f2SKenneth D. Merry 1083991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_TRANSACTION_ELEMENT (0x00) /* for MPI v2.0 products only */ 1084991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_SIMPLE_ELEMENT (0x10) 1085991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_CHAIN_ELEMENT (0x30) /* for MPI v2.0 products only */ 1086991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_ELEMENT_MASK (0x30) 1087991554f2SKenneth D. Merry 1088991554f2SKenneth D. Merry /* Address location */ 1089991554f2SKenneth D. Merry 1090991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_SYSTEM_ADDRESS (0x00) 1091991554f2SKenneth D. Merry 1092991554f2SKenneth D. Merry /* Direction */ 1093991554f2SKenneth D. Merry 1094991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_IOC_TO_HOST (0x00) 1095991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_HOST_TO_IOC (0x04) 1096991554f2SKenneth D. Merry 1097991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_DEST (MPI2_SGE_FLAGS_IOC_TO_HOST) 1098991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_SOURCE (MPI2_SGE_FLAGS_HOST_TO_IOC) 1099991554f2SKenneth D. Merry 1100991554f2SKenneth D. Merry /* Address Size */ 1101991554f2SKenneth D. Merry 1102991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_32_BIT_ADDRESSING (0x00) 1103991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_64_BIT_ADDRESSING (0x02) 1104991554f2SKenneth D. Merry 1105991554f2SKenneth D. Merry /* Context Size */ 1106991554f2SKenneth D. Merry 1107991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_32_BIT_CONTEXT (0x00) 1108991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_64_BIT_CONTEXT (0x02) 1109991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_96_BIT_CONTEXT (0x04) 1110991554f2SKenneth D. Merry #define MPI2_SGE_FLAGS_128_BIT_CONTEXT (0x06) 1111991554f2SKenneth D. Merry 1112991554f2SKenneth D. Merry #define MPI2_SGE_CHAIN_OFFSET_MASK (0x00FF0000) 1113991554f2SKenneth D. Merry #define MPI2_SGE_CHAIN_OFFSET_SHIFT (16) 1114991554f2SKenneth D. Merry 1115991554f2SKenneth D. Merry /**************************************************************************** 1116991554f2SKenneth D. Merry * MPI SGE operation Macros 1117991554f2SKenneth D. Merry ****************************************************************************/ 1118991554f2SKenneth D. Merry 1119991554f2SKenneth D. Merry /* SIMPLE FlagsLength manipulations... */ 1120991554f2SKenneth D. Merry #define MPI2_SGE_SET_FLAGS(f) ((U32)(f) << MPI2_SGE_FLAGS_SHIFT) 1121991554f2SKenneth D. Merry #define MPI2_SGE_GET_FLAGS(f) (((f) & ~MPI2_SGE_LENGTH_MASK) >> MPI2_SGE_FLAGS_SHIFT) 1122991554f2SKenneth D. Merry #define MPI2_SGE_LENGTH(f) ((f) & MPI2_SGE_LENGTH_MASK) 1123991554f2SKenneth D. Merry #define MPI2_SGE_CHAIN_LENGTH(f) ((f) & MPI2_SGE_CHAIN_LENGTH_MASK) 1124991554f2SKenneth D. Merry 1125991554f2SKenneth D. Merry #define MPI2_SGE_SET_FLAGS_LENGTH(f,l) (MPI2_SGE_SET_FLAGS(f) | MPI2_SGE_LENGTH(l)) 1126991554f2SKenneth D. Merry 1127991554f2SKenneth D. Merry #define MPI2_pSGE_GET_FLAGS(psg) MPI2_SGE_GET_FLAGS((psg)->FlagsLength) 1128991554f2SKenneth D. Merry #define MPI2_pSGE_GET_LENGTH(psg) MPI2_SGE_LENGTH((psg)->FlagsLength) 1129991554f2SKenneth D. Merry #define MPI2_pSGE_SET_FLAGS_LENGTH(psg,f,l) (psg)->FlagsLength = MPI2_SGE_SET_FLAGS_LENGTH(f,l) 1130991554f2SKenneth D. Merry 1131991554f2SKenneth D. Merry /* CAUTION - The following are READ-MODIFY-WRITE! */ 1132991554f2SKenneth D. Merry #define MPI2_pSGE_SET_FLAGS(psg,f) (psg)->FlagsLength |= MPI2_SGE_SET_FLAGS(f) 1133991554f2SKenneth D. Merry #define MPI2_pSGE_SET_LENGTH(psg,l) (psg)->FlagsLength |= MPI2_SGE_LENGTH(l) 1134991554f2SKenneth D. Merry 1135991554f2SKenneth D. Merry #define MPI2_GET_CHAIN_OFFSET(x) ((x & MPI2_SGE_CHAIN_OFFSET_MASK) >> MPI2_SGE_CHAIN_OFFSET_SHIFT) 1136991554f2SKenneth D. Merry 1137991554f2SKenneth D. Merry /***************************************************************************** 1138991554f2SKenneth D. Merry * 1139991554f2SKenneth D. Merry * Fusion-MPT IEEE Scatter Gather Elements 1140991554f2SKenneth D. Merry * 1141991554f2SKenneth D. Merry *****************************************************************************/ 1142991554f2SKenneth D. Merry 1143991554f2SKenneth D. Merry /**************************************************************************** 1144991554f2SKenneth D. Merry * IEEE Simple Element structures 1145991554f2SKenneth D. Merry ****************************************************************************/ 1146991554f2SKenneth D. Merry 1147991554f2SKenneth D. Merry /* MPI2_IEEE_SGE_SIMPLE32 is for MPI v2.0 products only */ 1148991554f2SKenneth D. Merry typedef struct _MPI2_IEEE_SGE_SIMPLE32 1149991554f2SKenneth D. Merry { 1150991554f2SKenneth D. Merry U32 Address; 1151991554f2SKenneth D. Merry U32 FlagsLength; 1152991554f2SKenneth D. Merry } MPI2_IEEE_SGE_SIMPLE32, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE32, 1153991554f2SKenneth D. Merry Mpi2IeeeSgeSimple32_t, MPI2_POINTER pMpi2IeeeSgeSimple32_t; 1154991554f2SKenneth D. Merry 1155991554f2SKenneth D. Merry typedef struct _MPI2_IEEE_SGE_SIMPLE64 1156991554f2SKenneth D. Merry { 1157991554f2SKenneth D. Merry U64 Address; 1158991554f2SKenneth D. Merry U32 Length; 1159991554f2SKenneth D. Merry U16 Reserved1; 1160991554f2SKenneth D. Merry U8 Reserved2; 1161991554f2SKenneth D. Merry U8 Flags; 1162991554f2SKenneth D. Merry } MPI2_IEEE_SGE_SIMPLE64, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE64, 1163991554f2SKenneth D. Merry Mpi2IeeeSgeSimple64_t, MPI2_POINTER pMpi2IeeeSgeSimple64_t; 1164991554f2SKenneth D. Merry 1165991554f2SKenneth D. Merry typedef union _MPI2_IEEE_SGE_SIMPLE_UNION 1166991554f2SKenneth D. Merry { 1167991554f2SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE32 Simple32; 1168991554f2SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE64 Simple64; 1169991554f2SKenneth D. Merry } MPI2_IEEE_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE_UNION, 1170991554f2SKenneth D. Merry Mpi2IeeeSgeSimpleUnion_t, MPI2_POINTER pMpi2IeeeSgeSimpleUnion_t; 1171991554f2SKenneth D. Merry 1172991554f2SKenneth D. Merry /**************************************************************************** 1173991554f2SKenneth D. Merry * IEEE Chain Element structures 1174991554f2SKenneth D. Merry ****************************************************************************/ 1175991554f2SKenneth D. Merry 1176991554f2SKenneth D. Merry /* MPI2_IEEE_SGE_CHAIN32 is for MPI v2.0 products only */ 1177991554f2SKenneth D. Merry typedef MPI2_IEEE_SGE_SIMPLE32 MPI2_IEEE_SGE_CHAIN32; 1178991554f2SKenneth D. Merry 1179991554f2SKenneth D. Merry /* MPI2_IEEE_SGE_CHAIN64 is for MPI v2.0 products only */ 1180991554f2SKenneth D. Merry typedef MPI2_IEEE_SGE_SIMPLE64 MPI2_IEEE_SGE_CHAIN64; 1181991554f2SKenneth D. Merry 1182991554f2SKenneth D. Merry typedef union _MPI2_IEEE_SGE_CHAIN_UNION 1183991554f2SKenneth D. Merry { 1184991554f2SKenneth D. Merry MPI2_IEEE_SGE_CHAIN32 Chain32; 1185991554f2SKenneth D. Merry MPI2_IEEE_SGE_CHAIN64 Chain64; 1186991554f2SKenneth D. Merry } MPI2_IEEE_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_CHAIN_UNION, 1187991554f2SKenneth D. Merry Mpi2IeeeSgeChainUnion_t, MPI2_POINTER pMpi2IeeeSgeChainUnion_t; 1188991554f2SKenneth D. Merry 118928ae62b0SStephen McConnell /* MPI25_IEEE_SGE_CHAIN64 is for MPI v2.5 and later */ 1190991554f2SKenneth D. Merry typedef struct _MPI25_IEEE_SGE_CHAIN64 1191991554f2SKenneth D. Merry { 1192991554f2SKenneth D. Merry U64 Address; 1193991554f2SKenneth D. Merry U32 Length; 1194991554f2SKenneth D. Merry U16 Reserved1; 1195991554f2SKenneth D. Merry U8 NextChainOffset; 1196991554f2SKenneth D. Merry U8 Flags; 1197991554f2SKenneth D. Merry } MPI25_IEEE_SGE_CHAIN64, MPI2_POINTER PTR_MPI25_IEEE_SGE_CHAIN64, 1198991554f2SKenneth D. Merry Mpi25IeeeSgeChain64_t, MPI2_POINTER pMpi25IeeeSgeChain64_t; 1199991554f2SKenneth D. Merry 1200991554f2SKenneth D. Merry /**************************************************************************** 1201991554f2SKenneth D. Merry * All IEEE SGE types union 1202991554f2SKenneth D. Merry ****************************************************************************/ 1203991554f2SKenneth D. Merry 1204991554f2SKenneth D. Merry /* MPI2_IEEE_SGE_UNION is for MPI v2.0 products only */ 1205991554f2SKenneth D. Merry typedef struct _MPI2_IEEE_SGE_UNION 1206991554f2SKenneth D. Merry { 1207991554f2SKenneth D. Merry union 1208991554f2SKenneth D. Merry { 1209991554f2SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE_UNION Simple; 1210991554f2SKenneth D. Merry MPI2_IEEE_SGE_CHAIN_UNION Chain; 1211991554f2SKenneth D. Merry } u; 1212991554f2SKenneth D. Merry } MPI2_IEEE_SGE_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_UNION, 1213991554f2SKenneth D. Merry Mpi2IeeeSgeUnion_t, MPI2_POINTER pMpi2IeeeSgeUnion_t; 1214991554f2SKenneth D. Merry 1215991554f2SKenneth D. Merry /**************************************************************************** 1216991554f2SKenneth D. Merry * IEEE SGE union for IO SGL's 1217991554f2SKenneth D. Merry ****************************************************************************/ 1218991554f2SKenneth D. Merry 1219991554f2SKenneth D. Merry typedef union _MPI25_SGE_IO_UNION 1220991554f2SKenneth D. Merry { 1221991554f2SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE64 IeeeSimple; 1222991554f2SKenneth D. Merry MPI25_IEEE_SGE_CHAIN64 IeeeChain; 1223991554f2SKenneth D. Merry } MPI25_SGE_IO_UNION, MPI2_POINTER PTR_MPI25_SGE_IO_UNION, 1224991554f2SKenneth D. Merry Mpi25SGEIOUnion_t, MPI2_POINTER pMpi25SGEIOUnion_t; 1225991554f2SKenneth D. Merry 1226991554f2SKenneth D. Merry /**************************************************************************** 1227991554f2SKenneth D. Merry * IEEE SGE field definitions and masks 1228991554f2SKenneth D. Merry ****************************************************************************/ 1229991554f2SKenneth D. Merry 1230991554f2SKenneth D. Merry /* Flags field bit definitions */ 1231991554f2SKenneth D. Merry 1232991554f2SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_ELEMENT_TYPE_MASK (0x80) 1233991554f2SKenneth D. Merry #define MPI25_IEEE_SGE_FLAGS_END_OF_LIST (0x40) 1234991554f2SKenneth D. Merry 1235991554f2SKenneth D. Merry #define MPI2_IEEE32_SGE_FLAGS_SHIFT (24) 1236991554f2SKenneth D. Merry 1237991554f2SKenneth D. Merry #define MPI2_IEEE32_SGE_LENGTH_MASK (0x00FFFFFF) 1238991554f2SKenneth D. Merry 1239991554f2SKenneth D. Merry /* Element Type */ 1240991554f2SKenneth D. Merry 1241991554f2SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_SIMPLE_ELEMENT (0x00) 1242991554f2SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_CHAIN_ELEMENT (0x80) 1243991554f2SKenneth D. Merry 124428ae62b0SStephen McConnell /* Next Segment Format */ 124528ae62b0SStephen McConnell 124628ae62b0SStephen McConnell #define MPI26_IEEE_SGE_FLAGS_NSF_MASK (0x1C) 124728ae62b0SStephen McConnell #define MPI26_IEEE_SGE_FLAGS_NSF_MPI_IEEE (0x00) 124867feec50SStephen McConnell #define MPI26_IEEE_SGE_FLAGS_NSF_NVME_PRP (0x08) 124967feec50SStephen McConnell #define MPI26_IEEE_SGE_FLAGS_NSF_NVME_SGL (0x10) 125028ae62b0SStephen McConnell 1251991554f2SKenneth D. Merry /* Data Location Address Space */ 1252991554f2SKenneth D. Merry 1253991554f2SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_ADDR_MASK (0x03) 125428ae62b0SStephen McConnell #define MPI2_IEEE_SGE_FLAGS_SYSTEM_ADDR (0x00) /* for MPI v2.0, use in IEEE Simple Element only; for MPI v2.5 and later, use in IEEE Simple or Chain element */ 1255991554f2SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_IOCDDR_ADDR (0x01) /* use in IEEE Simple Element only */ 1256991554f2SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_IOCPLB_ADDR (0x02) 1257991554f2SKenneth D. Merry #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 */ 1258991554f2SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_SYSTEMPLBPCI_ADDR (0x03) /* use in MPI v2.0 IEEE Chain Element only */ 1259991554f2SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_SYSTEMPLBCPI_ADDR (MPI2_IEEE_SGE_FLAGS_SYSTEMPLBPCI_ADDR) /* typo in name */ 1260991554f2SKenneth D. Merry 126128ae62b0SStephen McConnell #define MPI26_IEEE_SGE_FLAGS_IOCCTL_ADDR (0x02) /* for MPI v2.6 only */ 126228ae62b0SStephen McConnell 1263991554f2SKenneth D. Merry /**************************************************************************** 1264991554f2SKenneth D. Merry * IEEE SGE operation Macros 1265991554f2SKenneth D. Merry ****************************************************************************/ 1266991554f2SKenneth D. Merry 1267991554f2SKenneth D. Merry /* SIMPLE FlagsLength manipulations... */ 1268991554f2SKenneth D. Merry #define MPI2_IEEE32_SGE_SET_FLAGS(f) ((U32)(f) << MPI2_IEEE32_SGE_FLAGS_SHIFT) 1269991554f2SKenneth D. Merry #define MPI2_IEEE32_SGE_GET_FLAGS(f) (((f) & ~MPI2_IEEE32_SGE_LENGTH_MASK) >> MPI2_IEEE32_SGE_FLAGS_SHIFT) 1270991554f2SKenneth D. Merry #define MPI2_IEEE32_SGE_LENGTH(f) ((f) & MPI2_IEEE32_SGE_LENGTH_MASK) 1271991554f2SKenneth D. Merry 1272991554f2SKenneth D. Merry #define MPI2_IEEE32_SGE_SET_FLAGS_LENGTH(f, l) (MPI2_IEEE32_SGE_SET_FLAGS(f) | MPI2_IEEE32_SGE_LENGTH(l)) 1273991554f2SKenneth D. Merry 1274991554f2SKenneth D. Merry #define MPI2_IEEE32_pSGE_GET_FLAGS(psg) MPI2_IEEE32_SGE_GET_FLAGS((psg)->FlagsLength) 1275991554f2SKenneth D. Merry #define MPI2_IEEE32_pSGE_GET_LENGTH(psg) MPI2_IEEE32_SGE_LENGTH((psg)->FlagsLength) 1276991554f2SKenneth D. Merry #define MPI2_IEEE32_pSGE_SET_FLAGS_LENGTH(psg,f,l) (psg)->FlagsLength = MPI2_IEEE32_SGE_SET_FLAGS_LENGTH(f,l) 1277991554f2SKenneth D. Merry 1278991554f2SKenneth D. Merry /* CAUTION - The following are READ-MODIFY-WRITE! */ 1279991554f2SKenneth D. Merry #define MPI2_IEEE32_pSGE_SET_FLAGS(psg,f) (psg)->FlagsLength |= MPI2_IEEE32_SGE_SET_FLAGS(f) 1280991554f2SKenneth D. Merry #define MPI2_IEEE32_pSGE_SET_LENGTH(psg,l) (psg)->FlagsLength |= MPI2_IEEE32_SGE_LENGTH(l) 1281991554f2SKenneth D. Merry 1282991554f2SKenneth D. Merry /***************************************************************************** 1283991554f2SKenneth D. Merry * 1284991554f2SKenneth D. Merry * Fusion-MPT MPI/IEEE Scatter Gather Unions 1285991554f2SKenneth D. Merry * 1286991554f2SKenneth D. Merry *****************************************************************************/ 1287991554f2SKenneth D. Merry 1288991554f2SKenneth D. Merry typedef union _MPI2_SIMPLE_SGE_UNION 1289991554f2SKenneth D. Merry { 1290991554f2SKenneth D. Merry MPI2_SGE_SIMPLE_UNION MpiSimple; 1291991554f2SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple; 1292991554f2SKenneth D. Merry } MPI2_SIMPLE_SGE_UNION, MPI2_POINTER PTR_MPI2_SIMPLE_SGE_UNION, 1293991554f2SKenneth D. Merry Mpi2SimpleSgeUntion_t, MPI2_POINTER pMpi2SimpleSgeUntion_t; 1294991554f2SKenneth D. Merry 1295991554f2SKenneth D. Merry typedef union _MPI2_SGE_IO_UNION 1296991554f2SKenneth D. Merry { 1297991554f2SKenneth D. Merry MPI2_SGE_SIMPLE_UNION MpiSimple; 1298991554f2SKenneth D. Merry MPI2_SGE_CHAIN_UNION MpiChain; 1299991554f2SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple; 1300991554f2SKenneth D. Merry MPI2_IEEE_SGE_CHAIN_UNION IeeeChain; 1301991554f2SKenneth D. Merry } MPI2_SGE_IO_UNION, MPI2_POINTER PTR_MPI2_SGE_IO_UNION, 1302991554f2SKenneth D. Merry Mpi2SGEIOUnion_t, MPI2_POINTER pMpi2SGEIOUnion_t; 1303991554f2SKenneth D. Merry 1304991554f2SKenneth D. Merry /**************************************************************************** 1305991554f2SKenneth D. Merry * 1306991554f2SKenneth D. Merry * Values for SGLFlags field, used in many request messages with an SGL 1307991554f2SKenneth D. Merry * 1308991554f2SKenneth D. Merry ****************************************************************************/ 1309991554f2SKenneth D. Merry 1310991554f2SKenneth D. Merry /* values for MPI SGL Data Location Address Space subfield */ 1311991554f2SKenneth D. Merry #define MPI2_SGLFLAGS_ADDRESS_SPACE_MASK (0x0C) 1312991554f2SKenneth D. Merry #define MPI2_SGLFLAGS_SYSTEM_ADDRESS_SPACE (0x00) 1313991554f2SKenneth D. Merry #define MPI2_SGLFLAGS_IOCDDR_ADDRESS_SPACE (0x04) 131428ae62b0SStephen McConnell #define MPI2_SGLFLAGS_IOCPLB_ADDRESS_SPACE (0x08) /* only for MPI v2.5 and earlier */ 131528ae62b0SStephen McConnell #define MPI26_SGLFLAGS_IOCPLB_ADDRESS_SPACE (0x08) /* only for MPI v2.6 */ 131628ae62b0SStephen McConnell #define MPI2_SGLFLAGS_IOCPLBNTA_ADDRESS_SPACE (0x0C) /* only for MPI v2.5 and earlier */ 1317991554f2SKenneth D. Merry /* values for SGL Type subfield */ 1318991554f2SKenneth D. Merry #define MPI2_SGLFLAGS_SGL_TYPE_MASK (0x03) 1319991554f2SKenneth D. Merry #define MPI2_SGLFLAGS_SGL_TYPE_MPI (0x00) 1320991554f2SKenneth D. Merry #define MPI2_SGLFLAGS_SGL_TYPE_IEEE32 (0x01) /* MPI v2.0 products only */ 1321991554f2SKenneth D. Merry #define MPI2_SGLFLAGS_SGL_TYPE_IEEE64 (0x02) 1322991554f2SKenneth D. Merry 1323991554f2SKenneth D. Merry #endif 1324