/* * Copyright (c) 2008, Intel Corporation. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU Lesser General Public License, * version 2.1, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. * */ #define _XOPEN_SOURCE 500 /* for strptime() */ #include "utils.h" #include "api_lib.h" #include "adapt_impl.h" #include "bind_impl.h" /** * Return the version of the SNIA HBA-API supported by this library. */ static HBA_UINT32 get_library_version() { return HBA_LIBVERSION; } /* * When HBA_GetVendorLibraryAttributes() is called, * it does not dispatch to the library entry point at * .GetVendorLibraryAttributesHandler. Thus this * routine can never be entered. -[sma] */ #if 0 /** * Get the library attributes. * @param ap library attributes pointer. * @returns 0 or error code. */ static HBA_STATUS get_vendor_lib_attrs(HBA_LIBRARYATTRIBUTES *ap) { memset(ap, 0, sizeof(*ap)); if (strptime(BUILD_DATE, "%Y/%m/%d %T %Z", &ap->build_date) == NULL) memset(&ap->build_date, 0, sizeof(ap->build_date)); strcpy(ap->VName, HBA_API_VENDOR); strcpy(ap->VVersion, HBA_API_VERSION); return HBA_STATUS_OK; } #endif /* * initialize the library after load. */ static HBA_STATUS load_library(void) { adapter_init(); return HBA_STATUS_OK; } static HBA_STATUS free_library(void) { adapter_shutdown(); adapter_destroy_all(); return HBA_STATUS_OK; } static HBA_ENTRYPOINTSV2 vendor_lib_entrypoints = { .GetVersionHandler = get_library_version, .LoadLibraryHandler = load_library, .FreeLibraryHandler = free_library, .GetNumberOfAdaptersHandler = adapter_get_count, .GetAdapterNameHandler = adapter_get_name, .OpenAdapterHandler = adapter_open, .CloseAdapterHandler = adapter_close, .GetAdapterAttributesHandler = adapter_get_attr, .GetAdapterPortAttributesHandler = adapter_get_port_attr, .GetPortStatisticsHandler = get_port_statistics, .GetDiscoveredPortAttributesHandler = adapter_get_rport_attr, .GetPortAttributesByWWNHandler = NULL, /* adapter_get_port_attr_by_wwn, */ /* Next function deprecated but still supported */ .SendCTPassThruHandler = NULL, .RefreshInformationHandler = NULL, .ResetStatisticsHandler = NULL, /* Next function deprecated but still supported */ .GetFcpTargetMappingHandler = get_binding_target_mapping_v1, /* Next function depricated but still supported */ .GetFcpPersistentBindingHandler = NULL, .GetEventBufferHandler = NULL, .SetRNIDMgmtInfoHandler = NULL, .GetRNIDMgmtInfoHandler = NULL, /* Next function deprecated but still supported */ .SendRNIDHandler = NULL, .ScsiInquiryHandler = scsi_inquiry_v1, .ReportLUNsHandler = scsi_report_luns_v1, .ReadCapacityHandler = scsi_read_capacity_v1, /* V2 handlers */ .OpenAdapterByWWNHandler = NULL, /* adapter_open_by_wwn, */ .GetFcpTargetMappingV2Handler = get_binding_target_mapping_v2, .SendCTPassThruV2Handler = NULL, .RefreshAdapterConfigurationHandler = NULL, .GetBindingCapabilityHandler = NULL, /* get_binding_capability, */ .GetBindingSupportHandler = NULL, /* get_binding_support, */ .SetBindingSupportHandler = NULL, /* set_binding_support, */ .SetPersistentBindingV2Handler = NULL, .GetPersistentBindingV2Handler = NULL, .RemovePersistentBindingHandler = NULL, .RemoveAllPersistentBindingsHandler = NULL, .SendRNIDV2Handler = NULL, .ScsiInquiryV2Handler = scsi_inquiry_v2, .ScsiReportLUNsV2Handler = scsi_report_luns_v2, .ScsiReadCapacityV2Handler = scsi_read_capacity_v2, .GetVendorLibraryAttributesHandler = NULL, /* get_vendor_lib_attrs, */ .RemoveCallbackHandler = NULL, .RegisterForAdapterAddEventsHandler = NULL, .RegisterForAdapterEventsHandler = NULL, .RegisterForAdapterPortEventsHandler = NULL, .RegisterForAdapterPortStatEventsHandler = NULL, .RegisterForTargetEventsHandler = NULL, .RegisterForLinkEventsHandler = NULL, .SendRPLHandler = NULL, .SendRPSHandler = NULL, .SendSRLHandler = NULL, .SendLIRRHandler = NULL, .GetFC4StatisticsHandler = get_port_fc4_statistics, .GetFCPStatisticsHandler = NULL, .SendRLSHandler = NULL, }; /** * Function called by a version 1 common HBAAPI library to get our entry points. * * @arg ep pointer to entrypoints structure where we store our * function pointers. * @returns HBA_STATUS. */ HBA_STATUS HBA_RegisterLibrary(HBA_ENTRYPOINTS *ep) { memcpy(ep, &vendor_lib_entrypoints, sizeof(HBA_ENTRYPOINTS)); return HBA_STATUS_OK; } /** * Function called by the common HBAAPI library to get our entry points. * * @arg ep pointer to entrypoints structure where we store our * function pointers. * @returns HBA_STATUS. */ HBA_STATUS HBA_RegisterLibraryV2(HBA_ENTRYPOINTSV2 *ep) { *ep = vendor_lib_entrypoints; /* structure copy */ return HBA_STATUS_OK; }