1 /************************************************************************** 2 3 Module Name: 4 5 CSMISAS.H 6 7 8 Abstract: 9 10 This file contains constants and data structure definitions used by drivers 11 that support the Common Storage Management Interface specification for 12 SAS or SATA in either the Windows or Linux. 13 14 This should be considered as a reference implementation only. Changes may 15 be necessary to accommodate a specific build environment or target OS. 16 17 Revision History: 18 19 001 SEF 8/12/03 Initial release. 20 002 SEF 8/20/03 Cleanup to match documentation. 21 003 SEF 9/12/03 Additional cleanup, created combined header 22 004 SEF 9/23/03 Changed base types to match linux defaults 23 Added RAID signature 24 Added bControllerFlags to CSMI_SAS_CNTLR_CONFIG 25 Changed CSMI_SAS_BEGIN_PACK to 8 for common structures 26 Fixed other typos identified in first compilation test 27 005 SEF 10/03/03 Additions to match first version of CSMI document 28 006 SEF 10/14/03 Fixed typedef struct _CSMI_SAS_SMP_PASSTHRU_BUFFER 29 Added defines for bConnectionRate 30 007 SEF 10/15/03 Added Firmware Download Control Code and support 31 Added CSMI revision support 32 008 SEF 10/30/03 No functional change, just updated version to track 33 spec changes 34 009 SEF 12/09/03 No functional change, just updated version to track 35 spec changes 36 010 SEF 3/11/04 Fixed typedef struct CSMI_SAS_RAID_DRIVES to include the 37 bFirmware member that is defined in the spec, but 38 was missing in this file, 39 added CC_CSMI_SAS_TASK_MANAGEMENT 40 011 SEF 4/02/04 No functional change, added comment line before 41 CC_CSMI_SAS_TASK_MANAGEMENT 42 012 SEF 4/16/04 Added IOControllerNumber to linux header, 43 Modified linux control codes to have upper word of 44 0xCC77.... to indicate CSMI version 77 45 Added bSignalClass to CC_CSMI_SET_PHY_INFO 46 Added CC_CSMI_SAS_PHY_CONTROL support 47 013 SEF 5/14/04 Added CC_CSMI_SAS_GET_CONNECTOR_INFO support 48 014 SEF 5/24/04 No functional change, just updated version to track spec 49 changes 50 015 SEF 6/16/04 changed bPinout to uPinout to reflect proper size, 51 changed width of bLocation defines to reflect size 52 016 SEF 6/17/04 changed bLengthOfControls in CSMI_SAS_PHY_CONTROL 53 to be proper size 54 017 SEF 9/17/04 added CSMI_SAS_SATA_PORT_SELECTOR, 55 CSMI_SAS_LINK_VIRTUAL, CSMI_SAS_CON_NOT_PRESENT, and 56 CSMI_SAS_CON_NOT_CONNECTED 57 018 SEF 9/20/04 added CSMI_SAS_PHY_USER_PATTERN, 58 changed definition of CSMI_SAS_PHY_FIXED_PATTERN to not 59 conflict with activate definition 60 019 SEF 12/06/04 added CSMI_SAS_GET_LOCATION 61 added bSSPStatus to CSMI_SAS_SSP_PASSTHRU_STATUS 62 structure 63 020 SEF 5/25/05 added CSMI_SAS_PHY_VIRTUAL_SMP, and changes to 64 CSMI_SAS_GET_LOCATION 65 021 SEF 11/03/05 added new RAID creation functionality 66 022 SEF 2/01/06 corrected typo bNegotitiatedLInkRate 67 Added two more RAID_TYPES, 7 and 8 68 023 SEF 4/04/06 added CSMI_RAID_TYPE_1E 69 changed structures that contained surface scan 70 to priority approach rather than time, causes 71 0.89 to incompatible with 0.87, so a version 72 check is necessary when interpreting the 73 raid structures 74 Added netware section 75 024 DRG 5/22/06 Added uFailureCode to CSMI_SAS_RAID_CONFIG and 76 CSMI_SAS_RAID_FEATURES 77 Changed __u64 fields to high and low __u32 fields in 78 order to avoid backward compatibility issues with 79 packing and alignment. 80 Fixed alignment problem in CSMI_SAS_RAID_DRIVES. 81 Added CSMI_SAS_CNTLR_SMART_ARRAY to uControllerFlags 82 Reassigned the value of CSMI_SAS_CNTLR_RAID_CFG_SUPPORT 83 to avoid a conflict. 84 85 **************************************************************************/ 86 87 #ifndef _CSMI_SAS_H_ 88 #define _CSMI_SAS_H_ 89 90 // CSMI Specification Revision, the intent is that all versions of the 91 // specification will be backward compatible after the 1.00 release. 92 // Major revision number, corresponds to xxxx. of CSMI specification 93 // Minor revision number, corresponds to .xxxx of CSMI specification 94 #define CSMI_MAJOR_REVISION 0 95 #define CSMI_MINOR_REVISION 90 96 97 /*************************************************************************/ 98 /* PATCHES FOR TYPOS */ 99 /*************************************************************************/ 100 101 #define bNegotitiatedLInkRate bNegotiatedLinkRate 102 103 /*************************************************************************/ 104 /* TARGET OS LINUX SPECIFIC CODE */ 105 /*************************************************************************/ 106 107 // EDM #ifdef _linux 108 #ifdef __KERNEL__ 109 110 // Linux base types 111 112 #include <linux/types.h> 113 114 #define __i8 char 115 116 // pack definition 117 118 // EDM #define CSMI_SAS_BEGIN_PACK(x) pack(x) 119 // EDM #define CSMI_SAS_END_PACK pack() 120 121 // IOCTL Control Codes 122 // (IoctlHeader.ControlCode) 123 124 // Control Codes prior to 0.77 125 126 // Control Codes requiring CSMI_ALL_SIGNATURE 127 128 // #define CC_CSMI_SAS_GET_DRIVER_INFO 0x12345678 129 // #define CC_CSMI_SAS_GET_CNTLR_CONFIG 0x23456781 130 // #define CC_CSMI_SAS_GET_CNTLR_STATUS 0x34567812 131 // #define CC_CSMI_SAS_FIRMWARE_DOWNLOAD 0x92345678 132 133 // Control Codes requiring CSMI_RAID_SIGNATURE 134 135 // #define CC_CSMI_SAS_GET_RAID_INFO 0x45678123 136 // #define CC_CSMI_SAS_GET_RAID_CONFIG 0x56781234 137 138 // Control Codes requiring CSMI_SAS_SIGNATURE 139 140 // #define CC_CSMI_SAS_GET_PHY_INFO 0x67812345 141 // #define CC_CSMI_SAS_SET_PHY_INFO 0x78123456 142 // #define CC_CSMI_SAS_GET_LINK_ERRORS 0x81234567 143 // #define CC_CSMI_SAS_SMP_PASSTHRU 0xA1234567 144 // #define CC_CSMI_SAS_SSP_PASSTHRU 0xB1234567 145 // #define CC_CSMI_SAS_STP_PASSTHRU 0xC1234567 146 // #define CC_CSMI_SAS_GET_SATA_SIGNATURE 0xD1234567 147 // #define CC_CSMI_SAS_GET_SCSI_ADDRESS 0xE1234567 148 // #define CC_CSMI_SAS_GET_DEVICE_ADDRESS 0xF1234567 149 // #define CC_CSMI_SAS_TASK_MANAGEMENT 0xA2345678 150 151 // Control Codes for 0.77 and later 152 153 // Control Codes requiring CSMI_ALL_SIGNATURE 154 155 #define CC_CSMI_SAS_GET_DRIVER_INFO 0xCC770001 156 #define CC_CSMI_SAS_GET_CNTLR_CONFIG 0xCC770002 157 #define CC_CSMI_SAS_GET_CNTLR_STATUS 0xCC770003 158 #define CC_CSMI_SAS_FIRMWARE_DOWNLOAD 0xCC770004 159 160 // Control Codes requiring CSMI_RAID_SIGNATURE 161 162 #define CC_CSMI_SAS_GET_RAID_INFO 0xCC77000A 163 #define CC_CSMI_SAS_GET_RAID_CONFIG 0xCC77000B 164 #define CC_CSMI_SAS_GET_RAID_FEATURES 0xCC77000C 165 #define CC_CSMI_SAS_SET_RAID_CONTROL 0xCC77000D 166 #define CC_CSMI_SAS_GET_RAID_ELEMENT 0xCC77000E 167 #define CC_CSMI_SAS_SET_RAID_OPERATION 0xCC77000F 168 169 // Control Codes requiring CSMI_SAS_SIGNATURE 170 171 #define CC_CSMI_SAS_GET_PHY_INFO 0xCC770014 172 #define CC_CSMI_SAS_SET_PHY_INFO 0xCC770015 173 #define CC_CSMI_SAS_GET_LINK_ERRORS 0xCC770016 174 #define CC_CSMI_SAS_SMP_PASSTHRU 0xCC770017 175 #define CC_CSMI_SAS_SSP_PASSTHRU 0xCC770018 176 #define CC_CSMI_SAS_STP_PASSTHRU 0xCC770019 177 #define CC_CSMI_SAS_GET_SATA_SIGNATURE 0xCC770020 178 #define CC_CSMI_SAS_GET_SCSI_ADDRESS 0xCC770021 179 #define CC_CSMI_SAS_GET_DEVICE_ADDRESS 0xCC770022 180 #define CC_CSMI_SAS_TASK_MANAGEMENT 0xCC770023 181 #define CC_CSMI_SAS_GET_CONNECTOR_INFO 0xCC770024 182 #define CC_CSMI_SAS_GET_LOCATION 0xCC770025 183 184 185 // Control Codes requiring CSMI_PHY_SIGNATURE 186 187 #define CC_CSMI_SAS_PHY_CONTROL 0xCC77003C 188 189 // EDM #pragma CSMI_SAS_BEGIN_PACK(8) 190 #pragma pack(8) 191 192 // IOCTL_HEADER 193 typedef struct _IOCTL_HEADER { 194 __u32 IOControllerNumber; 195 __u32 Length; 196 __u32 ReturnCode; 197 __u32 Timeout; 198 __u16 Direction; 199 } IOCTL_HEADER, 200 *PIOCTL_HEADER; 201 202 // EDM #pragma CSMI_SAS_END_PACK 203 #pragma pack() 204 205 #endif 206 207 /*************************************************************************/ 208 /* TARGET OS WINDOWS SPECIFIC CODE */ 209 /*************************************************************************/ 210 211 #ifdef _WIN32 212 213 // windows IOCTL definitions 214 215 #if 0 // <ntddscsi.h> and CSMI_*_PACK are no longer needed 216 217 #ifndef _NTDDSCSIH_ 218 #include <ntddscsi.h> 219 #endif 220 221 // pack definition 222 223 #if defined _MSC_VER 224 #define CSMI_SAS_BEGIN_PACK(x) pack(push,x) 225 #define CSMI_SAS_END_PACK pack(pop) 226 #elif defined __BORLANDC__ 227 #define CSMI_SAS_BEGIN_PACK(x) option -a##x 228 #define CSMI_SAS_END_PACK option -a. 229 #else 230 #error "CSMISAS.H - Must externally define a pack compiler designator." 231 #endif 232 233 #endif // #if 0 234 235 // base types 236 237 #define __u8 unsigned char 238 #define __u16 unsigned short 239 #ifndef __LP64__ // ILP32 (32-bit), LLP64 (64-bit MSVC, MinGW) 240 #define __u32 unsigned long 241 #else // LP64 (64-bit Cygwin) 242 #define __u32 unsigned int 243 #endif 244 #define __u64 unsigned __int64 245 246 #define __i8 char 247 248 // IOCTL Control Codes 249 // (IoctlHeader.ControlCode) 250 251 // Control Codes requiring CSMI_ALL_SIGNATURE 252 253 #define CC_CSMI_SAS_GET_DRIVER_INFO 1 254 #define CC_CSMI_SAS_GET_CNTLR_CONFIG 2 255 #define CC_CSMI_SAS_GET_CNTLR_STATUS 3 256 #define CC_CSMI_SAS_FIRMWARE_DOWNLOAD 4 257 258 // Control Codes requiring CSMI_RAID_SIGNATURE 259 260 #define CC_CSMI_SAS_GET_RAID_INFO 10 261 #define CC_CSMI_SAS_GET_RAID_CONFIG 11 262 #define CC_CSMI_SAS_GET_RAID_FEATURES 12 263 #define CC_CSMI_SAS_SET_RAID_CONTROL 13 264 #define CC_CSMI_SAS_GET_RAID_ELEMENT 14 265 #define CC_CSMI_SAS_SET_RAID_OPERATION 15 266 267 // Control Codes requiring CSMI_SAS_SIGNATURE 268 269 #define CC_CSMI_SAS_GET_PHY_INFO 20 270 #define CC_CSMI_SAS_SET_PHY_INFO 21 271 #define CC_CSMI_SAS_GET_LINK_ERRORS 22 272 #define CC_CSMI_SAS_SMP_PASSTHRU 23 273 #define CC_CSMI_SAS_SSP_PASSTHRU 24 274 #define CC_CSMI_SAS_STP_PASSTHRU 25 275 #define CC_CSMI_SAS_GET_SATA_SIGNATURE 26 276 #define CC_CSMI_SAS_GET_SCSI_ADDRESS 27 277 #define CC_CSMI_SAS_GET_DEVICE_ADDRESS 28 278 #define CC_CSMI_SAS_TASK_MANAGEMENT 29 279 #define CC_CSMI_SAS_GET_CONNECTOR_INFO 30 280 #define CC_CSMI_SAS_GET_LOCATION 31 281 282 // Control Codes requiring CSMI_PHY_SIGNATURE 283 284 #define CC_CSMI_SAS_PHY_CONTROL 60 285 286 #define IOCTL_HEADER SRB_IO_CONTROL 287 #define PIOCTL_HEADER PSRB_IO_CONTROL 288 289 #endif 290 291 /*************************************************************************/ 292 /* TARGET OS NETWARE SPECIFIC CODE */ 293 /*************************************************************************/ 294 295 #ifdef _NETWARE 296 297 // NetWare IOCTL definitions 298 299 #define CSMI_SAS_BEGIN_PACK(x) pack(x) 300 #define CSMI_SAS_END_PACK pack() 301 302 #ifndef LONG 303 typedef unsigned long LONG; 304 #endif 305 306 #ifndef WORD 307 typedef unsigned short WORD; 308 #endif 309 310 #ifndef BYTE 311 typedef unsigned char BYTE; 312 #endif 313 314 /* Need to have these definitions for Netware */ 315 #define __u8 unsigned char 316 #define __u16 unsigned short 317 #define __u32 unsigned long 318 #define __u64 unsigned __int64 319 320 #define __i8 char 321 322 323 // EDM #pragma CSMI_SAS_BEGIN_PACK(8) 324 #pragma pack(8) 325 326 // IOCTL_HEADER 327 typedef struct _IOCTL_HEADER { 328 __u32 Length; 329 __u32 ReturnCode; 330 } IOCTL_HEADER, 331 *PIOCTL_HEADER; 332 333 // EDM #pragma CSMI_SAS_END_PACK 334 #pragma pack() 335 336 // IOCTL Control Codes 337 // (IoctlHeader.ControlCode) 338 339 // Control Codes requiring CSMI_ALL_SIGNATURE 340 341 #define CC_CSMI_SAS_GET_DRIVER_INFO 0x01FF0001 342 #define CC_CSMI_SAS_GET_CNTLR_CONFIG 0x01FF0002 343 #define CC_CSMI_SAS_GET_CNTLR_STATUS 0x01FF0003 344 #define CC_CSMI_SAS_FIRMWARE_DOWNLOAD 0x01FF0004 345 346 // Control Codes requiring CSMI_RAID_SIGNATURE 347 348 #define CC_CSMI_SAS_GET_RAID_INFO 0x01FF000A 349 #define CC_CSMI_SAS_GET_RAID_CONFIG 0x01FF000B 350 #define CC_CSMI_SAS_GET_RAID_FEATURES 0x01FF000C 351 #define CC_CSMI_SAS_SET_RAID_CONTROL 0x01FF000D 352 #define CC_CSMI_SAS_GET_RAID_ELEMENT 0x01FF000E 353 #define CC_CSMI_SAS_SET_RAID_OPERATION 0x01FF000F 354 355 // Control Codes requiring CSMI_SAS_SIGNATURE 356 357 #define CC_CSMI_SAS_GET_PHY_INFO 0x01FF0014 358 #define CC_CSMI_SAS_SET_PHY_INFO 0x01FF0015 359 #define CC_CSMI_SAS_GET_LINK_ERRORS 0x01FF0016 360 #define CC_CSMI_SAS_SMP_PASSTHRU 0x01FF0017 361 #define CC_CSMI_SAS_SSP_PASSTHRU 0x01FF0018 362 #define CC_CSMI_SAS_STP_PASSTHRU 0x01FF0019 363 #define CC_CSMI_SAS_GET_SATA_SIGNATURE 0x01FF001A 364 #define CC_CSMI_SAS_GET_SCSI_ADDRESS 0x01FF001B 365 #define CC_CSMI_SAS_GET_DEVICE_ADDRESS 0x01FF001C 366 #define CC_CSMI_SAS_TASK_MANAGEMENT 0x01FF001D 367 #define CC_CSMI_SAS_GET_CONNECTOR_INFO 0x01FF001E 368 #define CC_CSMI_SAS_GET_LOCATION 0x01FF001F 369 370 // Control Codes requiring CSMI_PHY_SIGNATURE 371 372 #define CC_CSMI_SAS_PHY_CONTROL 60 373 374 #endif 375 376 /*************************************************************************/ 377 /* TARGET OS NOT DEFINED ERROR */ 378 /*************************************************************************/ 379 380 // EDM 381 //#if (!_WIN32 && !_linux && !_NETWARE) 382 // #error "Unknown target OS." 383 //#endif 384 385 /*************************************************************************/ 386 /* OS INDEPENDENT CODE */ 387 /*************************************************************************/ 388 389 /* * * * * * * * * * Class Independent IOCTL Constants * * * * * * * * * */ 390 391 // Return codes for all IOCTL's regardless of class 392 // (IoctlHeader.ReturnCode) 393 394 #define CSMI_SAS_STATUS_SUCCESS 0 395 #define CSMI_SAS_STATUS_FAILED 1 396 #define CSMI_SAS_STATUS_BAD_CNTL_CODE 2 397 #define CSMI_SAS_STATUS_INVALID_PARAMETER 3 398 #define CSMI_SAS_STATUS_WRITE_ATTEMPTED 4 399 400 // Signature value 401 // (IoctlHeader.Signature) 402 403 #define CSMI_ALL_SIGNATURE "CSMIALL" 404 405 // Timeout value default of 60 seconds 406 // (IoctlHeader.Timeout) 407 408 #define CSMI_ALL_TIMEOUT 60 409 410 // Direction values for data flow on this IOCTL 411 // (IoctlHeader.Direction, Linux only) 412 #define CSMI_SAS_DATA_READ 0 413 #define CSMI_SAS_DATA_WRITE 1 414 415 // I/O Bus Types 416 // ISA and EISA bus types are not supported 417 // (bIoBusType) 418 419 #define CSMI_SAS_BUS_TYPE_PCI 3 420 #define CSMI_SAS_BUS_TYPE_PCMCIA 4 421 422 // Controller Status 423 // (uStatus) 424 425 #define CSMI_SAS_CNTLR_STATUS_GOOD 1 426 #define CSMI_SAS_CNTLR_STATUS_FAILED 2 427 #define CSMI_SAS_CNTLR_STATUS_OFFLINE 3 428 #define CSMI_SAS_CNTLR_STATUS_POWEROFF 4 429 430 // Offline Status Reason 431 // (uOfflineReason) 432 433 #define CSMI_SAS_OFFLINE_REASON_NO_REASON 0 434 #define CSMI_SAS_OFFLINE_REASON_INITIALIZING 1 435 #define CSMI_SAS_OFFLINE_REASON_BACKSIDE_BUS_DEGRADED 2 436 #define CSMI_SAS_OFFLINE_REASON_BACKSIDE_BUS_FAILURE 3 437 438 // Controller Class 439 // (bControllerClass) 440 441 #define CSMI_SAS_CNTLR_CLASS_HBA 5 442 443 // Controller Flag bits 444 // (uControllerFlags) 445 446 #define CSMI_SAS_CNTLR_SAS_HBA 0x00000001 447 #define CSMI_SAS_CNTLR_SAS_RAID 0x00000002 448 #define CSMI_SAS_CNTLR_SATA_HBA 0x00000004 449 #define CSMI_SAS_CNTLR_SATA_RAID 0x00000008 450 #define CSMI_SAS_CNTLR_SMART_ARRAY 0x00000010 451 452 // for firmware download 453 #define CSMI_SAS_CNTLR_FWD_SUPPORT 0x00010000 454 #define CSMI_SAS_CNTLR_FWD_ONLINE 0x00020000 455 #define CSMI_SAS_CNTLR_FWD_SRESET 0x00040000 456 #define CSMI_SAS_CNTLR_FWD_HRESET 0x00080000 457 #define CSMI_SAS_CNTLR_FWD_RROM 0x00100000 458 459 // for RAID configuration supported 460 #define CSMI_SAS_CNTLR_RAID_CFG_SUPPORT 0x01000000 461 462 // Download Flag bits 463 // (uDownloadFlags) 464 #define CSMI_SAS_FWD_VALIDATE 0x00000001 465 #define CSMI_SAS_FWD_SOFT_RESET 0x00000002 466 #define CSMI_SAS_FWD_HARD_RESET 0x00000004 467 468 // Firmware Download Status 469 // (usStatus) 470 #define CSMI_SAS_FWD_SUCCESS 0 471 #define CSMI_SAS_FWD_FAILED 1 472 #define CSMI_SAS_FWD_USING_RROM 2 473 #define CSMI_SAS_FWD_REJECT 3 474 #define CSMI_SAS_FWD_DOWNREV 4 475 476 // Firmware Download Severity 477 // (usSeverity> 478 #define CSMI_SAS_FWD_INFORMATION 0 479 #define CSMI_SAS_FWD_WARNING 1 480 #define CSMI_SAS_FWD_ERROR 2 481 #define CSMI_SAS_FWD_FATAL 3 482 483 /* * * * * * * * * * SAS RAID Class IOCTL Constants * * * * * * * * */ 484 485 // Return codes for the RAID IOCTL's regardless of class 486 // (IoctlHeader.ReturnCode) 487 488 #define CSMI_SAS_RAID_SET_OUT_OF_RANGE 1000 489 #define CSMI_SAS_RAID_SET_BUFFER_TOO_SMALL 1001 490 #define CSMI_SAS_RAID_SET_DATA_CHANGED 1002 491 492 // Signature value 493 // (IoctlHeader.Signature) 494 495 #define CSMI_RAID_SIGNATURE "CSMIARY" 496 497 // Timeout value default of 60 seconds 498 // (IoctlHeader.Timeout) 499 500 #define CSMI_RAID_TIMEOUT 60 501 502 // RAID Types 503 // (bRaidType) 504 #define CSMI_SAS_RAID_TYPE_NONE 0 505 #define CSMI_SAS_RAID_TYPE_0 1 506 #define CSMI_SAS_RAID_TYPE_1 2 507 #define CSMI_SAS_RAID_TYPE_10 3 508 #define CSMI_SAS_RAID_TYPE_5 4 509 #define CSMI_SAS_RAID_TYPE_15 5 510 #define CSMI_SAS_RAID_TYPE_6 6 511 #define CSMI_SAS_RAID_TYPE_50 7 512 #define CSMI_SAS_RAID_TYPE_VOLUME 8 513 #define CSMI_SAS_RAID_TYPE_1E 9 514 #define CSMI_SAS_RAID_TYPE_OTHER 255 515 // the last value 255 was already defined for other 516 // so end is defined as 254 517 #define CSMI_SAS_RAID_TYPE_END 254 518 519 // RAID Status 520 // (bStatus) 521 #define CSMI_SAS_RAID_SET_STATUS_OK 0 522 #define CSMI_SAS_RAID_SET_STATUS_DEGRADED 1 523 #define CSMI_SAS_RAID_SET_STATUS_REBUILDING 2 524 #define CSMI_SAS_RAID_SET_STATUS_FAILED 3 525 #define CSMI_SAS_RAID_SET_STATUS_OFFLINE 4 526 #define CSMI_SAS_RAID_SET_STATUS_TRANSFORMING 5 527 #define CSMI_SAS_RAID_SET_STATUS_QUEUED_FOR_REBUILD 6 528 #define CSMI_SAS_RAID_SET_STATUS_QUEUED_FOR_TRANSFORMATION 7 529 530 // RAID Drive Count 531 // (bDriveCount, 0xF1 to 0xFF are reserved) 532 #define CSMI_SAS_RAID_DRIVE_COUNT_TOO_BIG 0xF1 533 #define CSMI_SAS_RAID_DRIVE_COUNT_SUPRESSED 0xF2 534 535 // RAID Data Type 536 // (bDataType) 537 #define CSMI_SAS_RAID_DATA_DRIVES 0 538 #define CSMI_SAS_RAID_DATA_DEVICE_ID 1 539 #define CSMI_SAS_RAID_DATA_ADDITIONAL_DATA 2 540 541 // RAID Drive Status 542 // (bDriveStatus) 543 #define CSMI_SAS_DRIVE_STATUS_OK 0 544 #define CSMI_SAS_DRIVE_STATUS_REBUILDING 1 545 #define CSMI_SAS_DRIVE_STATUS_FAILED 2 546 #define CSMI_SAS_DRIVE_STATUS_DEGRADED 3 547 #define CSMI_SAS_DRIVE_STATUS_OFFLINE 4 548 #define CSMI_SAS_DRIVE_STATUS_QUEUED_FOR_REBUILD 5 549 550 // RAID Drive Usage 551 // (bDriveUsage) 552 #define CSMI_SAS_DRIVE_CONFIG_NOT_USED 0 553 #define CSMI_SAS_DRIVE_CONFIG_MEMBER 1 554 #define CSMI_SAS_DRIVE_CONFIG_SPARE 2 555 #define CSMI_SAS_DRIVE_CONFIG_SPARE_ACTIVE 3 556 557 // RAID Drive Type 558 // (bDriveType) 559 #define CSMI_SAS_DRIVE_TYPE_UNKNOWN 0 560 #define CSMI_SAS_DRIVE_TYPE_SINGLE_PORT_SAS 1 561 #define CSMI_SAS_DRIVE_TYPE_DUAL_PORT_SAS 2 562 #define CSMI_SAS_DRIVE_TYPE_SATA 3 563 #define CSMI_SAS_DRIVE_TYPE_SATA_PS 4 564 #define CSMI_SAS_DRIVE_TYPE_OTHER 255 565 566 // RAID Write Protect 567 // (bWriteProtect) 568 #define CSMI_SAS_RAID_SET_WRITE_PROTECT_UNKNOWN 0 569 #define CSMI_SAS_RAID_SET_WRITE_PROTECT_UNCHANGED 0 570 #define CSMI_SAS_RAID_SET_WRITE_PROTECT_ENABLED 1 571 #define CSMI_SAS_RAID_SET_WRITE_PROTECT_DISABLED 2 572 573 // RAID Cache Setting 574 // (bCacheSetting) 575 #define CSMI_SAS_RAID_SET_CACHE_UNKNOWN 0 576 #define CSMI_SAS_RAID_SET_CACHE_UNCHANGED 0 577 #define CSMI_SAS_RAID_SET_CACHE_ENABLED 1 578 #define CSMI_SAS_RAID_SET_CACHE_DISABLED 2 579 #define CSMI_SAS_RAID_SET_CACHE_CORRUPT 3 580 581 // RAID Features 582 // (uFeatures) 583 #define CSMI_SAS_RAID_FEATURE_TRANSFORMATION 0x00000001 584 #define CSMI_SAS_RAID_FEATURE_REBUILD 0x00000002 585 #define CSMI_SAS_RAID_FEATURE_SPLIT_MIRROR 0x00000004 586 #define CSMI_SAS_RAID_FEATURE_MERGE_MIRROR 0x00000008 587 #define CSMI_SAS_RAID_FEATURE_LUN_RENUMBER 0x00000010 588 #define CSMI_SAS_RAID_FEATURE_SURFACE_SCAN 0x00000020 589 #define CSMI_SAS_RAID_FEATURE_SPARES_SHARED 0x00000040 590 591 // RAID Priority 592 // (bDefaultTransformPriority, etc.) 593 #define CSMI_SAS_PRIORITY_UNKNOWN 0 594 #define CSMI_SAS_PRIORITY_UNCHANGED 0 595 #define CSMI_SAS_PRIORITY_AUTO 1 596 #define CSMI_SAS_PRIORITY_OFF 2 597 #define CSMI_SAS_PRIORITY_LOW 3 598 #define CSMI_SAS_PRIORITY_MEDIUM 4 599 #define CSMI_SAS_PRIORITY_HIGH 5 600 601 // RAID Transformation Rules 602 // (uRaidSetTransformationRules) 603 #define CSMI_SAS_RAID_RULE_AVAILABLE_MEMORY 0x00000001 604 #define CSMI_SAS_RAID_RULE_OVERLAPPED_EXTENTS 0x00000002 605 606 // RAID Cache Ratios Supported 607 // (bCacheRatiosSupported) 608 // from 0 to 100 defines the write to read ratio, 0 is 100% write 609 #define CSMI_SAS_RAID_CACHE_RATIO_RANGE 101 610 #define CSMI_SAS_RAID_CACHE_RATIO_FIXED 102 611 #define CSMI_SAS_RAID_CACHE_RATIO_AUTO 103 612 #define CSMI_SAS_RAID_CACHE_RATIO_END 255 613 614 // RAID Cache Ratio Flag 615 // (bCacheRatioFlag) 616 #define CSMI_SAS_RAID_CACHE_RATIO_DISABLE 0 617 #define CSMI_SAS_RAID_CACHE_RATIO_ENABLE 1 618 619 // RAID Clear Configuration Signature 620 // (bClearConfiguration) 621 #define CSMI_SAS_RAID_CLEAR_CONFIGURATION_SIGNATURE "RAIDCLR" 622 623 // RAID Failure Codes 624 // (uFailureCode) 625 #define CSMI_SAS_FAIL_CODE_OK 0 626 #define CSMI_SAS_FAIL_CODE_PARAMETER_INVALID 1000 627 #define CSMI_SAS_FAIL_CODE_TRANSFORM_PRIORITY_INVALID 1001 628 #define CSMI_SAS_FAIL_CODE_REBUILD_PRIORITY_INVALID 1002 629 #define CSMI_SAS_FAIL_CODE_CACHE_RATIO_INVALID 1003 630 #define CSMI_SAS_FAIL_CODE_SURFACE_SCAN_INVALID 1004 631 #define CSMI_SAS_FAIL_CODE_CLEAR_CONFIGURATION_INVALID 1005 632 #define CSMI_SAS_FAIL_CODE_ELEMENT_INDEX_INVALID 1006 633 #define CSMI_SAS_FAIL_CODE_SUBELEMENT_INDEX_INVALID 1007 634 #define CSMI_SAS_FAIL_CODE_EXTENT_INVALID 1008 635 #define CSMI_SAS_FAIL_CODE_BLOCK_COUNT_INVALID 1009 636 #define CSMI_SAS_FAIL_CODE_DRIVE_INDEX_INVALID 1010 637 #define CSMI_SAS_FAIL_CODE_EXISTING_LUN_INVALID 1011 638 #define CSMI_SAS_FAIL_CODE_RAID_TYPE_INVALID 1012 639 #define CSMI_SAS_FAIL_CODE_STRIPE_SIZE_INVALID 1013 640 #define CSMI_SAS_FAIL_CODE_TRANSFORMATION_INVALID 1014 641 #define CSMI_SAS_FAIL_CODE_CHANGE_COUNT_INVALID 1015 642 #define CSMI_SAS_FAIL_CODE_ENUMERATION_TYPE_INVALID 1016 643 644 #define CSMI_SAS_FAIL_CODE_EXCEEDED_RAID_SET_COUNT 2000 645 #define CSMI_SAS_FAIL_CODE_DUPLICATE_LUN 2001 646 647 #define CSMI_SAS_FAIL_CODE_WAIT_FOR_OPERATION 3000 648 649 // RAID Enumeration Types 650 // (uEnumerationType) 651 #define CSMI_SAS_RAID_ELEMENT_TYPE_DRIVE 0 652 #define CSMI_SAS_RAID_ELEMENT_TYPE_MODULE 1 653 #define CSMI_SAS_RAID_ELEMENT_TYPE_DRIVE_RAID_SET 2 654 #define CSMI_SAS_RAID_ELEMENT_TYPE_EXTENT_DRIVE 3 655 656 // RAID Extent Types 657 // (bExtentType) 658 #define CSMI_SAS_RAID_EXTENT_RESERVED 0 659 #define CSMI_SAS_RAID_EXTENT_METADATA 1 660 #define CSMI_SAS_RAID_EXTENT_ALLOCATED 2 661 #define CSMI_SAS_RAID_EXTENT_UNALLOCATED 3 662 663 // RAID Operation Types 664 // (uOperationType) 665 #define CSMI_SAS_RAID_SET_CREATE 0 666 #define CSMI_SAS_RAID_SET_LABEL 1 667 #define CSMI_SAS_RAID_SET_TRANSFORM 2 668 #define CSMI_SAS_RAID_SET_DELETE 3 669 #define CSMI_SAS_RAID_SET_WRITE_PROTECT 4 670 #define CSMI_SAS_RAID_SET_CACHE 5 671 #define CSMI_SAS_RAID_SET_ONLINE_STATE 6 672 #define CSMI_SAS_RAID_SET_SPARE 7 673 674 // RAID Transform Types 675 // (bTransformType) 676 #define CSMI_SAS_RAID_SET_TRANSFORM_SPLIT_MIRROR 0 677 #define CSMI_SAS_RAID_SET_TRANSFORM_MERGE_RAID_0 1 678 #define CSMI_SAS_RAID_SET_TRANSFORM_LUN_RENUMBER 2 679 #define CSMI_SAS_RAID_SET_TRANSFORM_RAID_SET 3 680 681 // RAID Online State 682 // (bOnlineState) 683 #define CSMI_SAS_RAID_SET_STATE_UNKNOWN 0 684 #define CSMI_SAS_RAID_SET_STATE_ONLINE 1 685 #define CSMI_SAS_RAID_SET_STATE_OFFLINE 2 686 687 /* * * * * * * * * * SAS HBA Class IOCTL Constants * * * * * * * * * */ 688 689 // Return codes for SAS IOCTL's 690 // (IoctlHeader.ReturnCode) 691 692 #define CSMI_SAS_PHY_INFO_CHANGED CSMI_SAS_STATUS_SUCCESS 693 #define CSMI_SAS_PHY_INFO_NOT_CHANGEABLE 2000 694 #define CSMI_SAS_LINK_RATE_OUT_OF_RANGE 2001 695 696 #define CSMI_SAS_PHY_DOES_NOT_EXIST 2002 697 #define CSMI_SAS_PHY_DOES_NOT_MATCH_PORT 2003 698 #define CSMI_SAS_PHY_CANNOT_BE_SELECTED 2004 699 #define CSMI_SAS_SELECT_PHY_OR_PORT 2005 700 #define CSMI_SAS_PORT_DOES_NOT_EXIST 2006 701 #define CSMI_SAS_PORT_CANNOT_BE_SELECTED 2007 702 #define CSMI_SAS_CONNECTION_FAILED 2008 703 704 #define CSMI_SAS_NO_SATA_DEVICE 2009 705 #define CSMI_SAS_NO_SATA_SIGNATURE 2010 706 #define CSMI_SAS_SCSI_EMULATION 2011 707 #define CSMI_SAS_NOT_AN_END_DEVICE 2012 708 #define CSMI_SAS_NO_SCSI_ADDRESS 2013 709 #define CSMI_SAS_NO_DEVICE_ADDRESS 2014 710 711 // Signature value 712 // (IoctlHeader.Signature) 713 714 #define CSMI_SAS_SIGNATURE "CSMISAS" 715 716 // Timeout value default of 60 seconds 717 // (IoctlHeader.Timeout) 718 719 #define CSMI_SAS_TIMEOUT 60 720 721 // Device types 722 // (bDeviceType) 723 724 #define CSMI_SAS_PHY_UNUSED 0x00 725 #define CSMI_SAS_NO_DEVICE_ATTACHED 0x00 726 #define CSMI_SAS_END_DEVICE 0x10 727 #define CSMI_SAS_EDGE_EXPANDER_DEVICE 0x20 728 #define CSMI_SAS_FANOUT_EXPANDER_DEVICE 0x30 729 730 // Protocol options 731 // (bInitiatorPortProtocol, bTargetPortProtocol) 732 733 #define CSMI_SAS_PROTOCOL_SATA 0x01 734 #define CSMI_SAS_PROTOCOL_SMP 0x02 735 #define CSMI_SAS_PROTOCOL_STP 0x04 736 #define CSMI_SAS_PROTOCOL_SSP 0x08 737 738 // Negotiated and hardware link rates 739 // (bNegotiatedLinkRate, bMinimumLinkRate, bMaximumLinkRate) 740 741 #define CSMI_SAS_LINK_RATE_UNKNOWN 0x00 742 #define CSMI_SAS_PHY_DISABLED 0x01 743 #define CSMI_SAS_LINK_RATE_FAILED 0x02 744 #define CSMI_SAS_SATA_SPINUP_HOLD 0x03 745 #define CSMI_SAS_SATA_PORT_SELECTOR 0x04 746 #define CSMI_SAS_LINK_RATE_1_5_GBPS 0x08 747 #define CSMI_SAS_LINK_RATE_3_0_GBPS 0x09 748 #define CSMI_SAS_LINK_VIRTUAL 0x10 749 750 // Discover state 751 // (bAutoDiscover) 752 753 #define CSMI_SAS_DISCOVER_NOT_SUPPORTED 0x00 754 #define CSMI_SAS_DISCOVER_NOT_STARTED 0x01 755 #define CSMI_SAS_DISCOVER_IN_PROGRESS 0x02 756 #define CSMI_SAS_DISCOVER_COMPLETE 0x03 757 #define CSMI_SAS_DISCOVER_ERROR 0x04 758 759 // Phy features 760 761 #define CSMI_SAS_PHY_VIRTUAL_SMP 0x01 762 763 // Programmed link rates 764 // (bMinimumLinkRate, bMaximumLinkRate) 765 // (bProgrammedMinimumLinkRate, bProgrammedMaximumLinkRate) 766 767 #define CSMI_SAS_PROGRAMMED_LINK_RATE_UNCHANGED 0x00 768 #define CSMI_SAS_PROGRAMMED_LINK_RATE_1_5_GBPS 0x08 769 #define CSMI_SAS_PROGRAMMED_LINK_RATE_3_0_GBPS 0x09 770 771 // Link rate 772 // (bNegotiatedLinkRate in CSMI_SAS_SET_PHY_INFO) 773 774 #define CSMI_SAS_LINK_RATE_NEGOTIATE 0x00 775 #define CSMI_SAS_LINK_RATE_PHY_DISABLED 0x01 776 777 // Signal class 778 // (bSignalClass in CSMI_SAS_SET_PHY_INFO) 779 780 #define CSMI_SAS_SIGNAL_CLASS_UNKNOWN 0x00 781 #define CSMI_SAS_SIGNAL_CLASS_DIRECT 0x01 782 #define CSMI_SAS_SIGNAL_CLASS_SERVER 0x02 783 #define CSMI_SAS_SIGNAL_CLASS_ENCLOSURE 0x03 784 785 // Link error reset 786 // (bResetCounts) 787 788 #define CSMI_SAS_LINK_ERROR_DONT_RESET_COUNTS 0x00 789 #define CSMI_SAS_LINK_ERROR_RESET_COUNTS 0x01 790 791 // Phy identifier 792 // (bPhyIdentifier) 793 794 #define CSMI_SAS_USE_PORT_IDENTIFIER 0xFF 795 796 // Port identifier 797 // (bPortIdentifier) 798 799 #define CSMI_SAS_IGNORE_PORT 0xFF 800 801 // Programmed link rates 802 // (bConnectionRate) 803 804 #define CSMI_SAS_LINK_RATE_NEGOTIATED 0x00 805 #define CSMI_SAS_LINK_RATE_1_5_GBPS 0x08 806 #define CSMI_SAS_LINK_RATE_3_0_GBPS 0x09 807 808 // Connection status 809 // (bConnectionStatus) 810 811 #define CSMI_SAS_OPEN_ACCEPT 0 812 #define CSMI_SAS_OPEN_REJECT_BAD_DESTINATION 1 813 #define CSMI_SAS_OPEN_REJECT_RATE_NOT_SUPPORTED 2 814 #define CSMI_SAS_OPEN_REJECT_NO_DESTINATION 3 815 #define CSMI_SAS_OPEN_REJECT_PATHWAY_BLOCKED 4 816 #define CSMI_SAS_OPEN_REJECT_PROTOCOL_NOT_SUPPORTED 5 817 #define CSMI_SAS_OPEN_REJECT_RESERVE_ABANDON 6 818 #define CSMI_SAS_OPEN_REJECT_RESERVE_CONTINUE 7 819 #define CSMI_SAS_OPEN_REJECT_RESERVE_INITIALIZE 8 820 #define CSMI_SAS_OPEN_REJECT_RESERVE_STOP 9 821 #define CSMI_SAS_OPEN_REJECT_RETRY 10 822 #define CSMI_SAS_OPEN_REJECT_STP_RESOURCES_BUSY 11 823 #define CSMI_SAS_OPEN_REJECT_WRONG_DESTINATION 12 824 825 // SSP Status 826 // (bSSPStatus) 827 828 #define CSMI_SAS_SSP_STATUS_UNKNOWN 0x00 829 #define CSMI_SAS_SSP_STATUS_WAITING 0x01 830 #define CSMI_SAS_SSP_STATUS_COMPLETED 0x02 831 #define CSMI_SAS_SSP_STATUS_FATAL_ERROR 0x03 832 #define CSMI_SAS_SSP_STATUS_RETRY 0x04 833 #define CSMI_SAS_SSP_STATUS_NO_TAG 0x05 834 835 // SSP Flags 836 // (uFlags) 837 838 #define CSMI_SAS_SSP_READ 0x00000001 839 #define CSMI_SAS_SSP_WRITE 0x00000002 840 #define CSMI_SAS_SSP_UNSPECIFIED 0x00000004 841 842 #define CSMI_SAS_SSP_TASK_ATTRIBUTE_SIMPLE 0x00000000 843 #define CSMI_SAS_SSP_TASK_ATTRIBUTE_HEAD_OF_QUEUE 0x00000010 844 #define CSMI_SAS_SSP_TASK_ATTRIBUTE_ORDERED 0x00000020 845 #define CSMI_SAS_SSP_TASK_ATTRIBUTE_ACA 0x00000040 846 847 // SSP Data present 848 // (bDataPresent) 849 850 #define CSMI_SAS_SSP_NO_DATA_PRESENT 0x00 851 #define CSMI_SAS_SSP_RESPONSE_DATA_PRESENT 0x01 852 #define CSMI_SAS_SSP_SENSE_DATA_PRESENT 0x02 853 854 // STP Flags 855 // (uFlags) 856 857 #define CSMI_SAS_STP_READ 0x00000001 858 #define CSMI_SAS_STP_WRITE 0x00000002 859 #define CSMI_SAS_STP_UNSPECIFIED 0x00000004 860 #define CSMI_SAS_STP_PIO 0x00000010 861 #define CSMI_SAS_STP_DMA 0x00000020 862 #define CSMI_SAS_STP_PACKET 0x00000040 863 #define CSMI_SAS_STP_DMA_QUEUED 0x00000080 864 #define CSMI_SAS_STP_EXECUTE_DIAG 0x00000100 865 #define CSMI_SAS_STP_RESET_DEVICE 0x00000200 866 867 // Task Management Flags 868 // (uFlags) 869 870 #define CSMI_SAS_TASK_IU 0x00000001 871 #define CSMI_SAS_HARD_RESET_SEQUENCE 0x00000002 872 #define CSMI_SAS_SUPPRESS_RESULT 0x00000004 873 874 // Task Management Functions 875 // (bTaskManagement) 876 877 #define CSMI_SAS_SSP_ABORT_TASK 0x01 878 #define CSMI_SAS_SSP_ABORT_TASK_SET 0x02 879 #define CSMI_SAS_SSP_CLEAR_TASK_SET 0x04 880 #define CSMI_SAS_SSP_LOGICAL_UNIT_RESET 0x08 881 #define CSMI_SAS_SSP_CLEAR_ACA 0x40 882 #define CSMI_SAS_SSP_QUERY_TASK 0x80 883 884 // Task Management Information 885 // (uInformation) 886 887 #define CSMI_SAS_SSP_TEST 1 888 #define CSMI_SAS_SSP_EXCEEDED 2 889 #define CSMI_SAS_SSP_DEMAND 3 890 #define CSMI_SAS_SSP_TRIGGER 4 891 892 // Connector Pinout Information 893 // (uPinout) 894 895 #define CSMI_SAS_CON_UNKNOWN 0x00000001 896 #define CSMI_SAS_CON_SFF_8482 0x00000002 897 #define CSMI_SAS_CON_SFF_8470_LANE_1 0x00000100 898 #define CSMI_SAS_CON_SFF_8470_LANE_2 0x00000200 899 #define CSMI_SAS_CON_SFF_8470_LANE_3 0x00000400 900 #define CSMI_SAS_CON_SFF_8470_LANE_4 0x00000800 901 #define CSMI_SAS_CON_SFF_8484_LANE_1 0x00010000 902 #define CSMI_SAS_CON_SFF_8484_LANE_2 0x00020000 903 #define CSMI_SAS_CON_SFF_8484_LANE_3 0x00040000 904 #define CSMI_SAS_CON_SFF_8484_LANE_4 0x00080000 905 906 // Connector Location Information 907 // (bLocation) 908 909 // same as uPinout above... 910 // #define CSMI_SAS_CON_UNKNOWN 0x01 911 #define CSMI_SAS_CON_INTERNAL 0x02 912 #define CSMI_SAS_CON_EXTERNAL 0x04 913 #define CSMI_SAS_CON_SWITCHABLE 0x08 914 #define CSMI_SAS_CON_AUTO 0x10 915 #define CSMI_SAS_CON_NOT_PRESENT 0x20 916 #define CSMI_SAS_CON_NOT_CONNECTED 0x80 917 918 // Device location identification 919 // (bIdentify) 920 921 #define CSMI_SAS_LOCATE_UNKNOWN 0x00 922 #define CSMI_SAS_LOCATE_FORCE_OFF 0x01 923 #define CSMI_SAS_LOCATE_FORCE_ON 0x02 924 925 // Location Valid flags 926 // (uLocationFlags) 927 928 #define CSMI_SAS_LOCATE_SAS_ADDRESS_VALID 0x00000001 929 #define CSMI_SAS_LOCATE_SAS_LUN_VALID 0x00000002 930 #define CSMI_SAS_LOCATE_ENCLOSURE_IDENTIFIER_VALID 0x00000004 931 #define CSMI_SAS_LOCATE_ENCLOSURE_NAME_VALID 0x00000008 932 #define CSMI_SAS_LOCATE_BAY_PREFIX_VALID 0x00000010 933 #define CSMI_SAS_LOCATE_BAY_IDENTIFIER_VALID 0x00000020 934 #define CSMI_SAS_LOCATE_LOCATION_STATE_VALID 0x00000040 935 936 /* * * * * * * * SAS Phy Control Class IOCTL Constants * * * * * * * * */ 937 938 // Return codes for SAS Phy Control IOCTL's 939 // (IoctlHeader.ReturnCode) 940 941 // Signature value 942 // (IoctlHeader.Signature) 943 944 #define CSMI_PHY_SIGNATURE "CSMIPHY" 945 946 // Phy Control Functions 947 // (bFunction) 948 949 // values 0x00 to 0xFF are consistent in definition with the SMP PHY CONTROL 950 // function defined in the SAS spec 951 #define CSMI_SAS_PC_NOP 0x00000000 952 #define CSMI_SAS_PC_LINK_RESET 0x00000001 953 #define CSMI_SAS_PC_HARD_RESET 0x00000002 954 #define CSMI_SAS_PC_PHY_DISABLE 0x00000003 955 // 0x04 to 0xFF reserved... 956 #define CSMI_SAS_PC_GET_PHY_SETTINGS 0x00000100 957 958 // Link Flags 959 #define CSMI_SAS_PHY_ACTIVATE_CONTROL 0x00000001 960 #define CSMI_SAS_PHY_UPDATE_SPINUP_RATE 0x00000002 961 #define CSMI_SAS_PHY_AUTO_COMWAKE 0x00000004 962 963 // Device Types for Phy Settings 964 // (bType) 965 #define CSMI_SAS_UNDEFINED 0x00 966 #define CSMI_SAS_SATA 0x01 967 #define CSMI_SAS_SAS 0x02 968 969 // Transmitter Flags 970 // (uTransmitterFlags) 971 #define CSMI_SAS_PHY_PREEMPHASIS_DISABLED 0x00000001 972 973 // Receiver Flags 974 // (uReceiverFlags) 975 #define CSMI_SAS_PHY_EQUALIZATION_DISABLED 0x00000001 976 977 // Pattern Flags 978 // (uPatternFlags) 979 // #define CSMI_SAS_PHY_ACTIVATE_CONTROL 0x00000001 980 #define CSMI_SAS_PHY_DISABLE_SCRAMBLING 0x00000002 981 #define CSMI_SAS_PHY_DISABLE_ALIGN 0x00000004 982 #define CSMI_SAS_PHY_DISABLE_SSC 0x00000008 983 984 #define CSMI_SAS_PHY_FIXED_PATTERN 0x00000010 985 #define CSMI_SAS_PHY_USER_PATTERN 0x00000020 986 987 // Fixed Patterns 988 // (bFixedPattern) 989 #define CSMI_SAS_PHY_CJPAT 0x00000001 990 #define CSMI_SAS_PHY_ALIGN 0x00000002 991 992 // Type Flags 993 // (bTypeFlags) 994 #define CSMI_SAS_PHY_POSITIVE_DISPARITY 0x01 995 #define CSMI_SAS_PHY_NEGATIVE_DISPARITY 0x02 996 #define CSMI_SAS_PHY_CONTROL_CHARACTER 0x04 997 998 // Miscellaneous 999 #define SLOT_NUMBER_UNKNOWN 0xFFFF 1000 1001 /*************************************************************************/ 1002 /* DATA STRUCTURES */ 1003 /*************************************************************************/ 1004 1005 /* * * * * * * * * * Class Independent Structures * * * * * * * * * */ 1006 1007 // EDM #pragma CSMI_SAS_BEGIN_PACK(8) 1008 #pragma pack(8) 1009 1010 // CC_CSMI_SAS_DRIVER_INFO 1011 1012 typedef struct _CSMI_SAS_DRIVER_INFO { 1013 __u8 szName[81]; 1014 __u8 szDescription[81]; 1015 __u16 usMajorRevision; 1016 __u16 usMinorRevision; 1017 __u16 usBuildRevision; 1018 __u16 usReleaseRevision; 1019 __u16 usCSMIMajorRevision; 1020 __u16 usCSMIMinorRevision; 1021 } CSMI_SAS_DRIVER_INFO, 1022 *PCSMI_SAS_DRIVER_INFO; 1023 1024 typedef struct _CSMI_SAS_DRIVER_INFO_BUFFER { 1025 IOCTL_HEADER IoctlHeader; 1026 CSMI_SAS_DRIVER_INFO Information; 1027 } CSMI_SAS_DRIVER_INFO_BUFFER, 1028 *PCSMI_SAS_DRIVER_INFO_BUFFER; 1029 1030 // CC_CSMI_SAS_CNTLR_CONFIGURATION 1031 1032 typedef struct _CSMI_SAS_PCI_BUS_ADDRESS { 1033 __u8 bBusNumber; 1034 __u8 bDeviceNumber; 1035 __u8 bFunctionNumber; 1036 __u8 bReserved; 1037 } CSMI_SAS_PCI_BUS_ADDRESS, 1038 *PCSMI_SAS_PCI_BUS_ADDRESS; 1039 1040 typedef union _CSMI_SAS_IO_BUS_ADDRESS { 1041 CSMI_SAS_PCI_BUS_ADDRESS PciAddress; 1042 __u8 bReserved[32]; 1043 } CSMI_SAS_IO_BUS_ADDRESS, 1044 *PCSMI_SAS_IO_BUS_ADDRESS; 1045 1046 typedef struct _CSMI_SAS_CNTLR_CONFIG { 1047 __u32 uBaseIoAddress; 1048 struct { 1049 __u32 uLowPart; 1050 __u32 uHighPart; 1051 } BaseMemoryAddress; 1052 __u32 uBoardID; 1053 __u16 usSlotNumber; 1054 __u8 bControllerClass; 1055 __u8 bIoBusType; 1056 CSMI_SAS_IO_BUS_ADDRESS BusAddress; 1057 __u8 szSerialNumber[81]; 1058 __u16 usMajorRevision; 1059 __u16 usMinorRevision; 1060 __u16 usBuildRevision; 1061 __u16 usReleaseRevision; 1062 __u16 usBIOSMajorRevision; 1063 __u16 usBIOSMinorRevision; 1064 __u16 usBIOSBuildRevision; 1065 __u16 usBIOSReleaseRevision; 1066 __u32 uControllerFlags; 1067 __u16 usRromMajorRevision; 1068 __u16 usRromMinorRevision; 1069 __u16 usRromBuildRevision; 1070 __u16 usRromReleaseRevision; 1071 __u16 usRromBIOSMajorRevision; 1072 __u16 usRromBIOSMinorRevision; 1073 __u16 usRromBIOSBuildRevision; 1074 __u16 usRromBIOSReleaseRevision; 1075 __u8 bReserved[7]; 1076 } CSMI_SAS_CNTLR_CONFIG, 1077 *PCSMI_SAS_CNTLR_CONFIG; 1078 1079 typedef struct _CSMI_SAS_CNTLR_CONFIG_BUFFER { 1080 IOCTL_HEADER IoctlHeader; 1081 CSMI_SAS_CNTLR_CONFIG Configuration; 1082 } CSMI_SAS_CNTLR_CONFIG_BUFFER, 1083 *PCSMI_SAS_CNTLR_CONFIG_BUFFER; 1084 1085 // CC_CSMI_SAS_CNTLR_STATUS 1086 1087 typedef struct _CSMI_SAS_CNTLR_STATUS { 1088 __u32 uStatus; 1089 __u32 uOfflineReason; 1090 __u8 bReserved[28]; 1091 } CSMI_SAS_CNTLR_STATUS, 1092 *PCSMI_SAS_CNTLR_STATUS; 1093 1094 typedef struct _CSMI_SAS_CNTLR_STATUS_BUFFER { 1095 IOCTL_HEADER IoctlHeader; 1096 CSMI_SAS_CNTLR_STATUS Status; 1097 } CSMI_SAS_CNTLR_STATUS_BUFFER, 1098 *PCSMI_SAS_CNTLR_STATUS_BUFFER; 1099 1100 // CC_CSMI_SAS_FIRMWARE_DOWNLOAD 1101 1102 typedef struct _CSMI_SAS_FIRMWARE_DOWNLOAD { 1103 __u32 uBufferLength; 1104 __u32 uDownloadFlags; 1105 __u8 bReserved[32]; 1106 __u16 usStatus; 1107 __u16 usSeverity; 1108 } CSMI_SAS_FIRMWARE_DOWNLOAD, 1109 *PCSMI_SAS_FIRMWARE_DOWNLOAD; 1110 1111 typedef struct _CSMI_SAS_FIRMWARE_DOWNLOAD_BUFFER { 1112 IOCTL_HEADER IoctlHeader; 1113 CSMI_SAS_FIRMWARE_DOWNLOAD Information; 1114 __u8 bDataBuffer[1]; 1115 } CSMI_SAS_FIRMWARE_DOWNLOAD_BUFFER, 1116 *PCSMI_SAS_FIRMWARE_DOWNLOAD_BUFFER; 1117 1118 // CC_CSMI_SAS_RAID_INFO 1119 1120 typedef struct _CSMI_SAS_RAID_INFO { 1121 __u32 uNumRaidSets; 1122 __u32 uMaxDrivesPerSet; 1123 __u32 uMaxRaidSets; 1124 __u8 bMaxRaidTypes; 1125 __u8 bReservedByteFields[7]; 1126 struct 1127 { 1128 __u32 uLowPart; 1129 __u32 uHighPart; 1130 } ulMinRaidSetBlocks; 1131 struct 1132 { 1133 __u32 uLowPart; 1134 __u32 uHighPart; 1135 } ulMaxRaidSetBlocks; 1136 __u32 uMaxPhysicalDrives; 1137 __u32 uMaxExtents; 1138 __u32 uMaxModules; 1139 __u32 uMaxTransformationMemory; 1140 __u32 uChangeCount; 1141 __u8 bReserved[44]; 1142 } CSMI_SAS_RAID_INFO, 1143 *PCSMI_SAS_RAID_INFO; 1144 1145 typedef struct _CSMI_SAS_RAID_INFO_BUFFER { 1146 IOCTL_HEADER IoctlHeader; 1147 CSMI_SAS_RAID_INFO Information; 1148 } CSMI_SAS_RAID_INFO_BUFFER, 1149 *PCSMI_SAS_RAID_INFO_BUFFER; 1150 1151 // CC_CSMI_SAS_GET_RAID_CONFIG 1152 1153 typedef struct _CSMI_SAS_RAID_DRIVES { 1154 __u8 bModel[40]; 1155 __u8 bFirmware[8]; 1156 __u8 bSerialNumber[40]; 1157 __u8 bSASAddress[8]; 1158 __u8 bSASLun[8]; 1159 __u8 bDriveStatus; 1160 __u8 bDriveUsage; 1161 __u16 usBlockSize; 1162 __u8 bDriveType; 1163 __u8 bReserved[15]; 1164 __u32 uDriveIndex; 1165 struct 1166 { 1167 __u32 uLowPart; 1168 __u32 uHighPart; 1169 } ulTotalUserBlocks; 1170 } CSMI_SAS_RAID_DRIVES, 1171 *PCSMI_SAS_RAID_DRIVES; 1172 1173 typedef struct _CSMI_SAS_RAID_DEVICE_ID { 1174 __u8 bDeviceIdentificationVPDPage[1]; 1175 } CSMI_SAS_RAID_DEVICE_ID, 1176 *PCSMI_SAS_RAID_DEVICE_ID; 1177 1178 typedef struct _CSMI_SAS_RAID_SET_ADDITIONAL_DATA { 1179 __u8 bLabel[16]; 1180 __u8 bRaidSetLun[8]; 1181 __u8 bWriteProtection; 1182 __u8 bCacheSetting; 1183 __u8 bCacheRatio; 1184 __u16 usBlockSize; 1185 __u8 bReservedBytes[11]; 1186 struct 1187 { 1188 __u32 uLowPart; 1189 __u32 uHighPart; 1190 } ulRaidSetExtentOffset; 1191 struct 1192 { 1193 __u32 uLowPart; 1194 __u32 uHighPart; 1195 } ulRaidSetBlocks; 1196 __u32 uStripeSizeInBlocks; 1197 __u32 uSectorsPerTrack; 1198 __u8 bApplicationScratchPad[16]; 1199 __u32 uNumberOfHeads; 1200 __u32 uNumberOfTracks; 1201 __u8 bReserved[24]; 1202 } CSMI_SAS_RAID_SET_ADDITIONAL_DATA, 1203 *PCSMI_SAS_RAID_SET_ADDITIONAL_DATA; 1204 1205 typedef struct _CSMI_SAS_RAID_CONFIG { 1206 __u32 uRaidSetIndex; 1207 __u32 uCapacity; 1208 __u32 uStripeSize; 1209 __u8 bRaidType; 1210 __u8 bStatus; 1211 __u8 bInformation; 1212 __u8 bDriveCount; 1213 __u8 bDataType; 1214 __u8 bReserved[11]; 1215 __u32 uFailureCode; 1216 __u32 uChangeCount; 1217 union { 1218 CSMI_SAS_RAID_DRIVES Drives[1]; 1219 CSMI_SAS_RAID_DEVICE_ID DeviceId[1]; 1220 CSMI_SAS_RAID_SET_ADDITIONAL_DATA Data[1]; 1221 }; 1222 } CSMI_SAS_RAID_CONFIG, 1223 *PCSMI_SAS_RAID_CONFIG; 1224 1225 typedef struct _CSMI_SAS_RAID_CONFIG_BUFFER { 1226 IOCTL_HEADER IoctlHeader; 1227 CSMI_SAS_RAID_CONFIG Configuration; 1228 } CSMI_SAS_RAID_CONFIG_BUFFER, 1229 *PCSMI_SAS_RAID_CONFIG_BUFFER; 1230 1231 // CC_CSMI_SAS_GET_RAID_FEATURES 1232 1233 typedef struct _CSMI_SAS_RAID_TYPE_DESCRIPTION { 1234 __u8 bRaidType; 1235 __u8 bReservedBytes[7]; 1236 __u32 uSupportedStripeSizeMap; 1237 __u8 bReserved[24]; 1238 } CSMI_SAS_RAID_TYPE_DESCRIPTION, 1239 *PCSMI_SAS_RAID_TYPE_DESCRIPTION; 1240 1241 typedef struct _CSMI_SAS_RAID_FEATURES { 1242 __u32 uFeatures; 1243 __u8 bReservedFeatures[32]; 1244 __u8 bDefaultTransformPriority; 1245 __u8 bTransformPriority; 1246 __u8 bDefaultRebuildPriority; 1247 __u8 bRebuildPriority; 1248 __u8 bDefaultSurfaceScanPriority; 1249 __u8 bSurfaceScanPriority; 1250 __u16 usReserved; 1251 __u32 uRaidSetTransformationRules; 1252 __u32 uReserved[11]; 1253 CSMI_SAS_RAID_TYPE_DESCRIPTION RaidType[24]; 1254 __u8 bCacheRatiosSupported[104]; 1255 __u32 uChangeCount; 1256 __u32 uFailureCode; 1257 __u8 bReserved[120]; 1258 } CSMI_SAS_RAID_FEATURES, 1259 *PCSMI_SAS_RAID_FEATURES; 1260 1261 typedef struct _CSMI_SAS_RAID_FEATURES_BUFFER { 1262 IOCTL_HEADER IoctlHeader; 1263 CSMI_SAS_RAID_FEATURES Information; 1264 } CSMI_SAS_RAID_FEATURES_BUFFER, 1265 *PCSMI_SAS_RAID_FEATURES_BUFFER; 1266 1267 // CC_CSMI_SAS_SET_RAID_CONTROL 1268 1269 typedef struct _CSMI_SAS_RAID_CONTROL { 1270 __u8 bTransformPriority; 1271 __u8 bRebuildPriority; 1272 __u8 bCacheRatioFlag; 1273 __u8 bCacheRatio; 1274 __u8 bSurfaceScanPriority; 1275 __u8 bReservedBytes[15]; 1276 __u8 bClearConfiguration[8]; 1277 __u32 uChangeCount; 1278 __u8 bReserved[88]; 1279 __u32 uFailureCode; 1280 __u8 bFailureDescription[80]; 1281 } CSMI_SAS_RAID_CONTROL, 1282 *PCSMI_SAS_RAID_CONTROL; 1283 1284 typedef struct _CSMI_SAS_RAID_CONTROL_BUFFER { 1285 IOCTL_HEADER IoctlHeader; 1286 CSMI_SAS_RAID_CONTROL Information; 1287 } CSMI_SAS_RAID_CONTROL_BUFFER, 1288 *PCSMI_SAS_RAID_CONTROL_BUFFER; 1289 1290 // CC_CSMI_SAS_GET_RAID_ELEMENT 1291 1292 typedef struct _CSMI_SAS_DRIVE_EXTENT_INFO { 1293 __u32 uDriveIndex; 1294 __u8 bExtentType; 1295 __u8 bReservedBytes[7]; 1296 struct 1297 { 1298 __u32 uLowPart; 1299 __u32 uHighPart; 1300 } ulExtentOffset; 1301 struct 1302 { 1303 __u32 uLowPart; 1304 __u32 uHighPart; 1305 } ulExtentBlocks; 1306 __u32 uRaidSetIndex; 1307 __u8 bReserved[96]; 1308 } CSMI_SAS_DRIVE_EXTENT_INFO, 1309 *PCSMI_SAS_DRIVE_EXTENT_INFO; 1310 1311 typedef struct _CSMI_SAS_RAID_MODULE_INFO { 1312 __u8 bReserved[128]; 1313 } CSMI_SAS_RAID_MODULE_INFO, 1314 *PCSMI_SAS_RAID_MODULE_INFO; 1315 1316 typedef struct _CSMI_SAS_DRIVE_LOCATION { 1317 __u8 bConnector[16]; 1318 __u8 bBoxName[16]; 1319 __u32 uBay; 1320 __u8 bReservedBytes[4]; 1321 __u8 bAttachedSASAddress[8]; 1322 __u8 bAttachedPhyIdentifier; 1323 __u8 bReserved[79]; 1324 } CSMI_SAS_DRIVE_LOCATION, 1325 *PCSMI_SAS_DRIVE_LOCATION; 1326 1327 typedef struct _CSMI_SAS_RAID_DRIVES_ADDITIONAL_DATA { 1328 __u8 bNegotiatedLinkRate[2]; 1329 __u8 bReserved[126]; 1330 } CSMI_SAS_RAID_DRIVES_ADDITIONAL_DATA, 1331 *PCSMI_SAS_RAID_DRIVES_ADDITIONAL_DATA; 1332 1333 typedef struct _CSMI_SAS_DRIVE_INFO { 1334 CSMI_SAS_RAID_DRIVES Device; 1335 CSMI_SAS_RAID_DRIVES_ADDITIONAL_DATA Data; 1336 CSMI_SAS_DRIVE_LOCATION Location; 1337 __u8 bReserved[16]; 1338 } CSMI_SAS_DRIVE_INFO, 1339 *PCSMI_SAS_DRIVE_INFO; 1340 1341 typedef struct _CSMI_SAS_RAID_ELEMENT { 1342 __u32 uEnumerationType; 1343 __u32 uElementIndex; 1344 __u32 uNumElements; 1345 __u32 uChangeCount; 1346 __u32 uSubElementIndex; 1347 __u8 bReserved[32]; 1348 __u32 uFailureCode; 1349 __u8 bFailureDescription[80]; 1350 union { 1351 CSMI_SAS_DRIVE_INFO Drive; 1352 CSMI_SAS_RAID_MODULE_INFO Module; 1353 CSMI_SAS_DRIVE_EXTENT_INFO Extent; 1354 } Element; 1355 } CSMI_SAS_RAID_ELEMENT, 1356 *PCSMI_SAS_RAID_ELEMENT; 1357 1358 typedef struct _CSMI_SAS_RAID_ELEMENT_BUFFER { 1359 IOCTL_HEADER IoctlHeader; 1360 CSMI_SAS_RAID_ELEMENT Information; 1361 } CSMI_SAS_RAID_ELEMENT_BUFFER, 1362 *PCSMI_SAS_RAID_ELEMENT_BUFFER; 1363 1364 // CC_CSMI_SAS_SET_RAID_OPERATION 1365 1366 typedef struct _CSMI_SAS_RAID_SET_LIST { 1367 __u32 uRaidSetIndex; 1368 __u8 bExistingLun[8]; 1369 __u8 bNewLun[8]; 1370 __u8 bReserved[12]; 1371 } CSMI_SAS_RAID_SET_LIST, 1372 *PCSMI_SAS_RAID_SET_LIST; 1373 1374 typedef struct _CSMI_SAS_RAID_SET_DRIVE_LIST { 1375 __u32 uDriveIndex; 1376 __u8 bDriveUsage; 1377 __u8 bReserved[27]; 1378 } CSMI_SAS_RAID_SET_DRIVE_LIST, 1379 *PCSMI_SAS_RAID_SET_DRIVE_LIST; 1380 1381 typedef struct _CSMI_SAS_RAID_SET_SPARE_INFO { 1382 __u32 uRaidSetIndex; 1383 __u32 uDriveCount; 1384 __u8 bApplicationScratchPad[16]; 1385 __u8 bReserved[104]; 1386 } CSMI_SAS_RAID_SET_SPARE_INFO, 1387 *PCSMI_SAS_RAID_SET_SPARE_INFO; 1388 1389 typedef struct _CSMI_SAS_RAID_SET_ONLINE_STATE_INFO { 1390 __u32 uRaidSetIndex; 1391 __u8 bOnlineState; 1392 __u8 bReserved[123]; 1393 } CSMI_SAS_RAID_SET_ONLINE_STATE_INFO, 1394 *PCSMI_SAS_RAID_SET_ONLINE_STATE_INFO; 1395 1396 typedef struct _CSMI_SAS_RAID_SET_CACHE_INFO { 1397 __u32 uRaidSetIndex; 1398 __u8 bCacheSetting; 1399 __u8 bCacheRatioFlag; 1400 __u8 bCacheRatio; 1401 __u8 bReserved[121]; 1402 } CSMI_SAS_RAID_SET_CACHE_INFO, 1403 *PCSMI_SAS_RAID_SET_CACHE_INFO; 1404 1405 typedef struct _CSMI_SAS_RAID_SET_WRITE_PROTECT_INFO { 1406 __u32 uRaidSetIndex; 1407 __u8 bWriteProtectSetting; 1408 __u8 bReserved[123]; 1409 } CSMI_SAS_RAID_SET_WRITE_PROTECT_INFO, 1410 *PCSMI_SAS_RAID_SET_WRITE_PROTECT_INFO; 1411 1412 typedef struct _CSMI_SAS_RAID_SET_DELETE_INFO { 1413 __u32 uRaidSetIndex; 1414 __u8 bReserved[124]; 1415 } CSMI_SAS_RAID_SET_DELETE_INFO, 1416 *PCSMI_SAS_RAID_SET_DELETE_INFO; 1417 1418 typedef struct _CSMI_SAS_RAID_SET_MODIFY_INFO { 1419 __u8 bRaidType; 1420 __u8 bReservedBytes[7]; 1421 __u32 uStripeSize; 1422 struct 1423 { 1424 __u32 uLowPart; 1425 __u32 uHighPart; 1426 } ulRaidSetBlocks; 1427 struct 1428 { 1429 __u32 uLowPart; 1430 __u32 uHighPart; 1431 } ulRaidSetExtentOffset; 1432 __u32 uDriveCount; 1433 __u8 bReserved[96]; 1434 } CSMI_SAS_RAID_SET_MODIFY_INFO, 1435 *PCSMI_SAS_RAID_SET_MODIFY_INFO; 1436 1437 typedef struct _CSMI_SAS_RAID_SET_TRANSFORM_INFO { 1438 __u8 bTransformType; 1439 __u8 bReservedBytes[3]; 1440 __u32 uRaidSetIndex; 1441 __u8 bRaidType; 1442 __u8 bReservedBytes2[11]; 1443 __u32 uAdditionalRaidSetIndex; 1444 __u32 uRaidSetCount; 1445 __u8 bApplicationScratchPad[16]; 1446 CSMI_SAS_RAID_SET_MODIFY_INFO Modify; 1447 __u8 bReserved[80]; 1448 } CSMI_SAS_RAID_SET_TRANSFORM_INFO, 1449 *PCSMI_SAS_RAID_SET_TRANSFORM_INFO; 1450 1451 typedef struct _CSMI_SAS_RAID_SET_LABEL_INFO { 1452 __u32 uRaidSetIndex; 1453 __u8 bLabel[16]; 1454 __u8 bReserved[108]; 1455 } CSMI_SAS_RAID_SET_LABEL_INFO, 1456 *PCSMI_SAS_RAID_SET_LABEL_INFO; 1457 1458 typedef struct _CSMI_SAS_RAID_SET_CREATE_INFO { 1459 __u8 bRaidType; 1460 __u8 bReservedBytes[7]; 1461 __u32 uStripeSize; 1462 __u32 uTrackSectorCount; 1463 struct 1464 { 1465 __u32 uLowPart; 1466 __u32 uHighPart; 1467 } ulRaidSetBlocks; 1468 struct 1469 { 1470 __u32 uLowPart; 1471 __u32 uHighPart; 1472 } ulRaidSetExtentOffset; 1473 __u32 uDriveCount; 1474 __u8 bLabel[16]; 1475 __u32 uRaidSetIndex; 1476 __u8 bApplicationScratchPad[16]; 1477 __u32 uNumberOfHeads; 1478 __u32 uNumberOfTracks; 1479 __u8 bReserved[48]; 1480 } CSMI_SAS_RAID_SET_CREATE_INFO, 1481 *PCSMI_SAS_RAID_SET_CREATE_INFO; 1482 1483 typedef struct _CSMI_SAS_RAID_SET_OPERATION { 1484 __u32 uOperationType; 1485 __u32 uChangeCount; 1486 __u32 uFailureCode; 1487 __u8 bFailureDescription[80]; 1488 __u8 bReserved[28]; 1489 union { 1490 CSMI_SAS_RAID_SET_CREATE_INFO Create; 1491 CSMI_SAS_RAID_SET_LABEL_INFO Label; 1492 CSMI_SAS_RAID_SET_TRANSFORM_INFO Transform; 1493 CSMI_SAS_RAID_SET_DELETE_INFO Delete; 1494 CSMI_SAS_RAID_SET_WRITE_PROTECT_INFO Protect; 1495 CSMI_SAS_RAID_SET_CACHE_INFO Cache; 1496 CSMI_SAS_RAID_SET_ONLINE_STATE_INFO State; 1497 CSMI_SAS_RAID_SET_SPARE_INFO Spare; 1498 } Operation; 1499 union { 1500 CSMI_SAS_RAID_SET_DRIVE_LIST DriveList[1]; 1501 CSMI_SAS_RAID_SET_LIST RaidSetList[1]; 1502 } Parameters; 1503 } CSMI_SAS_RAID_SET_OPERATION, 1504 *PCSMI_SAS_RAID_SET_OPERATION; 1505 1506 typedef struct _CSMI_SAS_RAID_SET_OPERATION_BUFFER { 1507 IOCTL_HEADER IoctlHeader; 1508 CSMI_SAS_RAID_SET_OPERATION Information; 1509 } CSMI_SAS_RAID_SET_OPERATION_BUFFER, 1510 *PCSMI_SAS_RAID_SET_OPERATION_BUFFER; 1511 1512 /* * * * * * * * * * SAS HBA Class Structures * * * * * * * * * */ 1513 1514 // CC_CSMI_SAS_GET_PHY_INFO 1515 1516 typedef struct _CSMI_SAS_IDENTIFY { 1517 __u8 bDeviceType; 1518 __u8 bRestricted; 1519 __u8 bInitiatorPortProtocol; 1520 __u8 bTargetPortProtocol; 1521 __u8 bRestricted2[8]; 1522 __u8 bSASAddress[8]; 1523 __u8 bPhyIdentifier; 1524 __u8 bSignalClass; 1525 __u8 bReserved[6]; 1526 } CSMI_SAS_IDENTIFY, 1527 *PCSMI_SAS_IDENTIFY; 1528 1529 typedef struct _CSMI_SAS_PHY_ENTITY { 1530 CSMI_SAS_IDENTIFY Identify; 1531 __u8 bPortIdentifier; 1532 __u8 bNegotiatedLinkRate; 1533 __u8 bMinimumLinkRate; 1534 __u8 bMaximumLinkRate; 1535 __u8 bPhyChangeCount; 1536 __u8 bAutoDiscover; 1537 __u8 bPhyFeatures; 1538 __u8 bReserved; 1539 CSMI_SAS_IDENTIFY Attached; 1540 } CSMI_SAS_PHY_ENTITY, 1541 *PCSMI_SAS_PHY_ENTITY; 1542 1543 typedef struct _CSMI_SAS_PHY_INFO { 1544 __u8 bNumberOfPhys; 1545 __u8 bReserved[3]; 1546 CSMI_SAS_PHY_ENTITY Phy[32]; 1547 } CSMI_SAS_PHY_INFO, 1548 *PCSMI_SAS_PHY_INFO; 1549 1550 typedef struct _CSMI_SAS_PHY_INFO_BUFFER { 1551 IOCTL_HEADER IoctlHeader; 1552 CSMI_SAS_PHY_INFO Information; 1553 } CSMI_SAS_PHY_INFO_BUFFER, 1554 *PCSMI_SAS_PHY_INFO_BUFFER; 1555 1556 // CC_CSMI_SAS_SET_PHY_INFO 1557 1558 typedef struct _CSMI_SAS_SET_PHY_INFO { 1559 __u8 bPhyIdentifier; 1560 __u8 bNegotiatedLinkRate; 1561 __u8 bProgrammedMinimumLinkRate; 1562 __u8 bProgrammedMaximumLinkRate; 1563 __u8 bSignalClass; 1564 __u8 bReserved[3]; 1565 } CSMI_SAS_SET_PHY_INFO, 1566 *PCSMI_SAS_SET_PHY_INFO; 1567 1568 typedef struct _CSMI_SAS_SET_PHY_INFO_BUFFER { 1569 IOCTL_HEADER IoctlHeader; 1570 CSMI_SAS_SET_PHY_INFO Information; 1571 } CSMI_SAS_SET_PHY_INFO_BUFFER, 1572 *PCSMI_SAS_SET_PHY_INFO_BUFFER; 1573 1574 // CC_CSMI_SAS_GET_LINK_ERRORS 1575 1576 typedef struct _CSMI_SAS_LINK_ERRORS { 1577 __u8 bPhyIdentifier; 1578 __u8 bResetCounts; 1579 __u8 bReserved[2]; 1580 __u32 uInvalidDwordCount; 1581 __u32 uRunningDisparityErrorCount; 1582 __u32 uLossOfDwordSyncCount; 1583 __u32 uPhyResetProblemCount; 1584 } CSMI_SAS_LINK_ERRORS, 1585 *PCSMI_SAS_LINK_ERRORS; 1586 1587 typedef struct _CSMI_SAS_LINK_ERRORS_BUFFER { 1588 IOCTL_HEADER IoctlHeader; 1589 CSMI_SAS_LINK_ERRORS Information; 1590 } CSMI_SAS_LINK_ERRORS_BUFFER, 1591 *PCSMI_SAS_LINK_ERRORS_BUFFER; 1592 1593 // CC_CSMI_SAS_SMP_PASSTHRU 1594 1595 typedef struct _CSMI_SAS_SMP_REQUEST { 1596 __u8 bFrameType; 1597 __u8 bFunction; 1598 __u8 bReserved[2]; 1599 __u8 bAdditionalRequestBytes[1016]; 1600 } CSMI_SAS_SMP_REQUEST, 1601 *PCSMI_SAS_SMP_REQUEST; 1602 1603 typedef struct _CSMI_SAS_SMP_RESPONSE { 1604 __u8 bFrameType; 1605 __u8 bFunction; 1606 __u8 bFunctionResult; 1607 __u8 bReserved; 1608 __u8 bAdditionalResponseBytes[1016]; 1609 } CSMI_SAS_SMP_RESPONSE, 1610 *PCSMI_SAS_SMP_RESPONSE; 1611 1612 typedef struct _CSMI_SAS_SMP_PASSTHRU { 1613 __u8 bPhyIdentifier; 1614 __u8 bPortIdentifier; 1615 __u8 bConnectionRate; 1616 __u8 bReserved; 1617 __u8 bDestinationSASAddress[8]; 1618 __u32 uRequestLength; 1619 CSMI_SAS_SMP_REQUEST Request; 1620 __u8 bConnectionStatus; 1621 __u8 bReserved2[3]; 1622 __u32 uResponseBytes; 1623 CSMI_SAS_SMP_RESPONSE Response; 1624 } CSMI_SAS_SMP_PASSTHRU, 1625 *PCSMI_SAS_SMP_PASSTHRU; 1626 1627 typedef struct _CSMI_SAS_SMP_PASSTHRU_BUFFER { 1628 IOCTL_HEADER IoctlHeader; 1629 CSMI_SAS_SMP_PASSTHRU Parameters; 1630 } CSMI_SAS_SMP_PASSTHRU_BUFFER, 1631 *PCSMI_SAS_SMP_PASSTHRU_BUFFER; 1632 1633 // CC_CSMI_SAS_SSP_PASSTHRU 1634 1635 typedef struct _CSMI_SAS_SSP_PASSTHRU { 1636 __u8 bPhyIdentifier; 1637 __u8 bPortIdentifier; 1638 __u8 bConnectionRate; 1639 __u8 bReserved; 1640 __u8 bDestinationSASAddress[8]; 1641 __u8 bLun[8]; 1642 __u8 bCDBLength; 1643 __u8 bAdditionalCDBLength; 1644 __u8 bReserved2[2]; 1645 __u8 bCDB[16]; 1646 __u32 uFlags; 1647 __u8 bAdditionalCDB[24]; 1648 __u32 uDataLength; 1649 } CSMI_SAS_SSP_PASSTHRU, 1650 *PCSMI_SAS_SSP_PASSTHRU; 1651 1652 typedef struct _CSMI_SAS_SSP_PASSTHRU_STATUS { 1653 __u8 bConnectionStatus; 1654 __u8 bSSPStatus; 1655 __u8 bReserved[2]; 1656 __u8 bDataPresent; 1657 __u8 bStatus; 1658 __u8 bResponseLength[2]; 1659 __u8 bResponse[256]; 1660 __u32 uDataBytes; 1661 } CSMI_SAS_SSP_PASSTHRU_STATUS, 1662 *PCSMI_SAS_SSP_PASSTHRU_STATUS; 1663 1664 typedef struct _CSMI_SAS_SSP_PASSTHRU_BUFFER { 1665 IOCTL_HEADER IoctlHeader; 1666 CSMI_SAS_SSP_PASSTHRU Parameters; 1667 CSMI_SAS_SSP_PASSTHRU_STATUS Status; 1668 __u8 bDataBuffer[1]; 1669 } CSMI_SAS_SSP_PASSTHRU_BUFFER, 1670 *PCSMI_SAS_SSP_PASSTHRU_BUFFER; 1671 1672 // CC_CSMI_SAS_STP_PASSTHRU 1673 1674 typedef struct _CSMI_SAS_STP_PASSTHRU { 1675 __u8 bPhyIdentifier; 1676 __u8 bPortIdentifier; 1677 __u8 bConnectionRate; 1678 __u8 bReserved; 1679 __u8 bDestinationSASAddress[8]; 1680 __u8 bReserved2[4]; 1681 __u8 bCommandFIS[20]; 1682 __u32 uFlags; 1683 __u32 uDataLength; 1684 } CSMI_SAS_STP_PASSTHRU, 1685 *PCSMI_SAS_STP_PASSTHRU; 1686 1687 typedef struct _CSMI_SAS_STP_PASSTHRU_STATUS { 1688 __u8 bConnectionStatus; 1689 __u8 bReserved[3]; 1690 __u8 bStatusFIS[20]; 1691 __u32 uSCR[16]; 1692 __u32 uDataBytes; 1693 } CSMI_SAS_STP_PASSTHRU_STATUS, 1694 *PCSMI_SAS_STP_PASSTHRU_STATUS; 1695 1696 typedef struct _CSMI_SAS_STP_PASSTHRU_BUFFER { 1697 IOCTL_HEADER IoctlHeader; 1698 CSMI_SAS_STP_PASSTHRU Parameters; 1699 CSMI_SAS_STP_PASSTHRU_STATUS Status; 1700 __u8 bDataBuffer[1]; 1701 } CSMI_SAS_STP_PASSTHRU_BUFFER, 1702 *PCSMI_SAS_STP_PASSTHRU_BUFFER; 1703 1704 // CC_CSMI_SAS_GET_SATA_SIGNATURE 1705 1706 typedef struct _CSMI_SAS_SATA_SIGNATURE { 1707 __u8 bPhyIdentifier; 1708 __u8 bReserved[3]; 1709 __u8 bSignatureFIS[20]; 1710 } CSMI_SAS_SATA_SIGNATURE, 1711 *PCSMI_SAS_SATA_SIGNATURE; 1712 1713 typedef struct _CSMI_SAS_SATA_SIGNATURE_BUFFER { 1714 IOCTL_HEADER IoctlHeader; 1715 CSMI_SAS_SATA_SIGNATURE Signature; 1716 } CSMI_SAS_SATA_SIGNATURE_BUFFER, 1717 *PCSMI_SAS_SATA_SIGNATURE_BUFFER; 1718 1719 // CC_CSMI_SAS_GET_SCSI_ADDRESS 1720 1721 typedef struct _CSMI_SAS_GET_SCSI_ADDRESS_BUFFER { 1722 IOCTL_HEADER IoctlHeader; 1723 __u8 bSASAddress[8]; 1724 __u8 bSASLun[8]; 1725 __u8 bHostIndex; 1726 __u8 bPathId; 1727 __u8 bTargetId; 1728 __u8 bLun; 1729 } CSMI_SAS_GET_SCSI_ADDRESS_BUFFER, 1730 *PCSMI_SAS_GET_SCSI_ADDRESS_BUFFER; 1731 1732 // CC_CSMI_SAS_GET_DEVICE_ADDRESS 1733 1734 typedef struct _CSMI_SAS_GET_DEVICE_ADDRESS_BUFFER { 1735 IOCTL_HEADER IoctlHeader; 1736 __u8 bHostIndex; 1737 __u8 bPathId; 1738 __u8 bTargetId; 1739 __u8 bLun; 1740 __u8 bSASAddress[8]; 1741 __u8 bSASLun[8]; 1742 } CSMI_SAS_GET_DEVICE_ADDRESS_BUFFER, 1743 *PCSMI_SAS_GET_DEVICE_ADDRESS_BUFFER; 1744 1745 // CC_CSMI_SAS_TASK_MANAGEMENT 1746 1747 typedef struct _CSMI_SAS_SSP_TASK_IU { 1748 __u8 bHostIndex; 1749 __u8 bPathId; 1750 __u8 bTargetId; 1751 __u8 bLun; 1752 __u32 uFlags; 1753 __u32 uQueueTag; 1754 __u32 uReserved; 1755 __u8 bTaskManagementFunction; 1756 __u8 bReserved[7]; 1757 __u32 uInformation; 1758 } CSMI_SAS_SSP_TASK_IU, 1759 *PCSMI_SAS_SSP_TASK_IU; 1760 1761 typedef struct _CSMI_SAS_SSP_TASK_IU_BUFFER { 1762 IOCTL_HEADER IoctlHeader; 1763 CSMI_SAS_SSP_TASK_IU Parameters; 1764 CSMI_SAS_SSP_PASSTHRU_STATUS Status; 1765 } CSMI_SAS_SSP_TASK_IU_BUFFER, 1766 *PCSMI_SAS_SSP_TASK_IU_BUFFER; 1767 1768 // CC_CSMI_SAS_GET_CONNECTOR_INFO 1769 1770 typedef struct _CSMI_SAS_GET_CONNECTOR_INFO { 1771 __u32 uPinout; 1772 __u8 bConnector[16]; 1773 __u8 bLocation; 1774 __u8 bReserved[15]; 1775 } CSMI_SAS_CONNECTOR_INFO, 1776 *PCSMI_SAS_CONNECTOR_INFO; 1777 1778 typedef struct _CSMI_SAS_CONNECTOR_INFO_BUFFER { 1779 IOCTL_HEADER IoctlHeader; 1780 CSMI_SAS_CONNECTOR_INFO Reference[32]; 1781 } CSMI_SAS_CONNECTOR_INFO_BUFFER, 1782 *PCSMI_SAS_CONNECTOR_INFO_BUFFER; 1783 1784 // CC_CSMI_SAS_GET_LOCATION 1785 1786 typedef struct _CSMI_SAS_LOCATION_IDENTIFIER { 1787 __u32 bLocationFlags; 1788 __u8 bSASAddress[8]; 1789 __u8 bSASLun[8]; 1790 __u8 bEnclosureIdentifier[8]; 1791 __u8 bEnclosureName[32]; 1792 __u8 bBayPrefix[32]; 1793 __u8 bBayIdentifier; 1794 __u8 bLocationState; 1795 __u8 bReserved[2]; 1796 } CSMI_SAS_LOCATION_IDENTIFIER, 1797 *PCSMI_SAS_LOCATION_IDENTIFIER; 1798 1799 typedef struct _CSMI_SAS_GET_LOCATION_BUFFER { 1800 IOCTL_HEADER IoctlHeader; 1801 __u8 bHostIndex; 1802 __u8 bPathId; 1803 __u8 bTargetId; 1804 __u8 bLun; 1805 __u8 bIdentify; 1806 __u8 bNumberOfLocationIdentifiers; 1807 __u8 bLengthOfLocationIdentifier; 1808 CSMI_SAS_LOCATION_IDENTIFIER Location[1]; 1809 } CSMI_SAS_GET_LOCATION_BUFFER, 1810 *PCSMI_SAS_GET_LOCATION_BUFFER; 1811 1812 // CC_CSMI_SAS_PHY_CONTROL 1813 1814 typedef struct _CSMI_SAS_CHARACTER { 1815 __u8 bTypeFlags; 1816 __u8 bValue; 1817 } CSMI_SAS_CHARACTER, 1818 *PCSMI_SAS_CHARACTER; 1819 1820 typedef struct _CSMI_SAS_PHY_CONTROL { 1821 __u8 bType; 1822 __u8 bRate; 1823 __u8 bReserved[6]; 1824 __u32 uVendorUnique[8]; 1825 __u32 uTransmitterFlags; 1826 __i8 bTransmitAmplitude; 1827 __i8 bTransmitterPreemphasis; 1828 __i8 bTransmitterSlewRate; 1829 __i8 bTransmitterReserved[13]; 1830 __u8 bTransmitterVendorUnique[64]; 1831 __u32 uReceiverFlags; 1832 __i8 bReceiverThreshold; 1833 __i8 bReceiverEqualizationGain; 1834 __i8 bReceiverReserved[14]; 1835 __u8 bReceiverVendorUnique[64]; 1836 __u32 uPatternFlags; 1837 __u8 bFixedPattern; 1838 __u8 bUserPatternLength; 1839 __u8 bPatternReserved[6]; 1840 CSMI_SAS_CHARACTER UserPatternBuffer[16]; 1841 } CSMI_SAS_PHY_CONTROL, 1842 *PCSMI_SAS_PHY_CONTROL; 1843 1844 typedef struct _CSMI_SAS_PHY_CONTROL_BUFFER { 1845 IOCTL_HEADER IoctlHeader; 1846 __u32 uFunction; 1847 __u8 bPhyIdentifier; 1848 __u16 usLengthOfControl; 1849 __u8 bNumberOfControls; 1850 __u8 bReserved[4]; 1851 __u32 uLinkFlags; 1852 __u8 bSpinupRate; 1853 __u8 bLinkReserved[7]; 1854 __u32 uVendorUnique[8]; 1855 CSMI_SAS_PHY_CONTROL Control[1]; 1856 } CSMI_SAS_PHY_CONTROL_BUFFER, 1857 *PCSMI_SAS_PHY_CONTROL_BUFFER; 1858 1859 //EDM #pragma CSMI_SAS_END_PACK 1860 #pragma pack() 1861 1862 #endif // _CSMI_SAS_H_ 1863