1 /* 2 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 #ifndef _SYS_MPI_CNFG_H 7 #define _SYS_MPI_CNFG_H 8 9 #pragma ident "%Z%%M% %I% %E% SMI" 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 /* 16 * Config Message and Structures 17 */ 18 typedef struct config_page_header { 19 uint8_t PageVersion; 20 uint8_t PageLength; 21 uint8_t PageNumber; 22 uint8_t PageType; 23 } config_page_header_t; 24 25 typedef union config_page_header_union { 26 config_page_header_t Struct; 27 uint8_t Bytes[4]; 28 uint16_t Word16[2]; 29 uint32_t Word32; 30 } config_page_header_union_t; 31 32 /* 33 * The extended header is used for 1064 and on 34 */ 35 typedef struct config_extended_page_header { 36 uint8_t PageVersion; 37 uint8_t Reserved1; 38 uint8_t PageNumber; 39 uint8_t PageType; 40 uint16_t ExtPageLength; 41 uint8_t ExtPageType; 42 uint8_t Reserved2; 43 } config_extended_page_header_t; 44 45 /* 46 * PageType field values 47 */ 48 #define MPI_CONFIG_PAGEATTR_READ_ONLY 0x00 49 #define MPI_CONFIG_PAGEATTR_CHANGEABLE 0x10 50 #define MPI_CONFIG_PAGEATTR_PERSISTENT 0x20 51 #define MPI_CONFIG_PAGEATTR_RO_PERSISTENT 0x30 52 #define MPI_CONFIG_PAGEATTR_MASK 0xF0 53 54 #define MPI_CONFIG_PAGETYPE_IO_UNIT 0x00 55 #define MPI_CONFIG_PAGETYPE_IOC 0x01 56 #define MPI_CONFIG_PAGETYPE_BIOS 0x02 57 #define MPI_CONFIG_PAGETYPE_SCSI_PORT 0x03 58 #define MPI_CONFIG_PAGETYPE_SCSI_DEVICE 0x04 59 #define MPI_CONFIG_PAGETYPE_FC_PORT 0x05 60 #define MPI_CONFIG_PAGETYPE_FC_DEVICE 0x06 61 #define MPI_CONFIG_PAGETYPE_LAN 0x07 62 #define MPI_CONFIG_PAGETYPE_RAID_VOLUME 0x08 63 #define MPI_CONFIG_PAGETYPE_MANUFACTURING 0x09 64 #define MPI_CONFIG_PAGETYPE_RAID_PHYSDISK 0x0A 65 #define MPI_CONFIG_PAGETYPE_INBAND 0x0B 66 #define MPI_CONFIG_PAGETYPE_EXTENDED 0x0F 67 #define MPI_CONFIG_PAGETYPE_MASK 0x0F 68 69 #define MPI_CONFIG_TYPENUM_MASK 0x0FFF 70 71 /* 72 * ExtPageType field values 73 */ 74 #define MPI_CONFIG_EXTPAGETYPE_SAS_IO_UNIT 0x10 75 #define MPI_CONFIG_EXTPAGETYPE_SAS_EXPANDER 0x11 76 #define MPI_CONFIG_EXTPAGETYPE_SAS_DEVICE 0x12 77 #define MPI_CONFIG_EXTPAGETYPE_SAS_PHY 0x13 78 79 /* 80 * Page Address field values 81 */ 82 #define MPI_SCSI_PORT_PGAD_PORT_MASK 0x000000FF 83 84 #define MPI_SCSI_DEVICE_TARGET_ID_MASK 0x000000FF 85 #define MPI_SCSI_DEVICE_TARGET_ID_SHIFT 0 86 #define MPI_SCSI_DEVICE_BUS_MASK 0x0000FF00 87 #define MPI_SCSI_DEVICE_BUS_SHIFT 8 88 89 #define MPI_FC_PORT_PGAD_PORT_MASK 0xF0000000 90 #define MPI_FC_PORT_PGAD_PORT_SHIFT 28 91 #define MPI_FC_PORT_PGAD_FORM_MASK 0x0F000000 92 #define MPI_FC_PORT_PGAD_FORM_INDEX 0x01000000 93 #define MPI_FC_PORT_PGAD_INDEX_MASK 0x0000FFFF 94 #define MPI_FC_PORT_PGAD_INDEX_SHIFT 0 95 96 #define MPI_FC_DEVICE_PGAD_PORT_MASK 0xF0000000 97 #define MPI_FC_DEVICE_PGAD_PORT_SHIFT 28 98 #define MPI_FC_DEVICE_PGAD_FORM_MASK 0x0F000000 99 #define MPI_FC_DEVICE_PGAD_FORM_NEXT_DID 0x00000000 100 #define MPI_FC_DEVICE_PGAD_ND_PORT_MASK 0xF0000000 101 #define MPI_FC_DEVICE_PGAD_ND_PORT_SHIFT 28 102 #define MPI_FC_DEVICE_PGAD_ND_DID_MASK 0x00FFFFFF 103 #define MPI_FC_DEVICE_PGAD_ND_DID_SHIFT 0 104 #define MPI_FC_DEVICE_PGAD_FORM_BUS_TID 0x01000000 105 #define MPI_FC_DEVICE_PGAD_BT_BUS_MASK 0x0000FF00 106 #define MPI_FC_DEVICE_PGAD_BT_BUS_SHIFT 8 107 #define MPI_FC_DEVICE_PGAD_BT_TID_MASK 0x000000FF 108 #define MPI_FC_DEVICE_PGAD_BT_TID_SHIFT 0 109 110 #define MPI_PHYSDISK_PGAD_PHYSDISKNUM_MASK 0x000000FF 111 #define MPI_PHYSDISK_PGAD_PHYSDISKNUM_SHIFT 0 112 113 #define MPI_SAS_EXPAND_PGAD_FORM_MASK 0xF0000000 114 #define MPI_SAS_EXPAND_PGAD_FORM_SHIFT 28 115 #define MPI_SAS_EXPAND_PGAD_FORM_GET_NEXT_HANDLE 0x00000000 116 #define MPI_SAS_EXPAND_PGAD_FORM_HANDLE_PHY_NUM 0x00000001 117 #define MPI_SAS_EXPAND_PGAD_FORM_HANDLE 0x00000002 118 #define MPI_SAS_EXPAND_PGAD_GNH_MASK_HANDLE 0x0000FFFF 119 #define MPI_SAS_EXPAND_PGAD_GNH_SHIFT_HANDLE 0 120 #define MPI_SAS_EXPAND_PGAD_HPN_MASK_PHY 0x00FF0000 121 #define MPI_SAS_EXPAND_PGAD_HPN_SHIFT_PHY 16 122 #define MPI_SAS_EXPAND_PGAD_HPN_MASK_HANDLE 0x0000FFFF 123 #define MPI_SAS_EXPAND_PGAD_HPN_SHIFT_HANDLE 0 124 #define MPI_SAS_EXPAND_PGAD_H_MASK_HANDLE 0x0000FFFF 125 #define MPI_SAS_EXPAND_PGAD_H_SHIFT_HANDLE 0 126 127 #define MPI_SAS_DEVICE_PGAD_FORM_MASK 0xF0000000 128 #define MPI_SAS_DEVICE_PGAD_FORM_SHIFT 28 129 #define MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE 0x00000000 130 #define MPI_SAS_DEVICE_PGAD_FORM_BUS_TARGET_ID 0x00000001 131 #define MPI_SAS_DEVICE_PGAD_FORM_HANDLE 0x00000002 132 #define MPI_SAS_DEVICE_PGAD_GNH_HANDLE_MASK 0x0000FFFF 133 #define MPI_SAS_DEVICE_PGAD_GNH_HANDLE_SHIFT 0 134 #define MPI_SAS_DEVICE_PGAD_BT_BUS_MASK 0x0000FF00 135 #define MPI_SAS_DEVICE_PGAD_BT_BUS_SHIFT 8 136 #define MPI_SAS_DEVICE_PGAD_BT_TID_MASK 0x000000FF 137 #define MPI_SAS_DEVICE_PGAD_BT_TID_SHIFT 0 138 #define MPI_SAS_DEVICE_PGAD_H_HANDLE_MASK 0x0000FFFF 139 #define MPI_SAS_DEVICE_PGAD_H_HANDLE_SHIFT 0 140 141 #define MPI_SAS_PHY_PGAD_PHY_NUMBER_MASK 0x000000FF 142 #define MPI_SAS_PHY_PGAD_PHY_NUMBER_SHIFT 0 143 144 /* 145 * Config Message 146 */ 147 typedef struct msg_config { 148 uint8_t Action; 149 uint8_t Reserved; 150 uint8_t ChainOffset; 151 uint8_t Function; 152 uint16_t ExtPageLength; /* 1064 only */ 153 uint8_t ExtPageType; /* 1064 only */ 154 uint8_t MsgFlags; 155 uint32_t MsgContext; 156 uint8_t Reserved2[8]; 157 config_page_header_t Header; 158 uint32_t PageAddress; 159 sge_io_union_t PageBufferSGE; 160 } msg_config_t; 161 162 /* 163 * Action field values 164 */ 165 #define MPI_CONFIG_ACTION_PAGE_HEADER 0x00 166 #define MPI_CONFIG_ACTION_PAGE_READ_CURRENT 0x01 167 #define MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT 0x02 168 #define MPI_CONFIG_ACTION_PAGE_DEFAULT 0x03 169 #define MPI_CONFIG_ACTION_PAGE_WRITE_NVRAM 0x04 170 #define MPI_CONFIG_ACTION_PAGE_READ_DEFAULT 0x05 171 #define MPI_CONFIG_ACTION_PAGE_READ_NVRAM 0x06 172 173 /* 174 * Config Reply Message 175 */ 176 typedef struct msg_config_reply { 177 uint8_t Action; 178 uint8_t Reserved; 179 uint8_t MsgLength; 180 uint8_t Function; 181 uint16_t ExtPageLength; 182 uint8_t ExtPageType; 183 uint8_t MsgFlags; 184 uint32_t MsgContext; 185 uint8_t Reserved2[2]; 186 uint16_t IOCStatus; 187 uint32_t IOCLogInfo; 188 config_page_header_t Header; 189 } msg_config_reply_t; 190 191 /* 192 * Manufacturing Config pages 193 */ 194 #define MPI_MANUFACTPAGE_VENDORID_LSILOGIC 0x1000 195 #define MPI_MANUFACTPAGE_DEVICEID_FC909 0x0621 196 #define MPI_MANUFACTPAGE_DEVICEID_FC919 0x0624 197 #define MPI_MANUFACTPAGE_DEVICEID_FC929 0x0622 198 #define MPI_MANUFACTPAGE_DEVICEID_FC919X 0x0628 199 #define MPI_MANUFACTPAGE_DEVICEID_FC929X 0x0626 200 #define MPI_MANUFACTPAGE_DEVID_53C1030 0x0030 201 #define MPI_MANUFACTPAGE_DEVID_53C1030ZC 0x0031 202 #define MPI_MANUFACTPAGE_DEVID_1030_53C1035 0x0032 203 #define MPI_MANUFACTPAGE_DEVID_1030ZC_53C1035 0x0033 204 #define MPI_MANUFACTPAGE_DEVID_53C1035 0x0040 205 #define MPI_MANUFACTPAGE_DEVID_53C1035ZC 0x0041 206 #define MPI_MANUFACTPAGE_DEVID_SAS1064 0x0050 207 208 typedef struct config_page_manufacturing_0 { 209 config_page_header_t Header; 210 uint8_t ChipName[16]; 211 uint8_t ChipRevision[8]; 212 uint8_t BoardName[16]; 213 uint8_t BoardAssembly[16]; 214 uint8_t BoardTracerNumber[16]; 215 } config_page_manufacturing_0_t; 216 217 #define MPI_MANUFACTURING0_PAGEVERSION 0x00 218 219 typedef struct config_page_manufacturing_1 { 220 config_page_header_t Header; 221 uint8_t VPD[256]; 222 } config_page_manufacturing_1_t; 223 224 #define MPI_MANUFACTURING1_PAGEVERSION 0x00 225 226 typedef struct mpi_chip_revision_id { 227 uint16_t DeviceID; 228 uint8_t PCIRevisionID; 229 uint8_t Reserved; 230 } mpi_chip_revision_id_t; 231 232 /* 233 * Host code (drivers, BIOS, utilities, etc.) should leave this 234 * define set to one and check Header.PageLength at runtime. 235 */ 236 #ifndef MPI_MAN_PAGE_2_HW_SETTINGS_WORDS 237 #define MPI_MAN_PAGE_2_HW_SETTINGS_WORDS 1 238 #endif 239 240 typedef struct config_page_manufacturing_2 { 241 config_page_header_t Header; 242 mpi_chip_revision_id_t ChipId; 243 uint32_t HwSettings[MPI_MAN_PAGE_2_HW_SETTINGS_WORDS]; 244 } config_page_manufacturing_2_t; 245 246 #define MPI_MANUFACTURING2_PAGEVERSION 0x00 247 248 /* 249 * Host code (drivers, BIOS, utilities, etc.) should leave this 250 * define set to one and check Header.PageLength at runtime. 251 */ 252 #ifndef MPI_MAN_PAGE_3_INFO_WORDS 253 #define MPI_MAN_PAGE_3_INFO_WORDS 1 254 #endif 255 256 typedef struct config_page_manufacturing_3 { 257 config_page_header_t Header; 258 mpi_chip_revision_id_t ChipId; 259 uint32_t Info[MPI_MAN_PAGE_3_INFO_WORDS]; 260 } config_page_manufacturing_3_t; 261 262 #define MPI_MANUFACTURING3_PAGEVERSION 0x00 263 264 typedef struct config_page_manufacturing_4 { 265 config_page_header_t Header; 266 uint32_t Reserved1; 267 uint8_t InfoOffset0; 268 uint8_t InfoSize0; 269 uint8_t InfoOffset1; 270 uint8_t InfoSize1; 271 uint8_t InquirySize; 272 uint8_t Flags; 273 uint16_t Reserved2; 274 uint8_t InquiryData[56]; 275 uint32_t ISVolumeSettings; 276 uint32_t IMEVolumeSettings; 277 uint32_t IMVolumeSettings; 278 } config_page_manufacturing_4_t; 279 280 #define MPI_MANUFACTURING4_PAGEVERSION 0x01 281 #define MPI_MANPAGE4_IR_NO_MIX_SAS_SATA 0x01 282 283 typedef struct config_page_manufacturing_5 { 284 config_page_header_t Header; 285 uint64_t BaseWWID; 286 } config_page_manufacturing_5_t; 287 288 #define MPI_MANUFACTURING5_PAGEVERSION 0x00 289 290 typedef struct config_page_manufacturing_6 { 291 config_page_header_t Header; 292 uint32_t ProductSpecificInfo; 293 } config_page_manufacturing_6_t; 294 295 #define MPI_MANUFACTURING6_PAGEVERSION 0x00 296 297 /* 298 * IO Unit Config Pages 299 */ 300 typedef struct config_page_io_unit_0 { 301 config_page_header_t Header; 302 uint64_t UniqueValue; 303 } config_page_io_unit_0_t; 304 305 #define MPI_IOUNITPAGE0_PAGEVERSION 0x00 306 307 typedef struct config_page_io_unit_1 { 308 config_page_header_t Header; 309 uint32_t Flags; 310 } config_page_io_unit_1_t; 311 312 #define MPI_IOUNITPAGE1_PAGEVERSION 0x01 313 314 #define MPI_IOUNITPAGE1_MULTI_FUNCTION 0x00000000 315 #define MPI_IOUNITPAGE1_SINGLE_FUNCTION 0x00000001 316 #define MPI_IOUNITPAGE1_MULTI_PATHING 0x00000002 317 #define MPI_IOUNITPAGE1_SINGLE_PATHING 0x00000000 318 #define MPI_IOUNITPAGE1_IR_USE_STATIC_VOLUME_ID 0x00000004 319 #define MPI_IOUNITPAGE1_DISABLE_QUEUE_FULL_HANDLING 0x00000020 320 #define MPI_IOUNITPAGE1_DISABLE_IR 0x00000040 321 #define MPI_IOUNITPAGE1_FORCE_32 0x00000080 322 #define MPI_IOUNITPAGE1_NATIVE_COMMAND_Q_DISABLE 0x00000100 323 324 typedef struct mpi_adapter_info { 325 uint8_t PciBusNumber; 326 uint8_t PciDeviceAndFunctionNumber; 327 uint16_t AdapterFlags; 328 } mpi_adapter_info_t; 329 330 #define MPI_ADAPTER_INFO_FLAGS_EMBEDDED 0x0001 331 #define MPI_ADAPTER_INFO_FLAGS_INIT_STATUS 0x0002 332 333 typedef struct config_page_io_unit_2 { 334 config_page_header_t Header; 335 uint32_t Flags; 336 uint32_t BiosVersion; 337 mpi_adapter_info_t AdapterOrder[4]; 338 } config_page_io_unit_2_t; 339 340 #define MPI_IOUNITPAGE2_PAGEVERSION 0x00 341 342 #define MPI_IOUNITPAGE2_FLAGS_PAUSE_ON_ERROR 0x00000002 343 #define MPI_IOUNITPAGE2_FLAGS_VERBOSE_ENABLE 0x00000004 344 #define MPI_IOUNITPAGE2_FLAGS_COLOR_VIDEO_DISABLE 0x00000008 345 #define MPI_IOUNITPAGE2_FLAGS_DONT_HOOK_INT_40 0x00000010 346 347 #define MPI_IOUNITPAGE2_FLAGS_DEV_LIST_DISPLAY_MASK 0x000000E0 348 #define MPI_IOUNITPAGE2_FLAGS_INSTALLED_DEV_DISPLAY 0x00000000 349 #define MPI_IOUNITPAGE2_FLAGS_ADAPTER_DISPLAY 0x00000020 350 #define MPI_IOUNITPAGE2_FLAGS_ADAPTER_DEV_DISPLAY 0x00000040 351 352 /* 353 * Host code (drivers, BIOS, utilities, etc.) should leave this 354 * define set to one and check Header.PageLength at runtime. 355 */ 356 #ifndef MPI_IO_UNIT_PAGE_3_GPIO_VAL_MAX 357 #define MPI_IO_UNIT_PAGE_3_GPIO_VAL_MAX 1 358 #endif 359 360 typedef struct config_page_io_unit_3 { 361 config_page_header_t Header; 362 uint8_t GPIOCount; 363 uint8_t Reserved1; 364 uint16_t Reserved2; 365 uint16_t GPIOVal[MPI_IO_UNIT_PAGE_3_GPIO_VAL_MAX]; 366 } config_page_io_unit_3_t; 367 368 #define MPI_IOUNITPAGE3_PAGEVERSION 0x01 369 370 #define MPI_IOUNITPAGE3_GPIO_FUNCTION_MASK 0xFC 371 #define MPI_IOUNITPAGE3_GPIO_FUNCTION_SHIFT 2 372 #define MPI_IOUNITPAGE3_GPIO_SETTING_OFF 0x00 373 #define MPI_IOUNITPAGE3_GPIO_SETTING_ON 0x01 374 375 /* 376 * IOC Config Pages 377 */ 378 typedef struct config_page_ioc_0 { 379 config_page_header_t Header; 380 uint32_t TotalNVStore; 381 uint32_t FreeNVStore; 382 uint16_t VendorID; 383 uint16_t DeviceID; 384 uint8_t RevisionID; 385 uint8_t Reserved[3]; 386 uint32_t ClassCode; 387 uint16_t SubsystemVendorID; 388 uint16_t SubsystemID; 389 } config_page_ioc_0_t; 390 391 #define MPI_IOCPAGE0_PAGEVERSION 0x01 392 393 typedef struct config_page_ioc_1 { 394 config_page_header_t Header; 395 uint32_t Flags; 396 uint32_t CoalescingTimeout; 397 uint8_t CoalescingDepth; 398 uint8_t PCISlotNum; 399 uint8_t Reserved[2]; 400 } config_page_ioc_1_t; 401 402 #define MPI_IOCPAGE1_PAGEVERSION 0x01 403 #define MPI_IOCPAGE1_EEDP_HOST_SUPPORTS_DIF 0x08000000 404 #define MPI_IOCPAGE1_EEDP_MODE_MASK 0x07000000 405 #define MPI_IOCPAGE1_EEDP_MODE_OFF 0x00000000 406 #define MPI_IOCPAGE1_EEDP_MODE_T10 0x01000000 407 #define MPI_IOCPAGE1_EEDP_MODE_LSI_1 0x02000000 408 #define MPI_IOCPAGE1_EEDP_MODE_LSI_2 0x03000000 409 #define MPI_IOCPAGE1_REPLY_COALESCING 0x00000001 410 #define MPI_IOCPAGE1_PCISLOTNUM_UNKNOWN 0xFF 411 412 typedef struct config_page_ioc_2_raid_vol { 413 uint8_t VolumeID; 414 uint8_t VolumeBus; 415 uint8_t VolumeIOC; 416 uint8_t VolumePageNumber; 417 uint8_t VolumeType; 418 uint8_t Flags; 419 uint16_t Reserved3; 420 } config_page_ioc_2_raid_vol_t; 421 422 #define MPI_RAID_VOL_TYPE_IS 0x00 423 #define MPI_RAID_VOL_TYPE_IME 0x01 424 #define MPI_RAID_VOL_TYPE_IM 0x02 425 #define MPI_IOCPAGE2_FLAG_VOLUME_INACTIVE 0x08 426 427 /* 428 * Host code (drivers, BIOS, utilities, etc.) should leave this 429 * define set to one and check Header.PageLength at runtime. 430 */ 431 #ifndef MPI_IOC_PAGE_2_RAID_VOLUME_MAX 432 #define MPI_IOC_PAGE_2_RAID_VOLUME_MAX 1 433 #endif 434 435 typedef struct config_page_ioc_2 { 436 config_page_header_t Header; 437 uint32_t CapabilitiesFlags; 438 uint8_t NumActiveVolumes; 439 uint8_t MaxVolumes; 440 uint8_t NumActivePhysDisks; 441 uint8_t MaxPhysDisks; 442 config_page_ioc_2_raid_vol_t RaidVolume[MPI_IOC_PAGE_2_RAID_VOLUME_MAX]; 443 } config_page_ioc_2_t; 444 445 #define MPI_IOCPAGE2_PAGEVERSION 0x02 446 447 /* 448 * IOC Page 2 Capabilities flags 449 */ 450 #define MPI_IOCPAGE2_CAP_FLAGS_IS_SUPPORT 0x00000001 451 #define MPI_IOCPAGE2_CAP_FLAGS_IME_SUPPORT 0x00000002 452 #define MPI_IOCPAGE2_CAP_FLAGS_IM_SUPPORT 0x00000004 453 #define MPI_IOCPAGE2_CAP_FLAGS_SES_SUPPORT 0x20000000 454 #define MPI_IOCPAGE2_CAP_FLAGS_SAFTE_SUPPORT 0x40000000 455 #define MPI_IOCPAGE2_CAP_FLAGS_CROSS_CHANNEL_SUPPORT 0x80000000 456 457 typedef struct ioc_3_phys_disk { 458 uint8_t PhysDiskID; 459 uint8_t PhysDiskBus; 460 uint8_t PhysDiskIOC; 461 uint8_t PhysDiskNum; 462 } ioc_3_phys_disk_t; 463 464 /* 465 * Host code (drivers, BIOS, utilities, etc.) should leave this 466 * define set to one and check Header.PageLength at runtime. 467 */ 468 #ifndef MPI_IOC_PAGE_3_PHYSDISK_MAX 469 #define MPI_IOC_PAGE_3_PHYSDISK_MAX 1 470 #endif 471 472 typedef struct config_page_ioc_3 { 473 config_page_header_t Header; 474 uint8_t NumPhysDisks; 475 uint8_t Reserved1; 476 uint16_t Reserved2; 477 ioc_3_phys_disk_t PhysDisk[MPI_IOC_PAGE_3_PHYSDISK_MAX]; 478 } config_page_ioc_3_t; 479 480 #define MPI_IOCPAGE3_PAGEVERSION 0x00 481 482 typedef struct ioc_4_sep { 483 uint8_t SEPTargetID; 484 uint8_t SEPBus; 485 uint16_t Reserved; 486 } ioc_4_sep_t; 487 488 /* 489 * Host code (drivers, BIOS, utilities, etc.) should leave this 490 * define set to one and check Header.PageLength at runtime. 491 */ 492 #ifndef MPI_IOC_PAGE_4_SEP_MAX 493 #define MPI_IOC_PAGE_4_SEP_MAX 1 494 #endif 495 496 typedef struct config_page_ioc_4 { 497 config_page_header_t Header; 498 uint8_t ActiveSEP; 499 uint8_t MaxSEP; 500 uint16_t Reserved1; 501 ioc_4_sep_t SEP[MPI_IOC_PAGE_4_SEP_MAX]; 502 } config_page_ioc_4_t; 503 504 #define MPI_IOCPAGE4_PAGEVERSION 0x00 505 506 /* 507 * SCSI Port Config Pages 508 */ 509 typedef struct config_page_scsi_port_0 { 510 config_page_header_t Header; 511 uint32_t Capabilities; 512 uint32_t PhysicalInterface; 513 } config_page_scsi_port_0_t; 514 515 #define MPI_SCSIPORTPAGE0_PAGEVERSION 0x01 516 517 /* 518 * Capabilities 519 */ 520 #define MPI_SCSIPORTPAGE0_CAP_IU 0x00000001 521 #define MPI_SCSIPORTPAGE0_CAP_DT 0x00000002 522 #define MPI_SCSIPORTPAGE0_CAP_QAS 0x00000004 523 #define MPI_SCSIPORTPAGE0_CAP_PACING_TRANSFERS 0x00000008 524 #define MPI_SCSIPORTPAGE0_CAP_MIN_SYNC_PERIOD_MASK 0x0000FF00 525 #define MPI_SCSIPORTPAGE0_CAP_MAX_SYNC_OFFSET_MASK 0x00FF0000 526 #define MPI_SCSIPORTPAGE0_CAP_WIDE 0x20000000 527 #define MPI_SCSIPORTPAGE0_CAP_AIP 0x80000000 528 529 /* 530 * Physical Interface 531 */ 532 #define MPI_SCSIPORTPAGE0_PHY_SIGNAL_TYPE_MASK 0x00000003 533 #define MPI_SCSIPORTPAGE0_PHY_SIGNAL_HVD 0x01 534 #define MPI_SCSIPORTPAGE0_PHY_SIGNAL_SE 0x02 535 #define MPI_SCSIPORTPAGE0_PHY_SIGNAL_LVD 0x03 536 537 typedef struct config_page_scsi_port_1 { 538 config_page_header_t Header; 539 uint32_t Configuration; 540 uint32_t OnBusTimerValue; 541 } config_page_scsi_port_1_t; 542 543 #define MPI_SCSIPORTPAGE1_PAGEVERSION 0x02 544 545 #define MPI_SCSIPORTPAGE1_CFG_PORT_SCSI_ID_MASK 0x000000FF 546 #define MPI_SCSIPORTPAGE1_CFG_PORT_RESPONSE_ID_MASK 0xFFFF0000 547 548 typedef struct mpi_device_info { 549 uint8_t Timeout; 550 uint8_t SyncFactor; 551 uint16_t DeviceFlags; 552 } mpi_device_info_t; 553 554 typedef struct config_page_scsi_port_2 { 555 config_page_header_t Header; 556 uint32_t PortFlags; 557 uint32_t PortSettings; 558 mpi_device_info_t DeviceSettings[16]; 559 } config_page_scsi_port_2_t; 560 561 #define MPI_SCSIPORTPAGE2_PAGEVERSION 0x01 562 563 #define MPI_SCSIPORTPAGE2_PORT_FLAGS_SCAN_HIGH_TO_LOW 0x00000001 564 #define MPI_SCSIPORTPAGE2_PORT_FLAGS_AVOID_SCSI_RESET 0x00000004 565 #define MPI_SCSIPORTPAGE2_PORT_FLAGS_ALTERNATE_CHS 0x00000008 566 #define MPI_SCSIPORTPAGE2_PORT_FLAGS_TERMINATION_DISABLE 0x00000010 567 568 #define MPI_SCSIPORTPAGE2_PORT_HOST_ID_MASK 0x0000000F 569 #define MPI_SCSIPORTPAGE2_PORT_MASK_INIT_HBA 0x00000030 570 #define MPI_SCSIPORTPAGE2_PORT_DISABLE_INIT_HBA 0x00000000 571 #define MPI_SCSIPORTPAGE2_PORT_BIOS_INIT_HBA 0x00000010 572 #define MPI_SCSIPORTPAGE2_PORT_OS_INIT_HBA 0x00000020 573 #define MPI_SCSIPORTPAGE2_PORT_BIOS_OS_INIT_HBA 0x00000030 574 #define MPI_SCSIPORTPAGE2_PORT_REMOVABLE_MEDIA 0x000000C0 575 #define MPI_SCSIPORTPAGE2_PORT_SPINUP_DELAY_MASK 0x00000F00 576 #define MPI_SCSIPORTPAGE2_PORT_MASK_NEGO_MASTER_SETTINGS 0x00003000 577 #define MPI_SCSIPORTPAGE2_PORT_NEGO_MASTER_SETTINGS 0x00000000 578 #define MPI_SCSIPORTPAGE2_PORT_NONE_MASTER_SETTINGS 0x00001000 579 #define MPI_SCSIPORTPAGE2_PORT_ALL_MASTER_SETTINGS 0x00003000 580 581 #define MPI_SCSIPORTPAGE2_DEVICE_DISCONNECT_ENABLE 0x0001 582 #define MPI_SCSIPORTPAGE2_DEVICE_ID_SCAN_ENABLE 0x0002 583 #define MPI_SCSIPORTPAGE2_DEVICE_LUN_SCAN_ENABLE 0x0004 584 #define MPI_SCSIPORTPAGE2_DEVICE_TAG_QUEUE_ENABLE 0x0008 585 #define MPI_SCSIPORTPAGE2_DEVICE_WIDE_DISABLE 0x0010 586 #define MPI_SCSIPORTPAGE2_DEVICE_BOOT_CHOICE 0x0020 587 588 /* 589 * SCSI Target Device Config Pages 590 */ 591 typedef struct config_page_scsi_device_0 { 592 config_page_header_t Header; 593 uint32_t NegotiatedParameters; 594 uint32_t Information; 595 } config_page_scsi_device_0_t; 596 597 #define MPI_SCSIDEVPAGE0_PAGEVERSION 0x02 598 599 #define MPI_SCSIDEVPAGE0_NP_IU 0x00000001 600 #define MPI_SCSIDEVPAGE0_NP_DT 0x00000002 601 #define MPI_SCSIDEVPAGE0_NP_QAS 0x00000004 602 #define MPI_SCSIDEVPAGE0_NP_NEG_SYNC_PERIOD_MASK 0x0000FF00 603 #define MPI_SCSIDEVPAGE0_NP_NEG_SYNC_OFFSET_MASK 0x00FF0000 604 #define MPI_SCSIDEVPAGE0_NP_WIDE 0x20000000 605 #define MPI_SCSIDEVPAGE0_NP_AIP 0x80000000 606 #define MPI_SCSIDEVPAGE0_NP_IDP 0x08000000 607 608 #define MPI_SCSIDEVPAGE0_INFO_PARAMS_NEGOTIATED 0x00000001 609 #define MPI_SCSIDEVPAGE0_INFO_SDTR_REJECTED 0x00000002 610 #define MPI_SCSIDEVPAGE0_INFO_WDTR_REJECTED 0x00000004 611 #define MPI_SCSIDEVPAGE0_INFO_PPR_REJECTED 0x00000008 612 613 typedef struct config_page_scsi_device_1 { 614 config_page_header_t Header; 615 uint32_t RequestedParameters; 616 uint32_t Reserved; 617 uint32_t Configuration; 618 } config_page_scsi_device_1_t; 619 620 #define MPI_SCSIDEVPAGE1_PAGEVERSION 0x03 621 622 #define MPI_SCSIDEVPAGE1_RP_IU 0x00000001 623 #define MPI_SCSIDEVPAGE1_RP_DT 0x00000002 624 #define MPI_SCSIDEVPAGE1_RP_QAS 0x00000004 625 #define MPI_SCSIDEVPAGE1_RP_MIN_SYNC_PERIOD_MASK 0x0000FF00 626 #define MPI_SCSIDEVPAGE1_RP_MAX_SYNC_OFFSET_MASK 0x00FF0000 627 #define MPI_SCSIDEVPAGE1_RP_WIDE 0x20000000 628 #define MPI_SCSIDEVPAGE1_RP_AIP 0x80000000 629 #define MPI_SCSIDEVPAGE1_RP_IDP 0x08000000 630 631 #define MPI_SCSIDEVPAGE1_DV_LVD_DRIVE_STRENGTH_MASK 0x00000003 632 #define MPI_SCSIDEVPAGE1_DV_SE_SLEW_RATE_MASK 0x00000300 633 634 #define MPI_SCSIDEVPAGE1_CONF_WDTR_DISALLOWED 0x00000002 635 #define MPI_SCSIDEVPAGE1_CONF_SDTR_DISALLOWED 0x00000004 636 637 typedef struct config_page_scsi_device_2 { 638 config_page_header_t Header; 639 uint32_t DomainValidation; 640 uint32_t ParityPipeSelect; 641 uint32_t DataPipeSelect; 642 } config_page_scsi_device_2_t; 643 644 #define MPI_SCSIDEVPAGE2_PAGEVERSION 0x00 645 646 #define MPI_SCSIDEVPAGE2_DV_ISI_ENABLE 0x00000010 647 #define MPI_SCSIDEVPAGE2_DV_SECONDARY_DRIVER_ENABLE 0x00000020 648 #define MPI_SCSIDEVPAGE2_DV_SLEW_RATE_CTRL 0x00000380 649 #define MPI_SCSIDEVPAGE2_DV_PRIM_DRIVE_STR_CTRL 0x00001C00 650 #define MPI_SCSIDEVPAGE2_DV_SECOND_DRIVE_STR_CTRL 0x0000E000 651 #define MPI_SCSIDEVPAGE2_DV_XCLKH_ST 0x10000000 652 #define MPI_SCSIDEVPAGE2_DV_XCLKS_ST 0x20000000 653 #define MPI_SCSIDEVPAGE2_DV_XCLKH_DT 0x40000000 654 #define MPI_SCSIDEVPAGE2_DV_XCLKS_DT 0x80000000 655 656 #define MPI_SCSIDEVPAGE2_PPS_PPS_MASK 0x00000003 657 658 #define MPI_SCSIDEVPAGE2_DPS_BIT_0_PL_SELECT_MASK 0x00000003 659 #define MPI_SCSIDEVPAGE2_DPS_BIT_1_PL_SELECT_MASK 0x0000000C 660 #define MPI_SCSIDEVPAGE2_DPS_BIT_2_PL_SELECT_MASK 0x00000030 661 #define MPI_SCSIDEVPAGE2_DPS_BIT_3_PL_SELECT_MASK 0x000000C0 662 #define MPI_SCSIDEVPAGE2_DPS_BIT_4_PL_SELECT_MASK 0x00000300 663 #define MPI_SCSIDEVPAGE2_DPS_BIT_5_PL_SELECT_MASK 0x00000C00 664 #define MPI_SCSIDEVPAGE2_DPS_BIT_6_PL_SELECT_MASK 0x00003000 665 #define MPI_SCSIDEVPAGE2_DPS_BIT_7_PL_SELECT_MASK 0x0000C000 666 #define MPI_SCSIDEVPAGE2_DPS_BIT_8_PL_SELECT_MASK 0x00030000 667 #define MPI_SCSIDEVPAGE2_DPS_BIT_9_PL_SELECT_MASK 0x000C0000 668 #define MPI_SCSIDEVPAGE2_DPS_BIT_10_PL_SELECT_MASK 0x00300000 669 #define MPI_SCSIDEVPAGE2_DPS_BIT_11_PL_SELECT_MASK 0x00C00000 670 #define MPI_SCSIDEVPAGE2_DPS_BIT_12_PL_SELECT_MASK 0x03000000 671 #define MPI_SCSIDEVPAGE2_DPS_BIT_13_PL_SELECT_MASK 0x0C000000 672 #define MPI_SCSIDEVPAGE2_DPS_BIT_14_PL_SELECT_MASK 0x30000000 673 #define MPI_SCSIDEVPAGE2_DPS_BIT_15_PL_SELECT_MASK 0xC0000000 674 675 /* 676 * FC Port Config Pages 677 */ 678 typedef struct config_page_fc_port_0 { 679 config_page_header_t Header; 680 uint32_t Flags; 681 uint8_t MPIPortNumber; 682 uint8_t Reserved[3]; 683 uint32_t PortIdentifier; 684 uint64_t WWNN; 685 uint64_t WWPN; 686 uint32_t SupportedServiceClass; 687 uint32_t SupportedSpeeds; 688 uint32_t CurrentSpeed; 689 uint32_t MaxFrameSize; 690 uint64_t FabricWWNN; 691 uint64_t FabricWWPN; 692 uint32_t DiscoveredPortsCount; 693 uint32_t MaxInitiators; 694 } config_page_fc_port_0_t; 695 696 #define MPI_FCPORTPAGE0_PAGEVERSION 0x01 697 698 #define MPI_FCPORTPAGE0_FLAGS_PROT_MASK 0x0000000F 699 #define MPI_FCPORTPAGE0_FLAGS_PROT_FCP_INIT \ 700 MPI_PORTFACTS_PROTOCOL_INITIATOR 701 #define MPI_FCPORTPAGE0_FLAGS_PROT_FCP_TARG \ 702 MPI_PORTFACTS_PROTOCOL_TARGET 703 #define MPI_FCPORTPAGE0_FLAGS_PROT_LAN \ 704 MPI_PORTFACTS_PROTOCOL_LAN 705 #define MPI_FCPORTPAGE0_FLAGS_PROT_LOGBUSADDR \ 706 MPI_PORTFACTS_PROTOCOL_LOGBUSADDR 707 708 #define MPI_FCPORTPAGE0_FLAGS_ALIAS_ALPA_SUPPORTED 0x00000010 709 #define MPI_FCPORTPAGE0_FLAGS_ALIAS_WWN_SUPPORTED 0x00000020 710 #define MPI_FCPORTPAGE0_FLAGS_FABRIC_WWN_VALID 0x00000030 711 712 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_TYPE_MASK 0x00000F00 713 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_NO_INIT 0x00000000 714 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_POINT_TO_POINT 0x00000100 715 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_PRIVATE_LOOP 0x00000200 716 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_FABRIC_DIRECT 0x00000400 717 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_PUBLIC_LOOP 0x00000800 718 719 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_TYPE_MASK 0x00000F00 720 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_NO_INIT 0x00000000 721 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_POINT_TO_POINT 0x00000100 722 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_PRIVATE_LOOP 0x00000200 723 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_FABRIC_DIRECT 0x00000400 724 #define MPI_FCPORTPAGE0_FLAGS_ATTACH_PUBLIC_LOOP 0x00000800 725 726 #define MPI_FCPORTPAGE0_LTYPE_RESERVED 0x00 727 #define MPI_FCPORTPAGE0_LTYPE_OTHER 0x01 728 #define MPI_FCPORTPAGE0_LTYPE_UNKNOWN 0x02 729 #define MPI_FCPORTPAGE0_LTYPE_COPPER 0x03 730 #define MPI_FCPORTPAGE0_LTYPE_SINGLE_1300 0x04 731 #define MPI_FCPORTPAGE0_LTYPE_SINGLE_1500 0x05 732 #define MPI_FCPORTPAGE0_LTYPE_50_LASER_MULTI 0x06 733 #define MPI_FCPORTPAGE0_LTYPE_50_LED_MULTI 0x07 734 #define MPI_FCPORTPAGE0_LTYPE_62_LASER_MULTI 0x08 735 #define MPI_FCPORTPAGE0_LTYPE_62_LED_MULTI 0x09 736 #define MPI_FCPORTPAGE0_LTYPE_MULTI_LONG_WAVE 0x0A 737 #define MPI_FCPORTPAGE0_LTYPE_MULTI_SHORT_WAVE 0x0B 738 #define MPI_FCPORTPAGE0_LTYPE_LASER_SHORT_WAVE 0x0C 739 #define MPI_FCPORTPAGE0_LTYPE_LED_SHORT_WAVE 0x0D 740 #define MPI_FCPORTPAGE0_LTYPE_1300_LONG_WAVE 0x0E 741 #define MPI_FCPORTPAGE0_LTYPE_1500_LONG_WAVE 0x0F 742 743 #define MPI_FCPORTPAGE0_PORTSTATE_UNKNOWN 0x01 744 #define MPI_FCPORTPAGE0_PORTSTATE_ONLINE 0x02 745 #define MPI_FCPORTPAGE0_PORTSTATE_OFFLINE 0x03 746 #define MPI_FCPORTPAGE0_PORTSTATE_BYPASSED 0x04 747 #define MPI_FCPORTPAGE0_PORTSTATE_DIAGNOST 0x05 748 #define MPI_FCPORTPAGE0_PORTSTATE_LINKDOWN 0x06 749 #define MPI_FCPORTPAGE0_PORTSTATE_ERROR 0x07 750 #define MPI_FCPORTPAGE0_PORTSTATE_LOOPBACK 0x08 751 752 #define MPI_FCPORTPAGE0_SUPPORT_CLASS_1 0x00000001 753 #define MPI_FCPORTPAGE0_SUPPORT_CLASS_2 0x00000002 754 #define MPI_FCPORTPAGE0_SUPPORT_CLASS_3 0x00000004 755 756 #define MPI_FCPORTPAGE0_SUPPORT_1GBIT_SPEED 0x00000001 757 #define MPI_FCPORTPAGE0_SUPPORT_2GBIT_SPEED 0x00000002 758 #define MPI_FCPORTPAGE0_SUPPORT_10GBIT_SPEED 0x00000004 759 760 #define MPI_FCPORTPAGE0_CURRENT_SPEED_1GBIT \ 761 MPI_FCPORTPAGE0_SUPPORT_1GBIT_SPEED 762 #define MPI_FCPORTPAGE0_CURRENT_SPEED_2GBIT \ 763 MPI_FCPORTPAGE0_SUPPORT_2GBIT_SPEED 764 #define MPI_FCPORTPAGE0_CURRENT_SPEED_10GBIT \ 765 MPI_FCPORTPAGE0_SUPPORT_10GBIT_SPEED 766 767 typedef struct config_page_fc_port_1 { 768 config_page_header_t Header; 769 uint32_t Flags; 770 uint64_t NoSEEPROMWWNN; 771 uint64_t NoSEEPROMWWPN; 772 uint8_t HardALPA; 773 uint8_t LinkConfig; 774 uint8_t TopologyConfig; 775 uint8_t Reserved; 776 } config_page_fc_port_1_t; 777 778 #define MPI_FCPORTPAGE1_PAGEVERSION 0x02 779 780 #define MPI_FCPORTPAGE1_FLAGS_EXT_FCP_STATUS_EN 0x08000000 781 #define MPI_FCPORTPAGE1_FLAGS_IMMEDIATE_ERROR_REPLY 0x04000000 782 #define MPI_FCPORTPAGE1_FLAGS_SORT_BY_DID 0x00000001 783 #define MPI_FCPORTPAGE1_FLAGS_SORT_BY_WWN 0x00000000 784 785 /* 786 * Flags used for programming protocol modes in NVStore 787 */ 788 #define MPI_FCPORTPAGE1_FLAGS_PROT_MASK 0xF0000000 789 #define MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT 28 790 #define MPI_FCPORTPAGE1_FLAGS_PROT_FCP_INIT \ 791 ((uint32_t)MPI_PORTFACTS_PROTOCOL_INITIATOR << \ 792 MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT) 793 #define MPI_FCPORTPAGE1_FLAGS_PROT_FCP_TARG \ 794 ((uint32_t)MPI_PORTFACTS_PROTOCOL_TARGET << \ 795 MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT) 796 #define MPI_FCPORTPAGE1_FLAGS_PROT_LAN \ 797 ((uint32_t)MPI_PORTFACTS_PROTOCOL_LAN << \ 798 MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT) 799 #define MPI_FCPORTPAGE1_FLAGS_PROT_LOGBUSADDR \ 800 ((uint32_t)MPI_PORTFACTS_PROTOCOL_LOGBUSADDR << \ 801 MPI_FCPORTPAGE1_FLAGS_PROT_SHIFT) 802 803 #define MPI_FCPORTPAGE1_HARD_ALPA_NOT_USED 0xFF 804 805 #define MPI_FCPORTPAGE1_LCONFIG_SPEED_MASK 0x0F 806 #define MPI_FCPORTPAGE1_LCONFIG_SPEED_1GIG 0x00 807 #define MPI_FCPORTPAGE1_LCONFIG_SPEED_2GIG 0x01 808 #define MPI_FCPORTPAGE1_LCONFIG_SPEED_4GIG 0x02 809 #define MPI_FCPORTPAGE1_LCONFIG_SPEED_10GIG 0x03 810 #define MPI_FCPORTPAGE1_LCONFIG_SPEED_AUTO 0x0F 811 812 #define MPI_FCPORTPAGE1_TOPOLOGY_MASK 0x0F 813 #define MPI_FCPORTPAGE1_TOPOLOGY_NLPORT 0x01 814 #define MPI_FCPORTPAGE1_TOPOLOGY_NPORT 0x02 815 #define MPI_FCPORTPAGE1_TOPOLOGY_AUTO 0x0F 816 817 typedef struct config_page_fc_port_2 { 818 config_page_header_t Header; 819 uint8_t NumberActive; 820 uint8_t ALPA[127]; 821 } config_page_fc_port_2_t; 822 823 #define MPI_FCPORTPAGE2_PAGEVERSION 0x01 824 825 typedef struct wwn_format { 826 uint64_t WWNN; 827 uint64_t WWPN; 828 } wwn_format_t; 829 830 typedef union fc_port_persistent_physical_id { 831 wwn_format_t WWN; 832 uint32_t Did; 833 } fc_port_persistent_physical_id_t; 834 835 typedef struct fc_port_persistent { 836 fc_port_persistent_physical_id_t PhysicalIdentifier; 837 uint8_t TargetID; 838 uint8_t Bus; 839 uint16_t Flags; 840 } fc_port_persistent_t; 841 842 #define MPI_PERSISTENT_FLAGS_SHIFT 16 843 #define MPI_PERSISTENT_FLAGS_ENTRY_VALID 0x0001 844 #define MPI_PERSISTENT_FLAGS_SCAN_ID 0x0002 845 #define MPI_PERSISTENT_FLAGS_SCAN_LUNS 0x0004 846 #define MPI_PERSISTENT_FLAGS_BOOT_DEVICE 0x0008 847 #define MPI_PERSISTENT_FLAGS_BY_DID 0x0080 848 849 /* 850 * Host code (drivers, BIOS, utilities, etc.) should leave this 851 * define set to one and check Header.PageLength at runtime. 852 */ 853 #ifndef MPI_FC_PORT_PAGE_3_ENTRY_MAX 854 #define MPI_FC_PORT_PAGE_3_ENTRY_MAX 1 855 #endif 856 857 typedef struct config_page_fc_port_3 { 858 config_page_header_t Header; 859 fc_port_persistent_t Entry[MPI_FC_PORT_PAGE_3_ENTRY_MAX]; 860 } config_page_fc_port_3_t; 861 862 #define MPI_FCPORTPAGE3_PAGEVERSION 0x01 863 864 typedef struct config_page_fc_port_4 { 865 config_page_header_t Header; 866 uint32_t PortFlags; 867 uint32_t PortSettings; 868 } config_page_fc_port_4_t; 869 870 #define MPI_FCPORTPAGE4_PAGEVERSION 0x00 871 872 #define MPI_FCPORTPAGE4_PORT_FLAGS_ALTERNATE_CHS 0x00000008 873 874 #define MPI_FCPORTPAGE4_PORT_MASK_INIT_HBA 0x00000030 875 #define MPI_FCPORTPAGE4_PORT_DISABLE_INIT_HBA 0x00000000 876 #define MPI_FCPORTPAGE4_PORT_BIOS_INIT_HBA 0x00000010 877 #define MPI_FCPORTPAGE4_PORT_OS_INIT_HBA 0x00000020 878 #define MPI_FCPORTPAGE4_PORT_BIOS_OS_INIT_HBA 0x00000030 879 #define MPI_FCPORTPAGE4_PORT_REMOVABLE_MEDIA 0x000000C0 880 #define MPI_FCPORTPAGE4_PORT_SPINUP_DELAY_MASK 0x00000F00 881 882 typedef struct config_page_fc_port_5_alias_info { 883 uint8_t Flags; 884 uint8_t AliasAlpa; 885 uint16_t Reserved; 886 uint64_t AliasWWNN; 887 uint64_t AliasWWPN; 888 } config_page_fc_port_5_alias_info_t; 889 890 /* 891 * Host code (drivers, BIOS, utilities, etc.) should leave this 892 * define set to one and check Header.PageLength at runtime. 893 */ 894 #ifndef MPI_FC_PORT_PAGE_5_ALIAS_MAX 895 #define MPI_FC_PORT_PAGE_5_ALIAS_MAX 1 896 #endif 897 898 typedef struct config_page_fc_port_5 { 899 config_page_header_t Header; 900 config_page_fc_port_5_alias_info_t 901 AliasInfo[MPI_FC_PORT_PAGE_5_ALIAS_MAX]; 902 } config_page_fc_port_5_t; 903 904 #define MPI_FCPORTPAGE5_PAGEVERSION 0x00 905 906 #define MPI_FCPORTPAGE5_FLAGS_ALIAS_ALPA_VALID 0x01 907 #define MPI_FCPORTPAGE5_FLAGS_ALIAS_WWN_VALID 0x02 908 909 typedef struct config_page_fc_port_6 { 910 config_page_header_t Header; 911 uint32_t Reserved; 912 uint64_t TimeSinceReset; 913 uint64_t TxFrames; 914 uint64_t RxFrames; 915 uint64_t TxWords; 916 uint64_t RxWords; 917 uint64_t LipCount; 918 uint64_t NosCount; 919 uint64_t ErrorFrames; 920 uint64_t DumpedFrames; 921 uint64_t LinkFailureCount; 922 uint64_t LossOfSyncCount; 923 uint64_t LossOfSignalCount; 924 uint64_t PrimativeSeqErrCount; 925 uint64_t InvalidTxWordCount; 926 uint64_t InvalidCrcCount; 927 uint64_t FcpInitiatorIoCount; 928 } config_page_fc_port_6_t; 929 930 #define MPI_FCPORTPAGE6_PAGEVERSION 0x00 931 932 typedef struct config_page_fc_port_7 { 933 config_page_header_t Header; 934 uint32_t Reserved; 935 uint8_t PortSymbolicName[256]; 936 } config_page_fc_port_7_t; 937 938 #define MPI_FCPORTPAGE7_PAGEVERSION 0x00 939 940 typedef struct config_page_fc_port_8 { 941 config_page_header_t Header; 942 uint32_t BitVector[8]; 943 } config_page_fc_port_8_t; 944 945 #define MPI_FCPORTPAGE8_PAGEVERSION 0x00 946 947 typedef struct config_page_fc_port_9 { 948 config_page_header_t Header; 949 uint32_t Reserved; 950 uint64_t GlobalWWPN; 951 uint64_t GlobalWWNN; 952 uint32_t UnitType; 953 uint32_t PhysicalPortNumber; 954 uint32_t NumAttachedNodes; 955 uint16_t IPVersion; 956 uint16_t UDPPortNumber; 957 uint8_t IPAddress[16]; 958 uint16_t Reserved1; 959 uint16_t TopologyDiscoveryFlags; 960 } config_page_fc_port_9_t; 961 962 #define MPI_FCPORTPAGE9_PAGEVERSION 0x00 963 964 /* 965 * FC Device Config Pages 966 */ 967 typedef struct config_page_fc_device_0 { 968 config_page_header_t Header; 969 uint64_t WWNN; 970 uint64_t WWPN; 971 uint32_t PortIdentifier; 972 uint8_t Protocol; 973 uint8_t Flags; 974 uint16_t BBCredit; 975 uint16_t MaxRxFrameSize; 976 uint8_t Reserved1; 977 uint8_t PortNumber; 978 uint8_t FcPhLowestVersion; 979 uint8_t FcPhHighestVersion; 980 uint8_t CurrentTargetID; 981 uint8_t CurrentBus; 982 } config_page_fc_device_0_t; 983 984 #define MPI_FC_DEVICE_PAGE_0_PAGEVERSION 0x02 985 986 #define MPI_FC_DEVICE_PAGE0_FLAGS_TARGETID_BUS_VALID 0x01 987 988 #define MPI_FC_DEVICE_PAGE_0_PROT_IP 0x01 989 #define MPI_FC_DEVICE_PAGE_0_PROT_FCP_TARGET 0x02 990 #define MPI_FC_DEVICE_PAGE_0_PROT_FCP_INITIATOR 0x04 991 992 #define MPI_FC_DEVICE_PAGE0_PGAD_PORT_MASK \ 993 (MPI_FC_DEVICE_PGAD_PORT_MASK) 994 #define MPI_FC_DEVICE_PAGE0_PGAD_FORM_MASK \ 995 (MPI_FC_DEVICE_PGAD_FORM_MASK) 996 #define MPI_FC_DEVICE_PAGE0_PGAD_FORM_NEXT_DID \ 997 (MPI_FC_DEVICE_PGAD_FORM_NEXT_DID) 998 #define MPI_FC_DEVICE_PAGE0_PGAD_FORM_BUS_TID \ 999 (MPI_FC_DEVICE_PGAD_FORM_BUS_TID) 1000 #define MPI_FC_DEVICE_PAGE0_PGAD_DID_MASK \ 1001 (MPI_FC_DEVICE_PGAD_ND_DID_MASK) 1002 #define MPI_FC_DEVICE_PAGE0_PGAD_BUS_MASK \ 1003 (MPI_FC_DEVICE_PGAD_BT_BUS_MASK) 1004 #define MPI_FC_DEVICE_PAGE0_PGAD_BUS_SHIFT \ 1005 (MPI_FC_DEVICE_PGAD_BT_BUS_SHIFT) 1006 #define MPI_FC_DEVICE_PAGE0_PGAD_TID_MASK \ 1007 (MPI_FC_DEVICE_PGAD_BT_TID_MASK) 1008 1009 /* 1010 * RAID Volume Config Pages 1011 */ 1012 typedef struct raid_vol0_phys_disk { 1013 uint16_t Reserved; 1014 uint8_t PhysDiskMap; 1015 uint8_t PhysDiskNum; 1016 } raid_vol0_phys_disk_t; 1017 1018 #define MPI_RAIDVOL0_PHYSDISK_PRIMARY 0x01 1019 #define MPI_RAIDVOL0_PHYSDISK_SECONDARY 0x02 1020 1021 typedef struct raid_vol0_status { 1022 uint8_t Flags; 1023 uint8_t State; 1024 uint16_t Reserved; 1025 } raid_vol0_status_t; 1026 1027 /* 1028 * RAID Volume Page 0 VolumeStatus defines 1029 */ 1030 #define MPI_RAIDVOL0_STATUS_FLAG_ENABLED 0x01 1031 #define MPI_RAIDVOL0_STATUS_FLAG_QUIESCED 0x02 1032 #define MPI_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS 0x04 1033 #define MPI_RAIDVOL0_STATUS_FLAG_VOLUME_INACTIVE 0x08 1034 1035 #define MPI_RAIDVOL0_STATUS_STATE_OPTIMAL 0x00 1036 #define MPI_RAIDVOL0_STATUS_STATE_DEGRADED 0x01 1037 #define MPI_RAIDVOL0_STATUS_STATE_FAILED 0x02 1038 #define MPI_RAIDVOL0_STATUS_STATE_MISSING 0x03 1039 1040 typedef struct raid_vol0_settings { 1041 uint16_t Settings; 1042 uint8_t HotSparePool; 1043 uint8_t Reserved; 1044 } raid_vol0_settings_t; 1045 1046 /* 1047 * RAID Volume Page 0 VolumeSettings defines 1048 */ 1049 #define MPI_RAIDVOL0_SETTING_WRITE_CACHING_ENABLE 0x0001 1050 #define MPI_RAIDVOL0_SETTING_OFFLINE_ON_SMART 0x0002 1051 #define MPI_RAIDVOL0_SETTING_AUTO_CONFIGURE 0x0004 1052 #define MPI_RAIDVOL0_SETTING_PRIORITY_RESYNC 0x0008 1053 #define MPI_RAIDVOL0_SETTING_USE_PRODUCT_ID_SUFFIX 0x0010 1054 #define MPI_RAIDVOL0_SETTING_USE_DEFAULTS 0x8000 1055 1056 /* 1057 * RAID Volume Page 0 HotSparePool defines, also used in RAID Physical Disk 1058 */ 1059 #define MPI_RAID_HOT_SPARE_POOL_0 0x01 1060 #define MPI_RAID_HOT_SPARE_POOL_1 0x02 1061 #define MPI_RAID_HOT_SPARE_POOL_2 0x04 1062 #define MPI_RAID_HOT_SPARE_POOL_3 0x08 1063 #define MPI_RAID_HOT_SPARE_POOL_4 0x10 1064 #define MPI_RAID_HOT_SPARE_POOL_5 0x20 1065 #define MPI_RAID_HOT_SPARE_POOL_6 0x40 1066 #define MPI_RAID_HOT_SPARE_POOL_7 0x80 1067 1068 /* 1069 * Host code (drivers, BIOS, utilities, etc.) should leave this 1070 * define set to one and check Header.PageLength at runtime. 1071 */ 1072 #ifndef MPI_RAID_VOL_PAGE_0_PHYSDISK_MAX 1073 #define MPI_RAID_VOL_PAGE_0_PHYSDISK_MAX 1 1074 #endif 1075 1076 typedef struct config_page_raid_vol_0 { 1077 config_page_header_t Header; 1078 uint8_t VolumeID; 1079 uint8_t VolumeBus; 1080 uint8_t VolumeIOC; 1081 uint8_t VolumeType; 1082 raid_vol0_status_t VolumeStatus; 1083 raid_vol0_settings_t VolumeSettings; 1084 uint32_t MaxLBA; 1085 uint32_t Reserved1; 1086 uint32_t StripeSize; 1087 uint32_t Reserved2; 1088 uint32_t Reserved3; 1089 uint8_t NumPhysDisks; 1090 uint8_t Reserved4; 1091 uint8_t ResyncRate; 1092 uint8_t Reserved5; 1093 raid_vol0_phys_disk_t PhysDisk[MPI_RAID_VOL_PAGE_0_PHYSDISK_MAX]; 1094 } config_page_raid_vol_0_t; 1095 1096 #define MPI_RAIDVOLPAGE0_PAGEVERSION 0x00 1097 1098 /* 1099 * RAID Physical Disk Config Pages 1100 */ 1101 typedef struct raid_phys_disk0_error_data { 1102 uint8_t ErrorCdbByte; 1103 uint8_t ErrorSenseKey; 1104 uint16_t Reserved; 1105 uint16_t ErrorCount; 1106 uint8_t ErrorASC; 1107 uint8_t ErrorASCQ; 1108 uint16_t SmartCount; 1109 uint8_t SmartASC; 1110 uint8_t SmartASCQ; 1111 } raid_phys_disk0_error_data_t; 1112 1113 typedef struct raid_phys_disk_inquiry_data { 1114 uint8_t VendorID[8]; 1115 uint8_t ProductID[16]; 1116 uint8_t ProductRevLevel[4]; 1117 uint8_t Info[32]; 1118 } raid_phys_disk0_inquiry_data_t; 1119 1120 typedef struct raid_phys_disk0_settings { 1121 uint8_t SepID; 1122 uint8_t SepBus; 1123 uint8_t HotSparePool; 1124 uint8_t PhysDiskSettings; 1125 } raid_phys_disk0_settings_t; 1126 1127 typedef struct raid_phys_disk0_status { 1128 uint8_t Flags; 1129 uint8_t State; 1130 uint16_t Reserved; 1131 } raid_phys_disk0_status_t; 1132 1133 /* 1134 * RAID Volume 2 IM Physical Disk DiskStatus flags 1135 */ 1136 #define MPI_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC 0x01 1137 #define MPI_PHYSDISK0_STATUS_FLAG_QUIESCED 0x02 1138 1139 #define MPI_PHYSDISK0_STATUS_ONLINE 0x00 1140 #define MPI_PHYSDISK0_STATUS_MISSING 0x01 1141 #define MPI_PHYSDISK0_STATUS_NOT_COMPATIBLE 0x02 1142 #define MPI_PHYSDISK0_STATUS_FAILED 0x03 1143 #define MPI_PHYSDISK0_STATUS_INITIALIZING 0x04 1144 #define MPI_PHYSDISK0_STATUS_OFFLINE_REQUESTED 0x05 1145 #define MPI_PHYSDISK0_STATUS_FAILED_REQUESTED 0x06 1146 #define MPI_PHYSDISK0_STATUS_OTHER_OFFLINE 0xFF 1147 1148 typedef struct config_page_raid_phys_disk_0 { 1149 config_page_header_t Header; 1150 uint8_t PhysDiskID; 1151 uint8_t PhysDiskBus; 1152 uint8_t PhysDiskIOC; 1153 uint8_t PhysDiskNum; 1154 raid_phys_disk0_settings_t PhysDiskSettings; 1155 uint32_t Reserved1; 1156 uint32_t Reserved2; 1157 uint32_t Reserved3; 1158 uint8_t DiskIdentifier[16]; 1159 raid_phys_disk0_inquiry_data_t InquiryData; 1160 raid_phys_disk0_status_t PhysDiskStatus; 1161 uint32_t MaxLBA; 1162 raid_phys_disk0_error_data_t ErrorData; 1163 } config_page_raid_phys_disk_0_t; 1164 1165 #define MPI_RAIDPHYSDISKPAGE0_PAGEVERSION 0x00 1166 1167 typedef struct raid_phys_disk1_path { 1168 uint8_t PhysDiskID; 1169 uint8_t PhysDiskBus; 1170 uint16_t Reserved1; 1171 uint64_t WWID; 1172 uint64_t OwnerWWID; 1173 uint8_t OwnerIdentifier; 1174 uint8_t Reserved2; 1175 uint16_t Flags; 1176 } raid_phys_disk1_path_t; 1177 1178 /* RAID Physical Disk Page 1 Flags field defines */ 1179 1180 #define MPI_RAID_PHYSDISK1_FLAG_BROKEN 0x0002 1181 #define MPI_RAID_PHYSDISK1_FLAG_INVALID 0x0001 1182 1183 #ifndef MPI_RAID_PHYS_DISK1_PATH_MAX 1184 #define MPI_RAID_PHYS_DISK1_PATH_MAX 1 1185 #endif 1186 1187 typedef struct config_page_raid_phys_disk_1 { 1188 config_page_header_t Header; 1189 uint8_t NumPhysDiskPaths; 1190 uint8_t PhysDiskNum; 1191 uint16_t Reserved2; 1192 uint32_t Reserved1; 1193 raid_phys_disk1_path_t Path[MPI_RAID_PHYS_DISK1_PATH_MAX]; 1194 } config_page_raid_phys_disk_1_t; 1195 1196 #define MPI_RAIDPHYSDISKPAGE1_PAGEVERSION 0x01 1197 /* 1198 * LAN Config Pages 1199 */ 1200 typedef struct config_page_lan_0 { 1201 config_page_header_t Header; 1202 uint16_t TxRxModes; 1203 uint16_t Reserved; 1204 uint32_t PacketPrePad; 1205 } config_page_lan_0_t; 1206 1207 #define MPI_LAN_PAGE0_PAGEVERSION 0x01 1208 1209 #define MPI_LAN_PAGE0_RETURN_LOOPBACK 0x0000 1210 #define MPI_LAN_PAGE0_SUPPRESS_LOOPBACK 0x0001 1211 #define MPI_LAN_PAGE0_LOOPBACK_MASK 0x0001 1212 1213 typedef struct config_page_lan_1 { 1214 config_page_header_t Header; 1215 uint16_t Reserved; 1216 uint8_t CurrentDeviceState; 1217 uint8_t Reserved1; 1218 uint32_t MinPacketSize; 1219 uint32_t MaxPacketSize; 1220 uint32_t HardwareAddressLow; 1221 uint32_t HardwareAddressHigh; 1222 uint32_t MaxWireSpeedLow; 1223 uint32_t MaxWireSpeedHigh; 1224 uint32_t BucketsRemaining; 1225 uint32_t MaxReplySize; 1226 uint32_t NegWireSpeedLow; 1227 uint32_t NegWireSpeedHigh; 1228 } config_page_lan_1_t; 1229 1230 #define MPI_LAN_PAGE1_PAGEVERSION 0x03 1231 1232 #define MPI_LAN_PAGE1_DEV_STATE_RESET 0x00 1233 #define MPI_LAN_PAGE1_DEV_STATE_OPERATIONAL 0x01 1234 1235 /* 1236 * Inband config pages 1237 */ 1238 typedef struct config_page_inband_0 { 1239 config_page_header_t Header; 1240 mpi_version_format_t InbandVersion; 1241 uint16_t MaximumBuffers; 1242 uint16_t Reserved1; 1243 } config_page_inband_0_t; 1244 1245 /* 1246 * SAS IO Unit config pages 1247 */ 1248 typedef struct mpi_sas_io_unit0_phy_data { 1249 uint8_t Port; 1250 uint8_t PortFlags; 1251 uint8_t PhyFlags; 1252 uint8_t NegotiatedLinkRate; 1253 uint32_t ControllerPhyDeviceInfo; 1254 uint16_t AttachedDeviceHandle; 1255 uint16_t ControllerDevHandle; 1256 uint32_t Reserved2; 1257 } mpi_sas_io_unit0_phy_data_t; 1258 1259 /* 1260 * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1261 * one and check Header.PageLength at runtime. 1262 */ 1263 #ifndef MPI_SAS_IOUNIT0_PHY_MAX 1264 #define MPI_SAS_IOUNIT0_PHY_MAX 1 1265 #endif 1266 1267 typedef struct config_page_sas_io_unit_0 { 1268 config_extended_page_header_t Header; 1269 uint32_t Reserved1; 1270 uint8_t NumPhys; 1271 uint8_t Reserved2; 1272 uint16_t Reserved3; 1273 mpi_sas_io_unit0_phy_data_t PhyData[MPI_SAS_IOUNIT0_PHY_MAX]; 1274 } config_page_sas_io_unit_0_t; 1275 1276 #define MPI_SASIOUNITPAGE0_PAGEVERSION 0x00 1277 1278 #define MPI_SAS_IOUNIT0_PORT_FLAGS_DISCOVERY_IN_PROGRESS 0x08 1279 #define MPI_SAS_IOUNIT0_PORT_FLAGS_0_TARGET_IOC_NUM 0x00 1280 #define MPI_SAS_IOUNIT0_PORT_FLAGS_1_TARGET_IOC_NUM 0x04 1281 #define MPI_SAS_IOUNIT0_PORT_FLAGS_WAIT_FOR_PORTENABLE 0x02 1282 #define MPI_SAS_IOUNIT0_PORT_FLAGS_AUTO_PORT_CONFIG 0x01 1283 1284 #define MPI_SAS_IOUNIT0_PHY_FLAGS_PHY_DISABLED 0x04 1285 #define MPI_SAS_IOUNIT0_PHY_FLAGS_TX_INVERT 0x02 1286 #define MPI_SAS_IOUNIT0_PHY_FLAGS_RX_INVERT 0x01 1287 1288 #define MPI_SAS_IOUNIT0_RATE_UNKNOWN 0x00 1289 #define MPI_SAS_IOUNIT0_RATE_PHY_DISABLED 0x01 1290 #define MPI_SAS_IOUNIT0_RATE_FAILED_SPEED_NEGOTIATION 0x02 1291 #define MPI_SAS_IOUNIT0_RATE_SATA_OOB_COMPLETE 0x03 1292 #define MPI_SAS_IOUNIT0_RATE_1_5 0x08 1293 #define MPI_SAS_IOUNIT0_RATE_3_0 0x09 1294 1295 typedef struct mpi_sas_io_unit1_phy_data { 1296 uint8_t Port; 1297 uint8_t PortFlags; 1298 uint8_t PhyFlags; 1299 uint8_t MaxMinLinkRate; 1300 uint32_t ControllerPhyDeviceInfo; 1301 uint32_t Reserved1; 1302 } mpi_sas_io_unit1_phy_data_t; 1303 1304 /* 1305 * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1306 * one and check Header.PageLength at runtime. 1307 */ 1308 #ifndef MPI_SAS_IOUNIT1_PHY_MAX 1309 #define MPI_SAS_IOUNIT1_PHY_MAX 1 1310 #endif 1311 1312 typedef struct config_page_sas_io_unit_1 { 1313 config_extended_page_header_t Header; 1314 uint16_t ControlFlags; 1315 uint16_t MaxNumSATATargets; 1316 uint16_t AdditionalControlFlags; 1317 uint16_t Reserved1; 1318 uint8_t NumPhys; 1319 uint8_t SATAMaxQDepth; 1320 uint8_t ReportMissingDeviceDelay; 1321 uint8_t IODeviceMissingDelay; 1322 mpi_sas_io_unit1_phy_data_t PhyData[MPI_SAS_IOUNIT1_PHY_MAX]; 1323 } config_page_sas_io_unit_1_t; 1324 1325 #define MPI_SASIOUNITPAGE1_PAGEVERSION 0x00 1326 1327 #define MPI_SAS_IOUNIT1_PORT_FLAGS_0_TARGET_IOC_NUM 0x00 1328 #define MPI_SAS_IOUNIT1_PORT_FLAGS_1_TARGET_IOC_NUM 0x04 1329 #define MPI_SAS_IOUNIT1_PORT_FLAGS_WAIT_FOR_PORTENABLE 0x02 1330 #define MPI_SAS_IOUNIT1_PORT_FLAGS_AUTO_PORT_CONFIG 0x01 1331 1332 #define MPI_SAS_IOUNIT1_PHY_FLAGS_PHY_DISABLE 0x04 1333 #define MPI_SAS_IOUNIT1_PHY_FLAGS_TX_INVERT 0x02 1334 #define MPI_SAS_IOUNIT1_PHY_FLAGS_RX_INVERT 0x01 1335 1336 #define MPI_SAS_IOUNIT1_MAX_RATE_MASK 0xF0 1337 #define MPI_SAS_IOUNIT1_MAX_RATE_1_5 0x80 1338 #define MPI_SAS_IOUNIT1_MAX_RATE_3_0 0x90 1339 #define MPI_SAS_IOUNIT1_MIN_RATE_MASK 0x0F 1340 #define MPI_SAS_IOUNIT1_MIN_RATE_1_5 0x08 1341 #define MPI_SAS_IOUNIT1_MIN_RATE_3_0 0x09 1342 1343 typedef struct config_page_sas_io_unit_2 { 1344 config_extended_page_header_t Header; 1345 uint32_t Reserved1; 1346 uint16_t MaxPersistentIDs; 1347 uint16_t NumPersistentIDsUsed; 1348 uint8_t Status; 1349 uint8_t Flags; 1350 uint16_t Reserved2; 1351 } config_page_sas_io_unit_2_t; 1352 1353 #define MPI_SASIOUNITPAGE2_PAGEVERSION 0x00 1354 1355 #define MPI_SAS_IOUNIT2_STATUS_DISABLED_PERSISTENT_MAPPINGS 0x02 1356 #define MPI_SAS_IOUNIT2_STATUS_FULL_PERSISTENT_MAPPINGS 0x01 1357 1358 #define MPI_SAS_IOUNIT2_FLAGS_DISABLE_PERSISTENT_MAPPINGS 0x01 1359 1360 #define MPI_SAS_IOUNIT2_FLAGS_MASK_PHYS_MAP_MODE 0x0E 1361 #define MPI_SAS_IOUNIT2_FLAGS_SHIFT_PHYS_MAP_MODE 1 1362 #define MPI_SAS_IOUNIT2_FLAGS_NO_PHYS_MAP 0x00 1363 #define MPI_SAS_IOUNIT2_FLAGS_DIRECT_ATTACH_PHYS_MAP 0x01 1364 #define MPI_SAS_IOUNIT2_FLAGS_ENCLOSURE_SLOT_PHYS_MAP 0x02 1365 #define MPI_SAS_IOUNIT2_FLAGS_HOST_ASSIGNED_PHYS_MAP 0x07 1366 1367 typedef struct config_page_sas_io_unit_3 { 1368 config_extended_page_header_t Header; 1369 uint32_t Reserved1; 1370 uint32_t MaxInvalidDwordCount; 1371 uint32_t InvalidDwordCountTime; 1372 uint32_t MaxRunningDisparityErrorCount; 1373 uint32_t RunningDisparityErrorTime; 1374 uint32_t MaxLossDwordSynchCount; 1375 uint32_t LossDwordSynchCountTime; 1376 uint32_t MaxPhyResetProblemCount; 1377 uint32_t PhyResetProblemTime; 1378 } config_page_sas_io_unit_3_t; 1379 1380 #define MPI_SASIOUNITPAGE3_PAGEVERSION 0x00 1381 1382 typedef struct config_page_sas_expander_0 { 1383 config_extended_page_header_t Header; 1384 uint8_t PhysicalPort; 1385 uint8_t Reserved1; 1386 uint16_t EnclosureHandle; 1387 uint64_t SASAddress; 1388 uint32_t Reserved2; 1389 uint16_t DevHandle; 1390 uint16_t ParentDevHandle; 1391 uint16_t ExpanderChangeCount; 1392 uint16_t ExpanderRouteIndexes; 1393 uint8_t NumPhys; 1394 uint8_t SASLevel; 1395 uint8_t Flags; 1396 uint8_t Reserved3; 1397 } config_page_sas_expander_0_t; 1398 1399 #define MPI_SASEXPANDER0_PAGEVERSION 0x00 1400 1401 #define MPI_SAS_EXPANDER0_FLAGS_ROUTE_TABLE_CONFIG 0x02 1402 #define MPI_SAS_EXPANDER0_FLAGS_CONFIG_IN_PROGRESS 0x01 1403 1404 1405 typedef struct config_page_sas_expander_1 { 1406 config_extended_page_header_t Header; 1407 uint32_t Reserved1; 1408 uint8_t NumPhys; 1409 uint8_t Phy; 1410 uint16_t Reserved2; 1411 uint8_t ProgrammedLinkRate; 1412 uint8_t HwLinkRate; 1413 uint16_t AttachedDevHandle; 1414 uint32_t PhyInfo; 1415 uint32_t AttachedDeviceInfo; 1416 uint16_t OwnerDevHandle; 1417 uint8_t ChangeCount; 1418 uint8_t Reserved3; 1419 uint8_t PhyIdentifier; 1420 uint8_t AttachedPhyIdentifier; 1421 uint8_t NumTableEntriesProg; 1422 uint8_t DiscoveryInfo; 1423 uint32_t Reserved4; 1424 } config_page_sas_expander_1_t; 1425 1426 #define MPI_SASEXPANDER1_PAGEVERSION 0x00 1427 1428 /* use MPI_SAS_PHY0_PRATE_ defines for ProgrammedLinkRate */ 1429 1430 /* use MPI_SAS_PHY0_HWRATE_ defines for HwLinkRate */ 1431 1432 /* use MPI_SAS_PHY0_PHYINFO_ defines for PhyInfo */ 1433 1434 /* see mpi_sas.h for values for SAS Expander Page 1 AttachedDeviceInfo values */ 1435 1436 /* values for SAS Expander Page 1 DiscoveryInfo field */ 1437 #define MPI_SAS_EXPANDER1_DISCINFO_LINK_STATUS_CHANGE 0x02 1438 #define MPI_SAS_EXPANDER1_DISCINFO_NO_ROUTING_ENTRIES 0x01 1439 1440 typedef struct config_page_sas_device_0 { 1441 config_extended_page_header_t Header; 1442 uint16_t Slot; 1443 uint16_t EnclosureHandle; 1444 uint64_t SASAddress; 1445 uint16_t ParentDevHandle; 1446 uint8_t PhyNum; 1447 uint8_t AccessStatus; 1448 uint16_t DevHandle; 1449 uint8_t TargetID; 1450 uint8_t Bus; 1451 uint32_t DeviceInfo; 1452 uint16_t Flags; 1453 uint8_t PhysicalPort; 1454 uint8_t Reserved2; 1455 } config_page_sas_device_0_t; 1456 1457 #define MPI_SASDEVICE0_PAGEVERSION 0x00 1458 1459 #define MPI_SAS_DEVICE0_FLAGS_MAPPING_PERSISTENT 0x04 1460 #define MPI_SAS_DEVICE0_FLAGS_DEVICE_MAPPED 0x02 1461 #define MPI_SAS_DEVICE0_FLAGS_DEVICE_PRESENT 0x01 1462 1463 typedef struct config_page_sas_device_1 { 1464 config_extended_page_header_t Header; 1465 uint32_t Reserved1; 1466 uint64_t SASAddress; 1467 uint32_t Reserved2; 1468 uint16_t DevHandle; 1469 uint8_t TargetID; 1470 uint8_t Bus; 1471 uint8_t InitialRegDeviceFIS[20]; 1472 } config_page_sas_device_1_t; 1473 1474 #define MPI_SASDEVICE1_PAGEVERSION 0x00 1475 1476 typedef struct config_page_sas_phy_0 { 1477 config_extended_page_header_t Header; 1478 uint32_t Reserved1; 1479 uint64_t SASAddress; 1480 uint16_t AttachedDevHandle; 1481 uint8_t AttachedPhyIdentifier; 1482 uint8_t Reserved2; 1483 uint32_t AttachedDeviceInfo; 1484 uint8_t ProgrammedLinkRate; 1485 uint8_t HwLinkRate; 1486 uint8_t ChangeCount; 1487 uint8_t Reserved3; 1488 uint32_t PhyInfo; 1489 } config_page_sas_phy_0_t; 1490 1491 #define MPI_SASPHY0_PAGEVERSION 0x00 1492 1493 #define MPI_SAS_PHY0_PRATE_MAX_RATE_MASK 0xF0 1494 #define MPI_SAS_PHY0_PRATE_MAX_RATE_NOT_PROGRAMMABLE 0x00 1495 #define MPI_SAS_PHY0_PRATE_MAX_RATE_1_5 0x80 1496 #define MPI_SAS_PHY0_PRATE_MAX_RATE_3_0 0x90 1497 #define MPI_SAS_PHY0_PRATE_MIN_RATE_MASK 0x0F 1498 #define MPI_SAS_PHY0_PRATE_MIN_RATE_NOT_PROGRAMMABLE 0x00 1499 #define MPI_SAS_PHY0_PRATE_MIN_RATE_1_5 0x08 1500 #define MPI_SAS_PHY0_PRATE_MIN_RATE_3_0 0x09 1501 1502 #define MPI_SAS_PHY0_HWRATE_MAX_RATE_MASK 0xF0 1503 #define MPI_SAS_PHY0_HWRATE_MAX_RATE_1_5 0x80 1504 #define MPI_SAS_PHY0_HWRATE_MAX_RATE_3_0 0x90 1505 #define MPI_SAS_PHY0_HWRATE_MIN_RATE_MASK 0x0F 1506 #define MPI_SAS_PHY0_HWRATE_MIN_RATE_1_5 0x08 1507 #define MPI_SAS_PHY0_HWRATE_MIN_RATE_3_0 0x09 1508 1509 #define MPI_SAS_PHY0_PHYINFO_SATA_PORT_ACTIVE 0x00004000 1510 #define MPI_SAS_PHY0_PHYINFO_SATA_PORT_SELECTOR 0x00002000 1511 #define MPI_SAS_PHY0_PHYINFO_VIRTUAL_PHY 0x00001000 1512 1513 #define MPI_SAS_PHY0_PHYINFO_MASK_PARTIAL_PATHWAY_TIME 0x00000F00 1514 #define MPI_SAS_PHY0_PHYINFO_SHIFT_PARTIAL_PATHWAY_TIME 8 1515 1516 #define MPI_SAS_PHY0_PHYINFO_MASK_ROUTING_ATTRIBUTE 0x000000F0 1517 #define MPI_SAS_PHY0_PHYINFO_DIRECT_ROUTING 0x00000000 1518 #define MPI_SAS_PHY0_PHYINFO_SUBTRACTIVE_ROUTING 0x00000010 1519 #define MPI_SAS_PHY0_PHYINFO_TABLE_ROUTING 0x00000020 1520 1521 #define MPI_SAS_PHY0_DEVINFO_SATA_DEVICE 0x00000080 1522 1523 #define MPI_SAS_PHY0_PHYINFO_MASK_LINK_RATE 0x0000000F 1524 #define MPI_SAS_PHY0_PHYINFO_UNKNOWN_LINK_RATE 0x00000000 1525 #define MPI_SAS_PHY0_PHYINFO_PHY_DISABLED 0x00000001 1526 #define MPI_SAS_PHY0_PHYINFO_NEGOTIATION_FAILED 0x00000002 1527 #define MPI_SAS_PHY0_PHYINFO_SATA_OOB_COMPLETE 0x00000003 1528 #define MPI_SAS_PHY0_PHYINFO_RATE_1_5 0x00000008 1529 #define MPI_SAS_PHY0_PHYINFO_RATE_3_0 0x00000009 1530 1531 typedef struct config_page_sas_phy_1 { 1532 config_extended_page_header_t Header; 1533 uint32_t Reserved1; 1534 uint32_t InvalidDwordCount; 1535 uint32_t RunningDisparityErrorCount; 1536 uint32_t LossDwordSynchCount; 1537 uint32_t PhyResetProblemCount; 1538 } config_page_sas_phy_1_t; 1539 1540 #define MPI_SASPHY1_PAGEVERSION 0x00 1541 1542 #ifdef __cplusplus 1543 } 1544 #endif 1545 1546 #endif /* _SYS_MPI_CNFG_H */ 1547