diff options
Diffstat (limited to 'usr/src/lib/hbaapi/common/hbaapi.h')
-rw-r--r-- | usr/src/lib/hbaapi/common/hbaapi.h | 953 |
1 files changed, 953 insertions, 0 deletions
diff --git a/usr/src/lib/hbaapi/common/hbaapi.h b/usr/src/lib/hbaapi/common/hbaapi.h new file mode 100644 index 0000000000..b09fbc5b5a --- /dev/null +++ b/usr/src/lib/hbaapi/common/hbaapi.h @@ -0,0 +1,953 @@ +/* + * ***************************************************************************** + * + * Description + * hbaapi.h - general header file for client + * and library developers + * + * License: + * The contents of this file are subject to the SNIA Public License + * Version 1.0 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * + * /http://www.snia.org/English/Resources/Code/OpenSource.html + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is SNIA HBA API general header file + * + * The Initial Developer of the Original Code is: + * Benjamin F. Kuo, Troika Networks, Inc. (benk@troikanetworks.com) + * + * Contributor(s): + * Tuan Lam, QLogic Corp. (t_lam@qlc.com) + * Dan Willie, Emulex Corp. (Dan.Willie@emulex.com) + * Dixon Hutchinson, Legato Systems, Inc. (dhutchin@legato.com) + * David Dillard, VERITAS Software Corp. (david.dillard@veritas.com) + * + ******************************************************************************* + * + * Changes: + * 03/09/2000 Initial Draft + * (for other changes... see the CVS logs) + ******************************************************************************* + */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef HBA_API_H +#define HBA_API_H + +/* Library version string */ +#define HBA_LIBVERSION 2 + +/* DLL imports for WIN32 operation */ +#ifdef WIN32 +#ifdef HBAAPI_EXPORTS +#define HBA_API __declspec(dllexport) +#else +#define HBA_API __declspec(dllimport) +#endif +#else +#define HBA_API +#endif + +/* OS specific definitions */ + +#ifdef WIN32 +typedef unsigned char HBA_UINT8; // Unsigned 8 bits +typedef char HBA_INT8; // Signed 8 bits +typedef unsigned short HBA_UINT16; // Unsigned 16 bits +typedef short HBA_INT16; // Signed 16 bits +typedef unsigned int HBA_UINT32; // Unsigned 32 bits +typedef int HBA_INT32; // Signed 32 bits +typedef void* HBA_PVOID; // Pointer to void +typedef HBA_UINT32 HBA_VOID32; // Opaque 32 bits + + +/* Don't confuse, _WIN32 with WIN32... OK, how do you accompish that */ +#ifdef _WIN32 +typedef _int64 HBA_INT64; +typedef unsigned _int64 HBA_UINT64; +#else +typedef struct { + TN_UINT32 lo_val; + TN_UINT32 hi_val; +} HBA_INT64; + +typedef struct { + TN_UINT32 lo_val; + TN_UINT32 hi_val; +} HBA_UINT64; +#endif /* #ifdef _WIN32 */ + + +#else +#include <time.h> /* Needed for struct tm */ + +/* Note this section needs to be cleaned up for various Unix platforms */ +typedef unsigned char HBA_UINT8; /* Unsigned 8 bits */ +typedef char HBA_INT8; /* Signed 8 bits */ +typedef unsigned short HBA_UINT16; /* Unsigned 16 bits */ +typedef short HBA_INT16; /* Signed 16 bits */ +typedef unsigned int HBA_UINT32; /* Unsigned 32 bits */ +typedef int HBA_INT32; /* Signed 32 bits */ +typedef void* HBA_PVOID; /* Pointer to void */ +typedef HBA_UINT32 HBA_VOID32; /* Opaque 32 bits */ +typedef long long HBA_INT64; +typedef long long HBA_UINT64; + +#endif /* #ifdef WIN32 */ + + +/* 4.2.1 Handle to Device */ +typedef HBA_UINT32 HBA_HANDLE; + +#define HBA_HANDLE_INVALID 0 + +/* 4.2.2 Status Return Values */ +typedef HBA_UINT32 HBA_STATUS; + +#define HBA_STATUS_OK 0 +#define HBA_STATUS_ERROR 1 /* Error */ +#define HBA_STATUS_ERROR_NOT_SUPPORTED 2 /* Function not supported.*/ +#define HBA_STATUS_ERROR_INVALID_HANDLE 3 /* invalid handle */ +#define HBA_STATUS_ERROR_ARG 4 /* Bad argument */ +#define HBA_STATUS_ERROR_ILLEGAL_WWN 5 /* WWN not recognized */ +#define HBA_STATUS_ERROR_ILLEGAL_INDEX 6 /* Index not recognized */ +#define HBA_STATUS_ERROR_MORE_DATA 7 /* Larger buffer required */ +#define HBA_STATUS_ERROR_STALE_DATA 8 /* Information has changed since + * last call to + * HBA_Refreshinformation */ +#define HBA_STATUS_SCSI_CHECK_CONDITION 9 /* Obvious */ +#define HBA_STATUS_ERROR_BUSY 10 /* Adapter busy or reserved, + * retry may be effective */ +#define HBA_STATUS_ERROR_TRY_AGAIN 11 /* Request timedout, + * retry may be effective */ +#define HBA_STATUS_ERROR_UNAVAILABLE 12 /* Referenced HBA has been removed + * or deactivated */ +#define HBA_STATUS_ERROR_ELS_REJECT 13 /* The requested ELS was rejected by + * the local adapter */ +#define HBA_STATUS_ERROR_INVALID_LUN 14 /* The specified LUN is not provided + * the specified adapter */ +#define HBA_STATUS_ERROR_INCOMPATIBLE 15 /* An incompatibility has been + * detected among the library and driver modules + * invoked which will cause one or more functions + * in the highest version that all support to + * operate incorrectly. The differing function + * sets of software modules implementing different + * versions of the HBA API specification does not + * in itself constitute an incompatibility. Known + * interoperability bugs among supposedly + * compatible versions should be reported as + * incompatibilities, but not all such + * interoperability bugs may be known. This value + * may be returned by any function that calls a + * Vendor Specific Library and returns an + * HBA_STATUS, and by HBA_LoadLibrary and + * HBA_GetAdapterName. */ + +#define HBA_STATUS_ERROR_AMBIGUOUS_WWN 16 /* Multiple adapters have a matching + * WWN. This could occur if the + * NodeWWN of multiple adapters is + * identical */ +#define HBA_STATUS_ERROR_LOCAL_BUS 17 /* A persistent binding request + * included a bad local SCSI bus + * number */ +#define HBA_STATUS_ERROR_LOCAL_TARGET 18 /* A persistent binding request + * included a bad local SCSI target + * number */ +#define HBA_STATUS_ERROR_LOCAL_LUN 19 /* A persistent binding request + * included a bad local SCSI logical + * unit number */ +#define HBA_STATUS_ERROR_LOCAL_SCSIID_BOUND 20 + /* A persistent binding set request + * included a local SCSI ID that was + * already bound */ +#define HBA_STATUS_ERROR_TARGET_FCID 21 /* A persistent binding request + * included a bad or unlocatable FCP + * Target FCID */ +#define HBA_STATUS_ERROR_TARGET_NODE_WWN 22 /* A persistent binding request + * included a bad FCP Target Node + * WWN */ +#define HBA_STATUS_ERROR_TARGET_PORT_WWN 23 /* A persistent binding request + * included a bad FCP Target Port + * WWN */ +#define HBA_STATUS_ERROR_TARGET_LUN 24 /* A persistent binding request + * included an FCP Logical Unit Number + * not defined by the identified + * Target*/ +#define HBA_STATUS_ERROR_TARGET_LUID 25 /* A persistent binding request + * included an undefined or otherwise + * inaccessible Logical Unit Unique + * Identifier */ +#define HBA_STATUS_ERROR_NO_SUCH_BINDING 26 /* A persistent binding remove request + * included a binding which did not + * match a binding established by the + * specified port */ +#define HBA_STATUS_ERROR_NOT_A_TARGET 27 /* A SCSI command was requested to an + * Nx_Port that was not a SCSI + * Target Port */ +#define HBA_STATUS_ERROR_UNSUPPORTED_FC4 28 /* A request was made concerning an + * unsupported FC-4 protocol */ + + +#define HBA_STATUS_ERROR_INCAPABLE 29 /* A request was made to enable + * unimplemented capabilities for a + * port */ + +/* 4.2.3 Port Operational Modes Values */ +typedef HBA_UINT32 HBA_PORTTYPE; + +#define HBA_PORTTYPE_UNKNOWN 1 /* Unknown */ +#define HBA_PORTTYPE_OTHER 2 /* Other */ +#define HBA_PORTTYPE_NOTPRESENT 3 /* Not present */ +#define HBA_PORTTYPE_NPORT 5 /* Fabric */ +#define HBA_PORTTYPE_NLPORT 6 /* Public Loop */ +#define HBA_PORTTYPE_FLPORT 7 +#define HBA_PORTTYPE_FPORT 8 /* Fabric Port */ +#define HBA_PORTTYPE_EPORT 9 /* Fabric expansion port */ +#define HBA_PORTTYPE_GPORT 10 /* Generic Fabric Port */ +#define HBA_PORTTYPE_LPORT 20 /* Private Loop */ +#define HBA_PORTTYPE_PTP 21 /* Point to Point */ + + +typedef HBA_UINT32 HBA_PORTSTATE; +#define HBA_PORTSTATE_UNKNOWN 1 /* Unknown */ +#define HBA_PORTSTATE_ONLINE 2 /* Operational */ +#define HBA_PORTSTATE_OFFLINE 3 /* User Offline */ +#define HBA_PORTSTATE_BYPASSED 4 /* Bypassed */ +#define HBA_PORTSTATE_DIAGNOSTICS 5 /* In diagnostics mode */ +#define HBA_PORTSTATE_LINKDOWN 6 /* Link Down */ +#define HBA_PORTSTATE_ERROR 7 /* Port Error */ +#define HBA_PORTSTATE_LOOPBACK 8 /* Loopback */ + + +typedef HBA_UINT32 HBA_PORTSPEED; +#define HBA_PORTSPEED_UNKNOWN 0 /* Unknown - transceiver incable + * of reporting */ +#define HBA_PORTSPEED_1GBIT 1 /* 1 GBit/sec */ +#define HBA_PORTSPEED_2GBIT 2 /* 2 GBit/sec */ +#define HBA_PORTSPEED_10GBIT 4 /* 10 GBit/sec */ +#define HBA_PORTSPEED_4GBIT 8 /* 4 GBit/sec */ +#define HBA_PORTSPEED_8GBIT 16 /* 8 GBit/sec */ +#define HBA_PORTSPEED_16GBIT 32 /* 16 GBit/sec */ +#define HBA_PORTSPEED_NOT_NEGOTIATED (1<<15) /* Speed not established */ + + + +/* 4.2.4 Class of Service Values - See GS-2 Spec.*/ + +typedef HBA_UINT32 HBA_COS; + + +/* 4.2.5 Fc4Types Values */ + +typedef struct HBA_fc4types { + HBA_UINT8 bits[32]; /* 32 bytes of FC-4 per GS-2 */ +} HBA_FC4TYPES, *PHBA_FC4TYPES; + +/* 4.2.6 Basic Types */ + +typedef struct HBA_wwn { + HBA_UINT8 wwn[8]; +} HBA_WWN, *PHBA_WWN; + +typedef struct HBA_ipaddress { + int ipversion; /* see enumerations in RNID */ + union + { + unsigned char ipv4address[4]; + unsigned char ipv6address[16]; + } ipaddress; +} HBA_IPADDRESS, *PHBA_IPADDRESS; + +typedef HBA_INT8 HBA_BOOLEAN; + +/* 4.2.7 Adapter Attributes */ +typedef struct hba_AdapterAttributes { + char Manufacturer[64]; /*Emulex */ + char SerialNumber[64]; /* A12345 */ + char Model[256]; /* QLA2200 */ + char ModelDescription[256]; /* Agilent TachLite */ + HBA_WWN NodeWWN; + char NodeSymbolicName[256]; /* From GS-3 */ + char HardwareVersion[256]; /* Vendor use */ + char DriverVersion[256]; /* Vendor use */ + char OptionROMVersion[256]; /* Vendor use - i.e. hardware boot ROM*/ + char FirmwareVersion[256]; /* Vendor use */ + HBA_UINT32 VendorSpecificID; /* Vendor specific */ + HBA_UINT32 NumberOfPorts; + char DriverName[256]; /* Binary path and/or name of driver + *file */ +} HBA_ADAPTERATTRIBUTES, *PHBA_ADAPTERATTRIBUTES; + +/* 4.2.8 Port Attributes */ +typedef struct HBA_PortAttributes { + HBA_WWN NodeWWN; + HBA_WWN PortWWN; + HBA_UINT32 PortFcId; + HBA_PORTTYPE PortType; /*PTP, Fabric, etc. */ + HBA_PORTSTATE PortState; + HBA_COS PortSupportedClassofService; + HBA_FC4TYPES PortSupportedFc4Types; + HBA_FC4TYPES PortActiveFc4Types; + char PortSymbolicName[256]; + char OSDeviceName[256]; /* \device\ScsiPort3 */ + HBA_PORTSPEED PortSupportedSpeed; + HBA_PORTSPEED PortSpeed; + HBA_UINT32 PortMaxFrameSize; + HBA_WWN FabricName; + HBA_UINT32 NumberofDiscoveredPorts; +} HBA_PORTATTRIBUTES, *PHBA_PORTATTRIBUTES; + + + +/* 4.2.9 Port Statistics */ + +typedef struct HBA_PortStatistics { + HBA_INT64 SecondsSinceLastReset; + HBA_INT64 TxFrames; + HBA_INT64 TxWords; + HBA_INT64 RxFrames; + HBA_INT64 RxWords; + HBA_INT64 LIPCount; + HBA_INT64 NOSCount; + HBA_INT64 ErrorFrames; + HBA_INT64 DumpedFrames; + HBA_INT64 LinkFailureCount; + HBA_INT64 LossOfSyncCount; + HBA_INT64 LossOfSignalCount; + HBA_INT64 PrimitiveSeqProtocolErrCount; + HBA_INT64 InvalidTxWordCount; + HBA_INT64 InvalidCRCCount; +} HBA_PORTSTATISTICS, *PHBA_PORTSTATISTICS; + + + +/* 4.2.10 FCP Attributes */ + +typedef enum HBA_fcpbindingtype { TO_D_ID, TO_WWN, TO_OTHER } HBA_FCPBINDINGTYPE; + +typedef struct HBA_ScsiId { + char OSDeviceName[256]; /* \device\ScsiPort3 */ + HBA_UINT32 ScsiBusNumber; /* Bus on the HBA */ + HBA_UINT32 ScsiTargetNumber; /* SCSI Target ID to OS */ + HBA_UINT32 ScsiOSLun; +} HBA_SCSIID, *PHBA_SCSIID; + +typedef struct HBA_FcpId { + HBA_UINT32 FcId; + HBA_WWN NodeWWN; + HBA_WWN PortWWN; + HBA_UINT64 FcpLun; +} HBA_FCPID, *PHBA_FCPID; + +typedef struct HBA_LUID { + char buffer[256]; /* Unique Device Identifier */ +} HBA_LUID, *PHBA_LUID; + +typedef struct HBA_FcpScsiEntry { + HBA_SCSIID ScsiId; + HBA_FCPID FcpId; +} HBA_FCPSCSIENTRY, *PHBA_FCPSCSIENTRY; + +typedef struct HBA_FcpScsiEntryV2 { + HBA_SCSIID ScsiId; + HBA_FCPID FcpId; + HBA_LUID LUID; +} HBA_FCPSCSIENTRYV2, *PHBA_FCPSCSIENTRYV2; + +typedef struct HBA_FCPTargetMapping { + HBA_UINT32 NumberOfEntries; + HBA_FCPSCSIENTRY entry[1]; /* Variable length array + * containing mappings */ +} HBA_FCPTARGETMAPPING, *PHBA_FCPTARGETMAPPING; + +typedef struct HBA_FCPTargetMappingV2 { + HBA_UINT32 NumberOfEntries; + HBA_FCPSCSIENTRYV2 entry[1]; /* Variable length array + * containing mappings */ +} HBA_FCPTARGETMAPPINGV2, *PHBA_FCPTARGETMAPPINGV2; + +typedef struct HBA_FCPBindingEntry { + HBA_FCPBINDINGTYPE type; + HBA_SCSIID ScsiId; + HBA_FCPID FcpId; /* WWN valid only if type is + * to WWN, FcpLun always valid */ + HBA_UINT32 FcId; +} HBA_FCPBINDINGENTRY, *PHBA_FCPBINDINGENTRY; + +typedef struct HBA_FCPBinding { + HBA_UINT32 NumberOfEntries; + HBA_FCPBINDINGENTRY entry[1]; /* Variable length array */ +} HBA_FCPBINDING, *PHBA_FCPBINDING; + +/* 4.2.11 FC-3 Management Atrributes */ + +typedef enum HBA_wwntype { NODE_WWN, PORT_WWN } HBA_WWNTYPE; + +typedef struct HBA_MgmtInfo { + HBA_WWN wwn; + HBA_UINT32 unittype; + HBA_UINT32 PortId; + HBA_UINT32 NumberOfAttachedNodes; + HBA_UINT16 IPVersion; + HBA_UINT16 UDPPort; + HBA_UINT8 IPAddress[16]; + HBA_UINT16 reserved; + HBA_UINT16 TopologyDiscoveryFlags; +} HBA_MGMTINFO, *PHBA_MGMTINFO; + +/* Event Codes */ +#define HBA_EVENT_LIP_OCCURRED 1 +#define HBA_EVENT_LINK_UP 2 +#define HBA_EVENT_LINK_DOWN 3 +#define HBA_EVENT_LIP_RESET_OCCURRED 4 +#define HBA_EVENT_RSCN 5 +#define HBA_EVENT_PROPRIETARY 0xFFFF + +typedef struct HBA_Link_EventInfo { + HBA_UINT32 PortFcId; /* Port where event occurred */ + HBA_UINT32 Reserved[3]; +} HBA_LINK_EVENTINFO, *PHBA_LINK_EVENTINFO; + +typedef struct HBA_RSCN_EventInfo { + HBA_UINT32 PortFcId; /* Port where event occurred */ + HBA_UINT32 NPortPage; /* Reference FC-FS for RSCN ELS + * "Affected N-Port Pages"*/ + HBA_UINT32 Reserved[2]; +} HBA_RSCN_EVENTINFO, *PHBA_RSCN_EVENTINFO; + +typedef struct HBA_Pty_EventInfo { + HBA_UINT32 PtyData[4]; /* Proprietary data */ +} HBA_PTY_EVENTINFO, *PHBA_PTY_EVENTINFO; + +typedef struct HBA_EventInfo { + HBA_UINT32 EventCode; + union { + HBA_LINK_EVENTINFO Link_EventInfo; + HBA_RSCN_EVENTINFO RSCN_EventInfo; + HBA_PTY_EVENTINFO Pty_EventInfo; + } Event; +} HBA_EVENTINFO, *PHBA_EVENTINFO; + +typedef struct HBA_LibraryAttributes { + HBA_BOOLEAN final; + char LibPath[256]; + char VName[256]; + char VVersion[256]; + struct tm build_date; +} HBA_LIBRARYATTRIBUTES, *PHBA_LIBRARYATTRIBUTES; + +/* Persistant Binding... */ +typedef HBA_UINT32 HBA_BIND_TYPE; +#define HBA_BIND_TO_D_ID 0x0001 +#define HBA_BIND_TO_WWPN 0x0002 +#define HBA_BIND_TO_WWNN 0x0004 +#define HBA_BIND_TO_LUID 0x0008 +#define HBA_BIND_TARGETS 0x0800 + +/* A bit mask of Rev 2.0 persistent binding capabilities */ +typedef HBA_UINT32 HBA_BIND_CAPABILITY; +/* The following are bit flags indicating persistent binding capabilities */ +#define HBA_CAN_BIND_TO_D_ID 0x0001 +#define HBA_CAN_BIND_TO_WWPN 0x0002 +#define HBA_CAN_BIND_TO_WWNN 0x0004 +#define HBA_CAN_BIND_TO_LUID 0x0008 +#define HBA_CAN_BIND_ANY_LUNS 0x0400 +#define HBA_CAN_BIND_TARGETS 0x0800 +#define HBA_CAN_BIND_AUTOMAP 0x1000 +#define HBA_CAN_BIND_CONFIGURED 0x2000 + +#define HBA_BIND_STATUS_DISABLED 0x00 +#define HBA_BIND_STATUS_ENABLED 0x01 + +typedef HBA_UINT32 HBA_BIND_STATUS; + +#define HBA_BIND_EFFECTIVE_AT_REBOOT 0x00 +#define HBA_BIND_EFFECTIVE_IMMEDIATE 0x01 + +typedef HBA_UINT32 HBA_BIND_EFFECTIVE; + +typedef struct HBA_FCPBindingEntry2 { + HBA_BIND_TYPE type; + HBA_SCSIID ScsiId; + HBA_FCPID FcpId; + HBA_LUID LUID; + HBA_STATUS status; +} HBA_FCPBINDINGENTRY2, *PHBA_FCPBINDINGENTRY2; + +typedef struct HBA_FcpBinding2 { + HBA_UINT32 NumberOfEntries; + HBA_FCPBINDINGENTRY2 + entry[1]; /* Variable length array */ +} HBA_FCPBINDING2, *PHBA_FCPBINDING2; + +/* FC-4 Instrumentation */ +typedef struct HBA_FC4Statistics { + HBA_INT64 InputRequests; + HBA_INT64 OutputRequests; + HBA_INT64 ControlRequests; + HBA_INT64 InputMegabytes; + HBA_INT64 OutputMegabytes; +} HBA_FC4STATISTICS, *PHBA_FC4STATISTICS; + + +typedef void * HBA_CALLBACKHANDLE; +/* Adapter Level Events */ +#define HBA_EVENT_ADAPTER_UNKNOWN 0x100 +#define HBA_EVENT_ADAPTER_ADD 0x101 +#define HBA_EVENT_ADAPTER_REMOVE 0x102 +#define HBA_EVENT_ADAPTER_CHANGE 0x103 + +/* Port Level Events */ +#define HBA_EVENT_PORT_UNKNOWN 0x200 +#define HBA_EVENT_PORT_OFFLINE 0x201 +#define HBA_EVENT_PORT_ONLINE 0x202 +#define HBA_EVENT_PORT_NEW_TARGETS 0x203 +#define HBA_EVENT_PORT_FABRIC 0x204 + +/* Port Statistics Events */ +#define HBA_EVENT_PORT_STAT_THRESHOLD 0x301 +#define HBA_EVENT_PORT_STAT_GROWTH 0x302 + +/* Target Level Events */ +#define HBA_EVENT_TARGET_UNKNOWN 0x400 +#define HBA_EVENT_TARGET_OFFLINE 0x401 +#define HBA_EVENT_TARGET_ONLINE 0x402 +#define HBA_EVENT_TARGET_REMOVED 0x403 + +/* Fabric Link Events */ +#define HBA_EVENT_LINK_UNKNOWN 0x500 +#define HBA_EVENT_LINK_INCIDENT 0x501 + +HBA_API HBA_UINT32 HBA_GetVersion(); + +/* + * Make sure HBA_LoadLibrary returns before any other threads + * make calls to the library + */ +HBA_API HBA_STATUS HBA_LoadLibrary(void); + +HBA_API HBA_STATUS HBA_FreeLibrary(void); + +HBA_API HBA_UINT32 HBA_GetNumberOfAdapters(void); + +HBA_API HBA_STATUS HBA_GetAdapterName( + HBA_UINT32 adapterindex, + char *adaptername + ); + +HBA_API HBA_HANDLE HBA_OpenAdapter( + char* adaptername + ); + +HBA_API HBA_STATUS HBA_OpenAdapterByWWN( + HBA_HANDLE *handle, + HBA_WWN wwn + ); + +HBA_API void HBA_CloseAdapter( + HBA_HANDLE handle + ); + +HBA_API HBA_STATUS HBA_GetAdapterAttributes( + HBA_HANDLE handle, + HBA_ADAPTERATTRIBUTES + *hbaattributes + ); + +HBA_API HBA_STATUS HBA_GetAdapterPortAttributes( + HBA_HANDLE handle, + HBA_UINT32 portindex, + HBA_PORTATTRIBUTES *portattributes + ); + +HBA_API HBA_STATUS HBA_GetPortStatistics( + HBA_HANDLE handle, + HBA_UINT32 portindex, + HBA_PORTSTATISTICS *portstatistics + ); + +HBA_API HBA_STATUS HBA_GetDiscoveredPortAttributes( + HBA_HANDLE handle, + HBA_UINT32 portindex, + HBA_UINT32 discoveredportindex, + HBA_PORTATTRIBUTES *portattributes + ); + +HBA_API HBA_STATUS HBA_GetPortAttributesByWWN( + HBA_HANDLE handle, + HBA_WWN PortWWN, + HBA_PORTATTRIBUTES *portattributes + ); + +HBA_API HBA_STATUS HBA_SendCTPassThruV2( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + void *pReqBuffer, + HBA_UINT32 ReqBufferSize, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize + ); + +/* Depricated, but supported */ +HBA_API HBA_STATUS HBA_SendCTPassThru( + HBA_HANDLE handle, + void *pReqBuffer, + HBA_UINT32 ReqBufferSize, + void *pRspBuffer, + HBA_UINT32 RspBufferSize + ); + +HBA_API void HBA_RefreshAdapterConfiguration(); + +HBA_API HBA_STATUS HBA_GetEventBuffer( + HBA_HANDLE handle, + HBA_EVENTINFO *EventBuffer, + HBA_UINT32 *EventBufferCount + ); + +HBA_API HBA_STATUS HBA_SetRNIDMgmtInfo( + HBA_HANDLE handle, + HBA_MGMTINFO Info + ); + +HBA_API HBA_STATUS HBA_GetRNIDMgmtInfo( + HBA_HANDLE handle, + HBA_MGMTINFO *pInfo + ); + +HBA_API HBA_STATUS HBA_SendRNIDV2( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_WWN destWWN, + HBA_UINT32 destFCID, + HBA_UINT32 NodeIdDataFormat, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize + ); + +/* Depricated, but supported */ +HBA_API HBA_STATUS HBA_SendRNID( + HBA_HANDLE handle, + HBA_WWN wwn, + HBA_WWNTYPE wwntype, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize + ); + +HBA_API HBA_STATUS HBA_SendRLS ( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_WWN destWWN, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize + ); + +HBA_API HBA_STATUS HBA_SendRPL ( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_WWN agent_wwn, + HBA_UINT32 agent_domain, + HBA_UINT32 portindex, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize + ); + +HBA_API HBA_STATUS HBA_SendRPS ( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_WWN agent_wwn, + HBA_UINT32 agent_domain, + HBA_WWN object_wwn, + HBA_UINT32 object_port_number, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize + ); + +HBA_API HBA_STATUS HBA_SendSRL ( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_WWN wwn, + HBA_UINT32 domain, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize + ); + +HBA_API HBA_STATUS HBA_SendLIRR ( + HBA_HANDLE handle, + HBA_WWN sourceWWN, + HBA_WWN destWWN, + HBA_UINT8 function, + HBA_UINT8 type, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize + ); + + +HBA_API HBA_STATUS HBA_GetFC4Statistics ( + HBA_HANDLE handle, + HBA_WWN portWWN, + HBA_UINT8 FC4type, + HBA_FC4STATISTICS *pstatistics + ); + +HBA_API HBA_STATUS HBA_GetFCPStatistics ( + HBA_HANDLE handle, + const HBA_SCSIID *lunit, + HBA_FC4STATISTICS *pstatistics); + +HBA_API void HBA_RefreshInformation( + HBA_HANDLE handle + ); + +HBA_API void HBA_ResetStatistics( + HBA_HANDLE handle, + HBA_UINT32 portindex + ); + +HBA_API HBA_STATUS HBA_GetFcpTargetMapping( + HBA_HANDLE handle, + HBA_FCPTARGETMAPPING + *pmapping + ); + +HBA_API HBA_STATUS HBA_GetFcpTargetMappingV2( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_FCPTARGETMAPPINGV2 + *pmapping + ); + +HBA_API HBA_STATUS HBA_GetBindingCapability( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_BIND_CAPABILITY *pcapability + ); + +HBA_API HBA_STATUS HBA_GetBindingSupport( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_BIND_CAPABILITY *pcapability + ); + +HBA_API HBA_STATUS HBA_SetBindingSupport( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_BIND_CAPABILITY capability + ); + +HBA_API HBA_STATUS HBA_SetPersistentBindingV2( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + const HBA_FCPBINDING2 + *pbinding + ); + +HBA_API HBA_STATUS HBA_GetPersistentBindingV2( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_FCPBINDING2 *binding + ); + +HBA_API HBA_STATUS HBA_RemovePersistentBinding( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + const HBA_FCPBINDING2 + *pbinding + ); + +/* Depricated, but supported */ +HBA_API HBA_STATUS HBA_GetFcpPersistentBinding( + HBA_HANDLE handle, + HBA_FCPBINDING *binding + ); + +HBA_API HBA_STATUS HBA_RemoveAllPersistentBindings( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN + ); + +HBA_STATUS HBA_ScsiInquiryV2 ( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_WWN discoveredPortWWN, + HBA_UINT64 fcLUN, + HBA_UINT8 CDB_Byte1, + HBA_UINT8 CDB_BYte2, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize, + HBA_UINT8 *pScsiStatus, + void *pSenseBuffer, + HBA_UINT32 *pSenseBufferSize + ); + +/* Depricated, but supported */ +HBA_API HBA_STATUS HBA_SendScsiInquiry ( + HBA_HANDLE handle, + HBA_WWN PortWWN, + HBA_UINT64 fcLUN, + HBA_UINT8 EVPD, + HBA_UINT32 PageCode, + void *pRspBuffer, + HBA_UINT32 RspBufferSize, + void *pSenseBuffer, + HBA_UINT32 SenseBufferSize + ); + +HBA_API HBA_STATUS HBA_ScsiReportLUNsV2( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_WWN discoveredPortWWN, + void *pRespBuffer, + HBA_UINT32 *pRespBufferSize, + HBA_UINT8 *pScsiStatus, + void *pSenseBuffer, + HBA_UINT32 *pSenseBufferSize + ); + +/* Depricated, but supported */ +HBA_API HBA_STATUS HBA_SendReportLUNs ( + HBA_HANDLE handle, + HBA_WWN portWWN, + void *pRspBuffer, + HBA_UINT32 RspBufferSize, + void *pSenseBuffer, + HBA_UINT32 SenseBufferSize + ); + +HBA_API HBA_STATUS HBA_ScsiReadCapacityV2( + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_WWN discoveredPortWWN, + HBA_UINT64 fcLUN, + void *pRspBuffer, + HBA_UINT32 *pRspBufferSize, + HBA_UINT8 *pScsiStatus, + void *pSenseBuffer, + HBA_UINT32 *SenseBufferSize + ); + +/* Depricated, but supported */ +HBA_API HBA_STATUS HBA_SendReadCapacity ( + HBA_HANDLE handle, + HBA_WWN portWWN, + HBA_UINT64 fcLUN, + void *pRspBuffer, + HBA_UINT32 RspBufferSize, + void *pSenseBuffer, + HBA_UINT32 SenseBufferSize + ); + +HBA_API HBA_UINT32 HBA_GetVendorLibraryAttributes ( + HBA_UINT32 adapter_index, + HBA_LIBRARYATTRIBUTES + *attributes + ); + +HBA_API HBA_STATUS HBA_RemoveCallback( + HBA_CALLBACKHANDLE callbackHandle + ); + +HBA_API HBA_STATUS HBA_RegisterForAdapterAddEvents( + void (*callback) ( + void *data, + HBA_WWN PortWWN, + HBA_UINT32 eventType + ), + void *userData, + HBA_CALLBACKHANDLE *callbackHandle + ); + +HBA_API HBA_STATUS HBA_RegisterForAdapterEvents( + void (*callback)( + void *data, + HBA_WWN PortWWN, + HBA_UINT32 eventType + ), + void *userData, + HBA_HANDLE handle, + HBA_CALLBACKHANDLE *callbackHandle + ); + +HBA_API HBA_STATUS HBA_RegisterForAdapterPortEvents( + void (*callback)( + void *data, + HBA_WWN PortWWN, + HBA_UINT32 eventType, + HBA_UINT32 fabricPortID + ), + void *userData, + HBA_HANDLE handle, + HBA_WWN PortWWN, + HBA_CALLBACKHANDLE *callbackHandle + ); + +HBA_API HBA_STATUS HBA_RegisterForAdapterPortStatEvents( + void (*callback)( + void *data, + HBA_WWN PortWWN, + HBA_UINT32 eventType + ), + void *userData, + HBA_HANDLE handle, + HBA_WWN PortWWN, + HBA_PORTSTATISTICS stats, + HBA_UINT32 statType, + HBA_CALLBACKHANDLE *callbackHandle + ); + + +HBA_API HBA_STATUS HBA_RegisterForTargetEvents( + void (*callback)( + void *data, + HBA_WWN hbaPortWWN, + HBA_WWN discoveredPortWWN, + HBA_UINT32 eventType + ), + void *userData, + HBA_HANDLE handle, + HBA_WWN hbaPortWWN, + HBA_WWN discoveredPortWWN, + HBA_CALLBACKHANDLE *callbackHandle, + HBA_UINT32 allTargets + ); + +HBA_API HBA_STATUS HBA_RegisterForLinkEvents( + void (*callback) + ( + void *data, + HBA_WWN adapterWWN, + HBA_UINT32 eventType, + void *pRLIRBuffer, + HBA_UINT32 RLIRBufferSize + ), + void *userData, + void *pRLIRBuffer, + HBA_UINT32 RLIRBufferSize, + HBA_HANDLE handle, + HBA_CALLBACKHANDLE *callbackHandle +); + +/* Wrapper library specific entry points */ + +HBA_API HBA_UINT32 HBA_GetWrapperLibraryAttributes ( + HBA_LIBRARYATTRIBUTES + *attributes +); + +#endif /* HBA_API_H */ + +#ifdef __cplusplus +} +#endif + + |