#ifndef _SYS_SOCALVAR_H
#define _SYS_SOCALVAR_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/id32.h>
#define SOCAL_PORTA_NAME "0"
#define SOCAL_PORTB_NAME "1"
#define SOCAL_NT_PORT NULL
#define SOCAL_INIT_ITEMS 5
#define SOCAL_MAX_CQ_ENTRIES 256
#define SOCAL_CQ_SIZE (sizeof (cqe_t) * SOC_MAX_CQ_ENTRIES)
#define SOCAL_SMALL_CQ_ENTRIES 8
#define SOCAL_N_CQS 4
#define SOCAL_HW_N_CQS 4
#define SOCAL_CQ_ALIGN 64
#define SOCAL_TAKE_CORE 0x1
#define SOCAL_FAILED_LIP 0x2
#define SOCAL_POOL_SIZE 2112
#define SOCAL_SVC_LENGTH 80
#define FABRIC_FLAG 1
#define NPORT_FLAG 2
#define FCIO_DIAG_LBTFQ (FIOC|203)
#define SOC_DIAG_LBTFQ 0x0a
#define PORT_LBF_PENDING 0x00100000
#define SOCAL_LBF_TIMEOUT 15000000
#define SOCAL_ID_GET(x, w) id32_alloc((x), (w))
#define SOCAL_ID_LOOKUP(x) id32_lookup((x))
#define SOCAL_ID_FREE(x) id32_free((x))
typedef struct flb_hdr {
uint_t max_length;
uint_t length;
} flb_hdr_t;
struct socal_state;
typedef struct socal_kernel_cq {
kmutex_t skc_mtx;
kcondvar_t skc_cv;
ddi_dma_handle_t skc_dhandle;
ddi_dma_cookie_t skc_dcookie;
ddi_acc_handle_t skc_acchandle;
soc_cq_t *skc_xram_cqdesc;
caddr_t skc_cq_raw;
cqe_t *skc_cq;
uchar_t skc_in;
uchar_t skc_out;
uchar_t skc_last_index;
uchar_t skc_seqno;
uchar_t skc_full;
uchar_t skc_saved_out;
uchar_t skc_saved_seqno;
timeout_id_t deferred_intr_timeoutid;
struct fcal_packet *skc_overflowh;
struct fcal_packet *skc_overflowt;
struct socal_state *skc_socalp;
} socal_kcq_t;
#define SOCAL_SKC_FULL 1
#define SOCAL_SKC_SLEEP 2
typedef struct socal_unsol_cb {
struct socal_unsol_cb *next;
uchar_t type;
void (*statec_cb)(void *, uint32_t);
void (*els_cb)(void *, cqe_t *, caddr_t);
void (*data_cb)(void *, cqe_t *, caddr_t);
void *arg;
} socal_unsol_cb_t;
typedef struct socal_port {
uint32_t sp_status;
struct socal_state *sp_board;
uint32_t sp_src_id;
uint32_t sp_port;
la_wwn_t sp_p_wwn;
socal_unsol_cb_t *sp_unsol_cb;
uint32_t sp_open;
kmutex_t sp_mtx;
kcondvar_t sp_cv;
fcal_transport_t *sp_transport;
uint32_t sp_hard_alpa;
uint32_t sp_lilpmap_valid;
fcal_lilp_map_t sp_lilpmap;
} socal_port_t;
#define PORT_FABRIC_PRESENT 0x00000001
#define PORT_OFFLINE 0x00000002
#define NPORT_LOGIN_SUCCESS 0x00000004
#define PORT_LOGIN_ACTIVE 0x00000008
#define PORT_LOGIN_RECOVERY 0x00000010
#define PORT_ONLINE_LOOP 0x00000020
#define PORT_ONLINE 0x00000040
#define PORT_STATUS_FLAG 0x00000080
#define PORT_STATUS_MASK 0x000000ff
#define PORT_OPEN 0x00000100
#define PORT_CHILD_INIT 0x00000200
#define PORT_TARGET_MODE 0x00000400
#define PORT_LILP_PENDING 0x00001000
#define PORT_LIP_PENDING 0x00002000
#define PORT_ABORT_PENDING 0x00004000
#define PORT_ELS_PENDING 0x00008000
#define PORT_BYPASS_PENDING 0x00010000
#define PORT_OFFLINE_PENDING 0x00020000
#define PORT_ADISC_PENDING 0x00040000
#define PORT_RLS_PENDING 0x00080000
#define PORT_DISABLED 0x00100000
#define SOC_TIMEOUT_DELAY(secs, delay) (secs * (1000000 / delay))
#define SOCAL_NOINTR_POLL_DELAY_TIME 1000
#define SOCAL_LILP_TIMEOUT 10000000
#define SOCAL_LIP_TIMEOUT 30000000
#define SOCAL_ABORT_TIMEOUT 10000000
#define SOCAL_BYPASS_TIMEOUT 5000000
#define SOCAL_OFFLINE_TIMEOUT 5000000
#define SOCAL_ADISC_TIMEOUT 15000000
#define SOCAL_RLS_TIMEOUT 15000000
#define SOCAL_DIAG_TIMEOUT 15000000
#define SOC_INITIAL_ONLINE 30
typedef struct socal_state {
dev_info_t *dip;
caddr_t socal_eeprom;
caddr_t socal_xrp;
socal_reg_t *socal_rp;
soc_cq_t *xram_reqp;
soc_cq_t *xram_rspp;
socal_kcq_t request[SOCAL_N_CQS];
socal_kcq_t response[SOCAL_N_CQS];
int32_t socal_busy;
uint32_t socal_shutdown;
uint32_t socal_cfg;
kmutex_t k_imr_mtx;
uint32_t socal_k_imr;
kmutex_t abort_mtx;
kmutex_t board_mtx;
kmutex_t ioctl_mtx;
kcondvar_t board_cv;
ddi_iblock_cookie_t iblkc;
ddi_idevice_cookie_t idevc;
uchar_t *pool;
ddi_dma_handle_t pool_dhandle;
ddi_dma_cookie_t pool_dcookie;
ddi_acc_handle_t pool_acchandle;
socal_port_t port_state[N_SOCAL_NPORTS];
la_wwn_t socal_n_wwn;
char socal_service_params[SOCAL_SVC_LENGTH];
char socal_name[MAXPATHLEN];
kstat_t *socal_ksp;
struct socal_stats socal_stats;
int socal_on_intr;
} socal_state_t;
typedef struct socal_priv_cmd {
void *fapktp;
uint32_t flags;
caddr_t cmd;
caddr_t rsp;
ddi_dma_handle_t cmd_handle;
ddi_acc_handle_t cmd_acchandle;
ddi_dma_handle_t rsp_handle;
ddi_acc_handle_t rsp_acchandle;
void (*callback)();
void *arg;
caddr_t *payload;
} socal_priv_cmd_t;
#ifdef __cplusplus
}
#endif
#endif