|
|
//***************************************************************************
//
// main.c
//
// Module: Windows HBA API implmentation
//
// Purpose: Contains HBA api header
//
// Copyright (c) 2001 Microsoft Corporation
//
//***************************************************************************
#ifdef _HBAAPIP_
#define HBA_API __cdecl
#else
#define HBA_API DECLSPEC_IMPORT __cdecl
#endif
#define HBA_VERSION 1
typedef ULONGLONG HBA_UINT64; typedef LONGLONG HBA_INT64; typedef ULONG HBA_UINT32; typedef USHORT HBA_UINT16; typedef UCHAR HBA_UINT8;
typedef HBA_UINT32 HBA_HANDLE;
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 /* Data is stale, HBARefreshInformation is required */
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_1GBIT 1 /* 1 GBit/sec */
#define HBA_PORTSPEED_2GBIT 2 /* 2 GBit/sec */
#define HBA_PORTSPEED_10GBIT 4 /* 10 GBit/sec */
typedef HBA_UINT32 HBA_COS;
typedef struct HBA_fc4types { HBA_UINT8 bits[32]; /* 32 bytes of FC-4 per GS-2 */ } HBA_FC4TYPES, *PHBA_FC4TYPES;
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 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-2 */ 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;
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;
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;
typedef enum HBA_fcpbindingtype { TO_D_ID, TO_WWN } 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_FcpScsiEntry { HBA_SCSIID ScsiId; HBA_FCPID FcpId; } HBA_FCPSCSIENTRY, *PHBA_FCPSCSIENTRY;
typedef struct HBA_FCPTargetMapping { HBA_UINT32 NumberOfEntries; HBA_FCPSCSIENTRY entry[1]; /* Variable length array containing mappings*/ } HBA_FCPTARGETMAPPING, *PHBA_FCPTARGETMAPPING;
typedef struct HBA_FCPBindingEntry { HBA_FCPBINDINGTYPE type; HBA_SCSIID ScsiId; HBA_FCPID FcpId; } HBA_FCPBINDINGENTRY, *PHBA_FCPBINDINGENTRY;
typedef struct HBA_FCPBinding { HBA_UINT32 NumberOfEntries; HBA_FCPBINDINGENTRY entry[1]; /* Variable length array */ } HBA_FCPBINDING, *PHBA_FCPBINDING;
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;
#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 which this event occurred */ HBA_UINT32 Reserved[3]; } HBA_LINK_EVENTINFO, *PHBA_LINK_EVENTINFO;
typedef struct HBA_RSCN_EventInfo { HBA_UINT32 PortFcId; /* Port which this 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 PVOID PHBA_ENTRYPOINTS;
HBA_STATUS HBA_API HBA_RegisterLibrary(PHBA_ENTRYPOINTS entrypoints);
HBA_UINT32 HBA_API HBA_GetVersion(); HBA_STATUS HBA_API HBA_LoadLibrary(); HBA_STATUS HBA_API HBA_FreeLibrary();
HBA_UINT32 HBA_API HBA_GetNumberOfAdapters();
HBA_STATUS HBA_API HBA_GetAdapterName(HBA_UINT32 adapterindex, char *adaptername);
HBA_HANDLE HBA_API HBA_OpenAdapter( char* adaptername );
void HBA_API HBA_CloseAdapter( HBA_HANDLE handle );
HBA_STATUS HBA_API HBA_GetAdapterAttributes( HBA_HANDLE handle, HBA_ADAPTERATTRIBUTES *hbaattributes );
HBA_STATUS HBA_API HBA_GetAdapterPortAttributes( HBA_HANDLE handle, HBA_UINT32 portindex, HBA_PORTATTRIBUTES *portattributes );
HBA_STATUS HBA_API HBA_GetPortStatistics( HBA_HANDLE handle, HBA_UINT32 portindex, HBA_PORTSTATISTICS *portstatistics );
HBA_STATUS HBA_API HBA_GetDiscoveredPortAttributes( HBA_HANDLE handle, HBA_UINT32 portindex, HBA_UINT32 discoveredportindex, HBA_PORTATTRIBUTES *portattributes );
HBA_STATUS HBA_API HBA_GetPortAttributesByWWN( HBA_HANDLE handle, HBA_WWN PortWWN, HBA_PORTATTRIBUTES *portattributes );
HBA_STATUS HBA_API HBA_SendCTPassThru( HBA_HANDLE handle, void * pReqBuffer, HBA_UINT32 ReqBufferSize, void * pRspBuffer, HBA_UINT32 RspBufferSize );
HBA_STATUS HBA_API HBA_GetEventBuffer( HBA_HANDLE handle, PHBA_EVENTINFO EventBuffer, HBA_UINT32 *EventCount);
HBA_STATUS HBA_API HBA_SetRNIDMgmtInfo( HBA_HANDLE handle, HBA_MGMTINFO *pInfo);
HBA_STATUS HBA_API HBA_GetRNIDMgmtInfo( HBA_HANDLE handle, HBA_MGMTINFO *pInfo);
HBA_STATUS HBA_API HBA_SendRNID( HBA_HANDLE handle, HBA_WWN wwn, HBA_WWNTYPE wnntype, void * pRspBuffer, HBA_UINT32 *RspBufferSize );
HBA_STATUS HBA_API HBA_GetFcpTargetMapping ( HBA_HANDLE handle, PHBA_FCPTARGETMAPPING mapping );
HBA_STATUS HBA_API HBA_GetFcpPersistentBinding ( HBA_HANDLE handle, PHBA_FCPBINDING binding );
HBA_STATUS HBA_API 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_STATUS HBA_API HBA_SendReportLUNs ( HBA_HANDLE handle, HBA_WWN portWWN, void * pRspBuffer, HBA_UINT32 RspBufferSize, void * pSenseBuffer, HBA_UINT32 SenseBufferSize );
HBA_STATUS HBA_API HBA_SendReadCapacity ( HBA_HANDLE handle, HBA_WWN portWWN, HBA_UINT64 fcLUN, void * pRspBuffer, HBA_UINT32 RspBufferSize, void * pSenseBuffer, HBA_UINT32 SenseBufferSize );
void HBA_API HBA_RefreshInformation(HBA_HANDLE handle); void HBA_API HBA_ResetStatistics(HBA_HANDLE handle, HBA_UINT32 portindex);
|