Print this page
    
NEX-8705 Drivers for ATTO Celerity FC-162E Gen 5 and Celerity FC-162P Gen 6 16GB FC cards support
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_hbaapi.h
          +++ new/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_hbaapi.h
   1    1  /*
   2    2   * *****************************************************************************
   3    3   *
   4    4   * Description
   5    5   *      hbaapi.h - general header file for client
   6    6   *               and library developers
   7    7   *
   8    8   * License:
   9    9   *      The contents of this file are subject to the SNIA Public License
  10   10   *      Version 1.0 (the "License"); you may not use this file except in
  11   11   *      compliance with the License. You may obtain a copy of the License at
  12   12   *
  13   13   *      /http://www.snia.org/English/Resources/Code/OpenSource.html
  14   14   *
  15   15   *      Software distributed under the License is distributed on an "AS IS"
  16   16   *      basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17   17   *      the License for the specific language governing rights and limitations
  18   18   *      under the License.
  19   19   *
  20   20   * The Original Code is  SNIA HBA API general header file
  21   21   *
  22   22   * The Initial Developer of the Original Code is:
  23   23   *      Benjamin F. Kuo, Troika Networks, Inc. (benk@troikanetworks.com)
  24   24   *
  25   25   * Contributor(s):
  26   26   *      Tuan Lam, QLogic Corp. (t_lam@qlc.com)
  27   27   *      Dan Willie, Emulex Corp. (Dan.Willie@emulex.com)
  28   28   *      Dixon Hutchinson, Legato Systems, Inc. (dhutchin@legato.com)
  29   29   *      David Dillard, VERITAS Software Corp. (david.dillard@veritas.com)
  30   30   *
  31   31   *******************************************************************************
  32   32   *
  33   33   *   Changes:
  34   34   *      03/09/2000 Initial Draft
  35   35   *      (for other changes... see the CVS logs)
  36   36   *******************************************************************************
  37   37   */
  38   38  
  39   39  #ifndef _EMLXS_HBAAPI_H
  40   40  #define _EMLXS_HBAAPI_H
  41   41  
  42   42  #ifdef __cplusplus
  43   43  extern "C" {
  44   44  #endif
  45   45  
  46   46  /* Library version string */
  47   47  #define HBA_LIBVERSION 2
  48   48  
  49   49  /* DLL imports for WIN32 operation */
  50   50  #ifdef WIN32
  51   51  #ifdef HBAAPI_EXPORTS
  52   52  #define HBA_API __declspec(dllexport)
  53   53  #else
  54   54  #define HBA_API __declspec(dllimport)
  55   55  #endif
  56   56  #else
  57   57  #define HBA_API
  58   58  #endif
  59   59  
  60   60  /* OS specific definitions */
  61   61  
  62   62  #ifdef WIN32
  63   63  typedef unsigned char   HBA_UINT8;      // Unsigned  8 bits
  64   64  typedef          char   HBA_INT8;       // Signed    8 bits
  65   65  typedef unsigned short  HBA_UINT16;     // Unsigned 16 bits
  66   66  typedef          short  HBA_INT16;      // Signed   16 bits
  67   67  typedef unsigned int    HBA_UINT32;     // Unsigned 32 bits
  68   68  typedef          int    HBA_INT32;      // Signed   32 bits
  69   69  typedef void*           HBA_PVOID;      // Pointer  to void
  70   70  typedef HBA_UINT32      HBA_VOID32;     // Opaque   32 bits
  71   71  
  72   72  
  73   73  /* Don't confuse, _WIN32 with WIN32... OK, how do you accompish that */
  74   74  #ifdef _WIN32
  75   75  typedef                 _int64          HBA_INT64;
  76   76  typedef                 unsigned _int64 HBA_UINT64;
  77   77  #else
  78   78  typedef struct {
  79   79          TN_UINT32       lo_val;
  80   80          TN_UINT32       hi_val;
  81   81  } HBA_INT64;
  82   82  
  83   83  typedef struct {
  84   84          TN_UINT32       lo_val;
  85   85          TN_UINT32       hi_val;
  86   86  } HBA_UINT64;
  87   87  #endif  /*      #ifdef _WIN32   */
  88   88  
  89   89  
  90   90  #else
  91   91  #ifndef _KERNEL
  92   92  #include <time.h> /* Needed for struct tm */
  93   93  #endif /* ifndef _KERNEL */
  94   94  
  95   95  /* Note this section needs to be cleaned up for various Unix platforms */
  96   96  typedef unsigned char   HBA_UINT8;      /* Unsigned  8 bits */
  97   97  typedef          char   HBA_INT8;       /* Signed    8 bits */
  98   98  typedef unsigned short  HBA_UINT16;     /* Unsigned 16 bits */
  99   99  typedef          short  HBA_INT16;      /* Signed   16 bits */
 100  100  typedef unsigned int    HBA_UINT32;     /* Unsigned 32 bits */
 101  101  typedef          int    HBA_INT32;      /* Signed   32 bits */
 102  102  typedef void*           HBA_PVOID;      /* Pointer  to void */
 103  103  typedef HBA_UINT32      HBA_VOID32;     /* Opaque   32 bits */
 104  104  typedef long long       HBA_INT64;
 105  105  typedef long long       HBA_UINT64;
 106  106  
 107  107  #endif  /*  #ifdef WIN32 */
 108  108  
 109  109  
 110  110  /* 4.2.1        Handle to Device */
 111  111  typedef HBA_UINT32      HBA_HANDLE;
 112  112  
 113  113  #define HBA_HANDLE_INVALID              0
 114  114  
 115  115  /* 4.2.2        Status Return Values */
 116  116  typedef HBA_UINT32      HBA_STATUS;
 117  117  
 118  118  #define HBA_STATUS_OK                   0
 119  119  #define HBA_STATUS_ERROR                1   /* Error */
 120  120  #define HBA_STATUS_ERROR_NOT_SUPPORTED  2   /* Function not supported.*/
 121  121  #define HBA_STATUS_ERROR_INVALID_HANDLE 3   /* invalid handle */
 122  122  #define HBA_STATUS_ERROR_ARG            4   /* Bad argument */
 123  123  #define HBA_STATUS_ERROR_ILLEGAL_WWN    5   /* WWN not recognized */
 124  124  #define HBA_STATUS_ERROR_ILLEGAL_INDEX  6   /* Index not recognized */
 125  125  #define HBA_STATUS_ERROR_MORE_DATA      7   /* Larger buffer required */
 126  126  #define HBA_STATUS_ERROR_STALE_DATA     8   /* Information has changed since
 127  127                                               * last call to
 128  128                                               * HBA_Refreshinformation */
 129  129  #define HBA_STATUS_SCSI_CHECK_CONDITION 9   /* Obvious */
 130  130  #define HBA_STATUS_ERROR_BUSY           10  /* Adapter busy or reserved,
 131  131                                               * retry may be effective */
 132  132  #define HBA_STATUS_ERROR_TRY_AGAIN      11  /* Request timedout,
 133  133                                               * retry may be effective */
 134  134  #define HBA_STATUS_ERROR_UNAVAILABLE    12  /* Referenced HBA has been removed
 135  135                                               * or deactivated */
 136  136  #define HBA_STATUS_ERROR_ELS_REJECT     13  /* The requested ELS was rejected by
 137  137                                               * the local adapter */
 138  138  #define HBA_STATUS_ERROR_INVALID_LUN    14  /* The specified LUN is not provided 
 139  139                                               *  the specified adapter */
 140  140  #define HBA_STATUS_ERROR_INCOMPATIBLE   15  /* An incompatibility has been
 141  141                                  * detected among the library and driver modules 
 142  142                                  * invoked which will cause one or more functions 
 143  143                                  * in the highest version that all support to 
 144  144                                  * operate incorrectly.  The differing function 
 145  145                                  * sets of software modules implementing different
 146  146                                  * versions of the HBA API specification does not 
 147  147                                  * in itself constitute an incompatibility.  Known 
 148  148                                  * interoperability bugs among supposedly 
 149  149                                  * compatible versions should be reported as 
 150  150                                  * incompatibilities, but not all such 
 151  151                                  * interoperability bugs may be known.  This value
 152  152                                  * may be returned by any function that calls a 
 153  153                                  * Vendor Specific Library and returns an 
 154  154                                  * HBA_STATUS, and by HBA_LoadLibrary and 
 155  155                                  * HBA_GetAdapterName. */
 156  156  
 157  157  #define HBA_STATUS_ERROR_AMBIGUOUS_WWN  16  /* Multiple adapters have a matching
 158  158                                               * WWN. This could occur if the
 159  159                                               * NodeWWN of multiple adapters is 
 160  160                                               * identical */
 161  161  #define HBA_STATUS_ERROR_LOCAL_BUS      17  /* A persistent binding request
 162  162                                               * included a bad local SCSI bus
 163  163                                               * number */
 164  164  #define HBA_STATUS_ERROR_LOCAL_TARGET   18  /* A persistent binding request
 165  165                                               * included a bad local SCSI target
 166  166                                               * number */
 167  167  #define HBA_STATUS_ERROR_LOCAL_LUN      19  /* A persistent binding request
 168  168                                               * included a bad local SCSI logical
 169  169                                               * unit number */
 170  170  #define HBA_STATUS_ERROR_LOCAL_SCSIID_BOUND 20
 171  171                                              /* A persistent binding set request
 172  172                                               * included a local SCSI ID that was
 173  173                                               * already bound */
 174  174  #define HBA_STATUS_ERROR_TARGET_FCID    21  /* A persistent binding request
 175  175                                               * included a bad or unlocatable FCP
 176  176                                               * Target FCID */
 177  177  #define HBA_STATUS_ERROR_TARGET_NODE_WWN 22 /* A persistent binding request 
 178  178                                               * included a bad FCP Target Node
 179  179                                               * WWN */
 180  180  #define HBA_STATUS_ERROR_TARGET_PORT_WWN 23 /* A persistent binding request
 181  181                                               * included a bad FCP Target Port
 182  182                                               * WWN */
 183  183  #define HBA_STATUS_ERROR_TARGET_LUN     24  /* A persistent binding request
 184  184                                               * included an FCP Logical Unit Number
 185  185                                               * not defined by the identified 
 186  186                                               * Target*/
 187  187  #define HBA_STATUS_ERROR_TARGET_LUID    25  /* A persistent binding request
 188  188                                               * included an undefined or otherwise
 189  189                                               * inaccessible Logical Unit Unique
 190  190                                               * Identifier */
 191  191  #define HBA_STATUS_ERROR_NO_SUCH_BINDING 26 /* A persistent binding remove request
 192  192                                               * included a binding which did not
 193  193                                               * match a binding established by the
 194  194                                               * specified port */
 195  195  #define HBA_STATUS_ERROR_NOT_A_TARGET   27  /* A SCSI command was requested to an
 196  196                                               * Nx_Port that was not a SCSI
 197  197                                               * Target Port */
 198  198  #define HBA_STATUS_ERROR_UNSUPPORTED_FC4 28 /* A request was made concerning an 
 199  199                                               * unsupported FC-4 protocol */
 200  200  
 201  201  
 202  202  #define HBA_STATUS_ERROR_INCAPABLE      29  /* A request was made to enable 
 203  203                                               * unimplemented capabilities for a 
 204  204                                               * port */ 
 205  205  
 206  206  /* 4.2.3        Port Operational Modes Values */
 207  207  typedef HBA_UINT32 HBA_PORTTYPE;
 208  208  
 209  209  #define HBA_PORTTYPE_UNKNOWN            1   /* Unknown */
 210  210  #define HBA_PORTTYPE_OTHER              2   /* Other */
 211  211  #define HBA_PORTTYPE_NOTPRESENT         3   /* Not present */
 212  212  #define HBA_PORTTYPE_NPORT              5   /* Fabric  */
 213  213  #define HBA_PORTTYPE_NLPORT             6   /* Public Loop */
 214  214  #define HBA_PORTTYPE_FLPORT             7
 215  215  #define HBA_PORTTYPE_FPORT              8   /* Fabric Port */
 216  216  #define HBA_PORTTYPE_EPORT              9   /* Fabric expansion port */
 217  217  #define HBA_PORTTYPE_GPORT              10  /* Generic Fabric Port */
 218  218  #define HBA_PORTTYPE_LPORT              20  /* Private Loop */
 219  219  #define HBA_PORTTYPE_PTP                21  /* Point to Point */
 220  220  
 221  221  
 222  222  typedef HBA_UINT32 HBA_PORTSTATE;
 223  223  #define HBA_PORTSTATE_UNKNOWN           1   /* Unknown */
 224  224  #define HBA_PORTSTATE_ONLINE            2   /* Operational */
 225  225  #define HBA_PORTSTATE_OFFLINE           3   /* User Offline */
 226  226  #define HBA_PORTSTATE_BYPASSED          4   /* Bypassed */
 227  227  #define HBA_PORTSTATE_DIAGNOSTICS       5   /* In diagnostics mode */
 228  228  #define HBA_PORTSTATE_LINKDOWN          6   /* Link Down */
 229  229  #define HBA_PORTSTATE_ERROR             7   /* Port Error */
 230  230  #define HBA_PORTSTATE_LOOPBACK          8   /* Loopback */
 231  231  
  
    | 
      ↓ open down ↓ | 
    231 lines elided | 
    
      ↑ open up ↑ | 
  
 232  232  
 233  233  typedef HBA_UINT32 HBA_PORTSPEED;
 234  234  #define HBA_PORTSPEED_UNKNOWN           0   /* Unknown - transceiver incable
 235  235                                               * of reporting */
 236  236  #define HBA_PORTSPEED_1GBIT             1   /* 1 GBit/sec */
 237  237  #define HBA_PORTSPEED_2GBIT             2   /* 2 GBit/sec */
 238  238  #define HBA_PORTSPEED_10GBIT            4   /* 10 GBit/sec */
 239  239  #define HBA_PORTSPEED_4GBIT             8   /* 4 GBit/sec */
 240  240  #define HBA_PORTSPEED_8GBIT             16  /* 8 GBit/sec */
 241  241  #define HBA_PORTSPEED_16GBIT            32  /* 16 GBit/sec */
      242 +#define HBA_PORTSPEED_32GBIT            64  /* 32 GBit/sec */
 242  243  #define HBA_PORTSPEED_NOT_NEGOTIATED    (1<<15)   /* Speed not established */
 243  244  
 244  245  
 245  246  
 246  247  /* 4.2.4        Class of Service Values - See GS-2 Spec.*/
 247  248  
 248  249  typedef HBA_UINT32 HBA_COS;
 249  250  
 250  251  
 251  252  /* 4.2.5        Fc4Types Values */
 252  253  
 253  254  typedef struct HBA_fc4types {
 254  255      HBA_UINT8 bits[32];         /* 32 bytes of FC-4 per GS-2 */
 255  256  } HBA_FC4TYPES, *PHBA_FC4TYPES;
 256  257  
 257  258  /* 4.2.6        Basic Types */
 258  259  
 259  260  typedef struct HBA_wwn {
 260  261      HBA_UINT8 wwn[8];
 261  262  } HBA_WWN, *PHBA_WWN;
 262  263  
 263  264  typedef struct HBA_ipaddress {
 264  265      int ipversion;              /* see enumerations in RNID */
 265  266      union
 266  267      {
 267  268          unsigned char ipv4address[4];
 268  269          unsigned char ipv6address[16];
 269  270      } ipaddress;
 270  271  } HBA_IPADDRESS, *PHBA_IPADDRESS;
 271  272  
 272  273  typedef HBA_INT8        HBA_BOOLEAN;
 273  274  
 274  275  /* 4.2.7        Adapter Attributes */
 275  276  typedef struct hba_AdapterAttributes {
 276  277      char        Manufacturer[64];       /*Emulex */
 277  278      char        SerialNumber[64];       /* A12345 */
 278  279      char        Model[256];             /* QLA2200 */
 279  280      char        ModelDescription[256];  /* Agilent TachLite */
 280  281      HBA_WWN     NodeWWN;
 281  282      char        NodeSymbolicName[256];  /* From GS-3 */
 282  283      char        HardwareVersion[256];   /* Vendor use */
 283  284      char        DriverVersion[256];     /* Vendor use */
 284  285      char        OptionROMVersion[256];  /* Vendor use  - i.e. hardware boot ROM*/
 285  286      char        FirmwareVersion[256];   /* Vendor use */
 286  287      HBA_UINT32  VendorSpecificID;       /* Vendor specific */
 287  288      HBA_UINT32  NumberOfPorts;
 288  289      char        DriverName[256];        /* Binary path and/or name of driver
 289  290                                           *file */
 290  291  } HBA_ADAPTERATTRIBUTES, *PHBA_ADAPTERATTRIBUTES;
 291  292  
 292  293  /* 4.2.8        Port Attributes */
 293  294  typedef struct HBA_PortAttributes {
 294  295      HBA_WWN             NodeWWN;
 295  296      HBA_WWN             PortWWN;
 296  297      HBA_UINT32          PortFcId;
 297  298      HBA_PORTTYPE        PortType;               /*PTP, Fabric, etc. */
 298  299      HBA_PORTSTATE       PortState;
 299  300      HBA_COS             PortSupportedClassofService;
 300  301      HBA_FC4TYPES        PortSupportedFc4Types;
 301  302      HBA_FC4TYPES        PortActiveFc4Types;
 302  303      char                PortSymbolicName[256];
 303  304      char                OSDeviceName[256];      /* \device\ScsiPort3  */
 304  305      HBA_PORTSPEED       PortSupportedSpeed;
 305  306      HBA_PORTSPEED       PortSpeed;
 306  307      HBA_UINT32          PortMaxFrameSize;
 307  308      HBA_WWN             FabricName;
 308  309      HBA_UINT32          NumberofDiscoveredPorts;
 309  310  } HBA_PORTATTRIBUTES, *PHBA_PORTATTRIBUTES;
 310  311  
 311  312  
 312  313  
 313  314  /* 4.2.9        Port Statistics */
 314  315  
 315  316  typedef struct HBA_PortStatistics {
 316  317      HBA_INT64           SecondsSinceLastReset;
 317  318      HBA_INT64           TxFrames;
 318  319      HBA_INT64           TxWords;
 319  320      HBA_INT64           RxFrames;
 320  321      HBA_INT64           RxWords;
 321  322      HBA_INT64           LIPCount;
 322  323      HBA_INT64           NOSCount;
 323  324      HBA_INT64           ErrorFrames;
 324  325      HBA_INT64           DumpedFrames;
 325  326      HBA_INT64           LinkFailureCount;
 326  327      HBA_INT64           LossOfSyncCount;
 327  328      HBA_INT64           LossOfSignalCount;
 328  329      HBA_INT64           PrimitiveSeqProtocolErrCount;
 329  330      HBA_INT64           InvalidTxWordCount;
 330  331      HBA_INT64           InvalidCRCCount;
 331  332  } HBA_PORTSTATISTICS, *PHBA_PORTSTATISTICS;
 332  333  
 333  334  
 334  335  
 335  336  /* 4.2.10               FCP Attributes */
 336  337  
 337  338  typedef enum HBA_fcpbindingtype { TO_D_ID, TO_WWN, TO_OTHER } HBA_FCPBINDINGTYPE;
 338  339  
 339  340  typedef struct HBA_ScsiId {
 340  341      char                OSDeviceName[256];      /* \device\ScsiPort3  */
 341  342      HBA_UINT32          ScsiBusNumber;          /* Bus on the HBA */
 342  343      HBA_UINT32          ScsiTargetNumber;       /* SCSI Target ID to OS */
 343  344      HBA_UINT32          ScsiOSLun;
 344  345  } HBA_SCSIID, *PHBA_SCSIID;
 345  346  
 346  347  typedef struct HBA_FcpId {
 347  348      HBA_UINT32          FcId;
 348  349      HBA_WWN             NodeWWN;
 349  350      HBA_WWN             PortWWN;
 350  351      HBA_UINT64          FcpLun;
 351  352  } HBA_FCPID, *PHBA_FCPID;
 352  353  
 353  354  typedef struct HBA_LUID {
 354  355      char                buffer[256];    /* Unique Device Identifier */
 355  356  } HBA_LUID, *PHBA_LUID;
 356  357  
 357  358  typedef struct HBA_FcpScsiEntry {
 358  359      HBA_SCSIID          ScsiId;
 359  360      HBA_FCPID           FcpId;
 360  361  } HBA_FCPSCSIENTRY, *PHBA_FCPSCSIENTRY;
 361  362  
 362  363  typedef struct HBA_FcpScsiEntryV2 {
 363  364      HBA_SCSIID          ScsiId;
 364  365      HBA_FCPID           FcpId;
 365  366      HBA_LUID            LUID;
 366  367  } HBA_FCPSCSIENTRYV2, *PHBA_FCPSCSIENTRYV2;
 367  368  
 368  369  typedef struct HBA_FCPTargetMapping {
 369  370      HBA_UINT32          NumberOfEntries;
 370  371      HBA_FCPSCSIENTRY    entry[1];               /* Variable length array
 371  372                                                   * containing mappings */
 372  373  } HBA_FCPTARGETMAPPING, *PHBA_FCPTARGETMAPPING;
 373  374  
 374  375  typedef struct HBA_FCPTargetMappingV2 {
 375  376      HBA_UINT32          NumberOfEntries;
 376  377      HBA_FCPSCSIENTRYV2  entry[1];               /* Variable length array
 377  378                                                   * containing mappings */
 378  379  } HBA_FCPTARGETMAPPINGV2, *PHBA_FCPTARGETMAPPINGV2;
 379  380  
 380  381  typedef struct HBA_FCPBindingEntry {
 381  382      HBA_FCPBINDINGTYPE  type;
 382  383      HBA_SCSIID          ScsiId;
 383  384      HBA_FCPID           FcpId;                  /* WWN valid only if type is
 384  385                                                   * to WWN, FcpLun always valid */
 385  386      HBA_UINT32          FcId;
 386  387  } HBA_FCPBINDINGENTRY, *PHBA_FCPBINDINGENTRY;
 387  388  
 388  389  typedef struct HBA_FCPBinding {
 389  390      HBA_UINT32          NumberOfEntries;
 390  391      HBA_FCPBINDINGENTRY entry[1];               /* Variable length array */
 391  392  } HBA_FCPBINDING, *PHBA_FCPBINDING;
 392  393  
 393  394  /* 4.2.11       FC-3 Management Atrributes */
 394  395  
 395  396  typedef enum HBA_wwntype { NODE_WWN, PORT_WWN } HBA_WWNTYPE;
 396  397  
 397  398  typedef struct HBA_MgmtInfo {
 398  399      HBA_WWN             wwn;
 399  400      HBA_UINT32          unittype;
 400  401      HBA_UINT32          PortId;
 401  402      HBA_UINT32          NumberOfAttachedNodes;
 402  403      HBA_UINT16          IPVersion;
 403  404      HBA_UINT16          UDPPort;
 404  405      HBA_UINT8           IPAddress[16];
 405  406      HBA_UINT16          reserved;
 406  407      HBA_UINT16          TopologyDiscoveryFlags;
 407  408  } HBA_MGMTINFO, *PHBA_MGMTINFO;
 408  409  
 409  410  /* Event Codes */
 410  411  #define HBA_EVENT_LIP_OCCURRED          1
 411  412  #define HBA_EVENT_LINK_UP               2
 412  413  #define HBA_EVENT_LINK_DOWN             3
 413  414  #define HBA_EVENT_LIP_RESET_OCCURRED    4
 414  415  #define HBA_EVENT_RSCN                  5
 415  416  #define HBA_EVENT_PROPRIETARY           0xFFFF
 416  417  
 417  418  typedef struct HBA_Link_EventInfo {
 418  419      HBA_UINT32          PortFcId;               /* Port where event occurred */
 419  420      HBA_UINT32          Reserved[3];
 420  421  } HBA_LINK_EVENTINFO, *PHBA_LINK_EVENTINFO;
 421  422  
 422  423  typedef struct HBA_RSCN_EventInfo {
 423  424      HBA_UINT32          PortFcId;               /* Port where event occurred */
 424  425      HBA_UINT32          NPortPage;              /* Reference FC-FS for RSCN ELS
 425  426                                                   * "Affected N-Port Pages"*/
 426  427      HBA_UINT32          Reserved[2];
 427  428  } HBA_RSCN_EVENTINFO, *PHBA_RSCN_EVENTINFO;
 428  429  
 429  430  typedef struct HBA_Pty_EventInfo {
 430  431      HBA_UINT32 PtyData[4];                      /* Proprietary data */
 431  432  } HBA_PTY_EVENTINFO, *PHBA_PTY_EVENTINFO;
 432  433  
 433  434  typedef struct HBA_EventInfo {
 434  435      HBA_UINT32          EventCode;
 435  436      union {
 436  437          HBA_LINK_EVENTINFO      Link_EventInfo;
 437  438          HBA_RSCN_EVENTINFO      RSCN_EventInfo;
 438  439          HBA_PTY_EVENTINFO       Pty_EventInfo;
 439  440      }                   Event;
 440  441  } HBA_EVENTINFO, *PHBA_EVENTINFO;
 441  442  
 442  443  #ifndef _KERNEL
 443  444  typedef struct HBA_LibraryAttributes {
 444  445      HBA_BOOLEAN         final;
 445  446      char                LibPath[256];
 446  447      char                VName[256];
 447  448      char                VVersion[256];
 448  449      struct tm           build_date;
 449  450  } HBA_LIBRARYATTRIBUTES, *PHBA_LIBRARYATTRIBUTES;
 450  451  #endif /* ifndef _KERNEL */
 451  452  
 452  453  /* Persistant Binding... */
 453  454  typedef HBA_UINT32 HBA_BIND_TYPE;
 454  455  #define HBA_BIND_TO_D_ID                0x0001
 455  456  #define HBA_BIND_TO_WWPN                0x0002
 456  457  #define HBA_BIND_TO_WWNN                0x0004
 457  458  #define HBA_BIND_TO_LUID                0x0008
 458  459  #define HBA_BIND_TARGETS                0x0800
 459  460  
 460  461  /* A bit mask of Rev 2.0 persistent binding capabilities */
 461  462  typedef HBA_UINT32 HBA_BIND_CAPABILITY;
 462  463  /* The following are bit flags indicating persistent binding capabilities */
 463  464  #define HBA_CAN_BIND_TO_D_ID            0x0001
 464  465  #define HBA_CAN_BIND_TO_WWPN            0x0002
 465  466  #define HBA_CAN_BIND_TO_WWNN            0x0004
 466  467  #define HBA_CAN_BIND_TO_LUID            0x0008
 467  468  #define HBA_CAN_BIND_ANY_LUNS           0x0400
 468  469  #define HBA_CAN_BIND_TARGETS            0x0800
 469  470  #define HBA_CAN_BIND_AUTOMAP            0x1000
 470  471  #define HBA_CAN_BIND_CONFIGURED         0x2000
 471  472  
 472  473  #define HBA_BIND_STATUS_DISABLED        0x00
 473  474  #define HBA_BIND_STATUS_ENABLED         0x01
 474  475  
 475  476  typedef HBA_UINT32 HBA_BIND_STATUS;
 476  477  
 477  478  #define HBA_BIND_EFFECTIVE_AT_REBOOT    0x00
 478  479  #define HBA_BIND_EFFECTIVE_IMMEDIATE    0x01
 479  480  
 480  481  typedef HBA_UINT32 HBA_BIND_EFFECTIVE;
 481  482  
 482  483  typedef struct HBA_FCPBindingEntry2 {
 483  484      HBA_BIND_TYPE       type;
 484  485      HBA_SCSIID          ScsiId;
 485  486      HBA_FCPID           FcpId;
 486  487      HBA_LUID            LUID;
 487  488      HBA_STATUS          status;
 488  489  } HBA_FCPBINDINGENTRY2, *PHBA_FCPBINDINGENTRY2;
 489  490  
 490  491  typedef struct HBA_FcpBinding2 {
 491  492      HBA_UINT32          NumberOfEntries;
 492  493      HBA_FCPBINDINGENTRY2
 493  494                          entry[1];       /* Variable length array */
 494  495  } HBA_FCPBINDING2, *PHBA_FCPBINDING2;
 495  496  
 496  497  /* FC-4 Instrumentation */
 497  498  typedef struct HBA_FC4Statistics {
 498  499      HBA_INT64           InputRequests;
 499  500      HBA_INT64           OutputRequests;
 500  501      HBA_INT64           ControlRequests;
 501  502      HBA_INT64           InputMegabytes;
 502  503      HBA_INT64           OutputMegabytes;
 503  504  } HBA_FC4STATISTICS, *PHBA_FC4STATISTICS;
 504  505  
 505  506  
 506  507  typedef void *  HBA_CALLBACKHANDLE;
 507  508  /* Adapter Level Events */
 508  509  #define HBA_EVENT_ADAPTER_UNKNOWN       0x100
 509  510  #define HBA_EVENT_ADAPTER_ADD           0x101
 510  511  #define HBA_EVENT_ADAPTER_REMOVE        0x102
 511  512  #define HBA_EVENT_ADAPTER_CHANGE        0x103
 512  513  
 513  514  /* Port Level Events */
 514  515  #define HBA_EVENT_PORT_UNKNOWN          0x200
 515  516  #define HBA_EVENT_PORT_OFFLINE          0x201
 516  517  #define HBA_EVENT_PORT_ONLINE           0x202
 517  518  #define HBA_EVENT_PORT_NEW_TARGETS      0x203
 518  519  #define HBA_EVENT_PORT_FABRIC           0x204
 519  520  
 520  521  /* Port Statistics Events */
 521  522  #define HBA_EVENT_PORT_STAT_THRESHOLD   0x301
 522  523  #define HBA_EVENT_PORT_STAT_GROWTH      0x302
 523  524  
 524  525  /* Target Level Events */
 525  526  #define HBA_EVENT_TARGET_UNKNOWN        0x400
 526  527  #define HBA_EVENT_TARGET_OFFLINE        0x401
 527  528  #define HBA_EVENT_TARGET_ONLINE         0x402
 528  529  #define HBA_EVENT_TARGET_REMOVED        0x403
 529  530  
 530  531  /* Fabric Link  Events */
 531  532  #define HBA_EVENT_LINK_UNKNOWN          0x500
 532  533  #define HBA_EVENT_LINK_INCIDENT         0x501
 533  534  
 534  535  HBA_API HBA_UINT32 HBA_GetVersion();
 535  536  
 536  537  /*
 537  538   * Make sure HBA_LoadLibrary returns before any other threads
 538  539   * make calls to the library
 539  540   */
 540  541  HBA_API HBA_STATUS HBA_LoadLibrary();
 541  542  
 542  543  HBA_API HBA_STATUS HBA_FreeLibrary();
 543  544  
 544  545  HBA_API HBA_UINT32 HBA_GetNumberOfAdapters();
 545  546  
 546  547  HBA_API HBA_STATUS HBA_GetAdapterName(
 547  548      HBA_UINT32          adapterindex,
 548  549      char                *adaptername
 549  550      );
 550  551  
 551  552  HBA_API HBA_HANDLE HBA_OpenAdapter(
 552  553      char*               adaptername
 553  554      );
 554  555  
 555  556  HBA_API HBA_STATUS HBA_OpenAdapterByWWN(
 556  557      HBA_HANDLE          *handle,
 557  558      HBA_WWN             wwn
 558  559      );
 559  560  
 560  561  HBA_API void HBA_CloseAdapter(
 561  562      HBA_HANDLE          handle
 562  563      );
 563  564  
 564  565  HBA_API HBA_STATUS HBA_GetAdapterAttributes(
 565  566      HBA_HANDLE          handle,
 566  567      HBA_ADAPTERATTRIBUTES
 567  568                          *hbaattributes
 568  569      );
 569  570  
 570  571  HBA_API HBA_STATUS HBA_GetAdapterPortAttributes(
 571  572      HBA_HANDLE          handle,
 572  573      HBA_UINT32          portindex,
 573  574      HBA_PORTATTRIBUTES  *portattributes
 574  575      );
 575  576  
 576  577  HBA_API HBA_STATUS HBA_GetPortStatistics(
 577  578      HBA_HANDLE          handle,
 578  579      HBA_UINT32          portindex,
 579  580      HBA_PORTSTATISTICS  *portstatistics
 580  581      );
 581  582  
 582  583  HBA_API HBA_STATUS HBA_GetDiscoveredPortAttributes(
 583  584      HBA_HANDLE          handle,
 584  585      HBA_UINT32          portindex,
 585  586      HBA_UINT32          discoveredportindex,
 586  587      HBA_PORTATTRIBUTES  *portattributes
 587  588      );
 588  589  
 589  590  HBA_API HBA_STATUS HBA_GetPortAttributesByWWN(
 590  591      HBA_HANDLE          handle,
 591  592      HBA_WWN             PortWWN,
 592  593      HBA_PORTATTRIBUTES  *portattributes
 593  594      );
 594  595  
 595  596  HBA_API HBA_STATUS HBA_SendCTPassThruV2(
 596  597      HBA_HANDLE          handle,
 597  598      HBA_WWN             hbaPortWWN,
 598  599      void                *pReqBuffer,
 599  600      HBA_UINT32          ReqBufferSize,
 600  601      void                *pRspBuffer,
 601  602      HBA_UINT32          *pRspBufferSize
 602  603      );
 603  604  
 604  605  /* Depricated, but supported */
 605  606  HBA_API HBA_STATUS HBA_SendCTPassThru(
 606  607      HBA_HANDLE          handle,
 607  608      void                *pReqBuffer,
 608  609      HBA_UINT32          ReqBufferSize,
 609  610      void                *pRspBuffer,
 610  611      HBA_UINT32          RspBufferSize
 611  612      );
 612  613  
 613  614  HBA_API void HBA_RefreshAdapterConfiguration();
 614  615  
 615  616  HBA_API HBA_STATUS HBA_GetEventBuffer(
 616  617      HBA_HANDLE          handle,
 617  618      HBA_EVENTINFO       *EventBuffer,
 618  619      HBA_UINT32          *EventBufferCount
 619  620      );
 620  621  
 621  622  HBA_API HBA_STATUS HBA_SetRNIDMgmtInfo(
 622  623      HBA_HANDLE          handle,
 623  624      HBA_MGMTINFO        Info
 624  625      );
 625  626  
 626  627  HBA_API HBA_STATUS HBA_GetRNIDMgmtInfo(
 627  628      HBA_HANDLE          handle,
 628  629      HBA_MGMTINFO        *pInfo
 629  630      );
 630  631  
 631  632  HBA_API HBA_STATUS HBA_SendRNIDV2(
 632  633      HBA_HANDLE          handle,
 633  634      HBA_WWN             hbaPortWWN,
 634  635      HBA_WWN             destWWN,
 635  636      HBA_UINT32          destFCID,
 636  637      HBA_UINT32          NodeIdDataFormat,
 637  638      void                *pRspBuffer,
 638  639      HBA_UINT32          *pRspBufferSize
 639  640      );
 640  641  
 641  642  /* Depricated, but supported */
 642  643  HBA_API HBA_STATUS HBA_SendRNID(
 643  644      HBA_HANDLE          handle,
 644  645      HBA_WWN             wwn,
 645  646      HBA_WWNTYPE         wwntype,
 646  647      void                *pRspBuffer,
 647  648      HBA_UINT32          *pRspBufferSize
 648  649      );
 649  650  
 650  651  HBA_API HBA_STATUS HBA_SendRLS (
 651  652      HBA_HANDLE          handle,
 652  653      HBA_WWN             hbaPortWWN,
 653  654      HBA_WWN             destWWN,
 654  655      void                *pRspBuffer,
 655  656      HBA_UINT32          *pRspBufferSize
 656  657      );
 657  658  
 658  659  HBA_API HBA_STATUS HBA_SendRPL (
 659  660      HBA_HANDLE          handle,
 660  661      HBA_WWN             hbaPortWWN,
 661  662      HBA_WWN             agent_wwn,
 662  663      HBA_UINT32          agent_domain,
 663  664      HBA_UINT32          portindex,
 664  665      void                *pRspBuffer,
 665  666      HBA_UINT32          *pRspBufferSize
 666  667      );
 667  668  
 668  669  HBA_API HBA_STATUS HBA_SendRPS (
 669  670      HBA_HANDLE          handle,
 670  671      HBA_WWN             hbaPortWWN,
 671  672      HBA_WWN             agent_wwn,
 672  673      HBA_UINT32          agent_domain,
 673  674      HBA_WWN             object_wwn,
 674  675      HBA_UINT32          object_port_number,
 675  676      void                *pRspBuffer,
 676  677      HBA_UINT32          *pRspBufferSize
 677  678      );
 678  679  
 679  680  HBA_API HBA_STATUS HBA_SendSRL (
 680  681      HBA_HANDLE          handle,
 681  682      HBA_WWN             hbaPortWWN,
 682  683      HBA_WWN             wwn,
 683  684      HBA_UINT32          domain,
 684  685      void                *pRspBuffer,
 685  686      HBA_UINT32          *pRspBufferSize
 686  687      );
 687  688  
 688  689  HBA_API HBA_STATUS HBA_SendLIRR (
 689  690      HBA_HANDLE          handle,
 690  691      HBA_WWN             sourceWWN,
 691  692      HBA_WWN             destWWN,
 692  693      HBA_UINT8           function,
 693  694      HBA_UINT8           type,
 694  695      void                *pRspBuffer,
 695  696      HBA_UINT32          *pRspBufferSize
 696  697      );
 697  698  
 698  699  
 699  700  HBA_API HBA_STATUS HBA_GetFC4Statistics (
 700  701      HBA_HANDLE          handle,
 701  702      HBA_WWN             portWWN,
 702  703      HBA_UINT8           FC4type,
 703  704      HBA_FC4STATISTICS   *pstatistics
 704  705      );
 705  706  
 706  707  HBA_API HBA_STATUS HBA_GetFCPStatistics (
 707  708      HBA_HANDLE          handle,
 708  709      const HBA_SCSIID    *lunit,
 709  710      HBA_FC4STATISTICS   *pstatistics);
 710  711  
 711  712  HBA_API void HBA_RefreshInformation(
 712  713      HBA_HANDLE          handle
 713  714      );
 714  715  
 715  716  HBA_API void HBA_ResetStatistics(
 716  717      HBA_HANDLE          handle,
 717  718      HBA_UINT32          portindex
 718  719      );
 719  720  
 720  721  HBA_API HBA_STATUS HBA_GetFcpTargetMapping(
 721  722      HBA_HANDLE          handle,
 722  723      HBA_FCPTARGETMAPPING
 723  724                          *pmapping
 724  725      );
 725  726  
 726  727  HBA_API HBA_STATUS HBA_GetFcpTargetMappingV2(
 727  728      HBA_HANDLE          handle,
 728  729      HBA_WWN             hbaPortWWN,
 729  730      HBA_FCPTARGETMAPPINGV2
 730  731                          *pmapping
 731  732      );
 732  733  
 733  734  HBA_API HBA_STATUS HBA_GetBindingCapability(
 734  735      HBA_HANDLE          handle,
 735  736      HBA_WWN             hbaPortWWN,
 736  737      HBA_BIND_CAPABILITY *pcapability
 737  738      );
 738  739  
 739  740  HBA_API HBA_STATUS HBA_GetBindingSupport(
 740  741      HBA_HANDLE          handle,
 741  742      HBA_WWN             hbaPortWWN,
 742  743      HBA_BIND_CAPABILITY *pcapability
 743  744      );
 744  745  
 745  746  HBA_API HBA_STATUS HBA_SetBindingSupport(
 746  747      HBA_HANDLE          handle,
 747  748      HBA_WWN             hbaPortWWN,
 748  749      HBA_BIND_CAPABILITY capability
 749  750      );
 750  751  
 751  752  HBA_API HBA_STATUS HBA_SetPersistentBindingV2(
 752  753      HBA_HANDLE          handle,
 753  754      HBA_WWN             hbaPortWWN,
 754  755      const HBA_FCPBINDING2
 755  756                          *pbinding
 756  757      );
 757  758  
 758  759  HBA_API HBA_STATUS HBA_GetPersistentBindingV2(
 759  760      HBA_HANDLE          handle,
 760  761      HBA_WWN             hbaPortWWN,
 761  762      HBA_FCPBINDING2     *binding
 762  763      );
 763  764  
 764  765  HBA_API HBA_STATUS HBA_RemovePersistentBinding(
 765  766      HBA_HANDLE          handle,
 766  767      HBA_WWN             hbaPortWWN,
 767  768      const HBA_FCPBINDING2
 768  769                          *pbinding
 769  770      );
 770  771  
 771  772  /* Depricated, but supported */
 772  773  HBA_API HBA_STATUS HBA_GetFcpPersistentBinding(
 773  774      HBA_HANDLE          handle,
 774  775      HBA_FCPBINDING      *binding
 775  776      );
 776  777  
 777  778  HBA_API HBA_STATUS HBA_RemoveAllPersistentBindings(
 778  779      HBA_HANDLE          handle,
 779  780      HBA_WWN             hbaPortWWN
 780  781      );
 781  782  
 782  783  HBA_STATUS HBA_ScsiInquiryV2 (
 783  784      HBA_HANDLE          handle,
 784  785      HBA_WWN             hbaPortWWN,
 785  786      HBA_WWN             discoveredPortWWN,
 786  787      HBA_UINT64          fcLUN,
 787  788      HBA_UINT8           CDB_Byte1,
 788  789      HBA_UINT8           CDB_BYte2,
 789  790      void                *pRspBuffer,
 790  791      HBA_UINT32          *pRspBufferSize,
 791  792      HBA_UINT8           *pScsiStatus,
 792  793      void                *pSenseBuffer,
 793  794      HBA_UINT32          *pSenseBufferSize
 794  795      );
 795  796  
 796  797  /* Depricated, but supported */
 797  798  HBA_API HBA_STATUS HBA_SendScsiInquiry (
 798  799      HBA_HANDLE          handle,
 799  800      HBA_WWN             PortWWN,
 800  801      HBA_UINT64          fcLUN,
 801  802      HBA_UINT8           EVPD,
 802  803      HBA_UINT32          PageCode,
 803  804      void                *pRspBuffer,
 804  805      HBA_UINT32          RspBufferSize,
 805  806      void                *pSenseBuffer,
 806  807      HBA_UINT32          SenseBufferSize
 807  808      );
 808  809  
 809  810  HBA_API HBA_STATUS HBA_ScsiReportLUNsV2(
 810  811      HBA_HANDLE          handle,
 811  812      HBA_WWN             hbaPortWWN,
 812  813      HBA_WWN             discoveredPortWWN,
 813  814      void                *pRespBuffer,
 814  815      HBA_UINT32          *pRespBufferSize,
 815  816      HBA_UINT8           *pScsiStatus,
 816  817      void                *pSenseBuffer,
 817  818      HBA_UINT32          *pSenseBufferSize
 818  819      );
 819  820  
 820  821  /* Depricated, but supported */
 821  822  HBA_API HBA_STATUS HBA_SendReportLUNs (
 822  823      HBA_HANDLE          handle,
 823  824      HBA_WWN             portWWN,
 824  825      void                *pRspBuffer,
 825  826      HBA_UINT32          RspBufferSize,
 826  827      void                *pSenseBuffer,
 827  828      HBA_UINT32          SenseBufferSize
 828  829      );
 829  830  
 830  831  HBA_API HBA_STATUS HBA_ScsiReadCapacityV2(
 831  832      HBA_HANDLE          handle,
 832  833      HBA_WWN             hbaPortWWN,
 833  834      HBA_WWN             discoveredPortWWN,
 834  835      HBA_UINT64          fcLUN,
 835  836      void                *pRspBuffer,
 836  837      HBA_UINT32          *pRspBufferSize,
 837  838      HBA_UINT8           *pScsiStatus,
 838  839      void                *pSenseBuffer,
 839  840      HBA_UINT32          *SenseBufferSize
 840  841      );
 841  842  
 842  843  /* Depricated, but supported */
 843  844  HBA_API HBA_STATUS HBA_SendReadCapacity (
 844  845      HBA_HANDLE          handle,
 845  846      HBA_WWN             portWWN,
 846  847      HBA_UINT64          fcLUN,
 847  848      void                *pRspBuffer,
 848  849      HBA_UINT32          RspBufferSize,
 849  850      void                *pSenseBuffer,
 850  851      HBA_UINT32          SenseBufferSize
 851  852      );
 852  853  
 853  854  #ifndef _KERNEL
 854  855  HBA_API HBA_UINT32 HBA_GetVendorLibraryAttributes (
 855  856      HBA_UINT32          adapter_index,
 856  857      HBA_LIBRARYATTRIBUTES
 857  858                          *attributes
 858  859      );
 859  860  #endif /* ifndef _KERNEL */
 860  861  
 861  862  HBA_API HBA_STATUS HBA_RemoveCallback(
 862  863      HBA_CALLBACKHANDLE  callbackHandle
 863  864      );
 864  865  
 865  866  HBA_API HBA_STATUS HBA_RegisterForAdapterAddEvents(
 866  867      void                (*callback) (
 867  868          void            *data,
 868  869          HBA_WWN         PortWWN,
 869  870          HBA_UINT32      eventType
 870  871          ),
 871  872      void                *userData,
 872  873      HBA_CALLBACKHANDLE *callbackHandle
 873  874      );
 874  875  
 875  876  HBA_API HBA_STATUS HBA_RegisterForAdapterEvents(
 876  877      void                (*callback)(
 877  878          void            *data,
 878  879          HBA_WWN         PortWWN,
 879  880          HBA_UINT32      eventType
 880  881          ),
 881  882      void                *userData,
 882  883      HBA_HANDLE          handle,
 883  884      HBA_CALLBACKHANDLE  *callbackHandle
 884  885      );
 885  886  
 886  887  HBA_API HBA_STATUS HBA_RegisterForAdapterPortEvents(
 887  888      void                (*callback)(
 888  889          void            *data,
 889  890          HBA_WWN         PortWWN,
 890  891          HBA_UINT32      eventType,
 891  892          HBA_UINT32      fabricPortID
 892  893          ),
 893  894      void                *userData,
 894  895      HBA_HANDLE          handle,
 895  896      HBA_WWN             PortWWN,
 896  897      HBA_CALLBACKHANDLE *callbackHandle
 897  898      );
 898  899  
 899  900  HBA_API HBA_STATUS HBA_RegisterForAdapterPortStatEvents(
 900  901      void                (*callback)(
 901  902          void            *data,
 902  903          HBA_WWN         PortWWN,
 903  904          HBA_UINT32      eventType
 904  905          ),
 905  906      void                *userData,
 906  907      HBA_HANDLE          handle,
 907  908      HBA_WWN             PortWWN,
 908  909      HBA_PORTSTATISTICS  stats,
 909  910      HBA_UINT32          statType,
 910  911      HBA_CALLBACKHANDLE  *callbackHandle
 911  912      );
 912  913  
 913  914  
 914  915  HBA_API HBA_STATUS HBA_RegisterForTargetEvents(
 915  916      void                (*callback)(
 916  917          void            *data,
 917  918          HBA_WWN         hbaPortWWN,
 918  919          HBA_WWN         discoveredPortWWN,
 919  920          HBA_UINT32      eventType
 920  921          ),
 921  922      void                *userData,
 922  923      HBA_HANDLE          handle,
 923  924      HBA_WWN             hbaPortWWN,
 924  925      HBA_WWN             discoveredPortWWN,
 925  926      HBA_CALLBACKHANDLE  *callbackHandle,
 926  927      HBA_UINT32          allTargets
 927  928      );
 928  929  
 929  930  HBA_API HBA_STATUS HBA_RegisterForLinkEvents(
 930  931      void                (*callback)
 931  932      (
 932  933          void            *data,
 933  934          HBA_WWN         adapterWWN,
 934  935          HBA_UINT32      eventType,
 935  936          void            *pRLIRBuffer,
 936  937          HBA_UINT32      RLIRBufferSize
 937  938          ),
 938  939      void                *userData,
 939  940      void                *pRLIRBuffer,
 940  941      HBA_UINT32          RLIRBufferSize,
 941  942      HBA_HANDLE          handle,
 942  943      HBA_CALLBACKHANDLE  *callbackHandle
 943  944  );
 944  945  
 945  946  /* Wrapper library specific entry points */
 946  947  
 947  948  #ifndef _KERNEL
 948  949  HBA_API HBA_UINT32 HBA_GetWrapperLibraryAttributes (
 949  950      HBA_LIBRARYATTRIBUTES
 950  951                          *attributes
 951  952  );
 952  953  #endif /* ifndef _KERNEL */
 953  954  
 954  955  #ifdef __cplusplus
 955  956  }
 956  957  #endif
 957  958  
 958  959  #endif /* _EMLXS_HBAAPI_H */
  
    | 
      ↓ open down ↓ | 
    707 lines elided | 
    
      ↑ open up ↑ | 
  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX