root/usr/src/lib/smhba/common/vendorsmhbaapi.h
/*
 * ****************************************************************************
 *
 * Description
 *      vendorhbaapi.h - incombination with hbaapi.h, defines interface to
 *              vendor specific API
 *
 * 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:
 *      12/12/2001 Original revision, code split out of hbaapi.h
 *      (for other changes... see the CVS logs)
 * ****************************************************************************
 */
/*
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _VENDORSMHBAAPI_H_
#define _VENDORSMHBAAPI_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <vendorhbaapi.h>

/* SM-HBA-2 6.9.2 Function Prototypes */
typedef HBA_UINT32 (* SMHBAGetVersionFunc)();
typedef HBA_UINT32 (* SMHBAGetWrapperLibraryAttributesFunc)
        (HBA_UINT32, SMHBA_LIBRARYATTRIBUTES *);
typedef HBA_UINT32 (* SMHBAGetVendorLibraryAttributesFunc)
        (SMHBA_LIBRARYATTRIBUTES *);
typedef HBA_STATUS (* SMHBAGetAdapterAttributesFunc)
        (HBA_HANDLE, SMHBA_ADAPTERATTRIBUTES *);
typedef HBA_STATUS (* SMHBAGetNumberOfPortsFunc)
        (HBA_HANDLE, HBA_UINT32 *);
typedef HBA_STATUS (* SMHBAGetPortTypeFunc)
        (HBA_HANDLE, HBA_UINT32, HBA_PORTTYPE *);
typedef HBA_STATUS (* SMHBAGetAdapterPortAttributesFunc)
        (HBA_HANDLE, HBA_UINT32, SMHBA_PORTATTRIBUTES *);
typedef HBA_STATUS (* SMHBAGetDiscoveredPortAttributesFunc)
        (HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_PORTATTRIBUTES *);
typedef HBA_STATUS (* SMHBAGetPortAttributesByWWNFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_PORTATTRIBUTES *);
typedef HBA_STATUS (* SMHBAGetFCPhyAttributesFunc)
        (HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_FC_PHY *);
typedef HBA_STATUS (* SMHBAGetSASPhyAttributesFunc)
        (HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_SAS_PHY *);
typedef HBA_STATUS (* SMHBAGetProtocolStatisticsFunc)
        (HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_PROTOCOLSTATISTICS *);
typedef HBA_STATUS (* SMHBAGetPhyStatisticsFunc)
        (HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_PHYSTATISTICS *);
typedef HBA_STATUS (* SMHBASendTESTFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, void *, HBA_UINT32);
typedef HBA_STATUS (* SMHBASendECHOFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, void *, HBA_UINT32,
        void *, HBA_UINT32 *);
typedef HBA_STATUS (* SMHBASendSMPPassThruFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN, void *, HBA_UINT32, void *,
        HBA_UINT32 *);
typedef HBA_STATUS (* SMHBAGetBindingCapabilityFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_BIND_CAPABILITY *);
typedef HBA_STATUS (* SMHBAGetBindingSupportFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_BIND_CAPABILITY *);
typedef HBA_STATUS (* SMHBASetBindingSupportFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_BIND_CAPABILITY);
typedef HBA_STATUS (* SMHBAGetTargetMappingFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_TARGETMAPPING *);
typedef HBA_STATUS (* SMHBAGetPersistentBindingFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_BINDING *);
typedef HBA_STATUS (* SMHBASetPersistentBindingFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, const SMHBA_BINDING *);
typedef HBA_STATUS (* SMHBARemovePersistentBindingFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, const SMHBA_BINDING *);
typedef HBA_STATUS (* SMHBARemoveAllPersistentBindingsFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN);
typedef HBA_STATUS (* SMHBAGetLUNStatisticsFunc)
        (HBA_HANDLE, const HBA_SCSIID *, SMHBA_PROTOCOLSTATISTICS *);
typedef HBA_STATUS (* SMHBARegisterForAdapterAddEventsFunc)
        (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_CALLBACKHANDLE *);
typedef HBA_STATUS (* SMHBARegisterForAdapterEventsFunc)
        (void (*)(void *, HBA_WWN, HBA_UINT32),
        void *, HBA_HANDLE, HBA_CALLBACKHANDLE *);
typedef HBA_STATUS    (* SMHBARegisterForAdapterPortEventsFunc)
        (void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32),
        void *, HBA_HANDLE, HBA_WWN, HBA_UINT32, HBA_CALLBACKHANDLE *);
typedef HBA_STATUS    (* SMHBARegisterForAdapterPortStatEventsFunc)
        (void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32),
        void *, HBA_HANDLE, HBA_WWN, HBA_UINT32, SMHBA_PROTOCOLSTATISTICS,
        HBA_UINT32, HBA_CALLBACKHANDLE *);
typedef HBA_STATUS    (* SMHBARegisterForAdapterPhyStatEventsFunc)
        (void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32),
        void *, HBA_HANDLE, HBA_WWN, HBA_UINT32, SMHBA_PHYSTATISTICS,
        HBA_UINT32, HBA_CALLBACKHANDLE *);
typedef HBA_STATUS    (* SMHBARegisterForTargetEventsFunc)
        (void (*)(void *, HBA_WWN, HBA_WWN, HBA_WWN, HBA_UINT32),
        void *, HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN,
        HBA_CALLBACKHANDLE *, HBA_UINT32);
typedef HBA_STATUS    (* SMHBAScsiInquiryFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN, SMHBA_SCSILUN, HBA_UINT8,
        HBA_UINT8, void *, HBA_UINT32 *, HBA_UINT8 *, void *, HBA_UINT32 *);
typedef HBA_STATUS    (* SMHBAScsiReportLUNsFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN, void *, HBA_UINT32 *,
        HBA_UINT8 *, void *, HBA_UINT32 *);
typedef HBA_STATUS    (* SMHBAScsiReadCapacityFunc)
        (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN, SMHBA_SCSILUN, void *,
        HBA_UINT32 *, HBA_UINT8 *, void *, HBA_UINT32 *);

/* SM-HBA-2 6.9.3 Entry Point Data Declarations */
typedef struct SMHBA_EntryPoints {
        SMHBAGetVersionFunc                     GetVersionHandler;
        HBALoadLibraryFunc                      LoadLibraryHandler;
        HBAFreeLibraryFunc                      FreeLibraryHandler;
        HBAGetNumberOfAdaptersFunc              GetNumberOfAdaptersHandler;
        HBARefreshInformationFunc               RefreshInformationHandler;
        SMHBAGetVendorLibraryAttributesFunc
                GetVendorLibraryAttributesHandler;
        HBAGetAdapterNameFunc                   GetAdapterNameHandler;
        HBAOpenAdapterFunc                      OpenAdapterHandler;
        HBACloseAdapterFunc                     CloseAdapterHandler;
        SMHBAGetAdapterAttributesFunc           GetAdapterAttributesHandler;
        SMHBAGetNumberOfPortsFunc               GetNumberOfPortsHandler;
        SMHBAGetPortTypeFunc                    GetPortTypeHandler;
        SMHBAGetAdapterPortAttributesFunc
                GetAdapterPortAttributesHandler;
        SMHBAGetDiscoveredPortAttributesFunc
                GetDiscoveredPortAttributesHandler;
        SMHBAGetPortAttributesByWWNFunc         GetPortAttributesByWWNHandler;
        SMHBAGetFCPhyAttributesFunc             GetFCPhyAttributesHandler;
        SMHBAGetSASPhyAttributesFunc            GetSASPhyAttributesHandler;
        SMHBAGetProtocolStatisticsFunc          GetProtocolStatisticsHandler;
        SMHBAGetPhyStatisticsFunc               GetPhyStatisticsHandler;
        HBASendCTPassThruV2Func                 SendCTPassThruV2Handler;
        HBASetRNIDMgmtInfoFunc                  SetRNIDMgmtInfoHandler;
        HBAGetRNIDMgmtInfoFunc                  GetRNIDMgmtInfoHandler;
        HBASendRNIDV2Func                       SendRNIDV2Handler;
        HBASendRPLFunc                          SendRPLHandler;
        HBASendRPSFunc                          SendRPSHandler;
        HBASendSRLFunc                          SendSRLHandler;
        HBASendLIRRFunc                         SendLIRRHandler;
        HBASendRLSFunc                          SendRLSHandler;
        SMHBASendTESTFunc                       SendTESTHandler;
        SMHBASendECHOFunc                       SendECHOHandler;
        SMHBASendSMPPassThruFunc                SendSMPPassThruHandler;
        SMHBAGetBindingCapabilityFunc           GetBindingCapabilityHandler;
        SMHBAGetBindingSupportFunc              GetBindingSupportHandler;
        SMHBASetBindingSupportFunc              SetBindingSupportHandler;
        SMHBAGetTargetMappingFunc               GetTargetMappingHandler;
        SMHBAGetPersistentBindingFunc           GetPersistentBindingHandler;
        SMHBASetPersistentBindingFunc           SetPersistentBindingHandler;
        SMHBARemovePersistentBindingFunc        RemovePersistentBindingHandler;
        SMHBARemoveAllPersistentBindingsFunc
                RemoveAllPersistentBindingsHandler;
        SMHBAGetLUNStatisticsFunc               GetLUNStatisticsHandler;
        SMHBAScsiInquiryFunc                    ScsiInquiryHandler;
        SMHBAScsiReportLUNsFunc                 ScsiReportLUNsHandler;
        SMHBAScsiReadCapacityFunc               ScsiReadCapacityHandler;
        SMHBARegisterForAdapterAddEventsFunc
                RegisterForAdapterAddEventsHandler;
        SMHBARegisterForAdapterEventsFunc       RegisterForAdapterEventsHandler;
        SMHBARegisterForAdapterPortEventsFunc
                RegisterForAdapterPortEventsHandler;
        SMHBARegisterForAdapterPortStatEventsFunc
                RegisterForAdapterPortStatEventsHandler;
        SMHBARegisterForAdapterPhyStatEventsFunc
                RegisterForAdapterPhyStatEventsHandler;
        SMHBARegisterForTargetEventsFunc        RegisterForTargetEventsHandler;
        HBARegisterForLinkEventsFunc            RegisterForLinkEventsHandler;
        HBARemoveCallbackFunc                   RemoveCallbackHandler;
} SMHBA_ENTRYPOINTS, *PSMHBA_ENTRYPOINTS;

typedef HBA_UINT32 (* SMHBARegisterLibraryFunc)(SMHBA_ENTRYPOINTS *);

HBA_STATUS SMHBA_RegisterLibrary(
        SMHBA_ENTRYPOINTS       *functionTable
);

#ifdef __cplusplus
}
#endif

#endif /* _VENDORSMHBAAPI_H_ */