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