Annotation of embedaddon/smartmontools/csmisas.h, revision 1.1.1.2

1.1       misho       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
1.1.1.2 ! misho     239: #ifndef __LP64__  // ILP32 (32-bit), LLP64 (64-bit MSVC, MinGW)
1.1       misho     240: #define __u32   unsigned long
1.1.1.2 ! misho     241: #else             // LP64 (64-bit Cygwin)
        !           242: #define __u32   unsigned int
        !           243: #endif
1.1       misho     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_

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>