2012-11-15 21:11:18 +04:00
/*
* This file is part of the Chelsio FCoE driver for Linux .
*
* Copyright ( c ) 2009 - 2010 Chelsio Communications , Inc . All rights reserved .
*
* This software is available to you under a choice of one of two
* licenses . You may choose to be licensed under the terms of the GNU
* General Public License ( GPL ) Version 2 , available from the file
* COPYING in the main directory of this source tree , or the
* OpenIB . org BSD license below :
*
* Redistribution and use in source and binary forms , with or
* without modification , are permitted provided that the following
* conditions are met :
*
* - Redistributions of source code must retain the above
* copyright notice , this list of conditions and the following
* disclaimer .
*
* - Redistributions in binary form must reproduce the above
* copyright notice , this list of conditions and the following
* disclaimer in the documentation and / or other materials
* provided with the distribution .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND ,
* EXPRESS OR IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT . IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY , WHETHER IN AN
* ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM , OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE .
*/
# ifndef _T4FW_API_STOR_H_
# define _T4FW_API_STOR_H_
/******************************************************************************
* R E T U R N V A L U E S
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
enum fw_fcoe_link_sub_op {
FCOE_LINK_DOWN = 0x0 ,
FCOE_LINK_UP = 0x1 ,
FCOE_LINK_COND = 0x2 ,
} ;
enum fw_fcoe_link_status {
FCOE_LINKDOWN = 0x0 ,
FCOE_LINKUP = 0x1 ,
} ;
enum fw_ofld_prot {
PROT_FCOE = 0x1 ,
PROT_ISCSI = 0x2 ,
} ;
enum rport_type_fcoe {
FLOGI_VFPORT = 0x1 , /* 0xfffffe */
FDISC_VFPORT = 0x2 , /* 0xfffffe */
NS_VNPORT = 0x3 , /* 0xfffffc */
REG_FC4_VNPORT = 0x4 , /* any FC4 type VN_PORT */
REG_VNPORT = 0x5 , /* 0xfffxxx - non FC4 port in switch */
FDMI_VNPORT = 0x6 , /* 0xfffffa */
FAB_CTLR_VNPORT = 0x7 , /* 0xfffffd */
} ;
enum event_cause_fcoe {
PLOGI_ACC_RCVD = 0x01 ,
PLOGI_RJT_RCVD = 0x02 ,
PLOGI_RCVD = 0x03 ,
PLOGO_RCVD = 0x04 ,
PRLI_ACC_RCVD = 0x05 ,
PRLI_RJT_RCVD = 0x06 ,
PRLI_RCVD = 0x07 ,
PRLO_RCVD = 0x08 ,
NPORT_ID_CHGD = 0x09 ,
FLOGO_RCVD = 0x0a ,
CLR_VIRT_LNK_RCVD = 0x0b ,
FLOGI_ACC_RCVD = 0x0c ,
FLOGI_RJT_RCVD = 0x0d ,
FDISC_ACC_RCVD = 0x0e ,
FDISC_RJT_RCVD = 0x0f ,
FLOGI_TMO_MAX_RETRY = 0x10 ,
IMPL_LOGO_ADISC_ACC = 0x11 ,
IMPL_LOGO_ADISC_RJT = 0x12 ,
IMPL_LOGO_ADISC_CNFLT = 0x13 ,
PRLI_TMO = 0x14 ,
ADISC_TMO = 0x15 ,
RSCN_DEV_LOST = 0x16 ,
SCR_ACC_RCVD = 0x17 ,
ADISC_RJT_RCVD = 0x18 ,
LOGO_SNT = 0x19 ,
PROTO_ERR_IMPL_LOGO = 0x1a ,
} ;
enum fcoe_cmn_type {
FCOE_ELS ,
FCOE_CT ,
FCOE_SCSI_CMD ,
FCOE_UNSOL_ELS ,
} ;
enum fw_wr_stor_opcodes {
FW_RDEV_WR = 0x38 ,
FW_FCOE_ELS_CT_WR = 0x30 ,
FW_SCSI_WRITE_WR = 0x31 ,
FW_SCSI_READ_WR = 0x32 ,
FW_SCSI_CMD_WR = 0x33 ,
FW_SCSI_ABRT_CLS_WR = 0x34 ,
} ;
struct fw_rdev_wr {
__be32 op_to_immdlen ;
__be32 alloc_to_len16 ;
__be64 cookie ;
u8 protocol ;
u8 event_cause ;
u8 cur_state ;
u8 prev_state ;
__be32 flags_to_assoc_flowid ;
union rdev_entry {
struct fcoe_rdev_entry {
__be32 flowid ;
u8 protocol ;
u8 event_cause ;
u8 flags ;
u8 rjt_reason ;
u8 cur_login_st ;
u8 prev_login_st ;
__be16 rcv_fr_sz ;
u8 rd_xfer_rdy_to_rport_type ;
u8 vft_to_qos ;
u8 org_proc_assoc_to_acc_rsp_code ;
u8 enh_disc_to_tgt ;
u8 wwnn [ 8 ] ;
u8 wwpn [ 8 ] ;
__be16 iqid ;
u8 fc_oui [ 3 ] ;
u8 r_id [ 3 ] ;
} fcoe_rdev ;
struct iscsi_rdev_entry {
__be32 flowid ;
u8 protocol ;
u8 event_cause ;
u8 flags ;
u8 r3 ;
__be16 iscsi_opts ;
__be16 tcp_opts ;
__be16 ip_opts ;
__be16 max_rcv_len ;
__be16 max_snd_len ;
__be16 first_brst_len ;
__be16 max_brst_len ;
__be16 r4 ;
__be16 def_time2wait ;
__be16 def_time2ret ;
__be16 nop_out_intrvl ;
__be16 non_scsi_to ;
__be16 isid ;
__be16 tsid ;
__be16 port ;
__be16 tpgt ;
u8 r5 [ 6 ] ;
__be16 iqid ;
} iscsi_rdev ;
} u ;
} ;
# define FW_RDEV_WR_FLOWID_GET(x) (((x) >> 8) & 0xfffff)
# define FW_RDEV_WR_ASSOC_FLOWID_GET(x) (((x) >> 0) & 0xfffff)
# define FW_RDEV_WR_RPORT_TYPE_GET(x) (((x) >> 0) & 0x1f)
# define FW_RDEV_WR_NPIV_GET(x) (((x) >> 6) & 0x1)
# define FW_RDEV_WR_CLASS_GET(x) (((x) >> 4) & 0x3)
# define FW_RDEV_WR_TASK_RETRY_ID_GET(x) (((x) >> 5) & 0x1)
# define FW_RDEV_WR_RETRY_GET(x) (((x) >> 4) & 0x1)
# define FW_RDEV_WR_CONF_CMPL_GET(x) (((x) >> 3) & 0x1)
# define FW_RDEV_WR_INI_GET(x) (((x) >> 1) & 0x1)
# define FW_RDEV_WR_TGT_GET(x) (((x) >> 0) & 0x1)
struct fw_fcoe_els_ct_wr {
__be32 op_immdlen ;
__be32 flowid_len16 ;
2012-11-20 16:45:40 +04:00
u64 cookie ;
2012-11-15 21:11:18 +04:00
__be16 iqid ;
u8 tmo_val ;
u8 els_ct_type ;
u8 ctl_pri ;
u8 cp_en_class ;
__be16 xfer_cnt ;
u8 fl_to_sp ;
u8 l_id [ 3 ] ;
u8 r5 ;
u8 r_id [ 3 ] ;
__be64 rsp_dmaaddr ;
__be32 rsp_dmalen ;
__be32 r6 ;
} ;
# define FW_FCOE_ELS_CT_WR_OPCODE(x) ((x) << 24)
# define FW_FCOE_ELS_CT_WR_OPCODE_GET(x) (((x) >> 24) & 0xff)
# define FW_FCOE_ELS_CT_WR_IMMDLEN(x) ((x) << 0)
# define FW_FCOE_ELS_CT_WR_IMMDLEN_GET(x) (((x) >> 0) & 0xff)
# define FW_FCOE_ELS_CT_WR_SP(x) ((x) << 0)
struct fw_scsi_write_wr {
__be32 op_immdlen ;
__be32 flowid_len16 ;
2012-11-20 16:45:40 +04:00
u64 cookie ;
2012-11-15 21:11:18 +04:00
__be16 iqid ;
u8 tmo_val ;
u8 use_xfer_cnt ;
union fw_scsi_write_priv {
struct fcoe_write_priv {
u8 ctl_pri ;
u8 cp_en_class ;
u8 r3_lo [ 2 ] ;
} fcoe ;
struct iscsi_write_priv {
u8 r3 [ 4 ] ;
} iscsi ;
} u ;
__be32 xfer_cnt ;
__be32 ini_xfer_cnt ;
__be64 rsp_dmaaddr ;
__be32 rsp_dmalen ;
__be32 r4 ;
} ;
# define FW_SCSI_WRITE_WR_IMMDLEN(x) ((x) << 0)
struct fw_scsi_read_wr {
__be32 op_immdlen ;
__be32 flowid_len16 ;
2012-11-20 16:45:40 +04:00
u64 cookie ;
2012-11-15 21:11:18 +04:00
__be16 iqid ;
u8 tmo_val ;
u8 use_xfer_cnt ;
union fw_scsi_read_priv {
struct fcoe_read_priv {
u8 ctl_pri ;
u8 cp_en_class ;
u8 r3_lo [ 2 ] ;
} fcoe ;
struct iscsi_read_priv {
u8 r3 [ 4 ] ;
} iscsi ;
} u ;
__be32 xfer_cnt ;
__be32 ini_xfer_cnt ;
__be64 rsp_dmaaddr ;
__be32 rsp_dmalen ;
__be32 r4 ;
} ;
# define FW_SCSI_READ_WR_IMMDLEN(x) ((x) << 0)
struct fw_scsi_cmd_wr {
__be32 op_immdlen ;
__be32 flowid_len16 ;
2012-11-20 16:45:40 +04:00
u64 cookie ;
2012-11-15 21:11:18 +04:00
__be16 iqid ;
u8 tmo_val ;
u8 r3 ;
union fw_scsi_cmd_priv {
struct fcoe_cmd_priv {
u8 ctl_pri ;
u8 cp_en_class ;
u8 r4_lo [ 2 ] ;
} fcoe ;
struct iscsi_cmd_priv {
u8 r4 [ 4 ] ;
} iscsi ;
} u ;
u8 r5 [ 8 ] ;
__be64 rsp_dmaaddr ;
__be32 rsp_dmalen ;
__be32 r6 ;
} ;
# define FW_SCSI_CMD_WR_IMMDLEN(x) ((x) << 0)
# define SCSI_ABORT 0
# define SCSI_CLOSE 1
struct fw_scsi_abrt_cls_wr {
__be32 op_immdlen ;
__be32 flowid_len16 ;
2012-11-20 16:45:40 +04:00
u64 cookie ;
2012-11-15 21:11:18 +04:00
__be16 iqid ;
u8 tmo_val ;
u8 sub_opcode_to_chk_all_io ;
u8 r3 [ 4 ] ;
2012-11-20 16:45:40 +04:00
u64 t_cookie ;
2012-11-15 21:11:18 +04:00
} ;
# define FW_SCSI_ABRT_CLS_WR_SUB_OPCODE(x) ((x) << 2)
# define FW_SCSI_ABRT_CLS_WR_SUB_OPCODE_GET(x) (((x) >> 2) & 0x3f)
# define FW_SCSI_ABRT_CLS_WR_CHK_ALL_IO(x) ((x) << 0)
enum fw_cmd_stor_opcodes {
FW_FCOE_RES_INFO_CMD = 0x31 ,
FW_FCOE_LINK_CMD = 0x32 ,
FW_FCOE_VNP_CMD = 0x33 ,
FW_FCOE_SPARAMS_CMD = 0x35 ,
FW_FCOE_STATS_CMD = 0x37 ,
FW_FCOE_FCF_CMD = 0x38 ,
} ;
struct fw_fcoe_res_info_cmd {
__be32 op_to_read ;
__be32 retval_len16 ;
__be16 e_d_tov ;
__be16 r_a_tov_seq ;
__be16 r_a_tov_els ;
__be16 r_r_tov ;
__be32 max_xchgs ;
__be32 max_ssns ;
__be32 used_xchgs ;
__be32 used_ssns ;
__be32 max_fcfs ;
__be32 max_vnps ;
__be32 used_fcfs ;
__be32 used_vnps ;
} ;
struct fw_fcoe_link_cmd {
__be32 op_to_portid ;
__be32 retval_len16 ;
__be32 sub_opcode_fcfi ;
u8 r3 ;
u8 lstatus ;
__be16 flags ;
u8 r4 ;
u8 set_vlan ;
__be16 vlan_id ;
__be32 vnpi_pkd ;
__be16 r6 ;
u8 phy_mac [ 6 ] ;
u8 vnport_wwnn [ 8 ] ;
u8 vnport_wwpn [ 8 ] ;
} ;
# define FW_FCOE_LINK_CMD_PORTID(x) ((x) << 0)
# define FW_FCOE_LINK_CMD_PORTID_GET(x) (((x) >> 0) & 0xf)
# define FW_FCOE_LINK_CMD_SUB_OPCODE(x) ((x) << 24U)
# define FW_FCOE_LINK_CMD_FCFI(x) ((x) << 0)
# define FW_FCOE_LINK_CMD_FCFI_GET(x) (((x) >> 0) & 0xffffff)
# define FW_FCOE_LINK_CMD_VNPI_GET(x) (((x) >> 0) & 0xfffff)
struct fw_fcoe_vnp_cmd {
__be32 op_to_fcfi ;
__be32 alloc_to_len16 ;
__be32 gen_wwn_to_vnpi ;
__be32 vf_id ;
__be16 iqid ;
u8 vnport_mac [ 6 ] ;
u8 vnport_wwnn [ 8 ] ;
u8 vnport_wwpn [ 8 ] ;
u8 cmn_srv_parms [ 16 ] ;
u8 clsp_word_0_1 [ 8 ] ;
} ;
# define FW_FCOE_VNP_CMD_FCFI(x) ((x) << 0)
# define FW_FCOE_VNP_CMD_ALLOC (1U << 31)
# define FW_FCOE_VNP_CMD_FREE (1U << 30)
# define FW_FCOE_VNP_CMD_MODIFY (1U << 29)
# define FW_FCOE_VNP_CMD_GEN_WWN (1U << 22)
# define FW_FCOE_VNP_CMD_VFID_EN (1U << 20)
# define FW_FCOE_VNP_CMD_VNPI(x) ((x) << 0)
# define FW_FCOE_VNP_CMD_VNPI_GET(x) (((x) >> 0) & 0xfffff)
struct fw_fcoe_sparams_cmd {
__be32 op_to_portid ;
__be32 retval_len16 ;
u8 r3 [ 7 ] ;
u8 cos ;
u8 lport_wwnn [ 8 ] ;
u8 lport_wwpn [ 8 ] ;
u8 cmn_srv_parms [ 16 ] ;
u8 cls_srv_parms [ 16 ] ;
} ;
# define FW_FCOE_SPARAMS_CMD_PORTID(x) ((x) << 0)
struct fw_fcoe_stats_cmd {
__be32 op_to_flowid ;
__be32 free_to_len16 ;
union fw_fcoe_stats {
struct fw_fcoe_stats_ctl {
u8 nstats_port ;
u8 port_valid_ix ;
__be16 r6 ;
__be32 r7 ;
__be64 stat0 ;
__be64 stat1 ;
__be64 stat2 ;
__be64 stat3 ;
__be64 stat4 ;
__be64 stat5 ;
} ctl ;
struct fw_fcoe_port_stats {
__be64 tx_bcast_bytes ;
__be64 tx_bcast_frames ;
__be64 tx_mcast_bytes ;
__be64 tx_mcast_frames ;
__be64 tx_ucast_bytes ;
__be64 tx_ucast_frames ;
__be64 tx_drop_frames ;
__be64 tx_offload_bytes ;
__be64 tx_offload_frames ;
__be64 rx_bcast_bytes ;
__be64 rx_bcast_frames ;
__be64 rx_mcast_bytes ;
__be64 rx_mcast_frames ;
__be64 rx_ucast_bytes ;
__be64 rx_ucast_frames ;
__be64 rx_err_frames ;
} port_stats ;
struct fw_fcoe_fcf_stats {
__be32 fip_tx_bytes ;
__be32 fip_tx_fr ;
__be64 fcf_ka ;
__be64 mcast_adv_rcvd ;
__be16 ucast_adv_rcvd ;
__be16 sol_sent ;
__be16 vlan_req ;
__be16 vlan_rpl ;
__be16 clr_vlink ;
__be16 link_down ;
__be16 link_up ;
__be16 logo ;
__be16 flogi_req ;
__be16 flogi_rpl ;
__be16 fdisc_req ;
__be16 fdisc_rpl ;
__be16 fka_prd_chg ;
__be16 fc_map_chg ;
__be16 vfid_chg ;
u8 no_fka_req ;
u8 no_vnp ;
} fcf_stats ;
struct fw_fcoe_pcb_stats {
__be64 tx_bytes ;
__be64 tx_frames ;
__be64 rx_bytes ;
__be64 rx_frames ;
__be32 vnp_ka ;
__be32 unsol_els_rcvd ;
__be64 unsol_cmd_rcvd ;
__be16 implicit_logo ;
__be16 flogi_inv_sparm ;
__be16 fdisc_inv_sparm ;
__be16 flogi_rjt ;
__be16 fdisc_rjt ;
__be16 no_ssn ;
__be16 mac_flt_fail ;
__be16 inv_fr_rcvd ;
} pcb_stats ;
struct fw_fcoe_scb_stats {
__be64 tx_bytes ;
__be64 tx_frames ;
__be64 rx_bytes ;
__be64 rx_frames ;
__be32 host_abrt_req ;
__be32 adap_auto_abrt ;
__be32 adap_abrt_rsp ;
__be32 host_ios_req ;
__be16 ssn_offl_ios ;
__be16 ssn_not_rdy_ios ;
u8 rx_data_ddp_err ;
u8 ddp_flt_set_err ;
__be16 rx_data_fr_err ;
u8 bad_st_abrt_req ;
u8 no_io_abrt_req ;
u8 abort_tmo ;
u8 abort_tmo_2 ;
__be32 abort_req ;
u8 no_ppod_res_tmo ;
u8 bp_tmo ;
u8 adap_auto_cls ;
u8 no_io_cls_req ;
__be32 host_cls_req ;
__be64 unsol_cmd_rcvd ;
__be32 plogi_req_rcvd ;
__be32 prli_req_rcvd ;
__be16 logo_req_rcvd ;
__be16 prlo_req_rcvd ;
__be16 plogi_rjt_rcvd ;
__be16 prli_rjt_rcvd ;
__be32 adisc_req_rcvd ;
__be32 rscn_rcvd ;
__be32 rrq_req_rcvd ;
__be32 unsol_els_rcvd ;
u8 adisc_rjt_rcvd ;
u8 scr_rjt ;
u8 ct_rjt ;
u8 inval_bls_rcvd ;
__be32 ba_rjt_rcvd ;
} scb_stats ;
} u ;
} ;
# define FW_FCOE_STATS_CMD_FLOWID(x) ((x) << 0)
# define FW_FCOE_STATS_CMD_FREE (1U << 30)
# define FW_FCOE_STATS_CMD_NSTATS(x) ((x) << 4)
# define FW_FCOE_STATS_CMD_PORT(x) ((x) << 0)
# define FW_FCOE_STATS_CMD_PORT_VALID (1U << 7)
# define FW_FCOE_STATS_CMD_IX(x) ((x) << 0)
struct fw_fcoe_fcf_cmd {
__be32 op_to_fcfi ;
__be32 retval_len16 ;
__be16 priority_pkd ;
u8 mac [ 6 ] ;
u8 name_id [ 8 ] ;
u8 fabric [ 8 ] ;
__be16 vf_id ;
__be16 max_fcoe_size ;
u8 vlan_id ;
u8 fc_map [ 3 ] ;
__be32 fka_adv ;
__be32 r6 ;
u8 r7_hi ;
u8 fpma_to_portid ;
u8 spma_mac [ 6 ] ;
__be64 r8 ;
} ;
# define FW_FCOE_FCF_CMD_FCFI(x) ((x) << 0)
# define FW_FCOE_FCF_CMD_FCFI_GET(x) (((x) >> 0) & 0xfffff)
# define FW_FCOE_FCF_CMD_PRIORITY_GET(x) (((x) >> 0) & 0xff)
# define FW_FCOE_FCF_CMD_FPMA_GET(x) (((x) >> 6) & 0x1)
# define FW_FCOE_FCF_CMD_SPMA_GET(x) (((x) >> 5) & 0x1)
# define FW_FCOE_FCF_CMD_LOGIN_GET(x) (((x) >> 4) & 0x1)
# define FW_FCOE_FCF_CMD_PORTID_GET(x) (((x) >> 0) & 0xf)
# endif /* _T4FW_API_STOR_H_ */