#ifndef _SYS_SCSI_ADAPTERS_IFPIO_H
#define _SYS_SCSI_ADAPTERS_IFPIO_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#define IFP_IOC ('I' << 8)
#define IFPIOCGMAP (IFP_IOC|1)
#define IFPIO_ADISC_ELS (IFP_IOC|2)
#define IFPIO_FORCE_LIP (IFP_IOC|3)
#define IFPIO_LINKSTATUS (IFP_IOC|4)
#define IFPIO_DIAG_GET_FWREV (IFP_IOC|5)
#define IFPIO_DIAG_NOP (IFP_IOC|6)
#define IFPIO_DIAG_MBOXCMD (IFP_IOC|7)
#define IFPIO_LOOPBACK_FRAME (IFP_IOC|8)
#define IFPIO_DIAG_SELFTEST (IFP_IOC|9)
#define IFPIO_BOARD_INFO (IFP_IOC|10)
#define IFPIO_FCODE_DOWNLOAD (IFP_IOC|11)
struct ifp_board_info {
uint16_t ifpd_major;
uint16_t ifpd_minor;
uint16_t ifpd_subminor;
uint16_t chip_rev;
uint16_t ctrl_id;
};
typedef struct ifp_board_info ifp_board_info_t;
struct ifp_diag_fw_rev {
uint16_t ifpd_major;
uint16_t ifpd_minor;
};
typedef struct ifp_diag_fw_rev ifp_diag_fw_rev_t;
struct ifp_lb_frame_cmd {
uint16_t options;
uint32_t iter_cnt;
uint32_t xfer_cnt;
caddr_t xmit_addr;
caddr_t recv_addr;
uint16_t status;
uint16_t crc_cnt;
uint16_t disparity_cnt;
uint16_t frame_len_err_cnt;
uint32_t fail_iter_cnt;
};
typedef struct ifp_lb_frame_cmd ifp_lb_frame_cmd_t;
#if defined(_LP64)
struct ifp_lb_frame_cmd32 {
uint16_t options;
uint32_t iter_cnt;
uint32_t xfer_cnt;
caddr32_t xmit_addr;
caddr32_t recv_addr;
uint16_t status;
uint16_t crc_cnt;
uint16_t disparity_cnt;
uint16_t frame_len_err_cnt;
uint32_t fail_iter_cnt;
};
#endif
#define LOOP_10BIT 0x0000
#define LOOP_1BIT 0x0001
#define LOOP_EXTERNAL 0x0002
#define LOOP_XMIT_OFF 0x0004
#define LOOP_XMIT_RAM 0x0010
#define LOOP_RECV_RAM 0x0020
#define LOOP_ERR_STOP 0x0080
struct ifp_diag_selftest {
uint16_t status;
uint16_t test_num;
uint16_t fail_addr;
uint16_t fail_data;
};
typedef struct ifp_diag_selftest ifp_diag_selftest_t;
#define FCODE_OFFSET 0x20
struct ifp_download {
uint32_t dl_fcode_len;
uint16_t dl_chip_id;
uchar_t dl_fcode[1];
};
typedef struct ifp_download ifp_download_t;
#define IFP_NUM_ENTRIES_IN_MAP 127
#define IFP_DIAG_MAX_MBOX 10
struct ifp_al_addr_pair {
uchar_t ifp_al_pa;
uchar_t ifp_hard_address;
uchar_t ifp_inq_dtype;
uchar_t ifp_node_wwn[FC_WWN_SIZE];
uchar_t ifp_port_wwn[FC_WWN_SIZE];
};
typedef struct ifp_al_addr_pair ifp_al_addr_pair_t;
struct ifp_al_map {
short ifp_count;
ifp_al_addr_pair_t ifp_addr_pair[IFP_NUM_ENTRIES_IN_MAP];
ifp_al_addr_pair_t ifp_hba_addr;
};
typedef struct ifp_al_map ifp_al_map_t;
struct adisc_payload {
uint_t adisc_hardaddr;
uchar_t adisc_portwwn[8];
uchar_t adisc_nodewwn[8];
uint_t adisc_dest;
};
struct rls_payload {
uint_t rls_portno;
uint_t rls_linkfail;
uint_t rls_syncfail;
uint_t rls_sigfail;
uint_t rls_primitiverr;
uint_t rls_invalidword;
uint_t rls_invalidcrc;
};
typedef struct rls_payload rls_payload_t;
struct ifp_target_stats {
int logouts_recvd;
int task_mgmt_failures;
int data_ro_mismatches;
int dl_len_mismatches;
};
typedef struct ifp_target_stats ifp_target_stats_t;
struct ifp_stats {
int version;
int lip_count;
int ncmds;
ifp_target_stats_t tstats[IFP_NUM_ENTRIES_IN_MAP];
};
typedef struct ifp_stats ifp_stats_t;
#if !defined(SFIOCGMAP)
#define SFIOCGMAP ((0xda << 8)|1)
#endif
#if !defined(FCIO_GETMAP)
#define FCIO_GETMAP (('F' << 8)|175)
struct lilpmap {
ushort_t lilp_magic;
ushort_t lilp_myalpa;
uchar_t lilp_length;
uchar_t lilp_list[127];
};
#endif
typedef struct flb_hdr {
uint_t max_length;
uint_t length;
} flb_hdr_t;
#define MAX_LOOPBACK 65536
#if !defined(FCIO_FORCE_LIP)
#define FCIO_FORCE_LIP (('F' << 8)|177)
#endif
#if !defined(FCIO_LINKSTATUS)
#define FCIO_LINKSTATUS (('F' << 8)|183)
#endif
#if !defined(FCIO_FCODE_MCODE_VERSION)
#define FCIO_FCODE_MCODE_VERSION (('F' << 8)|202)
#endif
struct ifp_fm_version {
int fcode_ver_len;
int mcode_ver_len;
int prom_ver_len;
caddr_t fcode_ver;
caddr_t mcode_ver;
caddr_t prom_ver;
};
#if defined(_LP64)
struct ifp_fm_version32 {
int fcode_ver_len;
int mcode_ver_len;
int prom_ver_len;
caddr32_t fcode_ver;
caddr32_t mcode_ver;
caddr32_t prom_ver;
};
#endif
struct ifp_diag_mbox {
ushort_t ifp_in_mbox[8];
ushort_t ifp_out_mbox[8];
};
typedef struct ifp_diag_mbox ifp_diag_mbox_t;
struct ifp_diag_regs {
ushort_t ifpd_mailbox[8];
ushort_t ifpd_hccr;
ushort_t ifpd_bus_sema;
ushort_t ifpd_isr;
ushort_t ifpd_icr;
ushort_t ifpd_icsr;
ushort_t ifpd_cdma_count;
uint_t ifpd_cdma_addr;
ushort_t ifpd_cdma_status;
ushort_t ifpd_cdma_control;
uint_t ifpd_rdma_count;
uint_t ifpd_rdma_addr;
ushort_t ifpd_rdma_status;
ushort_t ifpd_rdma_control;
uint_t ifpd_tdma_count;
uint_t ifpd_tdma_addr;
ushort_t ifpd_tdma_status;
ushort_t ifpd_tdma_control;
ushort_t ifpd_risc_reg[16];
ushort_t ifpd_risc_psr;
ushort_t ifpd_risc_ivr;
ushort_t ifpd_risc_pcr;
ushort_t ifpd_risc_rar0;
ushort_t ifpd_risc_rar1;
ushort_t ifpd_risc_lcr;
ushort_t ifpd_risc_pc;
ushort_t ifpd_risc_mtr;
ushort_t ifpd_risc_sp;
ushort_t ifpd_request_in;
ushort_t ifpd_request_out;
ushort_t ifpd_response_in;
ushort_t ifpd_response_out;
void *ifpd_current_req_ptr;
void *ifpd_base_req_ptr;
void *ifpd_current_resp_ptr;
void *ifpd_base_resp_ptr;
};
typedef struct ifp_diag_regs ifp_diag_regs_t;
struct ifp_diag_cmd {
short ifp_cmds_rev;
short ifp_cmds_current_rev;
short ifp_cmds_count;
short ifp_cmds_done;
ifp_diag_regs_t ifp_regs;
ifp_diag_mbox_t ifp_mbox[IFP_DIAG_MAX_MBOX];
};
typedef struct ifp_diag_cmd ifp_diag_cmd_t;
#define IFP_DIAG_CMD_REV 0x1
#ifdef __cplusplus
}
#endif
#endif