#ifndef _EMLXS_FCIO_H
#define _EMLXS_FCIO_H
#ifdef __cplusplus
extern "C" {
#endif
#define FCIO_REV 2
#define EMLXS_DIAG ('E'<< 8)
#define EMLXS_DIAG_BIU (EMLXS_DIAG | 100)
#define EMLXS_DIAG_POST (EMLXS_DIAG | 101)
#define EMLXS_DIAG_ECHO (EMLXS_DIAG | 102)
#define EMLXS_PARM_GET_NUM (EMLXS_DIAG | 200)
#define EMLXS_PARM_GET_LIST (EMLXS_DIAG | 201)
#define EMLXS_PARM_GET (EMLXS_DIAG | 202)
#define EMLXS_PARM_SET (EMLXS_DIAG | 203)
#define EMLXS_GET_BOOT_REV (EMLXS_DIAG | 204)
#define EMLXS_DOWNLOAD_BOOT (EMLXS_DIAG | 205)
#define EMLXS_DOWNLOAD_CFL (EMLXS_DIAG | 206)
#define EMLXS_VPD_GET (EMLXS_DIAG | 207)
#define EMLXS_GET_FCIO_REV (EMLXS_DIAG | 208)
#define EMLXS_SET_BOOT_STATE_old (EMLXS_DIAG | 209)
#define EMLXS_GET_BOOT_STATE_old (EMLXS_DIAG | 210)
#define EMLXS_DFC_COMMAND (EMLXS_DIAG | 211)
#define EMLXS_SET_BOOT_STATE (EMLXS_DIAG | 212)
#define EMLXS_GET_BOOT_STATE (EMLXS_DIAG | 213)
#define EMLXS_GET_DFC_REV (EMLXS_DIAG | 214)
#define EMLXS_PHY_GET (EMLXS_DIAG | 215)
#define EMLXS_SET_THROTTLE (EMLXS_DIAG | 216)
#define EMLXS_GET_THROTTLE (EMLXS_DIAG | 217)
#define EMLXS_VPD_GET_V2 (EMLXS_DIAG | 218)
#define EMLXS_BAR_IO (EMLXS_DIAG | 253)
#define EMLXS_TEST_CODE (EMLXS_DIAG | 254)
#define EMLXS_HW_ERROR_TEST (EMLXS_DIAG | 255)
#define EMLXS_MB_TIMEOUT_TEST (EMLXS_DIAG | 256)
#define EMLXS_LOG_GET (EMLXS_DIAG | 300)
#define EMLXS_TXT_FILE_ID 1
#define EMLXS_DMP_FILE_ID 2
#define EMLXS_CEE_FILE_ID 3
#define EMLXS_FAT_FILE_ID 4
#define EMLXS_ERRNO_START 0x100
#define EMLXS_TEST_FAILED (EMLXS_ERRNO_START + 0)
#define EMLXS_IMAGE_BAD (EMLXS_ERRNO_START + 1)
#define EMLXS_IMAGE_INCOMPATIBLE (EMLXS_ERRNO_START + 2)
#define EMLXS_IMAGE_FAILED (EMLXS_ERRNO_START + 3)
#define EMLXS_OFFLINE_FAILED (EMLXS_ERRNO_START + 4)
#define EMLXS_NO_BOOT_CODE (EMLXS_ERRNO_START + 5)
#define EMLXS_OP_NOT_SUP (EMLXS_ERRNO_START + 6)
#define EMLXS_REBOOT_REQUIRED (EMLXS_ERRNO_START + 7)
#define EMLXS_ERRNO_END (EMLXS_ERRNO_START + 7)
typedef struct emlxs_parm
{
char label[32];
uint32_t min;
uint32_t max;
uint32_t def;
uint32_t current;
uint32_t flags;
char help[128];
} emlxs_parm_t;
#define PARM_DYNAMIC 0x00000001
#define PARM_BOOLEAN 0x00000002
#define PARM_HEX 0x00000004
#define PARM_DYNAMIC_RESET (PARM_DYNAMIC | 0x00000010)
#define PARM_DYNAMIC_LINK (PARM_DYNAMIC | 0x00000020)
typedef struct emlxs_vpd_desc
{
char id[80];
char part_num[32];
char eng_change[32];
char manufacturer[80];
char serial_num[32];
char model[32];
char model_desc[80];
char port_num[4];
char prog_types[80];
} emlxs_vpd_desc_t;
typedef struct emlxs_vpd_desc_v2
{
char id[256];
char part_num[256];
char eng_change[256];
char manufacturer[256];
char serial_num[256];
char model[256];
char model_desc[256];
char port_num[256];
char prog_types[256];
} emlxs_vpd_desc_v2_t;
typedef struct emlxs_phy_desc
{
uint32_t phy_type;
uint32_t interface_type;
uint32_t misc_params;
uint32_t rsvd[4];
} emlxs_phy_desc_t;
typedef struct emlxs_throttle_desc
{
uint8_t wwpn[8];
uint32_t throttle;
} emlxs_throttle_desc_t;
typedef struct emlxs_log_req
{
uint32_t first;
uint32_t count;
} emlxs_log_req_t;
typedef struct emlxs_log_resp
{
uint32_t first;
uint32_t last;
uint32_t count;
#define MAX_LOG_MSG_LENGTH 160
} emlxs_log_resp_t;
typedef struct FCIO_EQ_DESC
{
uint32_t host_index;
uint32_t max_index;
uint32_t qid;
uint32_t msix_vector;
uint32_t phys;
uint32_t virt;
uint32_t virt_hi;
uint32_t max_proc;
uint32_t isr_count;
uint32_t num_proc;
} FCIO_EQ_DESC_t;
typedef struct FCIO_CQ_DESC
{
uint32_t host_index;
uint32_t max_index;
uint32_t qid;
uint32_t eqid;
uint32_t type;
uint32_t phys;
uint32_t virt;
uint32_t virt_hi;
uint32_t max_proc;
uint32_t isr_count;
uint32_t num_proc;
uint32_t rsvd;
} FCIO_CQ_DESC_t;
typedef struct FCIO_WQ_DESC
{
uint32_t host_index;
uint32_t max_index;
uint32_t port_index;
uint32_t release_depth;
uint32_t qid;
uint32_t cqid;
uint32_t phys;
uint32_t virt;
uint32_t virt_hi;
uint32_t num_proc;
uint32_t num_busy;
uint32_t rsvd;
} FCIO_WQ_DESC_t;
typedef struct FCIO_RQ_DESC
{
uint32_t host_index;
uint32_t max_index;
uint32_t qid;
uint32_t cqid;
uint32_t phys;
uint32_t virt;
uint32_t virt_hi;
uint32_t num_proc;
} FCIO_RQ_DESC_t;
#define FCIO_MSI_MAX_INTRS 8
#define FCIO_MAX_WQS_PER_EQ 4
#define FCIO_MAX_EQS FCIO_MSI_MAX_INTRS
#define FCIO_MAX_WQS FCIO_MAX_WQS_PER_EQ * FCIO_MAX_EQS
#define FCIO_MAX_RQS 2
#define FCIO_MAX_CQS (FCIO_MAX_WQS + (FCIO_MAX_RQS/2) + 1)
typedef struct FCIO_Q_STAT
{
FCIO_EQ_DESC_t eq[FCIO_MAX_EQS];
FCIO_CQ_DESC_t cq[FCIO_MAX_CQS];
FCIO_WQ_DESC_t wq[FCIO_MAX_WQS];
FCIO_RQ_DESC_t rq[FCIO_MAX_RQS];
uint32_t que_start_timer;
uint32_t que_current_timer;
uint32_t intr_count;
} FCIO_Q_STAT_t;
#ifdef __cplusplus
}
#endif
#endif