|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Copyright (c) 2008, Intel Corporation.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* This program is free software; you can redistribute it and/or modify it
|
|
Packit |
2e24a8 |
* under the terms and conditions of the GNU Lesser General Public License,
|
|
Packit |
2e24a8 |
* version 2.1, as published by the Free Software Foundation.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
Packit |
2e24a8 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
Packit |
2e24a8 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
Packit |
2e24a8 |
* for more details.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* You should have received a copy of the GNU Lesser General Public License
|
|
Packit |
2e24a8 |
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
|
Packit |
2e24a8 |
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
#ifndef _ADAPT_IMPL_H_
|
|
Packit |
2e24a8 |
#define _ADAPT_IMPL_H_
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
#define SYSFS_HOST_DIR "/sys/class/fc_host"
|
|
Packit |
2e24a8 |
#define SYSFS_HBA_DIR "/sys/class/net"
|
|
Packit |
2e24a8 |
#define SYSFS_LUN_DIR "/sys/class/scsi_device"
|
|
Packit |
2e24a8 |
#define SYSFS_MODULE "/driver/module"
|
|
Packit |
2e24a8 |
#define SYSFS_MODULE_VER "driver/module/version"
|
|
Packit |
2e24a8 |
#define SYSFS_RPORT_ROOT "/sys/class/fc_remote_ports"
|
|
Packit |
2e24a8 |
#define SYSFS_RPORT_DIR "rport-%u:%u-%u" /* host, chan, rport */
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
struct hba_info {
|
|
Packit |
2e24a8 |
u_int32_t domain;
|
|
Packit |
2e24a8 |
u_int32_t bus;
|
|
Packit |
2e24a8 |
u_int32_t dev;
|
|
Packit |
2e24a8 |
u_int32_t func;
|
|
Packit |
2e24a8 |
u_int32_t vendor_id;
|
|
Packit |
2e24a8 |
u_int32_t subsystem_vendor_id;
|
|
Packit |
2e24a8 |
u_int32_t subsystem_device_id;
|
|
Packit |
2e24a8 |
u_int32_t device_id;
|
|
Packit |
2e24a8 |
u_int32_t device_class;
|
|
Packit |
2e24a8 |
u_int32_t irq;
|
|
Packit |
2e24a8 |
char Manufacturer[64];
|
|
Packit |
2e24a8 |
char SerialNumber[64];
|
|
Packit |
2e24a8 |
char Model[256];
|
|
Packit |
2e24a8 |
char ModelDescription[256];
|
|
Packit |
2e24a8 |
char HardwareVersion[256];
|
|
Packit |
2e24a8 |
char OptionROMVersion[256];
|
|
Packit |
2e24a8 |
char FirmwareVersion[256];
|
|
Packit |
2e24a8 |
u_int32_t VendorSpecificID;
|
|
Packit |
2e24a8 |
u_int32_t NumberOfPorts;
|
|
Packit |
2e24a8 |
};
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
#define MAX_DRIVER_NAME_LEN 20
|
|
Packit |
2e24a8 |
#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
HBA_STATUS sysfs_get_port_stats(char *dir, HBA_PORTSTATISTICS *sp);
|
|
Packit |
2e24a8 |
HBA_STATUS sysfs_get_port_fc4stats(char *dir, HBA_FC4STATISTICS *fc4sp);
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
extern struct sa_nameval port_states_table[];
|
|
Packit |
2e24a8 |
extern struct sa_nameval port_speeds_table[];
|
|
Packit |
2e24a8 |
extern void adapter_scan(void);
|
|
Packit |
2e24a8 |
extern int sys_read_wwn(const char *, const char *, HBA_WWN *);
|
|
Packit |
2e24a8 |
extern HBA_STATUS find_pci_device(struct hba_info *);
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* per-adapter interface.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Information about a particular adapter.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
struct adapter_info {
|
|
Packit |
2e24a8 |
u_int32_t ad_index; /* adapter's library index */
|
|
Packit |
2e24a8 |
u_int32_t ad_kern_index; /* adapter's kernel index */
|
|
Packit |
2e24a8 |
const char *ad_name; /* adapter driver name */
|
|
Packit |
2e24a8 |
struct sa_table ad_ports; /* table of ports */
|
|
Packit |
2e24a8 |
u_int32_t ad_port_count; /* adapter's number of ports */
|
|
Packit |
2e24a8 |
HBA_ADAPTERATTRIBUTES ad_attr; /* HBA-API attributes */
|
|
Packit |
2e24a8 |
};
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Information about a port on an adapter or a discovered remote port.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
struct port_info {
|
|
Packit |
2e24a8 |
struct adapter_info *ap_adapt;
|
|
Packit |
2e24a8 |
u_int32_t ap_index;
|
|
Packit |
2e24a8 |
u_int32_t ap_disc_index; /* discovered port index */
|
|
Packit |
2e24a8 |
u_int32_t ap_scsi_target; /* SCSI target index (rports) */
|
|
Packit |
2e24a8 |
u_int32_t ap_kern_hba; /* kernel HBA index (rports) */
|
|
Packit |
2e24a8 |
struct sa_table ap_rports; /* discovered ports */
|
|
Packit |
2e24a8 |
HBA_PORTATTRIBUTES ap_attr; /* HBA-API port attributes */
|
|
Packit |
2e24a8 |
char host_dir[80]; /* sysfs directory save area */
|
|
Packit |
2e24a8 |
};
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Internal functions.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
HBA_UINT32 adapter_get_count(void);
|
|
Packit |
2e24a8 |
HBA_STATUS adapter_get_name(HBA_UINT32 index, char *);
|
|
Packit |
2e24a8 |
struct port_info *adapter_get_port_by_wwn(HBA_HANDLE, HBA_WWN, int *countp);
|
|
Packit |
2e24a8 |
HBA_STATUS adapter_create(struct adapter_info *);
|
|
Packit |
2e24a8 |
void adapter_destroy(struct adapter_info *);
|
|
Packit |
2e24a8 |
void adapter_destroy_all(void);
|
|
Packit |
2e24a8 |
struct adapter_info *adapter_open_handle(HBA_HANDLE);
|
|
Packit |
2e24a8 |
struct port_info *adapter_get_port(HBA_HANDLE, HBA_UINT32 port);
|
|
Packit |
2e24a8 |
struct port_info *adapter_get_rport(HBA_HANDLE, HBA_UINT32, HBA_UINT32);
|
|
Packit |
2e24a8 |
struct port_info *adapter_get_rport_n(HBA_HANDLE, HBA_UINT32, HBA_UINT32);
|
|
Packit |
2e24a8 |
struct port_info *adapter_get_rport_target(HBA_HANDLE, HBA_UINT32, HBA_UINT32);
|
|
Packit |
2e24a8 |
struct port_info *adapter_get_rport_by_wwn(struct port_info *, HBA_WWN);
|
|
Packit |
2e24a8 |
struct port_info *adapter_get_rport_by_fcid(struct port_info *, fc_fid_t);
|
|
Packit |
2e24a8 |
void get_rport_info(struct port_info *);
|
|
Packit |
2e24a8 |
void sg_get_dev_id(const char *name, char *buf, size_t result_len);
|
|
Packit |
2e24a8 |
void copy_wwn(HBA_WWN *dest, fc_wwn_t src);
|
|
Packit |
2e24a8 |
int is_wwn_nonzero(HBA_WWN *wwn);
|
|
Packit |
2e24a8 |
HBA_STATUS sg_issue_read_capacity(const char *, void *, HBA_UINT32 *,
|
|
Packit |
2e24a8 |
HBA_UINT8 *, void *, HBA_UINT32 *);
|
|
Packit |
2e24a8 |
HBA_STATUS sg_issue_report_luns(const char *, void *, HBA_UINT32 *,
|
|
Packit |
2e24a8 |
HBA_UINT8 *, void *, HBA_UINT32 *);
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Library functions.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
HBA_HANDLE adapter_open(char *name);
|
|
Packit |
2e24a8 |
HBA_STATUS adapter_open_by_wwn(HBA_HANDLE *, HBA_WWN);
|
|
Packit |
2e24a8 |
void adapter_close(HBA_HANDLE);
|
|
Packit |
2e24a8 |
HBA_STATUS adapter_get_attr(HBA_HANDLE, HBA_ADAPTERATTRIBUTES *);
|
|
Packit |
2e24a8 |
HBA_STATUS adapter_get_port_attr(HBA_HANDLE, HBA_UINT32 port,
|
|
Packit |
2e24a8 |
HBA_PORTATTRIBUTES *);
|
|
Packit |
2e24a8 |
HBA_STATUS adapter_get_port_attr_by_wwn(HBA_HANDLE, HBA_WWN,
|
|
Packit |
2e24a8 |
HBA_PORTATTRIBUTES *);
|
|
Packit |
2e24a8 |
HBA_STATUS adapter_get_rport_attr(HBA_HANDLE, HBA_UINT32 port,
|
|
Packit |
2e24a8 |
HBA_UINT32 rport, HBA_PORTATTRIBUTES *);
|
|
Packit |
2e24a8 |
HBA_STATUS get_port_statistics(HBA_HANDLE, HBA_UINT32 port,
|
|
Packit |
2e24a8 |
HBA_PORTSTATISTICS *);
|
|
Packit |
2e24a8 |
HBA_STATUS get_port_fc4_statistics(HBA_HANDLE, HBA_WWN,
|
|
Packit |
2e24a8 |
HBA_UINT8 fc4_type, HBA_FC4STATISTICS *);
|
|
Packit |
2e24a8 |
HBA_STATUS scsi_read_capacity_v1(HBA_HANDLE, HBA_WWN, HBA_UINT64,
|
|
Packit |
2e24a8 |
void *, HBA_UINT32, void *, HBA_UINT32);
|
|
Packit |
2e24a8 |
HBA_STATUS scsi_read_capacity_v2(HBA_HANDLE, HBA_WWN, HBA_WWN,
|
|
Packit |
2e24a8 |
HBA_UINT64, void *, HBA_UINT32 *, HBA_UINT8 *,
|
|
Packit |
2e24a8 |
void *, HBA_UINT32 *);
|
|
Packit |
2e24a8 |
HBA_STATUS scsi_inquiry_v1(HBA_HANDLE, HBA_WWN, HBA_UINT64, HBA_UINT8,
|
|
Packit |
2e24a8 |
HBA_UINT32, void *, HBA_UINT32, void *, HBA_UINT32);
|
|
Packit |
2e24a8 |
HBA_STATUS scsi_inquiry_v2(HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT64,
|
|
Packit |
2e24a8 |
HBA_UINT8, HBA_UINT8, void *, HBA_UINT32 *,
|
|
Packit |
2e24a8 |
HBA_UINT8 *, void *, HBA_UINT32 *);
|
|
Packit |
2e24a8 |
HBA_STATUS scsi_report_luns_v1(HBA_HANDLE, HBA_WWN,
|
|
Packit |
2e24a8 |
void *, HBA_UINT32, void *, HBA_UINT32);
|
|
Packit |
2e24a8 |
HBA_STATUS scsi_report_luns_v2(HBA_HANDLE, HBA_WWN, HBA_WWN,
|
|
Packit |
2e24a8 |
void *, HBA_UINT32 *, HBA_UINT8 *,
|
|
Packit |
2e24a8 |
void *, HBA_UINT32 *);
|
|
Packit |
2e24a8 |
HBA_STATUS sg_issue_inquiry(const char *, HBA_UINT8, HBA_UINT8,
|
|
Packit |
2e24a8 |
void *, HBA_UINT32 *, HBA_UINT8 *, void *, HBA_UINT32 *);
|
|
Packit |
2e24a8 |
|
|
Packit Service |
d8f373 |
void adapter_init(void);
|
|
Packit |
2e24a8 |
void adapter_shutdown(void);
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/* struct port_stats; */
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
#endif /* _ADAPT_IMPL_H_ */
|