#ifndef _FC_APPIF_H
#define _FC_APPIF_H
#include <sys/note.h>
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(_BIT_FIELDS_LTOH) && !defined(_BIT_FIELDS_HTOL)
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
#define FC_TOP_UNKNOWN 0
#define FC_TOP_PRIVATE_LOOP 1
#define FC_TOP_PUBLIC_LOOP 2
#define FC_TOP_FABRIC 3
#define FC_TOP_PT_PT 4
#define FC_TOP_NO_NS 5
#define FC_TOP_EXTERNAL(t) FC_IS_TOP_SWITCH(t)
#define FC_IS_TOP_SWITCH(t) (((t) == FC_TOP_FABRIC) ||\
((t) == FC_TOP_PUBLIC_LOOP))
#define PORT_DEVICE_INVALID 0
#define PORT_DEVICE_VALID 1
#define PORT_DEVICE_LOGGED_IN 2
#define FC_FCODE_REV_SIZE 25
#define FC_FW_REV_SIZE 25
typedef struct ct_header {
#if defined(_BIT_FIELDS_LTOH)
uint32_t ct_inid : 24,
ct_rev : 8;
uint32_t ct_reserved1 : 8,
ct_options : 8,
ct_fcssubtype : 8,
ct_fcstype : 8;
uint32_t ct_aiusize : 16,
ct_cmdrsp : 16;
uint32_t ct_vendor : 8,
ct_expln : 8,
ct_reason : 8,
ct_reserved2 : 8;
#else
uint32_t ct_rev : 8,
ct_inid : 24;
uint32_t ct_fcstype : 8,
ct_fcssubtype : 8,
ct_options : 8,
ct_reserved1 : 8;
uint32_t ct_cmdrsp : 16,
ct_aiusize : 16;
uint32_t ct_reserved2 : 8,
ct_reason : 8,
ct_expln : 8,
ct_vendor : 8;
#endif
} fc_ct_header_t;
typedef union la_wwn {
uchar_t raw_wwn[8];
uint32_t i_wwn[2];
#if defined(_BIT_FIELDS_LTOH)
struct {
uint32_t wwn_hi : 16,
nport_id : 12,
naa_id : 4;
uint32_t wwn_lo;
}w;
#else
struct {
uint32_t naa_id : 4,
nport_id : 12,
wwn_hi : 16;
uint32_t wwn_lo;
}w;
#endif
} la_wwn_t;
#define NAA_ID_IEEE 1
#define NAA_ID_IEEE_EXTENDED 2
#ifndef FC_WWN_SIZE
#define FC_WWN_SIZE (sizeof (la_wwn_t))
#endif
typedef struct service_param {
uint16_t class_opt;
uint16_t initiator_ctl;
uint16_t recipient_ctl;
uint16_t rcv_size;
uint16_t conc_sequences;
uint16_t n_port_e_to_e_credit;
uint16_t open_seq_per_xchng;
uint16_t rsvd;
} svc_param_t;
typedef struct common_service {
uint16_t fcph_version;
uint16_t btob_credit;
uint16_t cmn_features;
uint16_t rx_bufsize;
uint16_t conc_sequences;
uint16_t relative_offset;
uint32_t e_d_tov;
} com_svc_t;
typedef struct ls_code {
#if defined(_BIT_FIELDS_LTOH)
uint32_t mbz : 24,
ls_code : 8;
#else
uint32_t ls_code : 8,
mbz : 24;
#endif
} ls_code_t;
typedef struct la_els_logi {
ls_code_t ls_code;
com_svc_t common_service;
la_wwn_t nport_ww_name;
la_wwn_t node_ww_name;
svc_param_t class_1;
svc_param_t class_2;
svc_param_t class_3;
uchar_t reserved[16];
uchar_t vendor_version[16];
} la_els_logi_t;
typedef struct fc_ns_cmd {
uint32_t ns_flags;
uint16_t ns_cmd;
uint16_t ns_req_len;
caddr_t ns_req_payload;
uint16_t ns_resp_len;
caddr_t ns_resp_payload;
void *ns_fctl_private;
fc_ct_header_t ns_resp_hdr;
} fc_ns_cmd_t;
#if defined(_SYSCALL32)
#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
#pragma pack(4)
#endif
typedef struct la_els_logi32 {
ls_code_t ls_code;
com_svc_t common_service;
la_wwn_t nport_ww_name;
la_wwn_t node_ww_name;
svc_param_t class_1;
svc_param_t class_2;
svc_param_t class_3;
uchar_t reserved[16];
uchar_t vendor_version[16];
} la_els_logi32_t;
typedef struct fc_ns_cmd32 {
uint32_t ns_flags;
uint16_t ns_cmd;
uint16_t ns_req_len;
caddr_t ns_req_payload;
uint16_t ns_resp_len;
caddr_t ns_resp_payload;
void *ns_fctl_private;
fc_ct_header_t ns_resp_hdr;
} fc_ns_cmd32_t;
#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
#pragma pack()
#endif
#endif
typedef struct fc_rls_acc_params {
uint32_t rls_link_fail;
uint32_t rls_sync_loss;
uint32_t rls_sig_loss;
uint32_t rls_prim_seq_err;
uint32_t rls_invalid_word;
uint32_t rls_invalid_crc;
} fc_rls_acc_t;
typedef struct la_els_rls {
ls_code_t ls_code;
fc_portid_t rls_portid;
} la_els_rls_t;
typedef struct la_els_rls_acc {
ls_code_t ls_code;
fc_rls_acc_t rls_link_params;
} la_els_rls_acc_t;
typedef struct fc_rnid_params {
uchar_t global_id[16];
uint32_t unit_type;
uint32_t port_id;
uint32_t num_attached;
uint16_t ip_version;
uint16_t udp_port;
uchar_t ip_addr[16];
uint16_t specific_id_resv;
uint16_t topo_flags;
} fc_rnid_t;
#define FCIO_CFLAGS_RNID_GET_GENERAL_TOPOLOGY 0xDF
#define FCIO_CFLAGS_RNID_GET_VENDOR_SPECIFIC 0xE0
#define FCIO_RNID_MAX_DATA_LEN 268
typedef struct la_els_rnid {
ls_code_t ls_code;
uchar_t data_format;
uchar_t resv[3];
} la_els_rnid_t;
typedef struct fc_rnid_hdr {
uchar_t data_format;
uchar_t cmn_len;
uchar_t resv;
uchar_t specific_len;
}fc_rnid_hdr_t;
typedef struct la_els_rnid_acc {
ls_code_t ls_code;
fc_rnid_hdr_t hdr;
uchar_t data[FCIO_RNID_MAX_DATA_LEN];
} la_els_rnid_acc_t;
typedef struct la_npiv_create_entry {
la_wwn_t VNodeWWN;
la_wwn_t VPortWWN;
uint32_t vindex;
} la_npiv_create_entry_t;
#if !defined(__lint)
_NOTE(SCHEME_PROTECTS_DATA("unique per request", fc_ns_cmd))
_NOTE(SCHEME_PROTECTS_DATA("unique per request", ct_header))
_NOTE(SCHEME_PROTECTS_DATA("unique per request", la_els_logi))
_NOTE(SCHEME_PROTECTS_DATA("unique per request", la_wwn))
_NOTE(SCHEME_PROTECTS_DATA("unique per request", fc_rls_acc_params))
_NOTE(SCHEME_PROTECTS_DATA("unique per request", la_els_rls))
_NOTE(SCHEME_PROTECTS_DATA("unique per request", la_els_rls_acc))
_NOTE(SCHEME_PROTECTS_DATA("unique per request", fc_rnid_params))
_NOTE(SCHEME_PROTECTS_DATA("unique per request", la_els_rnid))
_NOTE(SCHEME_PROTECTS_DATA("unique per request", la_els_rnid_acc))
#endif
#ifdef __cplusplus
}
#endif
#endif