hbaapi.h revision fcf3ce441efd61da9bb2884968af01cb7c1452cc
/*
* *****************************************************************************
*
* 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
*
*
* 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
#else
#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
/* Don't confuse, _WIN32 with WIN32... OK, how do you accompish that */
#ifdef _WIN32
typedef unsigned _int64 HBA_UINT64;
#else
typedef struct {
} HBA_INT64;
typedef struct {
} 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 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
* last call to
* HBA_Refreshinformation */
* retry may be effective */
* retry may be effective */
* or deactivated */
* the local adapter */
* the specified adapter */
* 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. */
* WWN. This could occur if the
* NodeWWN of multiple adapters is
* identical */
* included a bad local SCSI bus
* number */
* included a bad local SCSI target
* number */
* 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 */
* included a bad or unlocatable FCP
* Target FCID */
* included a bad FCP Target Node
* WWN */
* included a bad FCP Target Port
* WWN */
* included an FCP Logical Unit Number
* not defined by the identified
* Target*/
* included an undefined or otherwise
* inaccessible Logical Unit Unique
* Identifier */
* included a binding which did not
* match a binding established by the
* specified port */
* Nx_Port that was not a SCSI
* Target Port */
* unsupported FC-4 protocol */
* unimplemented capabilities for a
* port */
/* 4.2.3 Port Operational Modes Values */
typedef HBA_UINT32 HBA_PORTTYPE;
#define HBA_PORTTYPE_FLPORT 7
typedef HBA_UINT32 HBA_PORTSTATE;
typedef HBA_UINT32 HBA_PORTSPEED;
#define HBA_PORTSPEED_UNKNOWN 0 /* Unknown - transceiver incable
* of reporting */
/* 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 {
/* 4.2.6 Basic Types */
typedef struct HBA_wwn {
typedef struct HBA_ipaddress {
int ipversion; /* see enumerations in RNID */
union
{
unsigned char ipv4address[4];
unsigned char ipv6address[16];
} ipaddress;
typedef HBA_INT8 HBA_BOOLEAN;
/* 4.2.7 Adapter Attributes */
typedef struct hba_AdapterAttributes {
*file */
/* 4.2.8 Port Attributes */
typedef struct HBA_PortAttributes {
char PortSymbolicName[256];
/* 4.2.9 Port Statistics */
typedef struct HBA_PortStatistics {
/* 4.2.10 FCP Attributes */
typedef struct HBA_ScsiId {
} HBA_SCSIID, *PHBA_SCSIID;
typedef struct HBA_FcpId {
} HBA_FCPID, *PHBA_FCPID;
typedef struct HBA_LUID {
typedef struct HBA_FcpScsiEntry {
typedef struct HBA_FcpScsiEntryV2 {
typedef struct HBA_FCPTargetMapping {
* containing mappings */
typedef struct HBA_FCPTargetMappingV2 {
* containing mappings */
typedef struct HBA_FCPBindingEntry {
* to WWN, FcpLun always valid */
typedef struct HBA_FCPBinding {
/* 4.2.11 FC-3 Management Atrributes */
typedef struct HBA_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 {
typedef struct HBA_RSCN_EventInfo {
* "Affected N-Port Pages"*/
typedef struct HBA_Pty_EventInfo {
typedef struct HBA_EventInfo {
union {
} Event;
typedef struct HBA_LibraryAttributes {
char LibPath[256];
char VName[256];
char VVersion[256];
struct tm build_date;
/* 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 {
typedef struct HBA_FcpBinding2 {
/* FC-4 Instrumentation */
typedef struct HBA_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
/*
* Make sure HBA_LoadLibrary returns before any other threads
* make calls to the library
*/
char *adaptername
);
char* adaptername
);
);
HBA_API void HBA_CloseAdapter(
);
);
);
);
);
);
void *pReqBuffer,
void *pRspBuffer,
);
/* Depricated, but supported */
void *pReqBuffer,
void *pRspBuffer,
);
);
);
);
void *pRspBuffer,
);
/* Depricated, but supported */
void *pRspBuffer,
);
void *pRspBuffer,
);
void *pRspBuffer,
);
void *pRspBuffer,
);
void *pRspBuffer,
);
void *pRspBuffer,
);
);
const HBA_SCSIID *lunit,
);
HBA_API void HBA_ResetStatistics(
);
);
);
);
);
);
const HBA_FCPBINDING2
);
);
const HBA_FCPBINDING2
);
/* Depricated, but supported */
);
);
void *pRspBuffer,
void *pSenseBuffer,
);
/* Depricated, but supported */
void *pRspBuffer,
void *pSenseBuffer,
);
void *pRespBuffer,
void *pSenseBuffer,
);
/* Depricated, but supported */
void *pRspBuffer,
void *pSenseBuffer,
);
void *pRspBuffer,
void *pSenseBuffer,
);
/* Depricated, but supported */
void *pRspBuffer,
void *pSenseBuffer,
);
);
);
void (*callback) (
void *data,
),
void *userData,
);
void (*callback)(
void *data,
),
void *userData,
);
void (*callback)(
void *data,
),
void *userData,
);
void (*callback)(
void *data,
),
void *userData,
);
void (*callback)(
void *data,
),
void *userData,
);
void (*callback)
(
void *data,
void *pRLIRBuffer,
),
void *userData,
void *pRLIRBuffer,
);
/* Wrapper library specific entry points */
);
#endif /* HBA_API_H */
#ifdef __cplusplus
}
#endif