1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2001-2008 LSI Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Name: mpi_raid.h 7*4882a593Smuzhiyun * Title: MPI RAID message and structures 8*4882a593Smuzhiyun * Creation Date: February 27, 2001 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * mpi_raid.h Version: 01.05.05 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * Version History 13*4882a593Smuzhiyun * --------------- 14*4882a593Smuzhiyun * 15*4882a593Smuzhiyun * Date Version Description 16*4882a593Smuzhiyun * -------- -------- ------------------------------------------------------ 17*4882a593Smuzhiyun * 02-27-01 01.01.01 Original release for this file. 18*4882a593Smuzhiyun * 03-27-01 01.01.02 Added structure offset comments. 19*4882a593Smuzhiyun * 08-08-01 01.02.01 Original release for v1.2 work. 20*4882a593Smuzhiyun * 09-28-01 01.02.02 Major rework for MPI v1.2 Integrated RAID changes. 21*4882a593Smuzhiyun * 10-04-01 01.02.03 Added ActionData defines for 22*4882a593Smuzhiyun * MPI_RAID_ACTION_DELETE_VOLUME action. 23*4882a593Smuzhiyun * 11-01-01 01.02.04 Added define for MPI_RAID_ACTION_ADATA_DO_NOT_SYNC. 24*4882a593Smuzhiyun * 03-14-02 01.02.05 Added define for MPI_RAID_ACTION_ADATA_LOW_LEVEL_INIT. 25*4882a593Smuzhiyun * 05-07-02 01.02.06 Added define for MPI_RAID_ACTION_ACTIVATE_VOLUME, 26*4882a593Smuzhiyun * MPI_RAID_ACTION_INACTIVATE_VOLUME, and 27*4882a593Smuzhiyun * MPI_RAID_ACTION_ADATA_INACTIVATE_ALL. 28*4882a593Smuzhiyun * 07-12-02 01.02.07 Added structures for Mailbox request and reply. 29*4882a593Smuzhiyun * 11-15-02 01.02.08 Added missing MsgContext field to MSG_MAILBOX_REQUEST. 30*4882a593Smuzhiyun * 04-01-03 01.02.09 New action data option flag for 31*4882a593Smuzhiyun * MPI_RAID_ACTION_DELETE_VOLUME. 32*4882a593Smuzhiyun * 05-11-04 01.03.01 Original release for MPI v1.3. 33*4882a593Smuzhiyun * 08-19-04 01.05.01 Original release for MPI v1.5. 34*4882a593Smuzhiyun * 01-15-05 01.05.02 Added defines for the two new RAID Actions for 35*4882a593Smuzhiyun * _SET_RESYNC_RATE and _SET_DATA_SCRUB_RATE. 36*4882a593Smuzhiyun * 02-28-07 01.05.03 Added new RAID Action, Device FW Update Mode, and 37*4882a593Smuzhiyun * associated defines. 38*4882a593Smuzhiyun * 08-07-07 01.05.04 Added Disable Full Rebuild bit to the ActionDataWord 39*4882a593Smuzhiyun * for the RAID Action MPI_RAID_ACTION_DISABLE_VOLUME. 40*4882a593Smuzhiyun * 01-15-08 01.05.05 Added define for MPI_RAID_ACTION_SET_VOLUME_NAME. 41*4882a593Smuzhiyun * -------------------------------------------------------------------------- 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #ifndef MPI_RAID_H 45*4882a593Smuzhiyun #define MPI_RAID_H 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun /****************************************************************************** 49*4882a593Smuzhiyun * 50*4882a593Smuzhiyun * R A I D M e s s a g e s 51*4882a593Smuzhiyun * 52*4882a593Smuzhiyun *******************************************************************************/ 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun /****************************************************************************/ 56*4882a593Smuzhiyun /* RAID Action Request */ 57*4882a593Smuzhiyun /****************************************************************************/ 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun typedef struct _MSG_RAID_ACTION 60*4882a593Smuzhiyun { 61*4882a593Smuzhiyun U8 Action; /* 00h */ 62*4882a593Smuzhiyun U8 Reserved1; /* 01h */ 63*4882a593Smuzhiyun U8 ChainOffset; /* 02h */ 64*4882a593Smuzhiyun U8 Function; /* 03h */ 65*4882a593Smuzhiyun U8 VolumeID; /* 04h */ 66*4882a593Smuzhiyun U8 VolumeBus; /* 05h */ 67*4882a593Smuzhiyun U8 PhysDiskNum; /* 06h */ 68*4882a593Smuzhiyun U8 MsgFlags; /* 07h */ 69*4882a593Smuzhiyun U32 MsgContext; /* 08h */ 70*4882a593Smuzhiyun U32 Reserved2; /* 0Ch */ 71*4882a593Smuzhiyun U32 ActionDataWord; /* 10h */ 72*4882a593Smuzhiyun SGE_SIMPLE_UNION ActionDataSGE; /* 14h */ 73*4882a593Smuzhiyun } MSG_RAID_ACTION_REQUEST, MPI_POINTER PTR_MSG_RAID_ACTION_REQUEST, 74*4882a593Smuzhiyun MpiRaidActionRequest_t , MPI_POINTER pMpiRaidActionRequest_t; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun /* RAID Action request Action values */ 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define MPI_RAID_ACTION_STATUS (0x00) 80*4882a593Smuzhiyun #define MPI_RAID_ACTION_INDICATOR_STRUCT (0x01) 81*4882a593Smuzhiyun #define MPI_RAID_ACTION_CREATE_VOLUME (0x02) 82*4882a593Smuzhiyun #define MPI_RAID_ACTION_DELETE_VOLUME (0x03) 83*4882a593Smuzhiyun #define MPI_RAID_ACTION_DISABLE_VOLUME (0x04) 84*4882a593Smuzhiyun #define MPI_RAID_ACTION_ENABLE_VOLUME (0x05) 85*4882a593Smuzhiyun #define MPI_RAID_ACTION_QUIESCE_PHYS_IO (0x06) 86*4882a593Smuzhiyun #define MPI_RAID_ACTION_ENABLE_PHYS_IO (0x07) 87*4882a593Smuzhiyun #define MPI_RAID_ACTION_CHANGE_VOLUME_SETTINGS (0x08) 88*4882a593Smuzhiyun #define MPI_RAID_ACTION_PHYSDISK_OFFLINE (0x0A) 89*4882a593Smuzhiyun #define MPI_RAID_ACTION_PHYSDISK_ONLINE (0x0B) 90*4882a593Smuzhiyun #define MPI_RAID_ACTION_CHANGE_PHYSDISK_SETTINGS (0x0C) 91*4882a593Smuzhiyun #define MPI_RAID_ACTION_CREATE_PHYSDISK (0x0D) 92*4882a593Smuzhiyun #define MPI_RAID_ACTION_DELETE_PHYSDISK (0x0E) 93*4882a593Smuzhiyun #define MPI_RAID_ACTION_FAIL_PHYSDISK (0x0F) 94*4882a593Smuzhiyun #define MPI_RAID_ACTION_REPLACE_PHYSDISK (0x10) 95*4882a593Smuzhiyun #define MPI_RAID_ACTION_ACTIVATE_VOLUME (0x11) 96*4882a593Smuzhiyun #define MPI_RAID_ACTION_INACTIVATE_VOLUME (0x12) 97*4882a593Smuzhiyun #define MPI_RAID_ACTION_SET_RESYNC_RATE (0x13) 98*4882a593Smuzhiyun #define MPI_RAID_ACTION_SET_DATA_SCRUB_RATE (0x14) 99*4882a593Smuzhiyun #define MPI_RAID_ACTION_DEVICE_FW_UPDATE_MODE (0x15) 100*4882a593Smuzhiyun #define MPI_RAID_ACTION_SET_VOLUME_NAME (0x16) 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun /* ActionDataWord defines for use with MPI_RAID_ACTION_CREATE_VOLUME action */ 103*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_DO_NOT_SYNC (0x00000001) 104*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_LOW_LEVEL_INIT (0x00000002) 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* ActionDataWord defines for use with MPI_RAID_ACTION_DELETE_VOLUME action */ 107*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_KEEP_PHYS_DISKS (0x00000000) 108*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_DEL_PHYS_DISKS (0x00000001) 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_KEEP_LBA0 (0x00000000) 111*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_ZERO_LBA0 (0x00000002) 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* ActionDataWord defines for use with MPI_RAID_ACTION_DISABLE_VOLUME action */ 114*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_DISABLE_FULL_REBUILD (0x00000001) 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun /* ActionDataWord defines for use with MPI_RAID_ACTION_ACTIVATE_VOLUME action */ 117*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_INACTIVATE_ALL (0x00000001) 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* ActionDataWord defines for use with MPI_RAID_ACTION_SET_RESYNC_RATE action */ 120*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_RESYNC_RATE_MASK (0x000000FF) 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun /* ActionDataWord defines for use with MPI_RAID_ACTION_SET_DATA_SCRUB_RATE action */ 123*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_DATA_SCRUB_RATE_MASK (0x000000FF) 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* ActionDataWord defines for use with MPI_RAID_ACTION_DEVICE_FW_UPDATE_MODE action */ 126*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_ENABLE_FW_UPDATE (0x00000001) 127*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_MASK_FW_UPDATE_TIMEOUT (0x0000FF00) 128*4882a593Smuzhiyun #define MPI_RAID_ACTION_ADATA_SHIFT_FW_UPDATE_TIMEOUT (8) 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun /* RAID Action reply message */ 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun typedef struct _MSG_RAID_ACTION_REPLY 134*4882a593Smuzhiyun { 135*4882a593Smuzhiyun U8 Action; /* 00h */ 136*4882a593Smuzhiyun U8 Reserved; /* 01h */ 137*4882a593Smuzhiyun U8 MsgLength; /* 02h */ 138*4882a593Smuzhiyun U8 Function; /* 03h */ 139*4882a593Smuzhiyun U8 VolumeID; /* 04h */ 140*4882a593Smuzhiyun U8 VolumeBus; /* 05h */ 141*4882a593Smuzhiyun U8 PhysDiskNum; /* 06h */ 142*4882a593Smuzhiyun U8 MsgFlags; /* 07h */ 143*4882a593Smuzhiyun U32 MsgContext; /* 08h */ 144*4882a593Smuzhiyun U16 ActionStatus; /* 0Ch */ 145*4882a593Smuzhiyun U16 IOCStatus; /* 0Eh */ 146*4882a593Smuzhiyun U32 IOCLogInfo; /* 10h */ 147*4882a593Smuzhiyun U32 VolumeStatus; /* 14h */ 148*4882a593Smuzhiyun U32 ActionData; /* 18h */ 149*4882a593Smuzhiyun } MSG_RAID_ACTION_REPLY, MPI_POINTER PTR_MSG_RAID_ACTION_REPLY, 150*4882a593Smuzhiyun MpiRaidActionReply_t, MPI_POINTER pMpiRaidActionReply_t; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun /* RAID Volume reply ActionStatus values */ 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun #define MPI_RAID_ACTION_ASTATUS_SUCCESS (0x0000) 156*4882a593Smuzhiyun #define MPI_RAID_ACTION_ASTATUS_INVALID_ACTION (0x0001) 157*4882a593Smuzhiyun #define MPI_RAID_ACTION_ASTATUS_FAILURE (0x0002) 158*4882a593Smuzhiyun #define MPI_RAID_ACTION_ASTATUS_IN_PROGRESS (0x0003) 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun /* RAID Volume reply RAID Volume Indicator structure */ 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun typedef struct _MPI_RAID_VOL_INDICATOR 164*4882a593Smuzhiyun { 165*4882a593Smuzhiyun U64 TotalBlocks; /* 00h */ 166*4882a593Smuzhiyun U64 BlocksRemaining; /* 08h */ 167*4882a593Smuzhiyun } MPI_RAID_VOL_INDICATOR, MPI_POINTER PTR_MPI_RAID_VOL_INDICATOR, 168*4882a593Smuzhiyun MpiRaidVolIndicator_t, MPI_POINTER pMpiRaidVolIndicator_t; 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun /****************************************************************************/ 172*4882a593Smuzhiyun /* SCSI IO RAID Passthrough Request */ 173*4882a593Smuzhiyun /****************************************************************************/ 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun typedef struct _MSG_SCSI_IO_RAID_PT_REQUEST 176*4882a593Smuzhiyun { 177*4882a593Smuzhiyun U8 PhysDiskNum; /* 00h */ 178*4882a593Smuzhiyun U8 Reserved1; /* 01h */ 179*4882a593Smuzhiyun U8 ChainOffset; /* 02h */ 180*4882a593Smuzhiyun U8 Function; /* 03h */ 181*4882a593Smuzhiyun U8 CDBLength; /* 04h */ 182*4882a593Smuzhiyun U8 SenseBufferLength; /* 05h */ 183*4882a593Smuzhiyun U8 Reserved2; /* 06h */ 184*4882a593Smuzhiyun U8 MsgFlags; /* 07h */ 185*4882a593Smuzhiyun U32 MsgContext; /* 08h */ 186*4882a593Smuzhiyun U8 LUN[8]; /* 0Ch */ 187*4882a593Smuzhiyun U32 Control; /* 14h */ 188*4882a593Smuzhiyun U8 CDB[16]; /* 18h */ 189*4882a593Smuzhiyun U32 DataLength; /* 28h */ 190*4882a593Smuzhiyun U32 SenseBufferLowAddr; /* 2Ch */ 191*4882a593Smuzhiyun SGE_IO_UNION SGL; /* 30h */ 192*4882a593Smuzhiyun } MSG_SCSI_IO_RAID_PT_REQUEST, MPI_POINTER PTR_MSG_SCSI_IO_RAID_PT_REQUEST, 193*4882a593Smuzhiyun SCSIIORaidPassthroughRequest_t, MPI_POINTER pSCSIIORaidPassthroughRequest_t; 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun /* SCSI IO RAID Passthrough reply structure */ 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun typedef struct _MSG_SCSI_IO_RAID_PT_REPLY 199*4882a593Smuzhiyun { 200*4882a593Smuzhiyun U8 PhysDiskNum; /* 00h */ 201*4882a593Smuzhiyun U8 Reserved1; /* 01h */ 202*4882a593Smuzhiyun U8 MsgLength; /* 02h */ 203*4882a593Smuzhiyun U8 Function; /* 03h */ 204*4882a593Smuzhiyun U8 CDBLength; /* 04h */ 205*4882a593Smuzhiyun U8 SenseBufferLength; /* 05h */ 206*4882a593Smuzhiyun U8 Reserved2; /* 06h */ 207*4882a593Smuzhiyun U8 MsgFlags; /* 07h */ 208*4882a593Smuzhiyun U32 MsgContext; /* 08h */ 209*4882a593Smuzhiyun U8 SCSIStatus; /* 0Ch */ 210*4882a593Smuzhiyun U8 SCSIState; /* 0Dh */ 211*4882a593Smuzhiyun U16 IOCStatus; /* 0Eh */ 212*4882a593Smuzhiyun U32 IOCLogInfo; /* 10h */ 213*4882a593Smuzhiyun U32 TransferCount; /* 14h */ 214*4882a593Smuzhiyun U32 SenseCount; /* 18h */ 215*4882a593Smuzhiyun U32 ResponseInfo; /* 1Ch */ 216*4882a593Smuzhiyun } MSG_SCSI_IO_RAID_PT_REPLY, MPI_POINTER PTR_MSG_SCSI_IO_RAID_PT_REPLY, 217*4882a593Smuzhiyun SCSIIORaidPassthroughReply_t, MPI_POINTER pSCSIIORaidPassthroughReply_t; 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /****************************************************************************/ 221*4882a593Smuzhiyun /* Mailbox reqeust structure */ 222*4882a593Smuzhiyun /****************************************************************************/ 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun typedef struct _MSG_MAILBOX_REQUEST 225*4882a593Smuzhiyun { 226*4882a593Smuzhiyun U16 Reserved1; 227*4882a593Smuzhiyun U8 ChainOffset; 228*4882a593Smuzhiyun U8 Function; 229*4882a593Smuzhiyun U16 Reserved2; 230*4882a593Smuzhiyun U8 Reserved3; 231*4882a593Smuzhiyun U8 MsgFlags; 232*4882a593Smuzhiyun U32 MsgContext; 233*4882a593Smuzhiyun U8 Command[10]; 234*4882a593Smuzhiyun U16 Reserved4; 235*4882a593Smuzhiyun SGE_IO_UNION SGL; 236*4882a593Smuzhiyun } MSG_MAILBOX_REQUEST, MPI_POINTER PTR_MSG_MAILBOX_REQUEST, 237*4882a593Smuzhiyun MailboxRequest_t, MPI_POINTER pMailboxRequest_t; 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun /* Mailbox reply structure */ 241*4882a593Smuzhiyun typedef struct _MSG_MAILBOX_REPLY 242*4882a593Smuzhiyun { 243*4882a593Smuzhiyun U16 Reserved1; /* 00h */ 244*4882a593Smuzhiyun U8 MsgLength; /* 02h */ 245*4882a593Smuzhiyun U8 Function; /* 03h */ 246*4882a593Smuzhiyun U16 Reserved2; /* 04h */ 247*4882a593Smuzhiyun U8 Reserved3; /* 06h */ 248*4882a593Smuzhiyun U8 MsgFlags; /* 07h */ 249*4882a593Smuzhiyun U32 MsgContext; /* 08h */ 250*4882a593Smuzhiyun U16 MailboxStatus; /* 0Ch */ 251*4882a593Smuzhiyun U16 IOCStatus; /* 0Eh */ 252*4882a593Smuzhiyun U32 IOCLogInfo; /* 10h */ 253*4882a593Smuzhiyun U32 Reserved4; /* 14h */ 254*4882a593Smuzhiyun } MSG_MAILBOX_REPLY, MPI_POINTER PTR_MSG_MAILBOX_REPLY, 255*4882a593Smuzhiyun MailboxReply_t, MPI_POINTER pMailboxReply_t; 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun #endif 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun 261