1 /*
   2  * ****************************************************************************
   3  *
   4  * Description
   5  *      smhbaapi.h - general header file for client
   6  *      and library developers
   7  *
   8  * License:
   9  *      The contents of this file are subject to the SNIA Public License
  10  *      Version 1.0 (the "License"); you may not use this file except in
  11  *      compliance with the License. You may obtain a copy of the License at
  12  *
  13  *      /http://www.snia.org/English/Resources/Code/OpenSource.html
  14  *
  15  *      Software distributed under the License is distributed on an "AS IS"
  16  *      basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17  *      the License for the specific language governing rights and limitations
  18  *      under the License.
  19  *
  20  * The Original Code for  SM-HBA API general header file
  21  *
  22  * The Initial Developer of the Original Code is:
  23  *      Benjamin F. Kuo, Troika Networks, Inc. (benk@troikanetworks.com)
  24  *
  25  * Contributor(s):
  26  *      Tuan Lam, QLogic Corp. (t_lam@qlc.com)
  27  *      Dan Willie, Emulex Corp. (Dan.Willie@emulex.com)
  28  *      Dixon Hutchinson, Legato Systems, Inc. (dhutchin@legato.com)
  29  *      David Dillard, VERITAS Software Corp. (david.dillard@veritas.com)
  30  *
  31  * ****************************************************************************
  32  *
  33  * Adding on SM-HBA related definitions.
  34  *
  35  * - Includes the original HBA API header.
  36  * - SMHBA_* interfaces and structures are defined.
  37  *
  38  * ****************************************************************************
  39  */
  40 /*
  41  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  42  * Use is subject to license terms.
  43  */
  44 
  45 #ifndef _SMHBAAPI_H_
  46 #define _SMHBAAPI_H_
  47 
  48 #ifdef __cplusplus
  49 extern "C" {
  50 #endif
  51 
  52 #include <hbaapi.h>
  53 
  54 /* Library version string */
  55 #define SMHBA_LIBVERSION 1
  56 
  57 /*
  58  * A SCSI function was requested at a time when issuing the requested command
  59  * would cause a SCSI overlapped command condition (see SAM-3)
  60  */
  61 #define HBA_STATUS_ERROR_TARGET_BUSY    30
  62 /* SM-HBA 6.2   Status Return Values */
  63 /* A call was made to HBA_FreeLibrary when no library was loaded */
  64 #define HBA_STATUS_ERROR_NOT_LOADED     31
  65 /* A call was made to HBA_LoadLibrary when a library was already loaded */
  66 #define HBA_STATUS_ERROR_ALREADY_LOADED 32
  67 /*
  68  * The Address Identifier specified in a call to HBA_SendRNIDV2
  69  * violates access control rules * for that call.
  70  */
  71 #define HBA_STATUS_ERROR_ILLEGAL_FCID   33
  72 #define HBA_STATUS_ERROR_NOT_ASCSIDEVICE    34
  73 #define HBA_STATUS_ERROR_INVALID_PROTOCOL_TYPE  35
  74 #define HBA_STATUS_ERROR_BAD_EVENT_TYPE 36
  75 
  76 
  77 /* SM-HBA 6.4.1.1 Port Type */
  78 #define HBA_PORTTYPE_SASDEVICE   30 /* SAS (SSP or STP) */
  79 #define HBA_PORTTYPE_SATADEVICE  31 /* SATA Device, i.e. Direct Attach SATA */
  80 #define HBA_PORTTYPE_SASEXPANDER 32 /* SAS Expander */
  81 
  82 /* SM-HBA 6.4.1.2 Port State */
  83 #define HBA_PORTSTATE_DEGRADED  9 /* Degraded, but Operational mode */
  84 
  85 /* SM-HBA 6.11.1.3 Port Speed */
  86 #define HBA_PORTSPEED_4GBIT     8  /*  4 GBit / sec */
  87 
  88 /* SM-HBA 6.1   Basic Attributes Types */
  89 typedef struct SMHBA_scsilun {HBA_UINT8 lun[8]; }
  90     SMHBA_SCSILUN, *PSMHBA_SCSILUN;
  91                         /* A byte array representation of a SCSI */
  92                         /* LUN (see SAM-4). The first byte of the */
  93                         /* LUN shall be in the first byte of the */
  94                         /* array, and successive bytes of the SCSI */
  95                         /* LUN shall be in successive bytes of the */
  96                         /* array. */
  97 typedef unsigned long HBA_SCSILUN;
  98                         /* A 64 bit unsigned integer representation */
  99                         /* of a SCSI LUN (see SAM-4); */
 100                         /* may use OS-specific typedef. */
 101                         /* Byte zero of a SCSI LUN shall be stored */
 102                         /* in the lowest memory address */
 103                         /* of the unsigned 64-bit integer value, */
 104                         /* and successive bytes of the SCSI LUN */
 105                         /* shall be stored in successively higher memory */
 106                         /* addresses of the unsigned 64-bit intege value. */
 107                         /* Note that computers often do not store */
 108                         /* a byte array in memory in the same order */
 109                         /* as they store an integer. */
 110                         /* This standard requires storage as a byte array */
 111 
 112 
 113 /* SM-HBA 6.3.1 Generic Adapter Attribute */
 114 typedef struct SMHBA_AdapterAttributes {
 115         char                    Manufacturer[64];
 116         char                    SerialNumber[64];
 117         char                    Model[256];
 118         char                    ModelDescription[256];
 119         char                    HardwareVersion[256];
 120         char                    DriverVersion[256];
 121         char                    OptionROMVersion[256];
 122         char                    FirmwareVersion[256];
 123         HBA_UINT32              VendorSpecificID;
 124         char                    DriverName[256];
 125         char                    HBASymbolicName[256];
 126         char                    RedundantOptionROMVersion[256];
 127         char                    RedundantFirmwareVersion[256];
 128 } SMHBA_ADAPTERATTRIBUTES, *PSMHBA_ADAPTERATTRIBUTES;
 129 
 130 /* SM-HBA 6.4.6 SMHBA FC Port Attributes */
 131 typedef struct SMHBA_FC_Port {
 132         HBA_WWN                 NodeWWN;
 133         HBA_WWN                 PortWWN;
 134         HBA_UINT32              FcId;
 135         HBA_COS                 PortSupportedClassofService;
 136         HBA_FC4TYPES            PortSupportedFc4Types;
 137         HBA_FC4TYPES            PortActiveFc4Types;
 138         HBA_WWN                 FabricName;
 139         char                    PortSymbolicName[256];
 140         HBA_UINT32              NumberofDiscoveredPorts;
 141         HBA_UINT8               NumberofPhys;
 142 }SMHBA_FC_PORT, *PSMHBA_FC_PORT;
 143 
 144 /* SM-HBA 6.4.7.1 HBA_SASPortProtocol */
 145 typedef HBA_UINT32      HBA_SASPORTPROTOCOL;
 146 #define HBA_SASPORTPROTOCOL_SSP     1 /* Serial SCSI Protocol Port */
 147 #define HBA_SASPORTPROTOCOL_STP     2 /* Serial ATA Tunneling Protocol Port */
 148 #define HBA_SASPORTPROTOCOL_SMP     4 /* Serial Management Protocol Port */
 149 /* SATA Device, Direct Attached or anywhere in the domain. */
 150 #define HBA_SASPORTPROTOCOL_SATA    8
 151 
 152 /* SM-HBA 6.4.8 SMHBA SAS Port Attributes */
 153 typedef struct SMHBA_SAS_Port {
 154         HBA_SASPORTPROTOCOL     PortProtocol;
 155         HBA_WWN                 LocalSASAddress;
 156         HBA_WWN                 AttachedSASAddress;
 157         HBA_UINT32              NumberofDiscoveredPorts;
 158         HBA_UINT32              NumberofPhys;
 159 } SMHBA_SAS_PORT, *PSMHBA_SAS_PORT;
 160 
 161 /* SM-HBA 6.4.2 Generic Port Attributes */
 162 typedef union SMHBA_Port {
 163         SMHBA_FC_PORT           *FCPort;
 164         SMHBA_SAS_PORT          *SASPort;
 165 } SMHBA_PORT, *PSMHBA_PORT;
 166 
 167 typedef struct SMHBA_PortAttributes {
 168         HBA_PORTTYPE            PortType;
 169         HBA_PORTSTATE           PortState;
 170         char                    OSDeviceName[256];
 171         SMHBA_PORT              PortSpecificAttribute;
 172 } SMHBA_PORTATTRIBUTES, *PSMHBA_PORTATTRIBUTES;
 173 
 174 /* SM-HBA 6.5.1.1 FC Phy Speed */
 175 typedef HBA_UINT32 HBA_FCPHYSPEED;
 176 /* Unknown transceiver incapable of reporting */
 177 #define HBA_FCSPEED_UNKNOWN             0
 178 /*
 179  * The following are redundantly defined in SM-HBA 6.11.1.3 Port Speed.
 180  * #define  HBA_PORTSPEED_1GBIT            1       1 GBit/sec
 181  * #define  HBA_PORTSPEED_2GBIT            2          2 GBit/sec
 182  * #define  HBA_PORTSPEED_10GBIT           4          10 GBit/sec
 183  * #define  HBA_PORTSPEED_4GBIT            8          4 GBit/sec
 184  */
 185 #define HBA_FCPHYSPEED_8GBIT            16  /* 8 GBit/sec */
 186 #define HBA_FCPHYSPEED_16GBIT           32  /* 16 GBit/sec */
 187 /*
 188  * The following conflicts with HBA API
 189  * #define  HBA_PORTSPEED_NOT_NEGOTIATED   (1<<15)  Speed not established
 190  */
 191 
 192 /* SM-HBA 6.6.1.2 SM-HBA FC Phy Type */
 193 typedef HBA_UINT8 HBA_FCPHYTYPE;
 194 #define HBA_FCPHYTYPE_UNKNOWN               1 /* Unknown Phy type */
 195 #define HBA_FCPHYTYPE_OPTICAL               2 /* Optical Phy */
 196 #define HBA_FCPHYTYPE_COPPER                4 /* Copper Phy */
 197 
 198 /* SM-HBA 6.5.2 SM-HBA FC Phy Attributes */
 199 typedef struct SMHBA_FC_Phy {
 200         HBA_FCPHYSPEED      PhySupportedSpeed;  /* PhySupportedSpeed */
 201         HBA_FCPHYSPEED      PhySpeed;           /* PhySpeed */
 202         HBA_FCPHYTYPE       PhyType;
 203         HBA_UINT32          MaxFrameSize;       /* MaxFrameSize */
 204 } SMHBA_FC_PHY, *PSMHBA_FC_PHY;
 205 
 206 /* SM-HBA 6.5.4 SAS PHY Attribute Data Declaration */
 207 typedef HBA_UINT32 HBA_SASPHYSPEED;
 208 
 209 #define HBA_SASSTATE_UNKNOWN    0x00 /* Phy is enabled. Speed is unknown */
 210 #define HBA_SASSTATE_DISABLED   0x01 /* Phy is disabled. */
 211 /* Phy is enabled. But failed speed negotiation. */
 212 #define HBA_SASSTATE_FAILED     0x02
 213 /*
 214  * Phy is enabled. Detected a SATA device and entered the SATA Spinup hold
 215  * state.
 216  */
 217 #define HBA_SASSTATE_SATASPINUP    0x03
 218 /* The phy is attached to a Port Selector (see SATA-2.6). */
 219 #define HBA_SASSTATE_SATAPORTSEL    0x04
 220 #define HBA_SASSPEED_1_5GBIT        0x08 /*  1.5 GBit/sec */
 221 #define HBA_SASSPEED_3GBIT          0x09 /*  3 GBit/sec */
 222 #define HBA_SASSPEED_6GBIT          0x0a /*  6 GBit/sec */
 223 #define HBA_SASSPEED_12GBIT         0x0b /* 12 GBit/sec */
 224 
 225 /* SM-HBA  6.5.5 SAS Phy Attribute */
 226 typedef struct SMHBA_SAS_Phy {
 227         HBA_UINT8           PhyIdentifier;
 228         HBA_SASPHYSPEED     NegotiatedLinkRate;
 229         HBA_SASPHYSPEED     ProgrammedMinLinkRate;
 230         HBA_SASPHYSPEED     HardwareMinLinkRate;
 231         HBA_SASPHYSPEED     ProgrammedMaxLinkRate;
 232         HBA_SASPHYSPEED     HardwareMaxLinkRate;
 233         HBA_WWN             domainPortWWN;
 234 } SMHBA_SAS_PHY, *PSMHBA_SAS_PHY;
 235 
 236 /* SM-HBA 6.6.1.1 Protocol Statistics Data Declarations */
 237 /* Statistical counters for FC-4, SSP, STP, SMP protocols */
 238 typedef struct SMHBA_ProtocolStatistics {
 239         HBA_INT64           SecondsSinceLastReset;
 240         HBA_INT64           InputRequests;
 241         HBA_INT64           OutputRequests;
 242         HBA_INT64           ControlRequests;
 243         HBA_INT64           InputMegabytes;
 244         HBA_INT64           OutputMegabytes;
 245 } SMHBA_PROTOCOLSTATISTICS, *PSMHBA_PROTOCOLSTATISTICS;
 246 
 247 /* SM-HBA 6.6.2.1 Port Statistics Data Declarations */
 248 typedef struct SMHBA_PortStatistics {
 249         HBA_INT64           SecondsSinceLastReset;
 250         HBA_INT64           TxFrames;
 251         HBA_INT64           TxWords;
 252         HBA_INT64           RxFrames;
 253         HBA_INT64           RxWords;
 254 }SMHBA_PORTSTATISTICS, *PSMHBA_PORTSTATISTICS;
 255 
 256 /* SM-HBA 6.6.2.2 SAS Phy Statistics Data Declaration */
 257 typedef struct SMHBA_SASPhyStatistics {
 258         HBA_INT64           SecondsSinceLastReset;
 259         HBA_INT64           TxFrames;
 260         HBA_INT64           TxWords;
 261         HBA_INT64           RxFrames;
 262         HBA_INT64           RxWords;
 263         HBA_INT64           InvalidDwordCount;
 264         HBA_INT64           RunningDisparityErrorCount;
 265         HBA_INT64           LossofDwordSyncCount;
 266         HBA_INT64           PhyResetProblemCount;
 267 } SMHBA_SASPHYSTATISTICS, *PSMHBA_SASPHYSTATISTICS;
 268 
 269 /* SM-HBA 6.6.2.4 FC Phy Statistics Data Declaration */
 270 /* Statistical counters for FC-0, FC-1, and FC-2 */
 271 typedef struct SMHBA_FCPhyStatistics {
 272         HBA_INT64           SecondsSinceLastReset;
 273         HBA_INT64           TxFrames;
 274         HBA_INT64           TxWords;
 275         HBA_INT64           RxFrames;
 276         HBA_INT64           RxWords;
 277         HBA_INT64           LIPCount;
 278         HBA_INT64           NOSCount;
 279         HBA_INT64           ErrorFrames;
 280         HBA_INT64           DumpedFrames;
 281         HBA_INT64           LinkFailureCount;
 282         HBA_INT64           LossOfSyncCount;
 283         HBA_INT64           LossOfSignalCount;
 284         HBA_INT64           PrimitiveSeqProtocolErrCount;
 285         HBA_INT64           InvalidTxWordCount;
 286         HBA_INT64           InvalidCRCCount;
 287 }SMHBA_FCPHYSTATISTICS, *PSMHBA_FCPHYSTATISTICS;
 288 
 289 /* SM-HBA 6.6.2.1 Phy Statistics Data Declaration */
 290 typedef union SMHBA_PhyStatistics {
 291         SMHBA_SASPHYSTATISTICS  *SASPhyStatistics;
 292         SMHBA_FCPHYSTATISTICS   *FCPhyStatistics;
 293 } SMHBA_PHYSTATISTICS, *PSMHBA_PHYSTATISTICS;
 294 
 295 /* SM-HBA 6.7.1.1 SMHBA_BIND_CAPABILITY */
 296 typedef HBA_UINT32 SMHBA_BIND_CAPABILITY;
 297 #define SMHBA_CAN_BIND_TO_WWPN 0x0001
 298 #define SMHBA_CAN_BIND_TO_LUID 0x0002
 299 #define SMHBA_CAN_BIND_ANY_LUNS 0x0400
 300 #define SMHBA_CAN_BIND_AUTOMAP 0x0800
 301 
 302 /* SM-HBA 6.7.1.2 SMHBA_BIND_TYPE */
 303 typedef HBA_UINT32 SMHBA_BIND_TYPE;
 304 #define SMHBA_BIND_TO_WWPN 0x0001
 305 #define SMHBA_BIND_TO_LUID 0x0002
 306 
 307 /* SM-HBA 6.7.1.3 SMHBA_ScsiId */
 308 typedef struct SMHBA_ScsiId {
 309         char        OSDeviceName[256];
 310         HBA_UINT32  ScsiBusNumber;
 311         HBA_UINT32  ScsiTargetNumber;
 312         HBA_UINT32  ScsiOSLun;
 313 } SMHBA_SCSIID, *PSMHBA_SCSIID;
 314 
 315 /* SM-HBA 6.7.1.4 SMHBA_LUID */
 316 typedef struct SMHBA_LUID {
 317         char        buffer[256];
 318 } SMHBA_LUID, *PSMHBA_LUID;
 319 
 320 /* SM-HBA 6.7.1.5 SMHBA_PORTLUN */
 321 typedef struct SMHBA_PORTLUN {
 322         HBA_WWN             PortWWN;
 323         HBA_WWN             domainPortWWN;
 324         SMHBA_SCSILUN       TargetLun;
 325 } SMHBA_PORTLUN, *PSMHBA_PORTLUN;
 326 
 327 /* SM-HBA 6.7.1.6 Composite types */
 328 typedef struct SMHBA_ScsiEntry {
 329         SMHBA_SCSIID ScsiId;
 330         SMHBA_PORTLUN PortLun;
 331         SMHBA_LUID LUID;
 332 } SMHBA_SCSIENTRY, *PSMHBA_SCSIENTRY;
 333 
 334 typedef struct SMHBA_TargetMapping {
 335         HBA_UINT32 NumberOfEntries;
 336         SMHBA_SCSIENTRY entry[1]; /* Variable length array */
 337 } SMHBA_TARGETMAPPING, *PSMHBA_TARGETMAPPING;
 338 
 339 typedef struct SMHBA_BindingEntry {
 340         SMHBA_BIND_TYPE type;
 341         SMHBA_SCSIID    ScsiId;
 342         SMHBA_PORTLUN   PortLun;
 343         SMHBA_LUID      LUID;
 344         HBA_STATUS      Status;
 345 } SMHBA_BINDINGENTRY, *PSMHBA_BINDINGENTRY;
 346 
 347 typedef struct SMHBA_Binding {
 348         HBA_UINT32          NumberOfEntries;
 349         SMHBA_BINDINGENTRY  entry[1]; /* Variable length array */
 350 } SMHBA_BINDING, *PSMHBA_BINDING;
 351 
 352 /* SM-HBA 6.9.5 Library Attribute Data Declarations */
 353 typedef struct SMHBA_LibraryAttributes {
 354         char        LibPath[256];
 355         char        VName[256];
 356         char        VVersion[256];
 357         struct {
 358                 int     tm_mday;    /* day of the month - [1 - 31] */
 359                 int     tm_mon;     /* months since January - [0 - 11] */
 360                 int     tm_year;    /* years since 1900 */
 361         } build_date;
 362 } SMHBA_LIBRARYATTRIBUTES, *PSMHBA_LIBRARYATTRIBUTES;
 363 
 364 /* SM-HBA 6.8.1 Asynchronous Event Data Declarations */
 365 #define HBA_EVENT_PORT_BROADCAST_CHANGE 0x205
 366 #define HBA_EVENT_PORT_BROADCAST_SES    0x208
 367 #define HBA_EVENT_PORT_BROADCAST_D24_0  0x206
 368 #define HBA_EVENT_PORT_BROADCAST_D27_4  0x207
 369 #define HBA_EVENT_PORT_BROADCAST_D01_4  0x209
 370 #define HBA_EVENT_PORT_BROADCAST_D04_7  0x20A
 371 #define HBA_EVENT_PORT_BROADCAST_D16_7  0x20B
 372 #define HBA_EVENT_PORT_BROADCAST_D29_7  0x20C
 373 #define HBA_EVENT_PORT_ALL              0x2FF
 374 
 375 /* SM-HBA specific entry points. */
 376 
 377 HBA_UINT32 SMHBA_GetVersion();
 378 
 379 HBA_UINT32 SMHBA_GetWrapperLibraryAttributes(
 380         SMHBA_LIBRARYATTRIBUTES *attributes
 381 );
 382 
 383 HBA_UINT32 SMHBA_GetVendorLibraryAttributes(
 384         HBA_UINT32              adapter_index,
 385         SMHBA_LIBRARYATTRIBUTES *attributes
 386 );
 387 
 388 HBA_STATUS SMHBA_GetAdapterAttributes(
 389         HBA_HANDLE handle,
 390         SMHBA_ADAPTERATTRIBUTES *pAdapterAttributes
 391 );
 392 
 393 HBA_STATUS SMHBA_GetNumberOfPorts(
 394         HBA_HANDLE handle,
 395         HBA_UINT32 *numberofports
 396 );
 397 
 398 HBA_STATUS SMHBA_GetPortType(
 399         HBA_HANDLE handle,
 400         HBA_UINT32 portindex,
 401         HBA_PORTTYPE *porttype
 402 );
 403 
 404 HBA_STATUS SMHBA_GetAdapterPortAttributes(
 405         HBA_HANDLE handle,
 406         HBA_UINT32 portindex,
 407         SMHBA_PORTATTRIBUTES *portattributes
 408 );
 409 
 410 HBA_STATUS SMHBA_GetDiscoveredPortAttributes(
 411         HBA_HANDLE handle,
 412         HBA_UINT32 portindex,
 413         HBA_UINT32 discoveredportindex,
 414         SMHBA_PORTATTRIBUTES *porattributes
 415 );
 416 
 417 HBA_STATUS SMHBA_GetPortAttributesByWWN(
 418         HBA_HANDLE handle,
 419         HBA_WWN portWWN,
 420         HBA_WWN domainPortWWN,
 421         SMHBA_PORTATTRIBUTES *portattributes
 422 );
 423 
 424 HBA_STATUS SMHBA_GetPortAttributesByWWN(
 425         HBA_HANDLE handle,
 426         HBA_WWN portWWN,
 427         HBA_WWN domainPortWWN,
 428         SMHBA_PORTATTRIBUTES *portattributes
 429 );
 430 
 431 HBA_STATUS SMHBA_GetFCPhyAttributes(
 432         HBA_HANDLE handle,
 433         HBA_UINT32 portindex,
 434         HBA_UINT32 phyindex,
 435         SMHBA_FC_PHY *phytype
 436 );
 437 
 438 HBA_STATUS SMHBA_GetSASPhyAttributes(
 439         HBA_HANDLE handle,
 440         HBA_UINT32 portindex,
 441         HBA_UINT32 phyindex,
 442         SMHBA_SAS_PHY *phytype
 443 );
 444 
 445 HBA_STATUS SMHBA_GetProtocolStatistics(
 446         HBA_HANDLE handle,
 447         HBA_UINT32 portindex,
 448         HBA_UINT32 protocoltype,
 449         SMHBA_PROTOCOLSTATISTICS *pProtocolStatistics
 450 );
 451 
 452 HBA_STATUS SMHBA_GetPhyStatistics(
 453         HBA_HANDLE handle,
 454         HBA_UINT32 portindex,
 455         HBA_UINT32 phyindex,
 456         SMHBA_PHYSTATISTICS *pPhyStatistics
 457 );
 458 
 459 HBA_STATUS SMHBA_SendTEST(
 460         HBA_HANDLE handle,
 461         HBA_WWN hbaPortWWN,
 462         HBA_WWN destWWN,
 463         HBA_UINT32 destFCID,
 464         void *pReqBuffer,
 465         HBA_UINT32 ReqBufferSize
 466 );
 467 
 468 HBA_STATUS SMHBA_SendECHO(
 469         HBA_HANDLE handle,
 470         HBA_WWN hbaPortWWN,
 471         HBA_WWN destWWN,
 472         HBA_UINT32 destFCID,
 473         void *pReqBuffer,
 474         HBA_UINT32 ReqBufferSize,
 475         void *pRspBuffer,
 476         HBA_UINT32 *pRspBufferSize
 477 );
 478 
 479 HBA_UINT32 SMHBA_SendSMPPassThru(
 480         HBA_HANDLE handle,
 481         HBA_WWN hbaportWWN,
 482         HBA_WWN destportWWN,
 483         HBA_WWN domainPortWWN,
 484         void *pReqBuffer,
 485         HBA_UINT32 ReqBufferSize,
 486         void *pRspBuffer,
 487         HBA_UINT32 *pRspBufferSize
 488 );
 489 
 490 HBA_STATUS SMHBA_GetBindingCapability(
 491         HBA_HANDLE handle,
 492         HBA_WWN hbaPortWWN,
 493         HBA_WWN domainPortWWN,
 494         SMHBA_BIND_CAPABILITY *pFlags
 495 );
 496 
 497 HBA_STATUS SMHBA_GetBindingSupport(
 498         HBA_HANDLE handle,
 499         HBA_WWN hbaPortWWN,
 500         HBA_WWN domainPortWWN,
 501         SMHBA_BIND_CAPABILITY *pFlags
 502 );
 503 
 504 HBA_STATUS SMHBA_SetBindingSupport(
 505         HBA_HANDLE handle,
 506         HBA_WWN hbaPortWWN,
 507         HBA_WWN domainPortWWN,
 508         SMHBA_BIND_CAPABILITY flags
 509 );
 510 
 511 HBA_STATUS SMHBA_GetTargetMapping(
 512         HBA_HANDLE handle,
 513         HBA_WWN hbaPortWWN,
 514         HBA_WWN domainPortWWN,
 515         SMHBA_TARGETMAPPING *pMapping
 516 );
 517 
 518 HBA_STATUS SMHBA_GetPersistentBinding(
 519         HBA_HANDLE handle,
 520         HBA_WWN hbaPortWWN,
 521         HBA_WWN domainPortWWN,
 522         SMHBA_BINDING *binding
 523 );
 524 
 525 HBA_STATUS SMHBA_SetPersistentBinding(
 526         HBA_HANDLE handle,
 527         HBA_WWN hbaPortWWN,
 528         HBA_WWN domainPortWWN,
 529         const SMHBA_BINDING *binding
 530 );
 531 
 532 HBA_STATUS SMHBA_RemovePersistentBinding(
 533         HBA_HANDLE handle,
 534         HBA_WWN hbaPortWWN,
 535         HBA_WWN domainPortWWN,
 536         const SMHBA_BINDING *binding
 537 );
 538 
 539 HBA_STATUS SMHBA_RemoveAllPersistentBindings(
 540         HBA_HANDLE handle,
 541         HBA_WWN hbaPortWWN,
 542         HBA_WWN domainPortWWN
 543 );
 544 
 545 HBA_STATUS SMHBA_GetLUNStatistics(
 546         HBA_HANDLE handle,
 547         const HBA_SCSIID *lunit,
 548         SMHBA_PROTOCOLSTATISTICS *statistics
 549 );
 550 
 551 HBA_STATUS SMHBA_ScsiInquiry(
 552         HBA_HANDLE handle,
 553         HBA_WWN hbaPortWWN,
 554         HBA_WWN discoveredPortWWN,
 555         HBA_WWN domainPortWWN,
 556         SMHBA_SCSILUN smhbaLUN,
 557         HBA_UINT8 CDB_Byte1,
 558         HBA_UINT8 CDB_Byte2,
 559         void *pRspBuffer,
 560         HBA_UINT32 *pRspBufferSize,
 561         HBA_UINT8 *pScsiStatus,
 562         void *pSenseBuffer,
 563         HBA_UINT32 *pSenseBufferSize
 564 );
 565 
 566 HBA_STATUS SMHBA_ScsiReportLUNs(
 567         HBA_HANDLE handle,
 568         HBA_WWN hbaPortWWN,
 569         HBA_WWN discoveredPortWWN,
 570         HBA_WWN domainPortWWN,
 571         void *pRspBuffer,
 572         HBA_UINT32 *pRspBufferSize,
 573         HBA_UINT8 *pScsiStatus,
 574         void *pSenseBuffer,
 575         HBA_UINT32 *pSenseBufferSize
 576 );
 577 
 578 HBA_STATUS SMHBA_ScsiReadCapacity(
 579         HBA_HANDLE handle,
 580         HBA_WWN hbaPortWWN,
 581         HBA_WWN discoveredPortWWN,
 582         HBA_WWN domainPortWWN,
 583         SMHBA_SCSILUN smhbaLUN,
 584         void *pRspBuffer,
 585         HBA_UINT32 *pRspBufferSize,
 586         HBA_UINT8 *pScsiStatus,
 587         void *pSenseBuffer,
 588         HBA_UINT32 *pSenseBufferSize
 589 );
 590 
 591 HBA_STATUS SMHBA_RegisterForAdapterAddEvents(
 592         void (*pCallback) (
 593                 void *pData,
 594                 HBA_WWN portWWN,
 595                 HBA_UINT32 eventType),
 596         void *pUserData,
 597         HBA_CALLBACKHANDLE *pCallbackHandle
 598 );
 599 
 600 HBA_STATUS SMHBA_RegisterForAdapterEvents(
 601         void (*pCallback) (
 602                 void *pData,
 603                 HBA_WWN portWWN,
 604                 HBA_UINT32 eventType),
 605         void *pUserData,
 606         HBA_HANDLE handle,
 607         HBA_CALLBACKHANDLE *pCallbackHandle
 608 );
 609 
 610 HBA_STATUS SMHBA_RegisterForAdapterPortEvents(
 611         void (*pCallback) (
 612                 void *pData,
 613                 HBA_WWN portWWN,
 614                 HBA_UINT32 eventType,
 615                 HBA_UINT32 fabricPortID),
 616         void *pUserData,
 617         HBA_HANDLE handle,
 618         HBA_WWN portWWN,
 619         HBA_UINT32 specificEventType,
 620         HBA_CALLBACKHANDLE *pCallbackHandle
 621 );
 622 
 623 HBA_STATUS SMHBA_RegisterForAdapterPortStatEvents(
 624         void (*pCallback) (
 625                 void *pData,
 626                 HBA_WWN portWWN,
 627                 HBA_UINT32 protocolType,
 628                 HBA_UINT32 eventType),
 629         void *pUserData,
 630         HBA_HANDLE handle,
 631         HBA_WWN portWWN,
 632         HBA_UINT32 protocolType,
 633         SMHBA_PROTOCOLSTATISTICS stats,
 634         HBA_UINT32 statType,
 635         HBA_CALLBACKHANDLE *pCallbackHandle
 636 );
 637 
 638 HBA_STATUS SMHBA_RegisterForAdapterPhyStatEvents(
 639         void (*pCallback) (
 640                 void *pData,
 641                 HBA_WWN portWWN,
 642                 HBA_UINT32 phyIndex,
 643                 HBA_UINT32 eventType),
 644         void *pUserData,
 645         HBA_HANDLE handle,
 646         HBA_WWN portWWN,
 647         HBA_UINT32 phyIndex,
 648         SMHBA_PHYSTATISTICS stats,
 649         HBA_UINT32 statType,
 650         HBA_CALLBACKHANDLE *pCallbackHandle
 651 );
 652 
 653 HBA_STATUS SMHBA_RegisterForTargetEvents(
 654         void (*pCallback) (
 655                 void *pData,
 656                 HBA_WWN hbaPortWWN,
 657                 HBA_WWN discoveredPortWWN,
 658                 HBA_WWN domainPortWWN,
 659                 HBA_UINT32 eventType),
 660         void *pUserData,
 661         HBA_HANDLE handle,
 662         HBA_WWN hbaPortWWN,
 663         HBA_WWN discoveredPortWWN,
 664         HBA_WWN domainPortWWN,
 665         HBA_CALLBACKHANDLE *pCallbackHandle,
 666         HBA_UINT32 allTargets
 667 );
 668 
 669 #ifdef __cplusplus
 670 }
 671 #endif
 672 
 673 #endif /* _SMHBAAPI_H_ */