1 /******************************************************************************
2  *
3  * Description
4  *	vendorhbaapi.h - incombination with hbaapi.h, defines interface to
5  *		vendor specific API
6  *
7  * License:
8  *	The contents of this file are subject to the SNIA Public License
9  *	Version 1.0 (the "License"); you may not use this file except in
10  *	compliance with the License. You may obtain a copy of the License at
11  *
12  *	/http://www.snia.org/English/Resources/Code/OpenSource.html
13  *
14  *	Software distributed under the License is distributed on an "AS IS"
15  *	basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
16  *	the License for the specific language governing rights and limitations
17  *	under the License.
18  *
19  * The Original Code is  SNIA HBA API general header file
20  *
21  * The Initial Developer of the Original Code is:
22  *	Benjamin F. Kuo, Troika Networks, Inc. (benk@troikanetworks.com)
23  *
24  * Contributor(s):
25  *	Tuan Lam, QLogic Corp. (t_lam@qlc.com)
26  *	Dan Willie, Emulex Corp. (Dan.Willie@emulex.com)
27  *	Dixon Hutchinson, Legato Systems, Inc. (dhutchin@legato.com)
28  *	David Dillard, VERITAS Software Corp. (david.dillard@veritas.com)
29  *
30  *******************************************************************************
31  *
32  *   Changes:
33  *	12/12/2001 Original revision, code split out of hbaapi.h
34  *	(for other changes... see the CVS logs)
35  ******************************************************************************/
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 
42 #ifndef VENDOR_HBA_API_H
43 #define VENDOR_HBA_API_H
44 
45 
46 /* 4.2.12 HBA Library Function Table */
47 typedef HBA_UINT32	(* HBAGetVersionFunc)();
48 typedef HBA_STATUS	(* HBALoadLibraryFunc)();
49 typedef HBA_STATUS	(* HBAFreeLibraryFunc)();
50 typedef HBA_UINT32	(* HBAGetNumberOfAdaptersFunc)();
51 typedef HBA_STATUS	(* HBAGetAdapterNameFunc)(HBA_UINT32, char *);
52 /*
53  * Open Adapter.... the vendor function is limmited to 16 bits,
54  * the wrapper library will mask off the upper 16.
55  * Maybe typedef should be:
56  * typedef HBA_UINT16	(* HBAOpenAdapterFunc)(char *);
57  */
58 typedef HBA_HANDLE	(* HBAOpenAdapterFunc)(char *);
59 typedef HBA_STATUS	(* HBAOpenAdapterByWWNFunc)
60     (HBA_HANDLE *, HBA_WWN);
61 typedef void		(* HBACloseAdapterFunc)(HBA_HANDLE);
62 typedef HBA_STATUS	(* HBAGetAdapterAttributesFunc)
63     (HBA_HANDLE, HBA_ADAPTERATTRIBUTES *);
64 typedef HBA_STATUS	(* HBAGetAdapterPortAttributesFunc)
65     (HBA_HANDLE, HBA_UINT32, HBA_PORTATTRIBUTES *);
66 typedef HBA_STATUS	(* HBAGetPortStatisticsFunc)
67     (HBA_HANDLE, HBA_UINT32, HBA_PORTSTATISTICS *);
68 typedef HBA_STATUS	(* HBAGetDiscoveredPortAttributesFunc)
69     (HBA_HANDLE, HBA_UINT32, HBA_UINT32, HBA_PORTATTRIBUTES *);
70 typedef HBA_STATUS	(* HBAGetPortAttributesByWWNFunc)
71     (HBA_HANDLE, HBA_WWN, HBA_PORTATTRIBUTES *);
72 typedef HBA_STATUS	(* HBASendCTPassThruV2Func)
73     (HBA_HANDLE, HBA_WWN, void *, HBA_UINT32, void *, HBA_UINT32 *);
74 typedef void		(* HBARefreshInformationFunc)(HBA_HANDLE);
75 typedef void		(* HBARefreshAdapterConfigurationFunc) ();
76 typedef void		(* HBAResetStatisticsFunc)(HBA_HANDLE, HBA_UINT32);
77 typedef HBA_STATUS	(* HBAGetFcpTargetMappingV2Func)
78     (HBA_HANDLE, HBA_WWN, HBA_FCPTARGETMAPPINGV2 *);
79 typedef HBA_STATUS	(* HBAGetBindingCapabilityFunc)
80     (HBA_HANDLE, HBA_WWN, HBA_BIND_CAPABILITY *);
81 typedef HBA_STATUS	(* HBAGetBindingSupportFunc)
82     (HBA_HANDLE, HBA_WWN, HBA_BIND_CAPABILITY *);
83 typedef HBA_STATUS	(* HBASetBindingSupportFunc)
84     (HBA_HANDLE, HBA_WWN, HBA_BIND_CAPABILITY);
85 typedef HBA_STATUS	(* HBASetPersistentBindingV2Func)
86     (HBA_HANDLE, HBA_WWN, const HBA_FCPBINDING2 *);
87 typedef HBA_STATUS	(* HBAGetPersistentBindingV2Func)
88     (HBA_HANDLE, HBA_WWN, HBA_FCPBINDING2 *);
89 typedef HBA_STATUS	(* HBARemovePersistentBindingFunc)
90     (HBA_HANDLE, HBA_WWN, const HBA_FCPBINDING2 *);
91 typedef HBA_STATUS	(* HBARemoveAllPersistentBindingsFunc)
92     (HBA_HANDLE, HBA_WWN);
93 typedef HBA_STATUS	(* HBAGetEventBufferFunc)
94     (HBA_HANDLE, HBA_EVENTINFO *, HBA_UINT32 *);
95 typedef HBA_STATUS	(* HBASetRNIDMgmtInfoFunc)
96     (HBA_HANDLE, HBA_MGMTINFO);
97 typedef HBA_STATUS	(* HBAGetRNIDMgmtInfoFunc)
98     (HBA_HANDLE, HBA_MGMTINFO *);
99 typedef HBA_STATUS	(* HBASendRNIDV2Func)
100     (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, HBA_UINT32, void *, HBA_UINT32*);
101 typedef HBA_STATUS	(* HBAScsiInquiryV2Func)
102     (HBA_HANDLE,HBA_WWN,HBA_WWN, HBA_UINT64, HBA_UINT8, HBA_UINT8,
103      void *, HBA_UINT32 *, HBA_UINT8 *, void *, HBA_UINT32 *);
104 typedef HBA_STATUS	(* HBAScsiReportLUNsV2Func)
105     (HBA_HANDLE, HBA_WWN, HBA_WWN, void *, HBA_UINT32 *, HBA_UINT8 *,
106      void *, HBA_UINT32 *);
107 typedef HBA_STATUS	(* HBAScsiReadCapacityV2Func)
108     (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT64, void *, HBA_UINT32 *,
109      HBA_UINT8 *, void *, HBA_UINT32 *);
110 typedef HBA_UINT32	(* HBAGetVendorLibraryAttributesFunc)
111     (HBA_LIBRARYATTRIBUTES *);
112 typedef HBA_STATUS	(* HBARemoveCallbackFunc) (HBA_CALLBACKHANDLE);
113 typedef HBA_STATUS	(* HBARegisterForAdapterAddEventsFunc)
114     (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_CALLBACKHANDLE *);
115 typedef HBA_STATUS	(* HBARegisterForAdapterEventsFunc)
116     (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_HANDLE,
117      HBA_CALLBACKHANDLE *);
118 typedef HBA_STATUS	(* HBARegisterForAdapterPortEventsFunc)
119     (void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32), void *, HBA_HANDLE,
120      HBA_WWN, HBA_CALLBACKHANDLE *);
121 typedef HBA_STATUS	(* HBARegisterForAdapterPortStatEventsFunc)
122     (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_HANDLE, HBA_WWN,
123      HBA_PORTSTATISTICS, HBA_UINT32, HBA_CALLBACKHANDLE *);
124 typedef HBA_STATUS	(* HBARegisterForTargetEventsFunc)
125     (void (*)(void *, HBA_WWN, HBA_WWN, HBA_UINT32), void *, HBA_HANDLE,
126      HBA_WWN, HBA_WWN, HBA_CALLBACKHANDLE *,
127      HBA_UINT32 );
128 typedef HBA_STATUS	(* HBARegisterForLinkEventsFunc)
129     (void (*)(void *, HBA_WWN, HBA_UINT32, void *, HBA_UINT32), void *, void *,
130      HBA_UINT32, HBA_HANDLE, HBA_CALLBACKHANDLE *);
131 typedef HBA_STATUS	(* HBASendRPLFunc)
132     (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, HBA_UINT32, void *, HBA_UINT32 *);
133 typedef HBA_STATUS	(* HBASendRPSFunc)
134     (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, HBA_WWN, HBA_UINT32, void *,
135      HBA_UINT32 *);
136 typedef HBA_STATUS	(* HBASendSRLFunc)
137     (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, void *, HBA_UINT32 *);
138 typedef HBA_STATUS	(* HBASendLIRRFunc)
139     (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT8, HBA_UINT8, void *, HBA_UINT32 *);
140 typedef HBA_STATUS	(* HBAGetFC4StatisticsFunc)
141     (HBA_HANDLE, HBA_WWN, HBA_UINT8, HBA_FC4STATISTICS *);
142 typedef HBA_STATUS	(* HBAGetFCPStatisticsFunc)
143     (HBA_HANDLE, const HBA_SCSIID *, HBA_FC4STATISTICS *);
144 typedef HBA_STATUS	(* HBASendRLSFunc)
145     (HBA_HANDLE, HBA_WWN, HBA_WWN, void *, HBA_UINT32 *);
146 
147 
148 /* Deprecated, but still supported functions */
149 typedef HBA_STATUS	(* HBAGetFcpTargetMappingFunc)
150     (HBA_HANDLE, HBA_FCPTARGETMAPPING *);
151 typedef HBA_STATUS	(* HBAGetFcpPersistentBindingFunc)
152     (HBA_HANDLE, HBA_FCPBINDING *);
153 typedef HBA_STATUS	(* HBASendCTPassThruFunc)
154     (HBA_HANDLE, void *, HBA_UINT32, void *, HBA_UINT32);
155 typedef HBA_STATUS	(* HBASendScsiInquiryFunc)
156     (HBA_HANDLE, HBA_WWN,HBA_UINT64, HBA_UINT8, HBA_UINT32, void *,
157      HBA_UINT32, void *, HBA_UINT32);
158 typedef HBA_STATUS	(* HBASendReportLUNsFunc)
159     (HBA_HANDLE, HBA_WWN, void *, HBA_UINT32, void *, HBA_UINT32);
160 typedef HBA_STATUS	(* HBASendReadCapacityFunc)
161     (HBA_HANDLE, HBA_WWN, HBA_UINT64, void *, HBA_UINT32, void *,
162      HBA_UINT32);
163 typedef HBA_STATUS	(* HBASendRNIDFunc)
164     (HBA_HANDLE, HBA_WWN, HBA_WWNTYPE, void *, HBA_UINT32 *);
165 
166 /*
167  * This structure is needed since a Rev2 vendor library must still implement the
168  * Rev1 Register function in case it is called by a Rev1 wapper library.  Still
169  * not STRICTLY neccesary, it provides clarity and keeps compilers happier
170  */
171 typedef struct HBA_EntryPoints {
172     HBAGetVersionFunc			GetVersionHandler;
173     HBALoadLibraryFunc			LoadLibraryHandler;
174     HBAFreeLibraryFunc			FreeLibraryHandler;
175     HBAGetNumberOfAdaptersFunc		GetNumberOfAdaptersHandler;
176     HBAGetAdapterNameFunc		GetAdapterNameHandler;
177     HBAOpenAdapterFunc			OpenAdapterHandler;
178     HBACloseAdapterFunc			CloseAdapterHandler;
179     HBAGetAdapterAttributesFunc		GetAdapterAttributesHandler;
180     HBAGetAdapterPortAttributesFunc	GetAdapterPortAttributesHandler;
181     HBAGetPortStatisticsFunc		GetPortStatisticsHandler;
182     HBAGetDiscoveredPortAttributesFunc	GetDiscoveredPortAttributesHandler;
183     HBAGetPortAttributesByWWNFunc	GetPortAttributesByWWNHandler;
184     HBASendCTPassThruFunc		SendCTPassThruHandler;
185     HBARefreshInformationFunc		RefreshInformationHandler;
186     HBAResetStatisticsFunc		ResetStatisticsHandler;
187     HBAGetFcpTargetMappingFunc		GetFcpTargetMappingHandler;
188     HBAGetFcpPersistentBindingFunc	GetFcpPersistentBindingHandler;
189     HBAGetEventBufferFunc		GetEventBufferHandler;
190     HBASetRNIDMgmtInfoFunc		SetRNIDMgmtInfoHandler;
191     HBAGetRNIDMgmtInfoFunc		GetRNIDMgmtInfoHandler;
192     HBASendRNIDFunc			SendRNIDHandler;
193     HBASendScsiInquiryFunc		ScsiInquiryHandler;
194     HBASendReportLUNsFunc		ReportLUNsHandler;
195     HBASendReadCapacityFunc		ReadCapacityHandler;
196 } HBA_ENTRYPOINTS, *PHBA_ENTRYPOINTS;
197 
198 typedef struct HBA_EntryPointsV2 {
199     /* These first elements MUST MUST MUST match HBA_ENTRYPOINTS */
200     HBAGetVersionFunc			GetVersionHandler;
201     HBALoadLibraryFunc			LoadLibraryHandler;
202     HBAFreeLibraryFunc			FreeLibraryHandler;
203     HBAGetNumberOfAdaptersFunc		GetNumberOfAdaptersHandler;
204     HBAGetAdapterNameFunc		GetAdapterNameHandler;
205     HBAOpenAdapterFunc			OpenAdapterHandler;
206     HBACloseAdapterFunc			CloseAdapterHandler;
207     HBAGetAdapterAttributesFunc		GetAdapterAttributesHandler;
208     HBAGetAdapterPortAttributesFunc	GetAdapterPortAttributesHandler;
209     HBAGetPortStatisticsFunc		GetPortStatisticsHandler;
210     HBAGetDiscoveredPortAttributesFunc	GetDiscoveredPortAttributesHandler;
211     HBAGetPortAttributesByWWNFunc	GetPortAttributesByWWNHandler;
212     /* Next function depricated but still supported */
213     HBASendCTPassThruFunc		SendCTPassThruHandler;
214     HBARefreshInformationFunc		RefreshInformationHandler;
215     HBAResetStatisticsFunc		ResetStatisticsHandler;
216     /* Next function depricated but still supported */
217     HBAGetFcpTargetMappingFunc		GetFcpTargetMappingHandler;
218     /* Next function depricated but still supported */
219     HBAGetFcpPersistentBindingFunc	GetFcpPersistentBindingHandler;
220     HBAGetEventBufferFunc		GetEventBufferHandler;
221     HBASetRNIDMgmtInfoFunc		SetRNIDMgmtInfoHandler;
222     HBAGetRNIDMgmtInfoFunc		GetRNIDMgmtInfoHandler;
223     /* Next function depricated but still supported */
224     HBASendRNIDFunc			SendRNIDHandler;
225     /* Next function depricated but still supported */
226     HBASendScsiInquiryFunc		ScsiInquiryHandler;
227     /* Next function depricated but still supported */
228     HBASendReportLUNsFunc		ReportLUNsHandler;
229     /* Next function depricated but still supported */
230     HBASendReadCapacityFunc		ReadCapacityHandler;
231 
232     /* Rev 2 Functions */
233     HBAOpenAdapterByWWNFunc		OpenAdapterByWWNHandler;
234     HBAGetFcpTargetMappingV2Func	GetFcpTargetMappingV2Handler;
235     HBASendCTPassThruV2Func		SendCTPassThruV2Handler;
236     HBARefreshAdapterConfigurationFunc	RefreshAdapterConfigurationHandler;
237     HBAGetBindingCapabilityFunc		GetBindingCapabilityHandler;
238     HBAGetBindingSupportFunc		GetBindingSupportHandler;
239     HBASetBindingSupportFunc		SetBindingSupportHandler;
240     HBASetPersistentBindingV2Func	SetPersistentBindingV2Handler;
241     HBAGetPersistentBindingV2Func	GetPersistentBindingV2Handler;
242     HBARemovePersistentBindingFunc	RemovePersistentBindingHandler;
243     HBARemoveAllPersistentBindingsFunc	RemoveAllPersistentBindingsHandler;
244     HBASendRNIDV2Func			SendRNIDV2Handler;
245     HBAScsiInquiryV2Func		ScsiInquiryV2Handler;
246     HBAScsiReportLUNsV2Func		ScsiReportLUNsV2Handler;
247     HBAScsiReadCapacityV2Func		ScsiReadCapacityV2Handler;
248     HBAGetVendorLibraryAttributesFunc	GetVendorLibraryAttributesHandler;
249     HBARemoveCallbackFunc		RemoveCallbackHandler;
250     HBARegisterForAdapterAddEventsFunc	RegisterForAdapterAddEventsHandler;
251     HBARegisterForAdapterEventsFunc	RegisterForAdapterEventsHandler;
252     HBARegisterForAdapterPortEventsFunc RegisterForAdapterPortEventsHandler;
253     HBARegisterForAdapterPortStatEventsFunc
254 					RegisterForAdapterPortStatEventsHandler;
255     HBARegisterForTargetEventsFunc	RegisterForTargetEventsHandler;
256     HBARegisterForLinkEventsFunc	RegisterForLinkEventsHandler;
257     HBASendRPLFunc			SendRPLHandler;
258     HBASendRPSFunc			SendRPSHandler;
259     HBASendSRLFunc			SendSRLHandler;
260     HBASendLIRRFunc			SendLIRRHandler;
261     HBAGetFC4StatisticsFunc		GetFC4StatisticsHandler;
262     HBAGetFCPStatisticsFunc		GetFCPStatisticsHandler;
263     HBASendRLSFunc			SendRLSHandler;
264 } HBA_ENTRYPOINTSV2, *PHBA_ENTRYPOINTSV2;
265 
266 typedef HBA_STATUS	(* HBARegisterLibraryFunc)(HBA_ENTRYPOINTS *);
267 typedef HBA_STATUS	(* HBARegisterLibraryV2Func)(HBA_ENTRYPOINTSV2 *);
268 
269 /* Function Prototypes */
270 HBA_API HBA_STATUS HBA_RegisterLibrary(
271     HBA_ENTRYPOINTS	*functionTable
272     );
273 
274 HBA_API HBA_STATUS HBA_RegisterLibraryV2(
275     HBA_ENTRYPOINTSV2	*functionTable
276     );
277 
278 #endif /* VENDOR_HBA_API_H */
279 
280 #ifdef __cplusplus
281 }
282 #endif
283 
284 
285