Annotation of embedaddon/smartmontools/csmisas.h, revision 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>