1 /*- 2 * Copyright (c) 2007-2015 LSI Corp. 3 * Copyright (c) 2013-2015 Avago Technologies 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD 28 * 29 * $FreeBSD$ 30 */ 31 32 /* 33 * Copyright (c) 2007-2015 LSI Corporation. 34 * Copyright (c) 2013-2015 Avago Technologies 35 * 36 * 37 * Name: mpi2_tool.h 38 * Title: MPI diagnostic tool structures and definitions 39 * Creation Date: March 26, 2007 40 * 41 * mpi2_tool.h Version: 02.00.06 42 * 43 * Version History 44 * --------------- 45 * 46 * Date Version Description 47 * -------- -------- ------------------------------------------------------ 48 * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 49 * 12-18-07 02.00.01 Added Diagnostic Buffer Post and Diagnostic Release 50 * structures and defines. 51 * 02-29-08 02.00.02 Modified various names to make them 32-character unique. 52 * 05-06-09 02.00.03 Added ISTWI Read Write Tool and Diagnostic CLI Tool. 53 * 07-30-09 02.00.04 Added ExtendedType field to DiagnosticBufferPost request 54 * and reply messages. 55 * Added MPI2_DIAG_BUF_TYPE_EXTENDED. 56 * Incremented MPI2_DIAG_BUF_TYPE_COUNT. 57 * 05-12-10 02.00.05 Added Diagnostic Data Upload tool. 58 * 08-11-10 02.00.06 Added defines that were missing for Diagnostic Buffer 59 * Post Request. 60 * -------------------------------------------------------------------------- 61 */ 62 63 #ifndef MPI2_TOOL_H 64 #define MPI2_TOOL_H 65 66 /***************************************************************************** 67 * 68 * Toolbox Messages 69 * 70 *****************************************************************************/ 71 72 /* defines for the Tools */ 73 #define MPI2_TOOLBOX_CLEAN_TOOL (0x00) 74 #define MPI2_TOOLBOX_MEMORY_MOVE_TOOL (0x01) 75 #define MPI2_TOOLBOX_DIAG_DATA_UPLOAD_TOOL (0x02) 76 #define MPI2_TOOLBOX_ISTWI_READ_WRITE_TOOL (0x03) 77 #define MPI2_TOOLBOX_BEACON_TOOL (0x05) 78 #define MPI2_TOOLBOX_DIAGNOSTIC_CLI_TOOL (0x06) 79 80 81 /**************************************************************************** 82 * Toolbox reply 83 ****************************************************************************/ 84 85 typedef struct _MPI2_TOOLBOX_REPLY 86 { 87 U8 Tool; /* 0x00 */ 88 U8 Reserved1; /* 0x01 */ 89 U8 MsgLength; /* 0x02 */ 90 U8 Function; /* 0x03 */ 91 U16 Reserved2; /* 0x04 */ 92 U8 Reserved3; /* 0x06 */ 93 U8 MsgFlags; /* 0x07 */ 94 U8 VP_ID; /* 0x08 */ 95 U8 VF_ID; /* 0x09 */ 96 U16 Reserved4; /* 0x0A */ 97 U16 Reserved5; /* 0x0C */ 98 U16 IOCStatus; /* 0x0E */ 99 U32 IOCLogInfo; /* 0x10 */ 100 } MPI2_TOOLBOX_REPLY, MPI2_POINTER PTR_MPI2_TOOLBOX_REPLY, 101 Mpi2ToolboxReply_t, MPI2_POINTER pMpi2ToolboxReply_t; 102 103 104 /**************************************************************************** 105 * Toolbox Clean Tool request 106 ****************************************************************************/ 107 108 typedef struct _MPI2_TOOLBOX_CLEAN_REQUEST 109 { 110 U8 Tool; /* 0x00 */ 111 U8 Reserved1; /* 0x01 */ 112 U8 ChainOffset; /* 0x02 */ 113 U8 Function; /* 0x03 */ 114 U16 Reserved2; /* 0x04 */ 115 U8 Reserved3; /* 0x06 */ 116 U8 MsgFlags; /* 0x07 */ 117 U8 VP_ID; /* 0x08 */ 118 U8 VF_ID; /* 0x09 */ 119 U16 Reserved4; /* 0x0A */ 120 U32 Flags; /* 0x0C */ 121 } MPI2_TOOLBOX_CLEAN_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_CLEAN_REQUEST, 122 Mpi2ToolboxCleanRequest_t, MPI2_POINTER pMpi2ToolboxCleanRequest_t; 123 124 /* values for the Flags field */ 125 #define MPI2_TOOLBOX_CLEAN_BOOT_SERVICES (0x80000000) 126 #define MPI2_TOOLBOX_CLEAN_PERSIST_MANUFACT_PAGES (0x40000000) 127 #define MPI2_TOOLBOX_CLEAN_OTHER_PERSIST_PAGES (0x20000000) 128 #define MPI2_TOOLBOX_CLEAN_FW_CURRENT (0x10000000) 129 #define MPI2_TOOLBOX_CLEAN_FW_BACKUP (0x08000000) 130 #define MPI2_TOOLBOX_CLEAN_MEGARAID (0x02000000) 131 #define MPI2_TOOLBOX_CLEAN_INITIALIZATION (0x01000000) 132 #define MPI2_TOOLBOX_CLEAN_FLASH (0x00000004) 133 #define MPI2_TOOLBOX_CLEAN_SEEPROM (0x00000002) 134 #define MPI2_TOOLBOX_CLEAN_NVSRAM (0x00000001) 135 136 137 /**************************************************************************** 138 * Toolbox Memory Move request 139 ****************************************************************************/ 140 141 typedef struct _MPI2_TOOLBOX_MEM_MOVE_REQUEST 142 { 143 U8 Tool; /* 0x00 */ 144 U8 Reserved1; /* 0x01 */ 145 U8 ChainOffset; /* 0x02 */ 146 U8 Function; /* 0x03 */ 147 U16 Reserved2; /* 0x04 */ 148 U8 Reserved3; /* 0x06 */ 149 U8 MsgFlags; /* 0x07 */ 150 U8 VP_ID; /* 0x08 */ 151 U8 VF_ID; /* 0x09 */ 152 U16 Reserved4; /* 0x0A */ 153 MPI2_SGE_SIMPLE_UNION SGL; /* 0x0C */ 154 } MPI2_TOOLBOX_MEM_MOVE_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_MEM_MOVE_REQUEST, 155 Mpi2ToolboxMemMoveRequest_t, MPI2_POINTER pMpi2ToolboxMemMoveRequest_t; 156 157 158 /**************************************************************************** 159 * Toolbox Diagnostic Data Upload request 160 ****************************************************************************/ 161 162 typedef struct _MPI2_TOOLBOX_DIAG_DATA_UPLOAD_REQUEST 163 { 164 U8 Tool; /* 0x00 */ 165 U8 Reserved1; /* 0x01 */ 166 U8 ChainOffset; /* 0x02 */ 167 U8 Function; /* 0x03 */ 168 U16 Reserved2; /* 0x04 */ 169 U8 Reserved3; /* 0x06 */ 170 U8 MsgFlags; /* 0x07 */ 171 U8 VP_ID; /* 0x08 */ 172 U8 VF_ID; /* 0x09 */ 173 U16 Reserved4; /* 0x0A */ 174 U8 SGLFlags; /* 0x0C */ 175 U8 Reserved5; /* 0x0D */ 176 U16 Reserved6; /* 0x0E */ 177 U32 Flags; /* 0x10 */ 178 U32 DataLength; /* 0x14 */ 179 MPI2_SGE_SIMPLE_UNION SGL; /* 0x18 */ 180 } MPI2_TOOLBOX_DIAG_DATA_UPLOAD_REQUEST, 181 MPI2_POINTER PTR_MPI2_TOOLBOX_DIAG_DATA_UPLOAD_REQUEST, 182 Mpi2ToolboxDiagDataUploadRequest_t, 183 MPI2_POINTER pMpi2ToolboxDiagDataUploadRequest_t; 184 185 /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */ 186 187 188 typedef struct _MPI2_DIAG_DATA_UPLOAD_HEADER 189 { 190 U32 DiagDataLength; /* 00h */ 191 U8 FormatCode; /* 04h */ 192 U8 Reserved1; /* 05h */ 193 U16 Reserved2; /* 06h */ 194 } MPI2_DIAG_DATA_UPLOAD_HEADER, MPI2_POINTER PTR_MPI2_DIAG_DATA_UPLOAD_HEADER, 195 Mpi2DiagDataUploadHeader_t, MPI2_POINTER pMpi2DiagDataUploadHeader_t; 196 197 198 /**************************************************************************** 199 * Toolbox ISTWI Read Write Tool 200 ****************************************************************************/ 201 202 /* Toolbox ISTWI Read Write Tool request message */ 203 typedef struct _MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST 204 { 205 U8 Tool; /* 0x00 */ 206 U8 Reserved1; /* 0x01 */ 207 U8 ChainOffset; /* 0x02 */ 208 U8 Function; /* 0x03 */ 209 U16 Reserved2; /* 0x04 */ 210 U8 Reserved3; /* 0x06 */ 211 U8 MsgFlags; /* 0x07 */ 212 U8 VP_ID; /* 0x08 */ 213 U8 VF_ID; /* 0x09 */ 214 U16 Reserved4; /* 0x0A */ 215 U32 Reserved5; /* 0x0C */ 216 U32 Reserved6; /* 0x10 */ 217 U8 DevIndex; /* 0x14 */ 218 U8 Action; /* 0x15 */ 219 U8 SGLFlags; /* 0x16 */ 220 U8 Reserved7; /* 0x17 */ 221 U16 TxDataLength; /* 0x18 */ 222 U16 RxDataLength; /* 0x1A */ 223 U32 Reserved8; /* 0x1C */ 224 U32 Reserved9; /* 0x20 */ 225 U32 Reserved10; /* 0x24 */ 226 U32 Reserved11; /* 0x28 */ 227 U32 Reserved12; /* 0x2C */ 228 MPI2_SGE_SIMPLE_UNION SGL; /* 0x30 */ 229 } MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST, 230 MPI2_POINTER PTR_MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST, 231 Mpi2ToolboxIstwiReadWriteRequest_t, 232 MPI2_POINTER pMpi2ToolboxIstwiReadWriteRequest_t; 233 234 /* values for the Action field */ 235 #define MPI2_TOOL_ISTWI_ACTION_READ_DATA (0x01) 236 #define MPI2_TOOL_ISTWI_ACTION_WRITE_DATA (0x02) 237 #define MPI2_TOOL_ISTWI_ACTION_SEQUENCE (0x03) 238 #define MPI2_TOOL_ISTWI_ACTION_RESERVE_BUS (0x10) 239 #define MPI2_TOOL_ISTWI_ACTION_RELEASE_BUS (0x11) 240 #define MPI2_TOOL_ISTWI_ACTION_RESET (0x12) 241 242 /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */ 243 244 245 /* Toolbox ISTWI Read Write Tool reply message */ 246 typedef struct _MPI2_TOOLBOX_ISTWI_REPLY 247 { 248 U8 Tool; /* 0x00 */ 249 U8 Reserved1; /* 0x01 */ 250 U8 MsgLength; /* 0x02 */ 251 U8 Function; /* 0x03 */ 252 U16 Reserved2; /* 0x04 */ 253 U8 Reserved3; /* 0x06 */ 254 U8 MsgFlags; /* 0x07 */ 255 U8 VP_ID; /* 0x08 */ 256 U8 VF_ID; /* 0x09 */ 257 U16 Reserved4; /* 0x0A */ 258 U16 Reserved5; /* 0x0C */ 259 U16 IOCStatus; /* 0x0E */ 260 U32 IOCLogInfo; /* 0x10 */ 261 U8 DevIndex; /* 0x14 */ 262 U8 Action; /* 0x15 */ 263 U8 IstwiStatus; /* 0x16 */ 264 U8 Reserved6; /* 0x17 */ 265 U16 TxDataCount; /* 0x18 */ 266 U16 RxDataCount; /* 0x1A */ 267 } MPI2_TOOLBOX_ISTWI_REPLY, MPI2_POINTER PTR_MPI2_TOOLBOX_ISTWI_REPLY, 268 Mpi2ToolboxIstwiReply_t, MPI2_POINTER pMpi2ToolboxIstwiReply_t; 269 270 271 /**************************************************************************** 272 * Toolbox Beacon Tool request 273 ****************************************************************************/ 274 275 typedef struct _MPI2_TOOLBOX_BEACON_REQUEST 276 { 277 U8 Tool; /* 0x00 */ 278 U8 Reserved1; /* 0x01 */ 279 U8 ChainOffset; /* 0x02 */ 280 U8 Function; /* 0x03 */ 281 U16 Reserved2; /* 0x04 */ 282 U8 Reserved3; /* 0x06 */ 283 U8 MsgFlags; /* 0x07 */ 284 U8 VP_ID; /* 0x08 */ 285 U8 VF_ID; /* 0x09 */ 286 U16 Reserved4; /* 0x0A */ 287 U8 Reserved5; /* 0x0C */ 288 U8 PhysicalPort; /* 0x0D */ 289 U8 Reserved6; /* 0x0E */ 290 U8 Flags; /* 0x0F */ 291 } MPI2_TOOLBOX_BEACON_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_BEACON_REQUEST, 292 Mpi2ToolboxBeaconRequest_t, MPI2_POINTER pMpi2ToolboxBeaconRequest_t; 293 294 /* values for the Flags field */ 295 #define MPI2_TOOLBOX_FLAGS_BEACONMODE_OFF (0x00) 296 #define MPI2_TOOLBOX_FLAGS_BEACONMODE_ON (0x01) 297 298 299 /**************************************************************************** 300 * Toolbox Diagnostic CLI Tool 301 ****************************************************************************/ 302 303 #define MPI2_TOOLBOX_DIAG_CLI_CMD_LENGTH (0x5C) 304 305 /* Toolbox Diagnostic CLI Tool request message */ 306 typedef struct _MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST 307 { 308 U8 Tool; /* 0x00 */ 309 U8 Reserved1; /* 0x01 */ 310 U8 ChainOffset; /* 0x02 */ 311 U8 Function; /* 0x03 */ 312 U16 Reserved2; /* 0x04 */ 313 U8 Reserved3; /* 0x06 */ 314 U8 MsgFlags; /* 0x07 */ 315 U8 VP_ID; /* 0x08 */ 316 U8 VF_ID; /* 0x09 */ 317 U16 Reserved4; /* 0x0A */ 318 U8 SGLFlags; /* 0x0C */ 319 U8 Reserved5; /* 0x0D */ 320 U16 Reserved6; /* 0x0E */ 321 U32 DataLength; /* 0x10 */ 322 U8 DiagnosticCliCommand[MPI2_TOOLBOX_DIAG_CLI_CMD_LENGTH]; /* 0x14 */ 323 MPI2_SGE_SIMPLE_UNION SGL; /* 0x70 */ 324 } MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST, 325 MPI2_POINTER PTR_MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST, 326 Mpi2ToolboxDiagnosticCliRequest_t, 327 MPI2_POINTER pMpi2ToolboxDiagnosticCliRequest_t; 328 329 /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */ 330 331 332 /* Toolbox Diagnostic CLI Tool reply message */ 333 typedef struct _MPI2_TOOLBOX_DIAGNOSTIC_CLI_REPLY 334 { 335 U8 Tool; /* 0x00 */ 336 U8 Reserved1; /* 0x01 */ 337 U8 MsgLength; /* 0x02 */ 338 U8 Function; /* 0x03 */ 339 U16 Reserved2; /* 0x04 */ 340 U8 Reserved3; /* 0x06 */ 341 U8 MsgFlags; /* 0x07 */ 342 U8 VP_ID; /* 0x08 */ 343 U8 VF_ID; /* 0x09 */ 344 U16 Reserved4; /* 0x0A */ 345 U16 Reserved5; /* 0x0C */ 346 U16 IOCStatus; /* 0x0E */ 347 U32 IOCLogInfo; /* 0x10 */ 348 U32 ReturnedDataLength; /* 0x14 */ 349 } MPI2_TOOLBOX_DIAGNOSTIC_CLI_REPLY, 350 MPI2_POINTER PTR_MPI2_TOOLBOX_DIAG_CLI_REPLY, 351 Mpi2ToolboxDiagnosticCliReply_t, 352 MPI2_POINTER pMpi2ToolboxDiagnosticCliReply_t; 353 354 355 /***************************************************************************** 356 * 357 * Diagnostic Buffer Messages 358 * 359 *****************************************************************************/ 360 361 362 /**************************************************************************** 363 * Diagnostic Buffer Post request 364 ****************************************************************************/ 365 366 typedef struct _MPI2_DIAG_BUFFER_POST_REQUEST 367 { 368 U8 ExtendedType; /* 0x00 */ 369 U8 BufferType; /* 0x01 */ 370 U8 ChainOffset; /* 0x02 */ 371 U8 Function; /* 0x03 */ 372 U16 Reserved2; /* 0x04 */ 373 U8 Reserved3; /* 0x06 */ 374 U8 MsgFlags; /* 0x07 */ 375 U8 VP_ID; /* 0x08 */ 376 U8 VF_ID; /* 0x09 */ 377 U16 Reserved4; /* 0x0A */ 378 U64 BufferAddress; /* 0x0C */ 379 U32 BufferLength; /* 0x14 */ 380 U32 Reserved5; /* 0x18 */ 381 U32 Reserved6; /* 0x1C */ 382 U32 Flags; /* 0x20 */ 383 U32 ProductSpecific[23]; /* 0x24 */ 384 } MPI2_DIAG_BUFFER_POST_REQUEST, MPI2_POINTER PTR_MPI2_DIAG_BUFFER_POST_REQUEST, 385 Mpi2DiagBufferPostRequest_t, MPI2_POINTER pMpi2DiagBufferPostRequest_t; 386 387 /* values for the ExtendedType field */ 388 #define MPI2_DIAG_EXTENDED_TYPE_UTILIZATION (0x02) 389 390 /* values for the BufferType field */ 391 #define MPI2_DIAG_BUF_TYPE_TRACE (0x00) 392 #define MPI2_DIAG_BUF_TYPE_SNAPSHOT (0x01) 393 #define MPI2_DIAG_BUF_TYPE_EXTENDED (0x02) 394 /* count of the number of buffer types */ 395 #define MPI2_DIAG_BUF_TYPE_COUNT (0x03) 396 397 /* values for the Flags field */ 398 #define MPI2_DIAG_BUF_FLAG_RELEASE_ON_FULL (0x00000002) 399 #define MPI2_DIAG_BUF_FLAG_IMMEDIATE_RELEASE (0x00000001) 400 401 402 /**************************************************************************** 403 * Diagnostic Buffer Post reply 404 ****************************************************************************/ 405 406 typedef struct _MPI2_DIAG_BUFFER_POST_REPLY 407 { 408 U8 ExtendedType; /* 0x00 */ 409 U8 BufferType; /* 0x01 */ 410 U8 MsgLength; /* 0x02 */ 411 U8 Function; /* 0x03 */ 412 U16 Reserved2; /* 0x04 */ 413 U8 Reserved3; /* 0x06 */ 414 U8 MsgFlags; /* 0x07 */ 415 U8 VP_ID; /* 0x08 */ 416 U8 VF_ID; /* 0x09 */ 417 U16 Reserved4; /* 0x0A */ 418 U16 Reserved5; /* 0x0C */ 419 U16 IOCStatus; /* 0x0E */ 420 U32 IOCLogInfo; /* 0x10 */ 421 U32 TransferLength; /* 0x14 */ 422 } MPI2_DIAG_BUFFER_POST_REPLY, MPI2_POINTER PTR_MPI2_DIAG_BUFFER_POST_REPLY, 423 Mpi2DiagBufferPostReply_t, MPI2_POINTER pMpi2DiagBufferPostReply_t; 424 425 426 /**************************************************************************** 427 * Diagnostic Release request 428 ****************************************************************************/ 429 430 typedef struct _MPI2_DIAG_RELEASE_REQUEST 431 { 432 U8 Reserved1; /* 0x00 */ 433 U8 BufferType; /* 0x01 */ 434 U8 ChainOffset; /* 0x02 */ 435 U8 Function; /* 0x03 */ 436 U16 Reserved2; /* 0x04 */ 437 U8 Reserved3; /* 0x06 */ 438 U8 MsgFlags; /* 0x07 */ 439 U8 VP_ID; /* 0x08 */ 440 U8 VF_ID; /* 0x09 */ 441 U16 Reserved4; /* 0x0A */ 442 } MPI2_DIAG_RELEASE_REQUEST, MPI2_POINTER PTR_MPI2_DIAG_RELEASE_REQUEST, 443 Mpi2DiagReleaseRequest_t, MPI2_POINTER pMpi2DiagReleaseRequest_t; 444 445 446 /**************************************************************************** 447 * Diagnostic Buffer Post reply 448 ****************************************************************************/ 449 450 typedef struct _MPI2_DIAG_RELEASE_REPLY 451 { 452 U8 Reserved1; /* 0x00 */ 453 U8 BufferType; /* 0x01 */ 454 U8 MsgLength; /* 0x02 */ 455 U8 Function; /* 0x03 */ 456 U16 Reserved2; /* 0x04 */ 457 U8 Reserved3; /* 0x06 */ 458 U8 MsgFlags; /* 0x07 */ 459 U8 VP_ID; /* 0x08 */ 460 U8 VF_ID; /* 0x09 */ 461 U16 Reserved4; /* 0x0A */ 462 U16 Reserved5; /* 0x0C */ 463 U16 IOCStatus; /* 0x0E */ 464 U32 IOCLogInfo; /* 0x10 */ 465 } MPI2_DIAG_RELEASE_REPLY, MPI2_POINTER PTR_MPI2_DIAG_RELEASE_REPLY, 466 Mpi2DiagReleaseReply_t, MPI2_POINTER pMpi2DiagReleaseReply_t; 467 468 469 #endif 470 471