1*2ffc8bcaSDan McDonald /* 2*2ffc8bcaSDan McDonald * fusion.h 3*2ffc8bcaSDan McDonald * 4*2ffc8bcaSDan McDonald * Solaris MegaRAID device driver for SAS2.0 controllers 5*2ffc8bcaSDan McDonald * Copyright (c) 2008-2012, LSI Logic Corporation. 6*2ffc8bcaSDan McDonald * All rights reserved. 7*2ffc8bcaSDan McDonald * 8*2ffc8bcaSDan McDonald * Version: 9*2ffc8bcaSDan McDonald * Author: 10*2ffc8bcaSDan McDonald * Swaminathan K S 11*2ffc8bcaSDan McDonald * Arun Chandrashekhar 12*2ffc8bcaSDan McDonald * Manju R 13*2ffc8bcaSDan McDonald * Rasheed 14*2ffc8bcaSDan McDonald * Shakeel Bukhari 15*2ffc8bcaSDan McDonald */ 16*2ffc8bcaSDan McDonald 17*2ffc8bcaSDan McDonald 18*2ffc8bcaSDan McDonald #ifndef _FUSION_H_ 19*2ffc8bcaSDan McDonald #define _FUSION_H_ 20*2ffc8bcaSDan McDonald 21*2ffc8bcaSDan McDonald #define U64 uint64_t 22*2ffc8bcaSDan McDonald #define U32 uint32_t 23*2ffc8bcaSDan McDonald #define U16 uint16_t 24*2ffc8bcaSDan McDonald #define U8 uint8_t 25*2ffc8bcaSDan McDonald #define S8 char 26*2ffc8bcaSDan McDonald #define S16 short 27*2ffc8bcaSDan McDonald #define S32 int 28*2ffc8bcaSDan McDonald 29*2ffc8bcaSDan McDonald /* MPI2 defines */ 30*2ffc8bcaSDan McDonald #define MPI2_REPLY_POST_HOST_INDEX_OFFSET (0x6C) 31*2ffc8bcaSDan McDonald #define MPI2_FUNCTION_IOC_INIT (0x02) /* IOC Init */ 32*2ffc8bcaSDan McDonald #define MPI2_WHOINIT_HOST_DRIVER (0x04) 33*2ffc8bcaSDan McDonald #define MPI2_VERSION_MAJOR (0x02) 34*2ffc8bcaSDan McDonald #define MPI2_VERSION_MINOR (0x00) 35*2ffc8bcaSDan McDonald #define MPI2_VERSION_MAJOR_MASK (0xFF00) 36*2ffc8bcaSDan McDonald #define MPI2_VERSION_MAJOR_SHIFT (8) 37*2ffc8bcaSDan McDonald #define MPI2_VERSION_MINOR_MASK (0x00FF) 38*2ffc8bcaSDan McDonald #define MPI2_VERSION_MINOR_SHIFT (0) 39*2ffc8bcaSDan McDonald #define MPI2_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \ 40*2ffc8bcaSDan McDonald MPI2_VERSION_MINOR) 41*2ffc8bcaSDan McDonald #define MPI2_HEADER_VERSION_UNIT (0x10) 42*2ffc8bcaSDan McDonald #define MPI2_HEADER_VERSION_DEV (0x00) 43*2ffc8bcaSDan McDonald #define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00) 44*2ffc8bcaSDan McDonald #define MPI2_HEADER_VERSION_UNIT_SHIFT (8) 45*2ffc8bcaSDan McDonald #define MPI2_HEADER_VERSION_DEV_MASK (0x00FF) 46*2ffc8bcaSDan McDonald #define MPI2_HEADER_VERSION_DEV_SHIFT (0) 47*2ffc8bcaSDan McDonald #define MPI2_HEADER_VERSION ((MPI2_HEADER_VERSION_UNIT \ 48*2ffc8bcaSDan McDonald << 8) | \ 49*2ffc8bcaSDan McDonald MPI2_HEADER_VERSION_DEV) 50*2ffc8bcaSDan McDonald #define MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR (0x03) 51*2ffc8bcaSDan McDonald #define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG (0x8000) 52*2ffc8bcaSDan McDonald #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG (0x0400) 53*2ffc8bcaSDan McDonald #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP (0x0003) 54*2ffc8bcaSDan McDonald #define MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG (0x0200) 55*2ffc8bcaSDan McDonald #define MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD (0x0100) 56*2ffc8bcaSDan McDonald #define MPI2_SCSIIO_EEDPFLAGS_INSERT_OP (0x0004) 57*2ffc8bcaSDan McDonald #define MPI2_FUNCTION_SCSI_IO_REQUEST (0x00) /* SCSI IO */ 58*2ffc8bcaSDan McDonald #define MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY (0x06) 59*2ffc8bcaSDan McDonald #define MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO (0x00) 60*2ffc8bcaSDan McDonald #define MPI2_SGE_FLAGS_64_BIT_ADDRESSING (0x02) 61*2ffc8bcaSDan McDonald #define MPI2_SCSIIO_CONTROL_WRITE (0x01000000) 62*2ffc8bcaSDan McDonald #define MPI2_SCSIIO_CONTROL_READ (0x02000000) 63*2ffc8bcaSDan McDonald #define MPI2_REQ_DESCRIPT_FLAGS_TYPE_MASK (0x0E) 64*2ffc8bcaSDan McDonald #define MPI2_RPY_DESCRIPT_FLAGS_UNUSED (0x0F) 65*2ffc8bcaSDan McDonald #define MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS (0x00) 66*2ffc8bcaSDan McDonald #define MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK (0x0F) 67*2ffc8bcaSDan McDonald #define MPI2_WRSEQ_FLUSH_KEY_VALUE (0x0) 68*2ffc8bcaSDan McDonald #define MPI2_WRITE_SEQUENCE_OFFSET (0x00000004) 69*2ffc8bcaSDan McDonald #define MPI2_WRSEQ_1ST_KEY_VALUE (0xF) 70*2ffc8bcaSDan McDonald #define MPI2_WRSEQ_2ND_KEY_VALUE (0x4) 71*2ffc8bcaSDan McDonald #define MPI2_WRSEQ_3RD_KEY_VALUE (0xB) 72*2ffc8bcaSDan McDonald #define MPI2_WRSEQ_4TH_KEY_VALUE (0x2) 73*2ffc8bcaSDan McDonald #define MPI2_WRSEQ_5TH_KEY_VALUE (0x7) 74*2ffc8bcaSDan McDonald #define MPI2_WRSEQ_6TH_KEY_VALUE (0xD) 75*2ffc8bcaSDan McDonald 76*2ffc8bcaSDan McDonald /* Invader defines */ 77*2ffc8bcaSDan McDonald #define MPI2_TYPE_CUDA 0x2 78*2ffc8bcaSDan McDonald #define MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH 0x4000 79*2ffc8bcaSDan McDonald #define MR_RL_FLAGS_GRANT_DESTINATION_CPU0 0x00 80*2ffc8bcaSDan McDonald #define MR_RL_FLAGS_GRANT_DESTINATION_CPU1 0x10 81*2ffc8bcaSDan McDonald #define MR_RL_FLAGS_GRANT_DESTINATION_CUDA 0x80 82*2ffc8bcaSDan McDonald #define MR_RL_FLAGS_SEQ_NUM_ENABLE 0x8 83*2ffc8bcaSDan McDonald #define MPI2_NSEG_FLAGS_SHIFT 4 84*2ffc8bcaSDan McDonald 85*2ffc8bcaSDan McDonald 86*2ffc8bcaSDan McDonald #define MR_PD_INVALID 0xFFFF 87*2ffc8bcaSDan McDonald #define MAX_SPAN_DEPTH 8 88*2ffc8bcaSDan McDonald #define MAX_RAIDMAP_SPAN_DEPTH (MAX_SPAN_DEPTH) 89*2ffc8bcaSDan McDonald #define MAX_ROW_SIZE 32 90*2ffc8bcaSDan McDonald #define MAX_RAIDMAP_ROW_SIZE (MAX_ROW_SIZE) 91*2ffc8bcaSDan McDonald #define MAX_LOGICAL_DRIVES 64 92*2ffc8bcaSDan McDonald #define MAX_RAIDMAP_LOGICAL_DRIVES (MAX_LOGICAL_DRIVES) 93*2ffc8bcaSDan McDonald #define MAX_RAIDMAP_VIEWS (MAX_LOGICAL_DRIVES) 94*2ffc8bcaSDan McDonald #define MAX_ARRAYS 128 95*2ffc8bcaSDan McDonald #define MAX_RAIDMAP_ARRAYS (MAX_ARRAYS) 96*2ffc8bcaSDan McDonald #define MAX_PHYSICAL_DEVICES 256 97*2ffc8bcaSDan McDonald #define MAX_RAIDMAP_PHYSICAL_DEVICES (MAX_PHYSICAL_DEVICES) 98*2ffc8bcaSDan McDonald 99*2ffc8bcaSDan McDonald /* get the mapping information of LD */ 100*2ffc8bcaSDan McDonald #define MR_DCMD_LD_MAP_GET_INFO 0x0300e101 101*2ffc8bcaSDan McDonald 102*2ffc8bcaSDan McDonald #ifndef MPI2_POINTER 103*2ffc8bcaSDan McDonald #define MPI2_POINTER * 104*2ffc8bcaSDan McDonald #endif 105*2ffc8bcaSDan McDonald 106*2ffc8bcaSDan McDonald #pragma pack(1) 107*2ffc8bcaSDan McDonald 108*2ffc8bcaSDan McDonald typedef struct _MPI25_IEEE_SGE_CHAIN64 109*2ffc8bcaSDan McDonald { 110*2ffc8bcaSDan McDonald U64 Address; 111*2ffc8bcaSDan McDonald U32 Length; 112*2ffc8bcaSDan McDonald U16 Reserved1; 113*2ffc8bcaSDan McDonald U8 NextChainOffset; 114*2ffc8bcaSDan McDonald U8 Flags; 115*2ffc8bcaSDan McDonald } MPI25_IEEE_SGE_CHAIN64, MPI2_POINTER PTR_MPI25_IEEE_SGE_CHAIN64, 116*2ffc8bcaSDan McDonald Mpi25IeeeSgeChain64_t, MPI2_POINTER pMpi25IeeeSgeChain64_t; 117*2ffc8bcaSDan McDonald 118*2ffc8bcaSDan McDonald typedef struct _MPI2_SGE_SIMPLE_UNION 119*2ffc8bcaSDan McDonald { 120*2ffc8bcaSDan McDonald U32 FlagsLength; 121*2ffc8bcaSDan McDonald union 122*2ffc8bcaSDan McDonald { 123*2ffc8bcaSDan McDonald U32 Address32; 124*2ffc8bcaSDan McDonald U64 Address64; 125*2ffc8bcaSDan McDonald } u1; 126*2ffc8bcaSDan McDonald } MPI2_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_SGE_SIMPLE_UNION, 127*2ffc8bcaSDan McDonald Mpi2SGESimpleUnion_t, MPI2_POINTER pMpi2SGESimpleUnion_t; 128*2ffc8bcaSDan McDonald 129*2ffc8bcaSDan McDonald typedef struct 130*2ffc8bcaSDan McDonald { 131*2ffc8bcaSDan McDonald U8 CDB[20]; /* 0x00 */ 132*2ffc8bcaSDan McDonald U32 PrimaryReferenceTag; /* 0x14 */ 133*2ffc8bcaSDan McDonald U16 PrimaryApplicationTag; /* 0x18 */ 134*2ffc8bcaSDan McDonald U16 PrimaryApplicationTagMask; /* 0x1A */ 135*2ffc8bcaSDan McDonald U32 TransferLength; /* 0x1C */ 136*2ffc8bcaSDan McDonald } MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32, 137*2ffc8bcaSDan McDonald Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t; 138*2ffc8bcaSDan McDonald 139*2ffc8bcaSDan McDonald typedef struct _MPI2_SGE_CHAIN_UNION 140*2ffc8bcaSDan McDonald { 141*2ffc8bcaSDan McDonald U16 Length; 142*2ffc8bcaSDan McDonald U8 NextChainOffset; 143*2ffc8bcaSDan McDonald U8 Flags; 144*2ffc8bcaSDan McDonald union 145*2ffc8bcaSDan McDonald { 146*2ffc8bcaSDan McDonald U32 Address32; 147*2ffc8bcaSDan McDonald U64 Address64; 148*2ffc8bcaSDan McDonald } u1; 149*2ffc8bcaSDan McDonald } MPI2_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_SGE_CHAIN_UNION, 150*2ffc8bcaSDan McDonald Mpi2SGEChainUnion_t, MPI2_POINTER pMpi2SGEChainUnion_t; 151*2ffc8bcaSDan McDonald 152*2ffc8bcaSDan McDonald typedef struct _MPI2_IEEE_SGE_SIMPLE32 153*2ffc8bcaSDan McDonald { 154*2ffc8bcaSDan McDonald U32 Address; 155*2ffc8bcaSDan McDonald U32 FlagsLength; 156*2ffc8bcaSDan McDonald } MPI2_IEEE_SGE_SIMPLE32, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE32, 157*2ffc8bcaSDan McDonald Mpi2IeeeSgeSimple32_t, MPI2_POINTER pMpi2IeeeSgeSimple32_t; 158*2ffc8bcaSDan McDonald 159*2ffc8bcaSDan McDonald typedef struct _MPI2_IEEE_SGE_SIMPLE64 160*2ffc8bcaSDan McDonald { 161*2ffc8bcaSDan McDonald U64 Address; 162*2ffc8bcaSDan McDonald U32 Length; 163*2ffc8bcaSDan McDonald U16 Reserved1; 164*2ffc8bcaSDan McDonald U8 Reserved2; 165*2ffc8bcaSDan McDonald U8 Flags; 166*2ffc8bcaSDan McDonald } MPI2_IEEE_SGE_SIMPLE64, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE64, 167*2ffc8bcaSDan McDonald Mpi2IeeeSgeSimple64_t, MPI2_POINTER pMpi2IeeeSgeSimple64_t; 168*2ffc8bcaSDan McDonald 169*2ffc8bcaSDan McDonald typedef union _MPI2_IEEE_SGE_SIMPLE_UNION 170*2ffc8bcaSDan McDonald { 171*2ffc8bcaSDan McDonald MPI2_IEEE_SGE_SIMPLE32 Simple32; 172*2ffc8bcaSDan McDonald MPI2_IEEE_SGE_SIMPLE64 Simple64; 173*2ffc8bcaSDan McDonald } MPI2_IEEE_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE_UNION, 174*2ffc8bcaSDan McDonald Mpi2IeeeSgeSimpleUnion_t, MPI2_POINTER pMpi2IeeeSgeSimpleUnion_t; 175*2ffc8bcaSDan McDonald 176*2ffc8bcaSDan McDonald typedef MPI2_IEEE_SGE_SIMPLE32 MPI2_IEEE_SGE_CHAIN32; 177*2ffc8bcaSDan McDonald typedef MPI2_IEEE_SGE_SIMPLE64 MPI2_IEEE_SGE_CHAIN64; 178*2ffc8bcaSDan McDonald 179*2ffc8bcaSDan McDonald typedef union _MPI2_IEEE_SGE_CHAIN_UNION 180*2ffc8bcaSDan McDonald { 181*2ffc8bcaSDan McDonald MPI2_IEEE_SGE_CHAIN32 Chain32; 182*2ffc8bcaSDan McDonald MPI2_IEEE_SGE_CHAIN64 Chain64; 183*2ffc8bcaSDan McDonald } MPI2_IEEE_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_CHAIN_UNION, 184*2ffc8bcaSDan McDonald Mpi2IeeeSgeChainUnion_t, MPI2_POINTER pMpi2IeeeSgeChainUnion_t; 185*2ffc8bcaSDan McDonald 186*2ffc8bcaSDan McDonald typedef union _MPI2_SGE_IO_UNION 187*2ffc8bcaSDan McDonald { 188*2ffc8bcaSDan McDonald MPI2_SGE_SIMPLE_UNION MpiSimple; 189*2ffc8bcaSDan McDonald MPI2_SGE_CHAIN_UNION MpiChain; 190*2ffc8bcaSDan McDonald MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple; 191*2ffc8bcaSDan McDonald MPI2_IEEE_SGE_CHAIN_UNION IeeeChain; 192*2ffc8bcaSDan McDonald } MPI2_SGE_IO_UNION, MPI2_POINTER PTR_MPI2_SGE_IO_UNION, 193*2ffc8bcaSDan McDonald Mpi2SGEIOUnion_t, MPI2_POINTER pMpi2SGEIOUnion_t; 194*2ffc8bcaSDan McDonald 195*2ffc8bcaSDan McDonald typedef union 196*2ffc8bcaSDan McDonald { 197*2ffc8bcaSDan McDonald U8 CDB32[32]; 198*2ffc8bcaSDan McDonald MPI2_SCSI_IO_CDB_EEDP32 EEDP32; 199*2ffc8bcaSDan McDonald MPI2_SGE_SIMPLE_UNION SGE; 200*2ffc8bcaSDan McDonald } MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION, 201*2ffc8bcaSDan McDonald Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t; 202*2ffc8bcaSDan McDonald 203*2ffc8bcaSDan McDonald /* Default Request Descriptor */ 204*2ffc8bcaSDan McDonald typedef struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR 205*2ffc8bcaSDan McDonald { 206*2ffc8bcaSDan McDonald U8 RequestFlags; /* 0x00 */ 207*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 208*2ffc8bcaSDan McDonald U16 SMID; /* 0x02 */ 209*2ffc8bcaSDan McDonald U16 LMID; /* 0x04 */ 210*2ffc8bcaSDan McDonald U16 DescriptorTypeDependent; /* 0x06 */ 211*2ffc8bcaSDan McDonald } MPI2_DEFAULT_REQUEST_DESCRIPTOR, 212*2ffc8bcaSDan McDonald MPI2_POINTER PTR_MPI2_DEFAULT_REQUEST_DESCRIPTOR, 213*2ffc8bcaSDan McDonald Mpi2DefaultRequestDescriptor_t, 214*2ffc8bcaSDan McDonald MPI2_POINTER pMpi2DefaultRequestDescriptor_t; 215*2ffc8bcaSDan McDonald 216*2ffc8bcaSDan McDonald /* High Priority Request Descriptor */ 217*2ffc8bcaSDan McDonald typedef struct _MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR 218*2ffc8bcaSDan McDonald { 219*2ffc8bcaSDan McDonald U8 RequestFlags; /* 0x00 */ 220*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 221*2ffc8bcaSDan McDonald U16 SMID; /* 0x02 */ 222*2ffc8bcaSDan McDonald U16 LMID; /* 0x04 */ 223*2ffc8bcaSDan McDonald U16 Reserved1; /* 0x06 */ 224*2ffc8bcaSDan McDonald } MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR, 225*2ffc8bcaSDan McDonald MPI2_POINTER PTR_MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR, 226*2ffc8bcaSDan McDonald Mpi2HighPriorityRequestDescriptor_t, 227*2ffc8bcaSDan McDonald MPI2_POINTER pMpi2HighPriorityRequestDescriptor_t; 228*2ffc8bcaSDan McDonald 229*2ffc8bcaSDan McDonald /* SCSI IO Request Descriptor */ 230*2ffc8bcaSDan McDonald typedef struct _MPI2_SCSI_IO_REQUEST_DESCRIPTOR 231*2ffc8bcaSDan McDonald { 232*2ffc8bcaSDan McDonald U8 RequestFlags; /* 0x00 */ 233*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 234*2ffc8bcaSDan McDonald U16 SMID; /* 0x02 */ 235*2ffc8bcaSDan McDonald U16 LMID; /* 0x04 */ 236*2ffc8bcaSDan McDonald U16 DevHandle; /* 0x06 */ 237*2ffc8bcaSDan McDonald } MPI2_SCSI_IO_REQUEST_DESCRIPTOR, 238*2ffc8bcaSDan McDonald MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST_DESCRIPTOR, 239*2ffc8bcaSDan McDonald Mpi2SCSIIORequestDescriptor_t, 240*2ffc8bcaSDan McDonald MPI2_POINTER pMpi2SCSIIORequestDescriptor_t; 241*2ffc8bcaSDan McDonald 242*2ffc8bcaSDan McDonald /* SCSI Target Request Descriptor */ 243*2ffc8bcaSDan McDonald typedef struct _MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR 244*2ffc8bcaSDan McDonald { 245*2ffc8bcaSDan McDonald U8 RequestFlags; /* 0x00 */ 246*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 247*2ffc8bcaSDan McDonald U16 SMID; /* 0x02 */ 248*2ffc8bcaSDan McDonald U16 LMID; /* 0x04 */ 249*2ffc8bcaSDan McDonald U16 IoIndex; /* 0x06 */ 250*2ffc8bcaSDan McDonald } MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR, 251*2ffc8bcaSDan McDonald MPI2_POINTER PTR_MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR, 252*2ffc8bcaSDan McDonald Mpi2SCSITargetRequestDescriptor_t, 253*2ffc8bcaSDan McDonald MPI2_POINTER pMpi2SCSITargetRequestDescriptor_t; 254*2ffc8bcaSDan McDonald 255*2ffc8bcaSDan McDonald /* RAID Accelerator Request Descriptor */ 256*2ffc8bcaSDan McDonald typedef struct _MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR 257*2ffc8bcaSDan McDonald { 258*2ffc8bcaSDan McDonald U8 RequestFlags; /* 0x00 */ 259*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 260*2ffc8bcaSDan McDonald U16 SMID; /* 0x02 */ 261*2ffc8bcaSDan McDonald U16 LMID; /* 0x04 */ 262*2ffc8bcaSDan McDonald U16 Reserved; /* 0x06 */ 263*2ffc8bcaSDan McDonald } MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR, 264*2ffc8bcaSDan McDonald MPI2_POINTER PTR_MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR, 265*2ffc8bcaSDan McDonald Mpi2RAIDAcceleratorRequestDescriptor_t, 266*2ffc8bcaSDan McDonald MPI2_POINTER pMpi2RAIDAcceleratorRequestDescriptor_t; 267*2ffc8bcaSDan McDonald 268*2ffc8bcaSDan McDonald /* Default Reply Descriptor */ 269*2ffc8bcaSDan McDonald typedef struct _MPI2_DEFAULT_REPLY_DESCRIPTOR 270*2ffc8bcaSDan McDonald { 271*2ffc8bcaSDan McDonald U8 ReplyFlags; /* 0x00 */ 272*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 273*2ffc8bcaSDan McDonald U16 DescriptorTypeDependent1; /* 0x02 */ 274*2ffc8bcaSDan McDonald U32 DescriptorTypeDependent2; /* 0x04 */ 275*2ffc8bcaSDan McDonald } MPI2_DEFAULT_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_DEFAULT_REPLY_DESCRIPTOR, 276*2ffc8bcaSDan McDonald Mpi2DefaultReplyDescriptor_t, MPI2_POINTER pMpi2DefaultReplyDescriptor_t; 277*2ffc8bcaSDan McDonald 278*2ffc8bcaSDan McDonald /* Address Reply Descriptor */ 279*2ffc8bcaSDan McDonald typedef struct _MPI2_ADDRESS_REPLY_DESCRIPTOR 280*2ffc8bcaSDan McDonald { 281*2ffc8bcaSDan McDonald U8 ReplyFlags; /* 0x00 */ 282*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 283*2ffc8bcaSDan McDonald U16 SMID; /* 0x02 */ 284*2ffc8bcaSDan McDonald U32 ReplyFrameAddress; /* 0x04 */ 285*2ffc8bcaSDan McDonald } MPI2_ADDRESS_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_ADDRESS_REPLY_DESCRIPTOR, 286*2ffc8bcaSDan McDonald Mpi2AddressReplyDescriptor_t, MPI2_POINTER pMpi2AddressReplyDescriptor_t; 287*2ffc8bcaSDan McDonald 288*2ffc8bcaSDan McDonald /* SCSI IO Success Reply Descriptor */ 289*2ffc8bcaSDan McDonald typedef struct _MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR 290*2ffc8bcaSDan McDonald { 291*2ffc8bcaSDan McDonald U8 ReplyFlags; /* 0x00 */ 292*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 293*2ffc8bcaSDan McDonald U16 SMID; /* 0x02 */ 294*2ffc8bcaSDan McDonald U16 TaskTag; /* 0x04 */ 295*2ffc8bcaSDan McDonald U16 Reserved1; /* 0x06 */ 296*2ffc8bcaSDan McDonald } MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 297*2ffc8bcaSDan McDonald MPI2_POINTER PTR_MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 298*2ffc8bcaSDan McDonald Mpi2SCSIIOSuccessReplyDescriptor_t, 299*2ffc8bcaSDan McDonald MPI2_POINTER pMpi2SCSIIOSuccessReplyDescriptor_t; 300*2ffc8bcaSDan McDonald 301*2ffc8bcaSDan McDonald /* TargetAssist Success Reply Descriptor */ 302*2ffc8bcaSDan McDonald typedef struct _MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR 303*2ffc8bcaSDan McDonald { 304*2ffc8bcaSDan McDonald U8 ReplyFlags; /* 0x00 */ 305*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 306*2ffc8bcaSDan McDonald U16 SMID; /* 0x02 */ 307*2ffc8bcaSDan McDonald U8 SequenceNumber; /* 0x04 */ 308*2ffc8bcaSDan McDonald U8 Reserved1; /* 0x05 */ 309*2ffc8bcaSDan McDonald U16 IoIndex; /* 0x06 */ 310*2ffc8bcaSDan McDonald } MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR, 311*2ffc8bcaSDan McDonald MPI2_POINTER PTR_MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR, 312*2ffc8bcaSDan McDonald Mpi2TargetAssistSuccessReplyDescriptor_t, 313*2ffc8bcaSDan McDonald MPI2_POINTER pMpi2TargetAssistSuccessReplyDescriptor_t; 314*2ffc8bcaSDan McDonald 315*2ffc8bcaSDan McDonald /* Target Command Buffer Reply Descriptor */ 316*2ffc8bcaSDan McDonald typedef struct _MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR 317*2ffc8bcaSDan McDonald { 318*2ffc8bcaSDan McDonald U8 ReplyFlags; /* 0x00 */ 319*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 320*2ffc8bcaSDan McDonald U8 VP_ID; /* 0x02 */ 321*2ffc8bcaSDan McDonald U8 Flags; /* 0x03 */ 322*2ffc8bcaSDan McDonald U16 InitiatorDevHandle; /* 0x04 */ 323*2ffc8bcaSDan McDonald U16 IoIndex; /* 0x06 */ 324*2ffc8bcaSDan McDonald } MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR, 325*2ffc8bcaSDan McDonald MPI2_POINTER PTR_MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR, 326*2ffc8bcaSDan McDonald Mpi2TargetCommandBufferReplyDescriptor_t, 327*2ffc8bcaSDan McDonald MPI2_POINTER pMpi2TargetCommandBufferReplyDescriptor_t; 328*2ffc8bcaSDan McDonald 329*2ffc8bcaSDan McDonald /* RAID Accelerator Success Reply Descriptor */ 330*2ffc8bcaSDan McDonald typedef struct _MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR 331*2ffc8bcaSDan McDonald { 332*2ffc8bcaSDan McDonald U8 ReplyFlags; /* 0x00 */ 333*2ffc8bcaSDan McDonald U8 MSIxIndex; /* 0x01 */ 334*2ffc8bcaSDan McDonald U16 SMID; /* 0x02 */ 335*2ffc8bcaSDan McDonald U32 Reserved; /* 0x04 */ 336*2ffc8bcaSDan McDonald } MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR, 337*2ffc8bcaSDan McDonald MPI2_POINTER PTR_MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR, 338*2ffc8bcaSDan McDonald Mpi2RAIDAcceleratorSuccessReplyDescriptor_t, 339*2ffc8bcaSDan McDonald MPI2_POINTER pMpi2RAIDAcceleratorSuccessReplyDescriptor_t; 340*2ffc8bcaSDan McDonald 341*2ffc8bcaSDan McDonald /* union of Reply Descriptors */ 342*2ffc8bcaSDan McDonald typedef union _MPI2_REPLY_DESCRIPTORS_UNION 343*2ffc8bcaSDan McDonald { 344*2ffc8bcaSDan McDonald MPI2_DEFAULT_REPLY_DESCRIPTOR Default; 345*2ffc8bcaSDan McDonald MPI2_ADDRESS_REPLY_DESCRIPTOR AddressReply; 346*2ffc8bcaSDan McDonald MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR SCSIIOSuccess; 347*2ffc8bcaSDan McDonald MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR TargetAssistSuccess; 348*2ffc8bcaSDan McDonald MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR TargetCommandBuffer; 349*2ffc8bcaSDan McDonald MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR RAIDAcceleratorSuccess; 350*2ffc8bcaSDan McDonald U64 Words; 351*2ffc8bcaSDan McDonald } MPI2_REPLY_DESCRIPTORS_UNION, MPI2_POINTER PTR_MPI2_REPLY_DESCRIPTORS_UNION, 352*2ffc8bcaSDan McDonald Mpi2ReplyDescriptorsUnion_t, MPI2_POINTER pMpi2ReplyDescriptorsUnion_t; 353*2ffc8bcaSDan McDonald 354*2ffc8bcaSDan McDonald /* IOCInit Request message */ 355*2ffc8bcaSDan McDonald typedef struct _MPI2_IOC_INIT_REQUEST 356*2ffc8bcaSDan McDonald { 357*2ffc8bcaSDan McDonald U8 WhoInit; /* 0x00 */ 358*2ffc8bcaSDan McDonald U8 Reserved1; /* 0x01 */ 359*2ffc8bcaSDan McDonald U8 ChainOffset; /* 0x02 */ 360*2ffc8bcaSDan McDonald U8 Function; /* 0x03 */ 361*2ffc8bcaSDan McDonald U16 Reserved2; /* 0x04 */ 362*2ffc8bcaSDan McDonald U8 Reserved3; /* 0x06 */ 363*2ffc8bcaSDan McDonald U8 MsgFlags; /* 0x07 */ 364*2ffc8bcaSDan McDonald U8 VP_ID; /* 0x08 */ 365*2ffc8bcaSDan McDonald U8 VF_ID; /* 0x09 */ 366*2ffc8bcaSDan McDonald U16 Reserved4; /* 0x0A */ 367*2ffc8bcaSDan McDonald U16 MsgVersion; /* 0x0C */ 368*2ffc8bcaSDan McDonald U16 HeaderVersion; /* 0x0E */ 369*2ffc8bcaSDan McDonald U32 Reserved5; /* 0x10 */ 370*2ffc8bcaSDan McDonald U16 Reserved6; /* 0x14 */ 371*2ffc8bcaSDan McDonald U8 Reserved7; /* 0x16 */ 372*2ffc8bcaSDan McDonald U8 HostMSIxVectors; /* 0x17 */ 373*2ffc8bcaSDan McDonald U16 Reserved8; /* 0x18 */ 374*2ffc8bcaSDan McDonald U16 SystemRequestFrameSize; /* 0x1A */ 375*2ffc8bcaSDan McDonald U16 ReplyDescriptorPostQueueDepth; /* 0x1C */ 376*2ffc8bcaSDan McDonald U16 ReplyFreeQueueDepth; /* 0x1E */ 377*2ffc8bcaSDan McDonald U32 SenseBufferAddressHigh; /* 0x20 */ 378*2ffc8bcaSDan McDonald U32 SystemReplyAddressHigh; /* 0x24 */ 379*2ffc8bcaSDan McDonald U64 SystemRequestFrameBaseAddress; /* 0x28 */ 380*2ffc8bcaSDan McDonald U64 ReplyDescriptorPostQueueAddress; /* 0x30 */ 381*2ffc8bcaSDan McDonald U64 ReplyFreeQueueAddress; /* 0x38 */ 382*2ffc8bcaSDan McDonald U64 TimeStamp; /* 0x40 */ 383*2ffc8bcaSDan McDonald } MPI2_IOC_INIT_REQUEST, MPI2_POINTER PTR_MPI2_IOC_INIT_REQUEST, 384*2ffc8bcaSDan McDonald Mpi2IOCInitRequest_t, MPI2_POINTER pMpi2IOCInitRequest_t; 385*2ffc8bcaSDan McDonald 386*2ffc8bcaSDan McDonald 387*2ffc8bcaSDan McDonald typedef struct _MR_DEV_HANDLE_INFO { 388*2ffc8bcaSDan McDonald 389*2ffc8bcaSDan McDonald /* Send bitmap of LDs that are idle with respect to FP */ 390*2ffc8bcaSDan McDonald U16 curDevHdl; 391*2ffc8bcaSDan McDonald 392*2ffc8bcaSDan McDonald /* bitmap of valid device handles. */ 393*2ffc8bcaSDan McDonald U8 validHandles; 394*2ffc8bcaSDan McDonald U8 reserved; 395*2ffc8bcaSDan McDonald /* 0x04 dev handles for all the paths. */ 396*2ffc8bcaSDan McDonald U16 devHandle[2]; 397*2ffc8bcaSDan McDonald } MR_DEV_HANDLE_INFO; /* 0x08, Total Size */ 398*2ffc8bcaSDan McDonald 399*2ffc8bcaSDan McDonald typedef struct _MR_ARRAY_INFO { 400*2ffc8bcaSDan McDonald U16 pd[MAX_RAIDMAP_ROW_SIZE]; 401*2ffc8bcaSDan McDonald } MR_ARRAY_INFO; /* 0x40, Total Size */ 402*2ffc8bcaSDan McDonald 403*2ffc8bcaSDan McDonald typedef struct _MR_QUAD_ELEMENT { 404*2ffc8bcaSDan McDonald U64 logStart; /* 0x00 */ 405*2ffc8bcaSDan McDonald U64 logEnd; /* 0x08 */ 406*2ffc8bcaSDan McDonald U64 offsetInSpan; /* 0x10 */ 407*2ffc8bcaSDan McDonald U32 diff; /* 0x18 */ 408*2ffc8bcaSDan McDonald U32 reserved1; /* 0x1C */ 409*2ffc8bcaSDan McDonald } MR_QUAD_ELEMENT; /* 0x20, Total size */ 410*2ffc8bcaSDan McDonald 411*2ffc8bcaSDan McDonald typedef struct _MR_SPAN_INFO { 412*2ffc8bcaSDan McDonald U32 noElements; /* 0x00 */ 413*2ffc8bcaSDan McDonald U32 reserved1; /* 0x04 */ 414*2ffc8bcaSDan McDonald MR_QUAD_ELEMENT quads[MAX_RAIDMAP_SPAN_DEPTH]; /* 0x08 */ 415*2ffc8bcaSDan McDonald } MR_SPAN_INFO; /* 0x108, Total size */ 416*2ffc8bcaSDan McDonald 417*2ffc8bcaSDan McDonald typedef struct _MR_LD_SPAN_ { /* SPAN structure */ 418*2ffc8bcaSDan McDonald /* 0x00, starting block number in array */ 419*2ffc8bcaSDan McDonald U64 startBlk; 420*2ffc8bcaSDan McDonald 421*2ffc8bcaSDan McDonald /* 0x08, number of blocks */ 422*2ffc8bcaSDan McDonald U64 numBlks; 423*2ffc8bcaSDan McDonald 424*2ffc8bcaSDan McDonald /* 0x10, array reference */ 425*2ffc8bcaSDan McDonald U16 arrayRef; 426*2ffc8bcaSDan McDonald 427*2ffc8bcaSDan McDonald U8 reserved[6]; /* 0x12 */ 428*2ffc8bcaSDan McDonald } MR_LD_SPAN; /* 0x18, Total Size */ 429*2ffc8bcaSDan McDonald 430*2ffc8bcaSDan McDonald typedef struct _MR_SPAN_BLOCK_INFO { 431*2ffc8bcaSDan McDonald /* number of rows/span */ 432*2ffc8bcaSDan McDonald U64 num_rows; 433*2ffc8bcaSDan McDonald 434*2ffc8bcaSDan McDonald MR_LD_SPAN span; /* 0x08 */ 435*2ffc8bcaSDan McDonald MR_SPAN_INFO block_span_info; /* 0x20 */ 436*2ffc8bcaSDan McDonald } MR_SPAN_BLOCK_INFO; /* 0x128, Total Size */ 437*2ffc8bcaSDan McDonald 438*2ffc8bcaSDan McDonald typedef struct _MR_LD_RAID { 439*2ffc8bcaSDan McDonald struct { 440*2ffc8bcaSDan McDonald U32 fpCapable :1; 441*2ffc8bcaSDan McDonald U32 reserved5 :3; 442*2ffc8bcaSDan McDonald U32 ldPiMode :4; 443*2ffc8bcaSDan McDonald U32 pdPiMode :4; 444*2ffc8bcaSDan McDonald 445*2ffc8bcaSDan McDonald /* FDE or controller encryption (MR_LD_ENCRYPTION_TYPE) */ 446*2ffc8bcaSDan McDonald U32 encryptionType :8; 447*2ffc8bcaSDan McDonald 448*2ffc8bcaSDan McDonald U32 fpWriteCapable :1; 449*2ffc8bcaSDan McDonald U32 fpReadCapable :1; 450*2ffc8bcaSDan McDonald U32 fpWriteAcrossStripe:1; 451*2ffc8bcaSDan McDonald U32 fpReadAcrossStripe:1; 452*2ffc8bcaSDan McDonald U32 reserved4 :8; 453*2ffc8bcaSDan McDonald } capability; /* 0x00 */ 454*2ffc8bcaSDan McDonald U32 reserved6; 455*2ffc8bcaSDan McDonald U64 size; /* 0x08, LD size in blocks */ 456*2ffc8bcaSDan McDonald U8 spanDepth; /* 0x10, Total Number of Spans */ 457*2ffc8bcaSDan McDonald U8 level; /* 0x11, RAID level */ 458*2ffc8bcaSDan McDonald /* 0x12, shift-count to get stripe size (0=512, 1=1K, 7=64K, etc.) */ 459*2ffc8bcaSDan McDonald U8 stripeShift; 460*2ffc8bcaSDan McDonald U8 rowSize; /* 0x13, number of disks in a row */ 461*2ffc8bcaSDan McDonald /* 0x14, number of data disks in a row */ 462*2ffc8bcaSDan McDonald U8 rowDataSize; 463*2ffc8bcaSDan McDonald U8 writeMode; /* 0x15, WRITE_THROUGH or WRITE_BACK */ 464*2ffc8bcaSDan McDonald 465*2ffc8bcaSDan McDonald /* 0x16, To differentiate between RAID1 and RAID1E */ 466*2ffc8bcaSDan McDonald U8 PRL; 467*2ffc8bcaSDan McDonald 468*2ffc8bcaSDan McDonald U8 SRL; /* 0x17 */ 469*2ffc8bcaSDan McDonald U16 targetId; /* 0x18, ld Target Id. */ 470*2ffc8bcaSDan McDonald 471*2ffc8bcaSDan McDonald /* 0x1a, state of ld, state corresponds to MR_LD_STATE */ 472*2ffc8bcaSDan McDonald U8 ldState; 473*2ffc8bcaSDan McDonald 474*2ffc8bcaSDan McDonald /* 0x1b, Pre calculate region type requests based on MFC etc.. */ 475*2ffc8bcaSDan McDonald U8 regTypeReqOnWrite; 476*2ffc8bcaSDan McDonald 477*2ffc8bcaSDan McDonald U8 modFactor; /* 0x1c, same as rowSize */ 478*2ffc8bcaSDan McDonald /* 479*2ffc8bcaSDan McDonald * 0x1d, region lock type used for read, valid only if 480*2ffc8bcaSDan McDonald * regTypeOnReadIsValid=1 481*2ffc8bcaSDan McDonald */ 482*2ffc8bcaSDan McDonald U8 regTypeReqOnRead; 483*2ffc8bcaSDan McDonald U16 seqNum; /* 0x1e, LD sequence number */ 484*2ffc8bcaSDan McDonald 485*2ffc8bcaSDan McDonald struct { 486*2ffc8bcaSDan McDonald /* This LD requires sync command before completing */ 487*2ffc8bcaSDan McDonald U32 ldSyncRequired:1; 488*2ffc8bcaSDan McDonald U32 reserved:31; 489*2ffc8bcaSDan McDonald } flags; /* 0x20 */ 490*2ffc8bcaSDan McDonald 491*2ffc8bcaSDan McDonald U8 reserved3[0x5C]; /* 0x24 */ 492*2ffc8bcaSDan McDonald } MR_LD_RAID; /* 0x80, Total Size */ 493*2ffc8bcaSDan McDonald 494*2ffc8bcaSDan McDonald typedef struct _MR_LD_SPAN_MAP { 495*2ffc8bcaSDan McDonald MR_LD_RAID ldRaid; /* 0x00 */ 496*2ffc8bcaSDan McDonald 497*2ffc8bcaSDan McDonald /* 0x80, needed for GET_ARM() - R0/1/5 only. */ 498*2ffc8bcaSDan McDonald U8 dataArmMap[MAX_RAIDMAP_ROW_SIZE]; 499*2ffc8bcaSDan McDonald 500*2ffc8bcaSDan McDonald MR_SPAN_BLOCK_INFO spanBlock[MAX_RAIDMAP_SPAN_DEPTH]; /* 0xA0 */ 501*2ffc8bcaSDan McDonald } MR_LD_SPAN_MAP; /* 0x9E0 */ 502*2ffc8bcaSDan McDonald 503*2ffc8bcaSDan McDonald typedef struct _MR_FW_RAID_MAP { 504*2ffc8bcaSDan McDonald /* total size of this structure, including this field */ 505*2ffc8bcaSDan McDonald U32 totalSize; 506*2ffc8bcaSDan McDonald union { 507*2ffc8bcaSDan McDonald /* Simple method of version checking variables */ 508*2ffc8bcaSDan McDonald struct { 509*2ffc8bcaSDan McDonald U32 maxLd; 510*2ffc8bcaSDan McDonald U32 maxSpanDepth; 511*2ffc8bcaSDan McDonald U32 maxRowSize; 512*2ffc8bcaSDan McDonald U32 maxPdCount; 513*2ffc8bcaSDan McDonald U32 maxArrays; 514*2ffc8bcaSDan McDonald } validationInfo; 515*2ffc8bcaSDan McDonald U32 version[5]; 516*2ffc8bcaSDan McDonald U32 reserved1[5]; 517*2ffc8bcaSDan McDonald } u1; 518*2ffc8bcaSDan McDonald 519*2ffc8bcaSDan McDonald U32 ldCount; /* count of lds */ 520*2ffc8bcaSDan McDonald U32 Reserved1; 521*2ffc8bcaSDan McDonald 522*2ffc8bcaSDan McDonald /* 523*2ffc8bcaSDan McDonald * 0x20 This doesn't correspond to 524*2ffc8bcaSDan McDonald * FW Ld Tgt Id to LD, but will purge. For example: if tgt Id is 4 525*2ffc8bcaSDan McDonald * and FW LD is 2, and there is only one LD, FW will populate the 526*2ffc8bcaSDan McDonald * array like this. [0xFF, 0xFF, 0xFF, 0xFF, 0x0.....]. This is to 527*2ffc8bcaSDan McDonald * help reduce the entire structure size if there are few LDs or 528*2ffc8bcaSDan McDonald * driver is looking info for 1 LD only. 529*2ffc8bcaSDan McDonald */ 530*2ffc8bcaSDan McDonald U8 ldTgtIdToLd[MAX_RAIDMAP_LOGICAL_DRIVES+ \ 531*2ffc8bcaSDan McDonald MAX_RAIDMAP_VIEWS]; /* 0x20 */ 532*2ffc8bcaSDan McDonald /* timeout value used by driver in FP IOs */ 533*2ffc8bcaSDan McDonald U8 fpPdIoTimeoutSec; 534*2ffc8bcaSDan McDonald U8 reserved2[7]; 535*2ffc8bcaSDan McDonald MR_ARRAY_INFO arMapInfo[MAX_RAIDMAP_ARRAYS]; /* 0x00a8 */ 536*2ffc8bcaSDan McDonald MR_DEV_HANDLE_INFO devHndlInfo[MAX_RAIDMAP_PHYSICAL_DEVICES]; 537*2ffc8bcaSDan McDonald 538*2ffc8bcaSDan McDonald /* 0x28a8-[0 -MAX_RAIDMAP_LOGICAL_DRIVES+MAX_RAIDMAP_VIEWS+1]; */ 539*2ffc8bcaSDan McDonald MR_LD_SPAN_MAP ldSpanMap[1]; 540*2ffc8bcaSDan McDonald }MR_FW_RAID_MAP; /* 0x3288, Total Size */ 541*2ffc8bcaSDan McDonald 542*2ffc8bcaSDan McDonald typedef struct _LD_TARGET_SYNC { 543*2ffc8bcaSDan McDonald U8 ldTargetId; 544*2ffc8bcaSDan McDonald U8 reserved; 545*2ffc8bcaSDan McDonald U16 seqNum; 546*2ffc8bcaSDan McDonald } LD_TARGET_SYNC; 547*2ffc8bcaSDan McDonald 548*2ffc8bcaSDan McDonald #pragma pack() 549*2ffc8bcaSDan McDonald 550*2ffc8bcaSDan McDonald struct IO_REQUEST_INFO { 551*2ffc8bcaSDan McDonald U64 ldStartBlock; 552*2ffc8bcaSDan McDonald U32 numBlocks; 553*2ffc8bcaSDan McDonald U16 ldTgtId; 554*2ffc8bcaSDan McDonald U8 isRead; 555*2ffc8bcaSDan McDonald U16 devHandle; 556*2ffc8bcaSDan McDonald U64 pdBlock; 557*2ffc8bcaSDan McDonald U8 fpOkForIo; 558*2ffc8bcaSDan McDonald U8 ldPI; 559*2ffc8bcaSDan McDonald }; 560*2ffc8bcaSDan McDonald 561*2ffc8bcaSDan McDonald #endif /* _FUSION_H_ */ 562