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

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

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