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