Blame adapt_impl.h

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 caa9df
int adapter_init(void);
Packit 2e24a8
void adapter_shutdown(void);
Packit 2e24a8
Packit 2e24a8
/* struct port_stats; */
Packit 2e24a8
Packit 2e24a8
#endif /* _ADAPT_IMPL_H_ */