Close an open adapter.
Parameters:
handle of adapter to be closed
Locks:
lock/unlock of vlib_data.mutex
The adapter handle is invalidated and the information about the
ports and units of this adapter is deleted.
References doCloseAdapter(), getAdapterByHandle(),
vlib_data::mutex, VLIB_MUTEX_LOCK, and VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Free system resources that library has used.
Returns:
- HBA_STATUS_ERROR_NOT_LOADED if HBA_LoadLibrary was not called before.
- HBA_STATUS_ERROR if HBA_FreeLibrary is already running.
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
This function tries to close the zfcp_hbaapi char
device.
References _GetVendorLibraryAttributes(), closeAllAdapters(),
HBA_CloseAdapter(), HBA_GetAdapterAttributes(), HBA_GetAdapterName(),
HBA_GetAdapterPortAttributes(), HBA_GetBindingCapability(),
HBA_GetBindingSupport(), HBA_GetDiscoveredPortAttributes(),
HBA_GetEventBuffer(), HBA_GetFC4Statistics(), HBA_GetFcpPersistentBinding(),
HBA_GetFCPStatistics(), HBA_GetFcpTargetMapping(),
HBA_GetFcpTargetMappingV2(), HBA_GetNumberOfAdapters(),
HBA_GetPersistentBindingV2(), HBA_GetPortAttributesByWWN(),
HBA_GetPortStatistics(), HBA_GetRNIDMgmtInfo(), HBA_GetVersion(),
HBA_LoadLibrary(), HBA_OpenAdapter(), HBA_OpenAdapterByWWN(),
HBA_RefreshAdapterConfiguration(), HBA_RefreshInformation(),
HBA_RegisterForAdapterAddEvents(), HBA_RegisterForAdapterEvents(),
HBA_RegisterForAdapterPortEvents(), HBA_RegisterForAdapterPortStatEvents(),
HBA_RegisterForLinkEvents(), HBA_RegisterForTargetEvents(),
HBA_RemoveAllPersistentBindings(), HBA_RemoveCallback(),
HBA_RemovePersistentBinding(), HBA_ResetStatistics(), HBA_ScsiInquiryV2(),
HBA_ScsiReadCapacityV2(), HBA_ScsiReportLUNsV2(), HBA_SendCTPassThru(),
HBA_SendCTPassThruV2(), HBA_SendLIRR(), HBA_SendReadCapacity(),
HBA_SendReportLUNs(), HBA_SendRLS(), HBA_SendRNID(), HBA_SendRNIDV2(),
HBA_SendRPL(), HBA_SendRPS(), HBA_SendScsiInquiry(), HBA_SendSRL(),
HBA_SetBindingSupport(), HBA_SetPersistentBindingV2(),
HBA_SetRNIDMgmtInfo(), vlib_data::id, vlib_data::isLoaded, vlib_data::mutex,
vlib_data::unloading, VLIB_MUTEX_LOCK, and VLIB_MUTEX_UNLOCK.
Return attributes for an adapter.
Parameters:
handle of an opened adapter
pAdapterattributes pointer to return atributes
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
ZFCP HBA API does not set the adapter attributes
OptionROMVersion and NodeSymbolicName.
References getAdapterByHandle(), vlib_data::mutex,
revalidateRepository(), sysfs_getAdapterAttributes(), VLIB_MUTEX_LOCK, and
VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Return name that identifies an adapter.
Parameters:
adapterindex index of the HBA
pAdaptername used to return the ASCII string
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_ILLEGAL_INDEX if index is invalid
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success
Locks:
lock/unlock of vlib_data.mutex
See also:
revalidateRepository()
References getAdapterByIndex(), vlib_adapter::isInvalid,
vlib_data::mutex, revalidateRepository(), VLIB_ADAPTERNAME_LEN,
VLIB_ADAPTERNAME_PREFIX, VLIB_MUTEX_LOCK, and VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Return attributes for an adapter port.
Parameters:
handle to an opened adapter
portindex index of adapter port
pPortattributes pointer to return atributes
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_ILLEGAL_INDEX if portindex is invalid
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
Parameter portindex
must be 0, since we have only
one local port on our adapters.
Additionally this function triggers creation of port configuration
for this adapter (see revalidatePorts()).
ZFCP HBA API does not set the port attributes FabricName,
OSDeviceName and PortSymbolicName for an adapter port.
References getAdapterByHandle(), vlib_data::mutex,
revalidatePorts(), revalidateRepository(), sysfs_getAdapterPortAttributes(),
VLIB_MUTEX_LOCK, and VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Return attributes of an discovered port.
Parameters:
handle to an opened adapter
portindex index of adapter port
discoveredportindex index of adapter port
pPortattributes pointer to return atributes
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_ILLEGAL_INDEX if portindex or discoveredindex is
invalid
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
Parameter portindex
must be 0, since we have only
one local port on our adapters.
For discovered ports ZFCP HBA API does not set the port attributes
OSDeviceName, PortMaxFrameSize and PortSupportedFc4Types.
PortSupportedSpeed, PortSpeed, and PortState are set to values indicating
unknwon. NumberofDiscoveredPorts is 0. Most other values are determined
using a GA_NXT request on the Name Server Directory Service.
For PortSupportedFc4Types and PortActive Fc4Types we do not follow
FC-HBA Rev 10. We do not store them 'little-endian' but 'big-endian' as it
is suggested by Editors Note 1.
References getAdapterByHandle(), getPortByIndex(),
vlib_port::isInvalid, vlib_data::mutex, revalidateRepository(),
sysfs_getDiscoveredPortAttributes(), VLIB_MUTEX_LOCK, and
VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Return events for an adapter from the event queue.
Parameters:
handle to an opened adapter
*pEventBuffer pointer to return events
*pEventCount pointer to size of event buffer (in event records)
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
References getAdapterByHandle(), vlib_data::mutex,
revalidateRepository(), VLIB_MUTEX_LOCK, and VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Retrieve mappings between OS SCSI targets/units and FCP
targets/units.
Parameters:
handle to an opened adapter
*pMapping pointer to return target mappings
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_MORE_DATA if there is not enough space in pMapping to
return complete mapping information
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
An OSDeviceName is not provided for target mappings.
Additionally this function triggers creation of unit configuration
for this adapter (see revalidateUnits()).
References vlib_unit::channel, vlib_port::did, vlib_unit::fcLun,
getAdapterByHandle(), getPortByIndex(), getUnitByIndex(),
vlib_adapter_ident::host, vlib_adapter::ident, vlib_unit::isInvalid,
vlib_port::isInvalid, vlib_unit::lun, vlib_data::mutex, vlib_adapter::ports,
revalidatePorts(), revalidateRepository(), revalidateUnits(),
vlib_unit::target, vlib_port::units, block::used, vlib_FCID_to_hbaFCID(),
VLIB_MUTEX_LOCK, VLIB_MUTEX_UNLOCK, vlib_wwn_to_HBA_WWN(), vlib_port::wwnn,
and vlib_port::wwpn.
Referenced by HBA_FreeLibrary(), and
HBA_GetFcpTargetMappingV2().
Retrieve mappings between OS SCSI targets/units and FCP
targets/units.
Parameters:
handle to an opened adapter
*pMapping pointer to return target mappings
*hbaPortWWN wwpn to identify the port on the adapter
Returns:
see HBA_GetFcpTargetMapping
Locks:
lock/unlock of vlib_data.mutex
Note:
HBA_LUID is not provided for target mappings.
Our 'adapters' have only one port, so the WWN parameter is
superfluous. We only check if it matches to the adapter handle, if yes, we
call HBA_GetFcpTargetMapping
References getAdapterByHandle(), HBA_GetFcpTargetMapping(),
vlib_adapter::ident, vlib_data::mutex, vlib_HBA_WWN_to_wwn(),
VLIB_MUTEX_LOCK, VLIB_MUTEX_UNLOCK, and vlib_adapter_ident::wwpn.
Referenced by HBA_FreeLibrary().
Return number of adapters.
Returns:
- 0 on error or if no adapters are configured
- number of adapters on success
Locks:
lock/unlock of vlib_data.mutex
References vlib_data::adapters, vlib_data::mutex,
revalidateRepository(), block::used, VLIB_MUTEX_LOCK, and
VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Return statistics of an adapter port.
Parameters:
handle to an opened adapter
portindex index of adapter port
pPortstatistics pointer to return statistics
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_ILLEGAL_INDEX if portindex is invalid
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
Parameter portindex must be 0, since we have only
one local port on our adapters.
References getAdapterByHandle(), vlib_data::mutex,
revalidateRepository(), sysfs_getPortStatistics(), VLIB_MUTEX_LOCK, and
VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Return attributes of the vendor specific HBA API library.
Parameters:
adapter_index not used
attributes used to return library attributes
Returns:
Note:
This function is not defined if the library is built as a
vendor specific library.
The index of the HBA is ignored, because it is of use only for a
wrapper library.
See also:
_GetVendorLibraryAttributes()
References _GetVendorLibraryAttributes().
Return the version of the HBA API specification with which this
library is compliant.
Returns:
Note:
No check if library is loaded has to be performed.
References HBAAPI_LIBRARY_VERSION.
Referenced by HBA_FreeLibrary().
Return attributes of the OS specific HBA API library.
Parameters:
attributes used to return library attributes
Returns:
Note:
This function is not defined if the library is built as a
vendor specific library.
See also:
_GetVendorLibraryAttributes()
References _GetVendorLibraryAttributes().
Perform initialization of library.
Returns:
- HBA_STATUS_ERROR_ALREADY_LOADED if this function was already called
before.
- HBA_STATUS_ERROR if initialization fails.
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
This function tries to open the zfcp_hbaapi char
device.
References vlib_data::isLoaded, vlib_data::mutex,
sysfs_createAndReadConfigAdapter(), VLIB_MUTEX_LOCK, and
VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Open an adapter.
Parameters:
pAdaptername name of adapter to be opened (name
was obtained by previous call to HBA_GetAdapterName())
Returns:
- VLIB_INVALID_HANDLE on error
- handle on success
Locks:
lock/unlock of vlib_data.mutex
Note:
Possible (theoretical) overflow of index values.
References findIndexByName(), vlib_adapter::handle,
vlib_data::mutex, openAdapterByIndex(), revalidateRepository(),
VLIB_INVALID_HANDLE, VLIB_MUTEX_LOCK, and VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
Refresh information about configured adapters.
Locks:
lock/unlock of vlib_data.mutex
Note:
We do not report HBA_STATUS_ERROR_STALE_DATA, because we
use semistatic tables internally. We just make use of
HBA_STATUS_ERROR_UNAVAILABLE (e.g. if an adapter is removed).
References vlib_data::mutex, revalidateRepository(),
VLIB_MUTEX_LOCK, and VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary(), and HBA_RefreshInformation().
Refresh information of an adapter.
Parameters:
handle of the adapter for which information should
be refreshed.
Locks:
lock/unlock of vlib_data.mutex
References getAdapterByHandle(),
HBA_RefreshAdapterConfiguration(), vlib_data::mutex, updateAdapter(),
VLIB_LOG, VLIB_MUTEX_LOCK, and VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary().
According to FC-HBA this function is obsolete. This function has
no effect.
Referenced by HBA_FreeLibrary().
Send a SCSI INQUIRY command to a FCP LUN.
Parameters:
handle to an opened adapter
hbaPortWWN WWPN of the local adapter port
discoveredPortWWN WWPN of the target port
fcLUN FCP LUN of the unit
EVPD Enhanced Vital Product Data
PageCode Vital Product Data page code if EVPD is set
*pRspBuffer pointer to return response data
RspBufferSize size of the response buffer
*pSenseBuffer pointer to return sense data on SCSI CHECK_CONDITION
SenseBufferSize size of the sense buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_INVALID_LUN if there is no unit for the the specified
fcLUN configured
- HBA_STATUS_ERROR_MORE_DATA if there is not enough space in pRspBuffer
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
- HBA_STATUS_ERROR_NOT_A_TARGET is not returned because zfcp just deals with
SCSI target ports.
- HBA_STATUS_ERROR_TARGET_BUSY is not returned because zfcp cannot detect
SCSI command overlap situations in general.
References _HBA_SendScsiInquiry().
Referenced by HBA_FreeLibrary().
Send a SCSI READ CAPACITY command to a FCP LUN.
Parameters:
handle to an opened adapter
portWWN WWPN of the target port
fcLUN FCP LUN of the unit
*pRspBuffer pointer to return response data
RspBufferSize size of the response buffer
*pSenseBuffer pointer to return sense data on SCSI CHECK_CONDITION
SenseBufferSize size of the sense buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_INVALID_LUN if there is no unit for the the specified
fcLUN configured
- HBA_STATUS_ERROR_MORE_DATA if there is not enough space in pRspBuffer
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
- HBA_STATUS_ERROR_NOT_A_TARGET is not returned because zfcp just deals with
SCSI target ports.
- HBA_STATUS_ERROR_TARGET_BUSY is not returned because zfcp cannot detect
SCSI command overlap situations in general.
- ZFCP HBA API sends READ CAPACITY via libsgutils. Sense date is not
supported that way, so the sensebuffer is always NULL
References _HBA_SendReadCapacity().
Referenced by HBA_FreeLibrary().
Send a SCSI REPORT LUNS command to a target.
Parameters:
handle to an opened adapter
portWWN WWPN of the local port
discoveredPortWWN WWPN of the target port
*pRspBuffer pointer to return response data
*RspBufferSize pointer to size of the response buffer
*pSenseBuffer pointer to return sense data on SCSI CHECK_CONDITION
*SenseBufferSize pointer to size of the sense buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_SCSI_CHECK_CONDITION if a SCSI CHECK_CONDITION occurs
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
Lun Scanning only works if we have at least Lun 0
attached. In all other cases we cannot scan the Luns (yet). In addition, no
SCSI sense data will be returned. The only real difference to the V1 function
is the additional parameter for the local port. Since our 'adapters' have only
one port, we can omit it.
References _HBA_SendReportLUNs().
Referenced by HBA_FreeLibrary().
Send a CT pass thru - a CT frame constructed in userspace directly
to the HBA / SAN.
Parameters:
handle to an opened adapter
*pReqBuffer pointer to CT frame
ReqBufferSize size of the request buffer
*pRspBuffer pointer to return response data
RspBufferSize size of the response buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_MORE_DATA if there is not enough space in pRspBuffer
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
References getAdapterByHandle(), vlib_data::mutex,
revalidateRepository(), VLIB_MUTEX_LOCK, and VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary(), and HBA_SendCTPassThruV2().
Send a CT pass thru - a CT frame constructed in userspace directly
to the HBA / SAN.
Parameters:
handle to an opened adapter
hbaPortWWN local port of adapter - not necessary in our case
*pReqBuffer pointer to CT frame
ReqBufferSize size of the request buffer
*pRspBuffer pointer to return response data
RspBufferSize size of the response buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_MORE_DATA if there is not enough space in pRspBuffer
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
References HBA_SendCTPassThru().
Referenced by HBA_FreeLibrary().
Send a SCSI READ CAPACITY command to a FCP LUN.
Parameters:
handle to an opened adapter
portWWN WWPN of the target port
fcLUN FCP LUN of the unit
*pRspBuffer pointer to return response data
RspBufferSize size of the response buffer
*pSenseBuffer pointer to return sense data on SCSI CHECK_CONDITION
SenseBufferSize size of the sense buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_INVALID_LUN if there is no unit for the the specified
fcLUN configured
- HBA_STATUS_ERROR_MORE_DATA if there is not enough space in pRspBuffer
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
- HBA_STATUS_ERROR_NOT_A_TARGET is not returned because zfcp just deals with
SCSI target ports.
- HBA_STATUS_ERROR_TARGET_BUSY is not returned because zfcp cannot detect
SCSI command overlap situations in general.
- ZFCP HBA API sends READ CAPACITY via libsgutils. Sense date is not
supported that way, so the sensebuffer is always NULL
References _HBA_SendReadCapacity().
Referenced by HBA_FreeLibrary().
Send a SCSI REPORT LUNS command to a target.
Parameters:
handle to an opened adapter
portWWN WWPN of the target port
*pRspBuffer pointer to return response data
RspBufferSize size of the response buffer
*pSenseBuffer pointer to return sense data on SCSI CHECK_CONDITION
SenseBufferSize size of the sense buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_SCSI_CHECK_CONDITION if a SCSI CHECK_CONDITION occurs
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
Lun Scanning only works if we have at least Lun 0
attached. In all other cases we cannot scan the Luns (yet). In addition, no
SCSI sense data will be returned.
References _HBA_SendReportLUNs().
Referenced by HBA_FreeLibrary().
Send a RNID ELS to a port.
Parameters:
handle to an opened adapter
wwn of port to which to send RNID ELS
wwntype deprecated
*pRspBuffer pointer to return response data
*pRspBufferSize pointer to size of response buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_MORE_DATA if there is not enough space in pRspBuffer and
response data is truncated
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success (LS_ACC or LS_RJT).
Locks:
lock/unlock of vlib_data.mutex
References getAdapterByHandle(), vlib_data::mutex,
revalidateRepository(), vlib_HBA_WWN_to_wwn(), VLIB_MUTEX_LOCK, and
VLIB_MUTEX_UNLOCK.
Referenced by HBA_FreeLibrary(), and HBA_SendRNIDV2().
Send a RNID ELS to a port.
Parameters:
handle to an opened adapter
hbaPortWWN local port of adapter - not necessary in our case
wwn of port to which to send RNID ELS
wwntype deprecated
*pRspBuffer pointer to return response data
*pRspBufferSize pointer to size of response buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_MORE_DATA if there is not enough space in pRspBuffer and
response data is truncated
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success (LS_ACC or LS_RJT).
Locks:
lock/unlock of vlib_data.mutex
Note:
this function just calls the V1 version above so the new
functionality offered by V2 is not supported
References HBA_SendRNID().
Referenced by HBA_FreeLibrary().
Send a SCSI INQUIRY command to a FCP LUN.
Parameters:
handle to an opened adapter
PortWWN WWPN of the target port
fcLUN FCP LUN of the unit
EVPD Enhanced Vital Product Data
PageCode Vital Product Data page code if EVPD is set
*pRspBuffer pointer to return response data
RspBufferSize size of the response buffer
*pSenseBuffer pointer to return sense data on SCSI CHECK_CONDITION
SenseBufferSize size of the sense buffer
Returns:
- HBA_STATUS_NOT_LOADED if library is not loaded
- HBA_STATUS_ERROR_INVALID_HANDLE if handle is invalid
- HBA_STATUS_ERROR_UNAVAILABLE if adapter is unavailable
- HBA_STATUS_ERROR_INVALID_LUN if there is no unit for the the specified
fcLUN configured
- HBA_STATUS_ERROR_MORE_DATA if there is not enough space in pRspBuffer
- HBA_STATUS_SCSI_CHECK_CONDITION if a SCSI CHECK_CONDITION occurs
- HBA_STATUS_ERROR_ARG if EVPD is neither 0 nor 1
- HBA_STATUS_ERROR if any other internal error occurs
- HBA_STATUS_OK on success.
Locks:
lock/unlock of vlib_data.mutex
Note:
- HBA_STATUS_ERROR_NOT_A_TARGET is not returned because zfcp just deals with
SCSI target ports.
- HBA_STATUS_ERROR_TARGET_BUSY is not returned because zfcp cannot detect
SCSI command overlap situations in general.
- ZFCP HBA API sends INQUIRY as untagged if the unit is not previously
registered at the SCSI mid layer. If the device is already registered
there, untagged/tagged is chosen as indicated in the associated
Scsi_Device structure of the unit.
ZFCP HBA API sends INQUIRY as untagged if the unit is not
previously registered at the mid layer. If the device is already registered
there, untagged/tagged is chosen as indicated in the associated Scsi_Device
structure of the unit.
References _HBA_SendScsiInquiry().
Referenced by HBA_FreeLibrary().