File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / smartmontools / csmisas.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 16:32:16 2012 UTC (12 years, 4 months ago) by misho
Branches: smartmontools, elwix, MAIN
CVS tags: v6_1p0, v6_1, v5_43, v5_42, HEAD
smartmontools

    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>