ZFCP HBA API Library  1
vlib_sysfs.h
Go to the documentation of this file.
1 /*
2  * Copyright IBM Corp. 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: Sven Schuetz <sven@de.ibm.com>
9  * contains code from vlib_aux.h
10  * by Andreas Herrmann and Stefan Voelkel
11  *
12  * File: vlib_sysfs.h
13  *
14  * Description:
15  * Function declarations and inline functions that use the sysfs.
16  *
17  */
18 
19 #ifndef _VLIB_SYSFS_H_
20 #define _VLIB_SYSFS_H_
21 
22 
23 #define ZFCP_SYSFS_PATH "/sys/bus/ccw/drivers/zfcp"
24 #define FC_HOST_PATH "/sys/class/fc_host"
25 
26 #define ATTR_MAX 80 /* all attributes are only one line */
27 #define DEVNO_LENGTH 8 /* x.x.xxxx -> 8 chars */
28 
34 HBA_STATUS sysfs_createAndReadConfigPorts(struct vlib_adapter *);
36 HBA_STATUS sysfs_getDiscoveredPortAttributes(HBA_PORTATTRIBUTES **,
37  struct vlib_port *);
38 HBA_STATUS sysfs_getAdapterPortAttributes(HBA_PORTATTRIBUTES **,
39  struct vlib_adapter *);
40 HBA_STATUS sysfs_getPortStatistics(HBA_PORTSTATISTICS **,
41  struct vlib_adapter *);
42 int sysfs_getUnitsFromPort(struct vlib_port *);
43 void sysfs_waitForSgDev(char *);
44 
57 static inline HBA_STATUS revalidateRepository(void)
58 {
59  if (!vlib_data.isLoaded)
60  return HBA_STATUS_ERROR;
61 
62  if (!vlib_data.isValid) {
63  if (sysfs_createAndReadConfigAdapter() != HBA_STATUS_OK)
64  return HBA_STATUS_ERROR;
65  }
66 
67  return HBA_STATUS_OK;
68 }
69 
82 static inline int revalidatePorts(struct vlib_adapter *adapter)
83 {
84  if (0 == adapter->ports.allocated)
85  return sysfs_createAndReadConfigPorts(adapter);
86 
87  return 0;
88 }
89 
103 static inline int revalidateUnits(struct vlib_port *port)
104 {
105  if (0 == port->units.allocated)
106  return sysfs_getUnitsFromPort(port);
107 
108  return 0;
109 }
110 
111 #endif /*_VLIB_SYSFS_H_*/
vlib.h
Central header file for the library.
vlib_unit::lun
unsigned int lun
SCSI LUN.
Definition: vlib.h:437
vlib_port::wwnn
wwn_t wwnn
WWNN of the port.
Definition: vlib.h:446
vlib_adapter::ident
struct vlib_adapter_ident ident
Adapter identification.
Definition: vlib.h:476
sysfs_getDiscoveredPortAttributes
HBA_STATUS sysfs_getDiscoveredPortAttributes(HBA_PORTATTRIBUTES **pAttrs, struct vlib_port *port)
Retrieve adapter attributes.
Definition: vlib_sysfs.c:408
vlib_data::isLoaded
unsigned int isLoaded
Library loaded or not.
Definition: vlib.h:485
revalidateRepository
static HBA_STATUS revalidateRepository(void)
Check status of the repository, and possibly revalidate it.
Definition: vlib_sysfs.h:57
vlib_adapter_ident::wwnn
wwn_t wwnn
WWN of adapter node.
Definition: vlib.h:459
vlib_adapter_ident::sysfsPath
char sysfsPath[PATH_MAX]
path of adapter in sysfs in the form /sys/devices/css0/0.0.0010/0.0.5923
Definition: vlib.h:469
sysfs_createAndReadConfigAdapter
HBA_STATUS sysfs_createAndReadConfigAdapter()
Read all adapters from /sys/bus/ccw/drivers/zfcp and add them to the repository.
Definition: vlib_sysfs.c:260
vlib_port::host
unsigned int host
SCSI host.
Definition: vlib.h:451
vlib_port
Representation of a FC port in the library.
Definition: vlib.h:443
vlib_adapter_ident::devid
devid_t devid
Unique id for adapter device.
Definition: vlib.h:458
getPortAttributes
static HBA_STATUS getPortAttributes(HBA_PORTATTRIBUTES **pPortattributes, char *classpath)
Retrieve adapter attributes.
Definition: vlib_sysfs.c:145
vlib_wwn_to_HBA_WWN
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
vlib_unit
Represenation of an FCP unit in the library.
Definition: vlib.h:432
sysfs_getAdapterPortAttributes
HBA_STATUS sysfs_getAdapterPortAttributes(HBA_PORTATTRIBUTES **pAttrs, struct vlib_adapter *adapter)
Retrieve adapter attributes.
Definition: vlib_sysfs.c:443
vlib_port::wwpn
wwn_t wwpn
WWPN of the port.
Definition: vlib.h:445
vlib_adapter_ident::bus_dev_name
char bus_dev_name[9]
name of device as in /sys/bus/ccw/drivers/zfcp in the form "x.x.xxxx"
Definition: vlib.h:463
vlib_adapter_ident::wwpn
wwn_t wwpn
WWN of adapter port.
Definition: vlib.h:460
vlib_port::name
char name[32]
name as in sysfs under fc_remote_ports
Definition: vlib.h:449
addAdapterToRepos
int addAdapterToRepos(struct vlib_adapter *adapter)
Add an adapter to the repository.
Definition: vlib_aux.c:472
addPortByName
static HBA_STATUS addPortByName(struct vlib_adapter *adapter, char *name)
add a port to the adapters repos
Definition: vlib_sysfs.c:36
sysfs_getAdapterPortAttributes
HBA_STATUS sysfs_getAdapterPortAttributes(HBA_PORTATTRIBUTES **, struct vlib_adapter *)
Retrieve adapter attributes.
Definition: vlib_sysfs.c:443
vlib_adapter_ident::host
unsigned short host
SCSI host id of this adapter.
Definition: vlib.h:461
addPortToRepos
int addPortToRepos(struct vlib_adapter *adapter, struct vlib_port *port)
Add a port from to the repository.
Definition: vlib_aux.c:409
sysfs_createAndReadConfigPorts
HBA_STATUS sysfs_createAndReadConfigPorts(struct vlib_adapter *)
Read and store all discovered ports of an adapter.
Definition: vlib_sysfs.c:226
sysfs_createAndReadConfigAdapter
HBA_STATUS sysfs_createAndReadConfigAdapter()
Read all adapters from /sys/bus/ccw/drivers/zfcp and add them to the repository.
Definition: vlib_sysfs.c:260
getAdapterByHostNo
struct vlib_adapter * getAdapterByHostNo(unsigned short host)
Get an adapter by SCSI Host number as in sysfs.
Definition: vlib_aux.c:202
vlib_data::isValid
unsigned int isValid
Repositoy valid or not This flag is set for instance if a loss of events is detected.
Definition: vlib.h:487
addUnitToRepos
int addUnitToRepos(struct vlib_port *port, struct vlib_unit *unit)
Add a unit to the repository.
Definition: vlib_aux.c:351
revalidatePorts
static int revalidatePorts(struct vlib_adapter *adapter)
Revalidate ports of an adapter in the repository.
Definition: vlib_sysfs.h:82
vlib_adapter_ident::did
fc_id_t did
FC did of the port.
Definition: vlib.h:462
sysfs_getUnitsFromPort
int sysfs_getUnitsFromPort(struct vlib_port *port)
Get unit configuration information for a port.
Definition: vlib_sysfs.c:310
vlib_data
Primary data structure used in the library.
Definition: vlib.h:484
vlib_port::target
unsigned int target
SCSI id.
Definition: vlib.h:453
vlib_adapter
Represenation of an adapter in the library.
Definition: vlib.h:474
vlibCharToIntCOS
HBA_COS vlibCharToIntCOS(char *s)
Map the result of a class of service string to an int.
Definition: vlib_aux.c:873
revalidateUnits
static int revalidateUnits(struct vlib_port *port)
Revalidate units of an adapter and port in the repository.
Definition: vlib_sysfs.h:103
vlib_unit::fcLun
uint64_t fcLun
FCP LUN.
Definition: vlib.h:438
vlib_unit::host
unsigned int host
SCSI host.
Definition: vlib.h:434
vlib_port::did
fc_id_t did
FC did of the port.
Definition: vlib.h:447
addAdapterByDevPath
static HBA_STATUS addAdapterByDevPath(char *dev_path)
add an adapter to the adapters repos
Definition: vlib_sysfs.c:72
vlib_unit::channel
unsigned int channel
SCSI channel.
Definition: vlib.h:435
vlib_unit::sg_dev
char sg_dev[16]
name of sg device
Definition: vlib.h:439
sysfs_createAndReadConfigPorts
HBA_STATUS sysfs_createAndReadConfigPorts(struct vlib_adapter *adapter)
Read and store all discovered ports of an adapter.
Definition: vlib_sysfs.c:226
sysfs_getUnitsFromPort
int sysfs_getUnitsFromPort(struct vlib_port *)
Get unit configuration information for a port.
Definition: vlib_sysfs.c:310
vlib_adapter_ident::class_dev_name
char class_dev_name[9]
name of device as in /sys/class/fc_host in the form "hostxxxx"
Definition: vlib.h:466
vlibCharToIntPortType
HBA_PORTTYPE vlibCharToIntPortType(char *portType)
Map the result of a port type string from sysfs to an int.
Definition: vlib_aux.c:688
vlibCharToIntPortSpeed
HBA_PORTSPEED vlibCharToIntPortSpeed(char *pS)
Map the result of a port speed string to the HBA_PORTSPEED int.
Definition: vlib_aux.c:810
vlib_port::units
struct block units
List of units.
Definition: vlib.h:448
revalidateAdapters
int revalidateAdapters(void)
Revalidate adapters in the repository.
Definition: vlib_aux.c:546
sysfs_getAdapterAttributes
HBA_STATUS sysfs_getAdapterAttributes(HBA_ADAPTERATTRIBUTES **pAttrs, struct vlib_adapter *adapter)
Retrieve adapter attributes.
Definition: vlib_sysfs.c:495
sysfs_getPortStatistics
HBA_STATUS sysfs_getPortStatistics(HBA_PORTSTATISTICS **, struct vlib_adapter *)
Retrieve adapter port statistics.
Definition: vlib_sysfs.c:595
vlibCharToIntPortState
HBA_PORTSTATE vlibCharToIntPortState(char *portState)
Map the result of a port state string from sysfs to an int.
Definition: vlib_aux.c:713
sysfs_getPortStatistics
HBA_STATUS sysfs_getPortStatistics(HBA_PORTSTATISTICS **pS, struct vlib_adapter *adapter)
Retrieve adapter port statistics.
Definition: vlib_sysfs.c:595
vlib_port::channel
unsigned int channel
SCSI channel.
Definition: vlib.h:452
block::allocated
size_t allocated
total number of elements in the array
Definition: vlib.h:428
sysfs_getDiscoveredPortAttributes
HBA_STATUS sysfs_getDiscoveredPortAttributes(HBA_PORTATTRIBUTES **, struct vlib_port *)
Retrieve adapter attributes.
Definition: vlib_sysfs.c:408
vlib_unit::target
unsigned int target
SCSI id.
Definition: vlib.h:436
vlib_adapter::ports
struct block ports
List of ports.
Definition: vlib.h:478