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