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