|
ZFCP HBA API Library 1
|
Auxiliary functions used in the library. More...
#include "vlib.h"Functions | |
| static int | block_assertSize (struct block *block, const size_t size, const size_t num, const size_t grow) |
| Assert that there is space for at least num elements in the block. | |
| static void * | block_addItem (struct block *block, size_t size, size_t grow) |
| Add a new item to a block. | |
| void | block_free (struct block *block) |
| Free the array contained in a struct block. | |
| struct vlib_adapter * | getAdapterByIndex (uint32_t index) |
| Get an adapter by its index. | |
| struct vlib_adapter * | getAdapterByHandle (HBA_HANDLE handle, HBA_STATUS *status) |
| Get an adapter by its handle. | |
| struct vlib_adapter * | getAdapterByDevid (devid_t devid) |
| Get an adapter by its devid. | |
| struct vlib_adapter * | getAdapterByHostNo (unsigned short host) |
| Get an adapter by SCSI Host number as in sysfs. | |
| struct vlib_port * | getPortByIndex (const struct vlib_adapter *adapter, const uint32_t index) |
| Get a port by its index. | |
| struct vlib_port * | getPortByWWPN (const struct vlib_adapter *adapter, const wwn_t wwpn) |
| Get a port by its WWPN. | |
| struct vlib_unit * | getUnitByIndex (const struct vlib_port *port, const uint32_t index) |
| Get an unit by its index. | |
| struct vlib_unit * | getUnitByFcLun (const struct vlib_port *port, uint64_t fcLun) |
| Get an unit by its fclun. | |
| static struct vlib_unit * | getUnitFromRepos (struct vlib_port *port, struct vlib_unit *unit) |
| Check if an unit specified in an unit event is already stored in the repository. | |
| int | addUnitToRepos (struct vlib_port *port, struct vlib_unit *unit) |
| Add a unit to the repository. | |
| static struct vlib_port * | getPortFromRepos (struct vlib_adapter *adapter, char *sysfs_name) |
| Check if a port specified is already stored in the repository. | |
| int | addPortToRepos (struct vlib_adapter *adapter, struct vlib_port *port) |
| Add a port from to the repository. | |
| static struct vlib_adapter * | getAdapterFromRepos (char *bus_dev_name) |
| Check if an adapter specified in an event is already stored in the repository. | |
| int | addAdapterToRepos (struct vlib_adapter *adapter) |
| Add an adapter to the repository. | |
| int | updateAdapter (struct vlib_adapter *adapter) |
| Update information about ports and units of an adapter. | |
| int | revalidateAdapters (void) |
| Revalidate adapters in the repository. | |
| int | findIndexByName (char *name) |
| Find an adapter index by name. | |
| HBA_HANDLE | openAdapterByIndex (HBA_UINT32 index) |
| Open an adapter by index. | |
| void | doCloseAdapter (struct vlib_adapter *adapter) |
| Close an adapter in the repository. | |
| void | closeAllAdapters (void) |
| Close all adapters in the repository. | |
| HBA_PORTTYPE | vlibCharToIntPortType (char *portType) |
| Map the result of a port type string from sysfs to an int. | |
| HBA_PORTSTATE | vlibCharToIntPortState (char *portState) |
| Map the result of a port state string from sysfs to an int. | |
| HBA_PORTSPEED | vlibIntToSymbolPortSpeed (int speed) |
| Maps the result of a port speed int to the HBA_PORTSPEED int. | |
| HBA_PORTSPEED | vlibCharToIntPortSpeed (char *pS) |
| Map the result of a port speed string to the HBA_PORTSPEED int. | |
| int | vlibCOStoFlag (int class) |
| Maps the number of a class of service to its bit flag according to FC-GS-4. | |
| HBA_COS | vlibCharToIntCOS (char *s) |
| Map the result of a class of service string to an int. | |
| char * | getSgDevFromPort (struct vlib_port *port) |
| Get the first sg device from an adapter. | |
| char * | getAttachedWLUN (struct vlib_adapter *adapter, struct vlib_port *port) |
| Try to attach the report luns wlun and return its name as in "/dev". | |
| void | detachWLUN (struct vlib_adapter *adapter, struct vlib_port *port) |
| Try to detach lun 0. | |
Auxiliary functions used in the library.
| int addAdapterToRepos | ( | struct vlib_adapter * | adapter | ) |
Add an adapter to the repository.
| *adapter | adapter |
If the adapter specified in the event is already stored in the repository it is marked as valid.
References vlib_data::adapters, block_addItem(), vlib_adapter_ident::bus_dev_name, vlib_adapter_ident::class_dev_name, vlib_adapter_ident::devid, getAdapterFromRepos(), vlib_adapter::handle, vlib_adapter_ident::host, vlib_adapter::ident, vlib_adapter::isInvalid, vlib_adapter_ident::sysfsPath, VLIB_INVALID_HANDLE, vlib_adapter_ident::wwnn, and vlib_adapter_ident::wwpn.
Referenced by addAdapterByDevPath().
| int addPortToRepos | ( | struct vlib_adapter * | adapter, |
| struct vlib_port * | port | ||
| ) |
Add a port from to the repository.
| *adapter | to which the port data should be added, if NULL is passed the adapter should be identified by the data in the event |
| *port | port to be added |
If the port specified in the event is already stored in the repository it is marked as valid.
References block_addItem(), vlib_port::channel, vlib_port::did, getPortFromRepos(), vlib_port::host, vlib_port::isInvalid, vlib_port::name, vlib_adapter::ports, vlib_port::target, vlib_port::wwnn, and vlib_port::wwpn.
Referenced by addPortByName().
Add a unit to the repository.
| *port | to which the unit data should be added, if NULL is passed the port should be identified by the data in the event |
| *unit | unit to be aded |
If the unit specified in the event is already stored in the repository it is marked as valid.
References block_addItem(), getUnitFromRepos(), vlib_unit::isInvalid, and vlib_port::units.
Referenced by sysfs_getUnitsFromPort().
|
static |
Add a new item to a block.
| *block | pointer to struct block (contains array of elements of passed size) |
| size | of the contained structure |
| grow | chunk size (The array grows by chunks of size (grow * size).) |
If the new item does not fit in the array, the array is enlarged.
References block_assertSize(), block::data, and block::used.
Referenced by addAdapterToRepos(), addPortToRepos(), and addUnitToRepos().
|
static |
Assert that there is space for at least num elements in the block.
| *block | pointer to struct block (contains array of elements of passed size) |
| size | of the contained structure |
| num | minimum number of elements in the block |
| grow | chunk size (The array grows by chunks of size (grow * size).) |
References block::allocated, block::data, and VLIB_PERROR.
Referenced by block_addItem().
| void block_free | ( | struct block * | block | ) |
Free the array contained in a struct block.
| *block | pointer to a struct block |
References block::allocated, block::data, and block::used.
Referenced by closeAllAdapters(), and doCloseAdapter().
| void closeAllAdapters | ( | void | ) |
Close all adapters in the repository.
This function frees all allocated memory for the adapters.
References vlib_data::adapters, block_free(), doCloseAdapter(), getAdapterByIndex(), and block::used.
Referenced by HBA_FreeLibrary().
| void detachWLUN | ( | struct vlib_adapter * | adapter, |
| struct vlib_port * | port | ||
| ) |
Try to detach lun 0.
| adapter* | Pointer to an adapter |
| port* | Pointer to a port |
References vlib_adapter_ident::bus_dev_name, vlib_unit::channel, getUnitByIndex(), vlib_unit::host, vlib_adapter::ident, REPORTLUNS_WLUN, revalidateUnits(), vlib_unit::target, and vlib_port::wwpn.
Referenced by _HBA_SendReportLUNs().
| void doCloseAdapter | ( | struct vlib_adapter * | adapter | ) |
Close an adapter in the repository.
| *adapter | pointer to the adapter to be closed |
This function frees all allocated memory for the ports and units of this adapter and invalidates the adapter handle.
References block_free(), getPortByIndex(), vlib_adapter::handle, vlib_adapter::ports, vlib_port::units, block::used, and VLIB_INVALID_HANDLE.
Referenced by closeAllAdapters(), HBA_CloseAdapter(), and revalidateAdapters().
| int findIndexByName | ( | char * | name | ) |
Find an adapter index by name.
| name | the name of the adapter |
References vlib_data::adapters, getAdapterByIndex(), vlib_adapter::isInvalid, block::used, VLIB_ADAPTERNAME_LEN, and VLIB_ADAPTERNAME_PREFIX.
Referenced by HBA_OpenAdapter().
| struct vlib_adapter * getAdapterByDevid | ( | devid_t | devid | ) |
Get an adapter by its devid.
| devid | of the adapter |
References vlib_data::adapters, vlib_adapter_ident::devid, getAdapterByIndex(), vlib_adapter::ident, and block::used.
| struct vlib_adapter * getAdapterByHandle | ( | HBA_HANDLE | handle, |
| HBA_STATUS * | status | ||
| ) |
Get an adapter by its handle.
| handle | of the adapter |
| *status | pointer to return error status code |
If NULL is returned *status contains an error status code which should be checked by the calling function. If non-NULL is returned *status is HBA_STATUS_OK. Possible error status codes are:
References getAdapterByIndex(), vlib_adapter::handle, vlib_adapter::isInvalid, and VLIB_INVALID_HANDLE.
Referenced by _HBA_SendReadCapacity(), _HBA_SendReportLUNs(), _HBA_SendScsiInquiry(), HBA_CloseAdapter(), HBA_GetAdapterAttributes(), HBA_GetAdapterPortAttributes(), HBA_GetDiscoveredPortAttributes(), HBA_GetEventBuffer(), HBA_GetFcpTargetMapping(), HBA_GetFcpTargetMappingV2(), HBA_GetPortStatistics(), HBA_GetRNIDMgmtInfo(), HBA_RefreshInformation(), HBA_SendCTPassThru(), and HBA_SendRNID().
| struct vlib_adapter * getAdapterByHostNo | ( | unsigned short | host | ) |
Get an adapter by SCSI Host number as in sysfs.
| SCSI | host number of the adapter |
References vlib_data::adapters, getAdapterByIndex(), vlib_adapter_ident::host, vlib_adapter::ident, and block::used.
Referenced by sysfs_getUnitsFromPort().
| struct vlib_adapter * getAdapterByIndex | ( | uint32_t | index | ) |
Get an adapter by its index.
| index | of the adapter |
References vlib_data::adapters, block::data, and block::used.
Referenced by closeAllAdapters(), findIndexByName(), getAdapterByDevid(), getAdapterByHandle(), getAdapterByHostNo(), getAdapterFromRepos(), HBA_GetAdapterName(), invalidateAllAdapters(), openAdapterByIndex(), and revalidateAdapters().
|
static |
Check if an adapter specified in an event is already stored in the repository.
| *bus_dev_name | name of adapter as in the sysfs bus dev name |
References vlib_data::adapters, vlib_adapter_ident::bus_dev_name, getAdapterByIndex(), vlib_adapter::ident, and block::used.
Referenced by addAdapterToRepos().
| char * getAttachedWLUN | ( | struct vlib_adapter * | adapter, |
| struct vlib_port * | port | ||
| ) |
Try to attach the report luns wlun and return its name as in "/dev".
| adapter* | Pointer to an adapter |
| port* | Pointer to a port |
References vlib_adapter_ident::bus_dev_name, getSgDevFromPort(), vlib_adapter::ident, REPORTLUNS_WLUN, and vlib_port::wwpn.
Referenced by _HBA_SendReportLUNs().
| struct vlib_port * getPortByIndex | ( | const struct vlib_adapter * | adapter, |
| const uint32_t | index | ||
| ) |
Get a port by its index.
| *adapter | to which the port belongs |
| index | of the port |
References block::data, vlib_adapter::ports, and block::used.
Referenced by doCloseAdapter(), getPortByWWPN(), getPortFromRepos(), HBA_GetDiscoveredPortAttributes(), HBA_GetFcpTargetMapping(), and updateAdapter().
| struct vlib_port * getPortByWWPN | ( | const struct vlib_adapter * | adapter, |
| const wwn_t | wwpn | ||
| ) |
Get a port by its WWPN.
| *adapter | to which the port belongs |
| wwpn | of the port |
References getPortByIndex(), vlib_adapter::ports, block::used, and vlib_port::wwpn.
Referenced by _HBA_SendReadCapacity(), _HBA_SendReportLUNs(), and _HBA_SendScsiInquiry().
|
static |
Check if a port specified is already stored in the repository.
| *adapter | to which this port belongs |
| *port | the new port for whose existence is checked |
References getPortByIndex(), vlib_port::name, vlib_adapter::ports, and block::used.
Referenced by addPortToRepos().
| char * getSgDevFromPort | ( | struct vlib_port * | port | ) |
Get the first sg device from an adapter.
| port* | Pointer to a port |
References getUnitByIndex(), revalidateUnits(), and vlib_unit::sg_dev.
Referenced by _HBA_SendReportLUNs(), and getAttachedWLUN().
Get an unit by its fclun.
| *port | to which the unit belongs |
| index | of the unit |
References vlib_unit::fcLun, getUnitByIndex(), vlib_port::units, and block::used.
Referenced by _HBA_SendReadCapacity(), and _HBA_SendScsiInquiry().
Get an unit by its index.
| *port | to which the unit belongs |
| index | of the unit |
References block::data, vlib_port::units, and block::used.
Referenced by detachWLUN(), getSgDevFromPort(), getUnitByFcLun(), getUnitFromRepos(), and HBA_GetFcpTargetMapping().
|
static |
Check if an unit specified in an unit event is already stored in the repository.
| *port | to which this unit belongs |
| *event | unit add event |
References vlib_unit::fcLun, getUnitByIndex(), vlib_port::units, and block::used.
Referenced by addUnitToRepos().
| HBA_HANDLE openAdapterByIndex | ( | HBA_UINT32 | index | ) |
Open an adapter by index.
| index | of the adapter |
If compiled as a vendor library, we shall only use the lower 16 Bit of the handle.
References getAdapterByIndex(), vlib_adapter::handle, and VLIB_INVALID_HANDLE.
Referenced by HBA_OpenAdapter().
| int revalidateAdapters | ( | void | ) |
Revalidate adapters in the repository.
Port and unit configuration data is only updated if it was already generated before. Generation of port and unit configuration information is triggered in HBA_GetAdapterPortAttributes() and HBA_GetFcpTargetMapping(), resp.
References vlib_data::adapters, block::allocated, doCloseAdapter(), getAdapterByIndex(), vlib_adapter::isInvalid, vlib_adapter::ports, updateAdapter(), and block::used.
Referenced by sysfs_createAndReadConfigAdapter().
| int updateAdapter | ( | struct vlib_adapter * | adapter | ) |
Update information about ports and units of an adapter.
| *adapter | to be updated |
References getPortByIndex(), vlib_adapter::isInvalid, vlib_adapter::ports, sysfs_createAndReadConfigPorts(), sysfs_getUnitsFromPort(), and block::used.
Referenced by HBA_RefreshInformation(), and revalidateAdapters().
| HBA_COS vlibCharToIntCOS | ( | char * | s | ) |
Map the result of a class of service string to an int.
| char* | containing the class of service string |
References vlibCOStoFlag().
Referenced by getPortAttributes().
| HBA_PORTSPEED vlibCharToIntPortSpeed | ( | char * | pS | ) |
Map the result of a port speed string to the HBA_PORTSPEED int.
| char* | containing the port speed string |
References vlibIntToSymbolPortSpeed().
Referenced by getPortAttributes().
| HBA_PORTSTATE vlibCharToIntPortState | ( | char * | portState | ) |
Map the result of a port state string from sysfs to an int.
| char* | containing the port state |
Referenced by getPortAttributes().
| HBA_PORTTYPE vlibCharToIntPortType | ( | char * | portType | ) |
Map the result of a port type string from sysfs to an int.
| char* | containing the port type |
Referenced by getPortAttributes().
| int vlibCOStoFlag | ( | int | class | ) |
Maps the number of a class of service to its bit flag according to FC-GS-4.
| int | holding the class number |
Referenced by vlibCharToIntCOS().
| HBA_PORTSPEED vlibIntToSymbolPortSpeed | ( | int | speed | ) |
Maps the result of a port speed int to the HBA_PORTSPEED int.
| int | holding the port speed |
Referenced by vlibCharToIntPortSpeed().