ZFCP HBA API Library 1
vlib_aux.h
Go to the documentation of this file.
1/*
2 * Copyright IBM Corp. 2003,2010
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Common Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.ibm.com/developerworks/library/os-cpl.html
7 *
8 * Authors: Andreas Herrmann
9 * Stefan Voelkel
10 *
11 * File: vlib_aux.h
12 *
13 * Description:
14 * Auxiliary functions used in the library.
15 *
16 */
17
18#ifndef _VLIB_AUX_H_
19#define _VLIB_AUX_H_
25#include "vlib.h"
26
27#define VLIB_GROW_UNITS 8
28#define VLIB_GROW_PORTS 4
29#define VLIB_GROW_ADAPTERS 2
30
31#ifdef min
32# undef min
33#endif
34#define min(a, b) (((a) < (b)) ? (a) : (b))
35
36/*
37 * function declarations
38 */
39
40struct vlib_adapter *getAdapterByIndex(uint32_t);
41struct vlib_adapter *getAdapterByHandle(HBA_HANDLE, HBA_STATUS *);
42struct vlib_adapter *getAdapterByDevid(devid_t);
43struct vlib_adapter *getAdapterByHostNo(unsigned short);
44struct vlib_port *getPortByIndex(const struct vlib_adapter *, const uint32_t);
45struct vlib_port *getPortByWWPN(const struct vlib_adapter *, const wwn_t);
46struct vlib_unit *getUnitByIndex(const struct vlib_port *, const uint32_t);
47struct vlib_unit *getUnitByFcLun(const struct vlib_port *, uint64_t);
48
50int addPortToRepos(struct vlib_adapter *, struct vlib_port *);
51int addUnitToRepos(struct vlib_port *, struct vlib_unit *);
52
53HBA_STATUS getAdapterConfig(void);
54int getUnitsFromPort(struct vlib_port *);
55
56int findIndexByName(char *);
57HBA_HANDLE openAdapterByIndex(HBA_UINT32);
58char *getSgDevFromPort(struct vlib_port *);
59char *getAttachedWLUN(struct vlib_adapter *, struct vlib_port *);
60void detachWLUN(struct vlib_adapter *, struct vlib_port *);
61
62int revalidateAdapters(void);
63int updateAdapter(struct vlib_adapter *adapter);
64void doCloseAdapter(struct vlib_adapter *);
65void closeAllAdapters(void);
66
67HBA_PORTTYPE vlibCharToIntPortType(char *);
68HBA_PORTSTATE vlibCharToIntPortState(char *);
69HBA_PORTSPEED vlibCharToIntPortSpeed(char *);
70HBA_COS vlibCharToIntCOS(char *);
71
72/*
73 * inline functions
74 */
75
81static inline void vlib_wwn_to_HBA_WWN(uint64_t wwn, HBA_WWN *hba)
82{
83 *((uint64_t *)(&hba->wwn)) = wwn;
84}
85
91static inline void vlib_HBA_WWN_to_wwn(HBA_WWN *hba, uint64_t *wwn)
92{
93 *wwn = *((uint64_t *)hba->wwn);
94}
95
101static inline uint32_t vlib_FCID_to_hbaFCID(uint32_t fcid)
102{
103 return fcid << 8;
104}
105
111static inline uint32_t vlib_hbaFCID_to_FCID(uint32_t fcid)
112{
113 return fcid >> 8;
114}
115
116
122static inline void invalidateAllAdapters(void)
123{
124 unsigned int i;
125 struct vlib_adapter *adapter;
126
127 adapter = getAdapterByIndex(0);
128 for (i = 0; i < vlib_data.adapters.used; ++i, ++adapter)
129 adapter->isInvalid = 1;
130}
131
138static inline void markRepositoryInvalid(void)
139{
141
142 vlib_data.isValid = 0;
143
145}
146
147#endif /* _VLIB_AUX_H_ */
size_t used
number of used elements in the array
Definition: vlib.h:427
Represenation of an adapter in the library.
Definition: vlib.h:474
unsigned int isInvalid
Adapter invalid or not.
Definition: vlib.h:475
Primary data structure used in the library.
Definition: vlib.h:484
pthread_mutex_t mutex
Protects this structure.
Definition: vlib.h:499
unsigned int isValid
Repositoy valid or not This flag is set for instance if a loss of events is detected.
Definition: vlib.h:487
struct block adapters
List of adapters In fact this is the anchor of the library's repository.
Definition: vlib.h:494
Representation of a FC port in the library.
Definition: vlib.h:443
Represenation of an FCP unit in the library.
Definition: vlib.h:432
Central header file for the library.
#define VLIB_MUTEX_UNLOCK(mutex)
To unlock a mutex, this macro is used, which checks for errors.
Definition: vlib.h:594
#define VLIB_MUTEX_LOCK(mutex)
To lock a mutex, this macro is used, which checks for errors.
Definition: vlib.h:571
static void vlib_HBA_WWN_to_wwn(HBA_WWN *hba, uint64_t *wwn)
Convert HBA_WWN to uint64_t – hide ill-favoured type cast.
Definition: vlib_aux.h:91
struct vlib_adapter * getAdapterByIndex(uint32_t)
Get an adapter by its index.
Definition: vlib_aux.c:118
HBA_HANDLE openAdapterByIndex(HBA_UINT32)
Open an adapter by index.
Definition: vlib_aux.c:614
struct vlib_unit * getUnitByIndex(const struct vlib_port *, const uint32_t)
Get an unit by its index.
Definition: vlib_aux.c:276
static void markRepositoryInvalid(void)
Mark repositroy of library as invalid. This is appropriate if a loss of events is detected.
Definition: vlib_aux.h:138
void closeAllAdapters(void)
Close all adapters in the repository.
Definition: vlib_aux.c:669
struct vlib_adapter * getAdapterByHandle(HBA_HANDLE, HBA_STATUS *)
Get an adapter by its handle.
Definition: vlib_aux.c:143
struct vlib_adapter * getAdapterByDevid(devid_t)
Get an adapter by its devid.
Definition: vlib_aux.c:176
static void invalidateAllAdapters(void)
Mark all adapters in repository as invalid.
Definition: vlib_aux.h:122
static uint32_t vlib_FCID_to_hbaFCID(uint32_t fcid)
Convert a FC DID to a FC-HBA PortFcId.
Definition: vlib_aux.h:101
int findIndexByName(char *)
Find an adapter index by name.
Definition: vlib_aux.c:582
struct vlib_port * getPortByIndex(const struct vlib_adapter *, const uint32_t)
Get a port by its index.
Definition: vlib_aux.c:230
int addUnitToRepos(struct vlib_port *, struct vlib_unit *)
Add a unit to the repository.
Definition: vlib_aux.c:351
struct vlib_port * getPortByWWPN(const struct vlib_adapter *, const wwn_t)
Get a port by its WWPN.
Definition: vlib_aux.c:249
static uint32_t vlib_hbaFCID_to_FCID(uint32_t fcid)
Convert a FC-HBA PortFcId to a FC DID.
Definition: vlib_aux.h:111
int addPortToRepos(struct vlib_adapter *, struct vlib_port *)
Add a port from to the repository.
Definition: vlib_aux.c:409
struct vlib_adapter * getAdapterByHostNo(unsigned short)
Get an adapter by SCSI Host number as in sysfs.
Definition: vlib_aux.c:202
void doCloseAdapter(struct vlib_adapter *)
Close an adapter in the repository.
Definition: vlib_aux.c:644
HBA_PORTSPEED vlibCharToIntPortSpeed(char *)
Map the result of a port speed string to the HBA_PORTSPEED int.
Definition: vlib_aux.c:810
int addAdapterToRepos(struct vlib_adapter *)
Add an adapter to the repository.
Definition: vlib_aux.c:472
int updateAdapter(struct vlib_adapter *adapter)
Update information about ports and units of an adapter.
Definition: vlib_aux.c:512
struct vlib_unit * getUnitByFcLun(const struct vlib_port *, uint64_t)
Get an unit by its fclun.
Definition: vlib_aux.c:295
HBA_COS vlibCharToIntCOS(char *)
Map the result of a class of service string to an int.
Definition: vlib_aux.c:873
char * getAttachedWLUN(struct vlib_adapter *, struct vlib_port *)
Try to attach the report luns wlun and return its name as in "/dev".
Definition: vlib_aux.c:925
int revalidateAdapters(void)
Revalidate adapters in the repository.
Definition: vlib_aux.c:546
HBA_PORTSTATE vlibCharToIntPortState(char *)
Map the result of a port state string from sysfs to an int.
Definition: vlib_aux.c:713
static void vlib_wwn_to_HBA_WWN(uint64_t wwn, HBA_WWN *hba)
Convert uint64_t to HBA_WWN – hide ill-favoured type cast.
Definition: vlib_aux.h:81
char * getSgDevFromPort(struct vlib_port *)
Get the first sg device from an adapter.
Definition: vlib_aux.c:901
HBA_PORTTYPE vlibCharToIntPortType(char *)
Map the result of a port type string from sysfs to an int.
Definition: vlib_aux.c:688
void detachWLUN(struct vlib_adapter *, struct vlib_port *)
Try to detach lun 0.
Definition: vlib_aux.c:955