1*4882a593Smuzhiyun /* 57xx_hsi_bnx2fc.h: QLogic Linux FCoE offload driver. 2*4882a593Smuzhiyun * Handles operations such as session offload/upload etc, and manages 3*4882a593Smuzhiyun * session resources such as connection id and qp resources. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2008-2013 Broadcom Corporation 6*4882a593Smuzhiyun * Copyright (c) 2014-2016 QLogic Corporation 7*4882a593Smuzhiyun * Copyright (c) 2016-2017 Cavium Inc. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify 10*4882a593Smuzhiyun * it under the terms of the GNU General Public License as published by 11*4882a593Smuzhiyun * the Free Software Foundation. 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun */ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #ifndef __57XX_FCOE_HSI_LINUX_LE__ 16*4882a593Smuzhiyun #define __57XX_FCOE_HSI_LINUX_LE__ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* 19*4882a593Smuzhiyun * common data for all protocols 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun struct b577xx_doorbell_hdr { 22*4882a593Smuzhiyun u8 header; 23*4882a593Smuzhiyun #define B577XX_DOORBELL_HDR_RX (0x1<<0) 24*4882a593Smuzhiyun #define B577XX_DOORBELL_HDR_RX_SHIFT 0 25*4882a593Smuzhiyun #define B577XX_DOORBELL_HDR_DB_TYPE (0x1<<1) 26*4882a593Smuzhiyun #define B577XX_DOORBELL_HDR_DB_TYPE_SHIFT 1 27*4882a593Smuzhiyun #define B577XX_DOORBELL_HDR_DPM_SIZE (0x3<<2) 28*4882a593Smuzhiyun #define B577XX_DOORBELL_HDR_DPM_SIZE_SHIFT 2 29*4882a593Smuzhiyun #define B577XX_DOORBELL_HDR_CONN_TYPE (0xF<<4) 30*4882a593Smuzhiyun #define B577XX_DOORBELL_HDR_CONN_TYPE_SHIFT 4 31*4882a593Smuzhiyun }; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /* 34*4882a593Smuzhiyun * doorbell message sent to the chip 35*4882a593Smuzhiyun */ 36*4882a593Smuzhiyun struct b577xx_doorbell { 37*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 38*4882a593Smuzhiyun u16 zero_fill2; 39*4882a593Smuzhiyun u8 zero_fill1; 40*4882a593Smuzhiyun struct b577xx_doorbell_hdr header; 41*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 42*4882a593Smuzhiyun struct b577xx_doorbell_hdr header; 43*4882a593Smuzhiyun u8 zero_fill1; 44*4882a593Smuzhiyun u16 zero_fill2; 45*4882a593Smuzhiyun #endif 46*4882a593Smuzhiyun }; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /* 51*4882a593Smuzhiyun * doorbell message sent to the chip 52*4882a593Smuzhiyun */ 53*4882a593Smuzhiyun struct b577xx_doorbell_set_prod { 54*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 55*4882a593Smuzhiyun u16 prod; 56*4882a593Smuzhiyun u8 zero_fill1; 57*4882a593Smuzhiyun struct b577xx_doorbell_hdr header; 58*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 59*4882a593Smuzhiyun struct b577xx_doorbell_hdr header; 60*4882a593Smuzhiyun u8 zero_fill1; 61*4882a593Smuzhiyun u16 prod; 62*4882a593Smuzhiyun #endif 63*4882a593Smuzhiyun }; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun struct regpair { 67*4882a593Smuzhiyun __le32 lo; 68*4882a593Smuzhiyun __le32 hi; 69*4882a593Smuzhiyun }; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun /* 73*4882a593Smuzhiyun * ABTS info $$KEEP_ENDIANNESS$$ 74*4882a593Smuzhiyun */ 75*4882a593Smuzhiyun struct fcoe_abts_info { 76*4882a593Smuzhiyun __le16 aborted_task_id; 77*4882a593Smuzhiyun __le16 reserved0; 78*4882a593Smuzhiyun __le32 reserved1; 79*4882a593Smuzhiyun }; 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun /* 83*4882a593Smuzhiyun * Fixed size structure in order to plant it in Union structure 84*4882a593Smuzhiyun * $$KEEP_ENDIANNESS$$ 85*4882a593Smuzhiyun */ 86*4882a593Smuzhiyun struct fcoe_abts_rsp_union { 87*4882a593Smuzhiyun u8 r_ctl; 88*4882a593Smuzhiyun u8 rsrv[3]; 89*4882a593Smuzhiyun __le32 abts_rsp_payload[7]; 90*4882a593Smuzhiyun }; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /* 94*4882a593Smuzhiyun * 4 regs size $$KEEP_ENDIANNESS$$ 95*4882a593Smuzhiyun */ 96*4882a593Smuzhiyun struct fcoe_bd_ctx { 97*4882a593Smuzhiyun __le32 buf_addr_hi; 98*4882a593Smuzhiyun __le32 buf_addr_lo; 99*4882a593Smuzhiyun __le16 buf_len; 100*4882a593Smuzhiyun __le16 rsrv0; 101*4882a593Smuzhiyun __le16 flags; 102*4882a593Smuzhiyun __le16 rsrv1; 103*4882a593Smuzhiyun }; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* 107*4882a593Smuzhiyun * FCoE cached sges context $$KEEP_ENDIANNESS$$ 108*4882a593Smuzhiyun */ 109*4882a593Smuzhiyun struct fcoe_cached_sge_ctx { 110*4882a593Smuzhiyun struct regpair cur_buf_addr; 111*4882a593Smuzhiyun __le16 cur_buf_rem; 112*4882a593Smuzhiyun __le16 second_buf_rem; 113*4882a593Smuzhiyun struct regpair second_buf_addr; 114*4882a593Smuzhiyun }; 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun /* 118*4882a593Smuzhiyun * Cleanup info $$KEEP_ENDIANNESS$$ 119*4882a593Smuzhiyun */ 120*4882a593Smuzhiyun struct fcoe_cleanup_info { 121*4882a593Smuzhiyun __le16 cleaned_task_id; 122*4882a593Smuzhiyun __le16 rolled_tx_seq_cnt; 123*4882a593Smuzhiyun __le32 rolled_tx_data_offset; 124*4882a593Smuzhiyun }; 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun /* 128*4882a593Smuzhiyun * Fcp RSP flags $$KEEP_ENDIANNESS$$ 129*4882a593Smuzhiyun */ 130*4882a593Smuzhiyun struct fcoe_fcp_rsp_flags { 131*4882a593Smuzhiyun u8 flags; 132*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID (0x1<<0) 133*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0 134*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID (0x1<<1) 135*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1 136*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER (0x1<<2) 137*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT 2 138*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER (0x1<<3) 139*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT 3 140*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ (0x1<<4) 141*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT 4 142*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS (0x7<<5) 143*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT 5 144*4882a593Smuzhiyun }; 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun /* 147*4882a593Smuzhiyun * Fcp RSP payload $$KEEP_ENDIANNESS$$ 148*4882a593Smuzhiyun */ 149*4882a593Smuzhiyun struct fcoe_fcp_rsp_payload { 150*4882a593Smuzhiyun struct regpair reserved0; 151*4882a593Smuzhiyun __le32 fcp_resid; 152*4882a593Smuzhiyun u8 scsi_status_code; 153*4882a593Smuzhiyun struct fcoe_fcp_rsp_flags fcp_flags; 154*4882a593Smuzhiyun __le16 retry_delay_timer; 155*4882a593Smuzhiyun __le32 fcp_rsp_len; 156*4882a593Smuzhiyun __le32 fcp_sns_len; 157*4882a593Smuzhiyun }; 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun /* 160*4882a593Smuzhiyun * Fixed size structure in order to plant it in Union structure 161*4882a593Smuzhiyun * $$KEEP_ENDIANNESS$$ 162*4882a593Smuzhiyun */ 163*4882a593Smuzhiyun struct fcoe_fcp_rsp_union { 164*4882a593Smuzhiyun struct fcoe_fcp_rsp_payload payload; 165*4882a593Smuzhiyun struct regpair reserved0; 166*4882a593Smuzhiyun }; 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun /* 169*4882a593Smuzhiyun * FC header $$KEEP_ENDIANNESS$$ 170*4882a593Smuzhiyun */ 171*4882a593Smuzhiyun struct fcoe_fc_hdr { 172*4882a593Smuzhiyun u8 s_id[3]; 173*4882a593Smuzhiyun u8 cs_ctl; 174*4882a593Smuzhiyun u8 d_id[3]; 175*4882a593Smuzhiyun u8 r_ctl; 176*4882a593Smuzhiyun __le16 seq_cnt; 177*4882a593Smuzhiyun u8 df_ctl; 178*4882a593Smuzhiyun u8 seq_id; 179*4882a593Smuzhiyun u8 f_ctl[3]; 180*4882a593Smuzhiyun u8 type; 181*4882a593Smuzhiyun __le32 parameters; 182*4882a593Smuzhiyun __le16 rx_id; 183*4882a593Smuzhiyun __le16 ox_id; 184*4882a593Smuzhiyun }; 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun /* 187*4882a593Smuzhiyun * FC header union $$KEEP_ENDIANNESS$$ 188*4882a593Smuzhiyun */ 189*4882a593Smuzhiyun struct fcoe_mp_rsp_union { 190*4882a593Smuzhiyun struct fcoe_fc_hdr fc_hdr; 191*4882a593Smuzhiyun __le32 mp_payload_len; 192*4882a593Smuzhiyun __le32 rsrv; 193*4882a593Smuzhiyun }; 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun /* 196*4882a593Smuzhiyun * Completion information $$KEEP_ENDIANNESS$$ 197*4882a593Smuzhiyun */ 198*4882a593Smuzhiyun union fcoe_comp_flow_info { 199*4882a593Smuzhiyun struct fcoe_fcp_rsp_union fcp_rsp; 200*4882a593Smuzhiyun struct fcoe_abts_rsp_union abts_rsp; 201*4882a593Smuzhiyun struct fcoe_mp_rsp_union mp_rsp; 202*4882a593Smuzhiyun __le32 opaque[8]; 203*4882a593Smuzhiyun }; 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun /* 207*4882a593Smuzhiyun * External ABTS info $$KEEP_ENDIANNESS$$ 208*4882a593Smuzhiyun */ 209*4882a593Smuzhiyun struct fcoe_ext_abts_info { 210*4882a593Smuzhiyun __le32 rsrv0[6]; 211*4882a593Smuzhiyun struct fcoe_abts_info ctx; 212*4882a593Smuzhiyun }; 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun /* 216*4882a593Smuzhiyun * External cleanup info $$KEEP_ENDIANNESS$$ 217*4882a593Smuzhiyun */ 218*4882a593Smuzhiyun struct fcoe_ext_cleanup_info { 219*4882a593Smuzhiyun __le32 rsrv0[6]; 220*4882a593Smuzhiyun struct fcoe_cleanup_info ctx; 221*4882a593Smuzhiyun }; 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun /* 225*4882a593Smuzhiyun * Fcoe FW Tx sequence context $$KEEP_ENDIANNESS$$ 226*4882a593Smuzhiyun */ 227*4882a593Smuzhiyun struct fcoe_fw_tx_seq_ctx { 228*4882a593Smuzhiyun __le32 data_offset; 229*4882a593Smuzhiyun __le16 seq_cnt; 230*4882a593Smuzhiyun __le16 rsrv0; 231*4882a593Smuzhiyun }; 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun /* 234*4882a593Smuzhiyun * Fcoe external FW Tx sequence context $$KEEP_ENDIANNESS$$ 235*4882a593Smuzhiyun */ 236*4882a593Smuzhiyun struct fcoe_ext_fw_tx_seq_ctx { 237*4882a593Smuzhiyun __le32 rsrv0[6]; 238*4882a593Smuzhiyun struct fcoe_fw_tx_seq_ctx ctx; 239*4882a593Smuzhiyun }; 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun /* 243*4882a593Smuzhiyun * FCoE multiple sges context $$KEEP_ENDIANNESS$$ 244*4882a593Smuzhiyun */ 245*4882a593Smuzhiyun struct fcoe_mul_sges_ctx { 246*4882a593Smuzhiyun struct regpair cur_sge_addr; 247*4882a593Smuzhiyun __le16 cur_sge_off; 248*4882a593Smuzhiyun u8 cur_sge_idx; 249*4882a593Smuzhiyun u8 sgl_size; 250*4882a593Smuzhiyun }; 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun /* 253*4882a593Smuzhiyun * FCoE external multiple sges context $$KEEP_ENDIANNESS$$ 254*4882a593Smuzhiyun */ 255*4882a593Smuzhiyun struct fcoe_ext_mul_sges_ctx { 256*4882a593Smuzhiyun struct fcoe_mul_sges_ctx mul_sgl; 257*4882a593Smuzhiyun struct regpair rsrv0; 258*4882a593Smuzhiyun }; 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun /* 262*4882a593Smuzhiyun * FCP CMD payload $$KEEP_ENDIANNESS$$ 263*4882a593Smuzhiyun */ 264*4882a593Smuzhiyun struct fcoe_fcp_cmd_payload { 265*4882a593Smuzhiyun __le32 opaque[8]; 266*4882a593Smuzhiyun }; 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun /* 273*4882a593Smuzhiyun * Fcp xfr rdy payload $$KEEP_ENDIANNESS$$ 274*4882a593Smuzhiyun */ 275*4882a593Smuzhiyun struct fcoe_fcp_xfr_rdy_payload { 276*4882a593Smuzhiyun __le32 burst_len; 277*4882a593Smuzhiyun __le32 data_ro; 278*4882a593Smuzhiyun }; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun /* 282*4882a593Smuzhiyun * FC frame $$KEEP_ENDIANNESS$$ 283*4882a593Smuzhiyun */ 284*4882a593Smuzhiyun struct fcoe_fc_frame { 285*4882a593Smuzhiyun struct fcoe_fc_hdr fc_hdr; 286*4882a593Smuzhiyun __le32 reserved0[2]; 287*4882a593Smuzhiyun }; 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun /* 293*4882a593Smuzhiyun * FCoE KCQ CQE parameters $$KEEP_ENDIANNESS$$ 294*4882a593Smuzhiyun */ 295*4882a593Smuzhiyun union fcoe_kcqe_params { 296*4882a593Smuzhiyun __le32 reserved0[4]; 297*4882a593Smuzhiyun }; 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun /* 300*4882a593Smuzhiyun * FCoE KCQ CQE $$KEEP_ENDIANNESS$$ 301*4882a593Smuzhiyun */ 302*4882a593Smuzhiyun struct fcoe_kcqe { 303*4882a593Smuzhiyun __le32 fcoe_conn_id; 304*4882a593Smuzhiyun __le32 completion_status; 305*4882a593Smuzhiyun __le32 fcoe_conn_context_id; 306*4882a593Smuzhiyun union fcoe_kcqe_params params; 307*4882a593Smuzhiyun __le16 qe_self_seq; 308*4882a593Smuzhiyun u8 op_code; 309*4882a593Smuzhiyun u8 flags; 310*4882a593Smuzhiyun #define FCOE_KCQE_RESERVED0 (0x7<<0) 311*4882a593Smuzhiyun #define FCOE_KCQE_RESERVED0_SHIFT 0 312*4882a593Smuzhiyun #define FCOE_KCQE_RAMROD_COMPLETION (0x1<<3) 313*4882a593Smuzhiyun #define FCOE_KCQE_RAMROD_COMPLETION_SHIFT 3 314*4882a593Smuzhiyun #define FCOE_KCQE_LAYER_CODE (0x7<<4) 315*4882a593Smuzhiyun #define FCOE_KCQE_LAYER_CODE_SHIFT 4 316*4882a593Smuzhiyun #define FCOE_KCQE_LINKED_WITH_NEXT (0x1<<7) 317*4882a593Smuzhiyun #define FCOE_KCQE_LINKED_WITH_NEXT_SHIFT 7 318*4882a593Smuzhiyun }; 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun /* 323*4882a593Smuzhiyun * FCoE KWQE header $$KEEP_ENDIANNESS$$ 324*4882a593Smuzhiyun */ 325*4882a593Smuzhiyun struct fcoe_kwqe_header { 326*4882a593Smuzhiyun u8 op_code; 327*4882a593Smuzhiyun u8 flags; 328*4882a593Smuzhiyun #define FCOE_KWQE_HEADER_RESERVED0 (0xF<<0) 329*4882a593Smuzhiyun #define FCOE_KWQE_HEADER_RESERVED0_SHIFT 0 330*4882a593Smuzhiyun #define FCOE_KWQE_HEADER_LAYER_CODE (0x7<<4) 331*4882a593Smuzhiyun #define FCOE_KWQE_HEADER_LAYER_CODE_SHIFT 4 332*4882a593Smuzhiyun #define FCOE_KWQE_HEADER_RESERVED1 (0x1<<7) 333*4882a593Smuzhiyun #define FCOE_KWQE_HEADER_RESERVED1_SHIFT 7 334*4882a593Smuzhiyun }; 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun /* 337*4882a593Smuzhiyun * FCoE firmware init request 1 $$KEEP_ENDIANNESS$$ 338*4882a593Smuzhiyun */ 339*4882a593Smuzhiyun struct fcoe_kwqe_init1 { 340*4882a593Smuzhiyun __le16 num_tasks; 341*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 342*4882a593Smuzhiyun __le32 task_list_pbl_addr_lo; 343*4882a593Smuzhiyun __le32 task_list_pbl_addr_hi; 344*4882a593Smuzhiyun __le32 dummy_buffer_addr_lo; 345*4882a593Smuzhiyun __le32 dummy_buffer_addr_hi; 346*4882a593Smuzhiyun __le16 sq_num_wqes; 347*4882a593Smuzhiyun __le16 rq_num_wqes; 348*4882a593Smuzhiyun __le16 rq_buffer_log_size; 349*4882a593Smuzhiyun __le16 cq_num_wqes; 350*4882a593Smuzhiyun __le16 mtu; 351*4882a593Smuzhiyun u8 num_sessions_log; 352*4882a593Smuzhiyun u8 flags; 353*4882a593Smuzhiyun #define FCOE_KWQE_INIT1_LOG_PAGE_SIZE (0xF<<0) 354*4882a593Smuzhiyun #define FCOE_KWQE_INIT1_LOG_PAGE_SIZE_SHIFT 0 355*4882a593Smuzhiyun #define FCOE_KWQE_INIT1_LOG_CACHED_PBES_PER_FUNC (0x7<<4) 356*4882a593Smuzhiyun #define FCOE_KWQE_INIT1_LOG_CACHED_PBES_PER_FUNC_SHIFT 4 357*4882a593Smuzhiyun #define FCOE_KWQE_INIT1_RESERVED1 (0x1<<7) 358*4882a593Smuzhiyun #define FCOE_KWQE_INIT1_RESERVED1_SHIFT 7 359*4882a593Smuzhiyun }; 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun /* 362*4882a593Smuzhiyun * FCoE firmware init request 2 $$KEEP_ENDIANNESS$$ 363*4882a593Smuzhiyun */ 364*4882a593Smuzhiyun struct fcoe_kwqe_init2 { 365*4882a593Smuzhiyun u8 hsi_major_version; 366*4882a593Smuzhiyun u8 hsi_minor_version; 367*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 368*4882a593Smuzhiyun __le32 hash_tbl_pbl_addr_lo; 369*4882a593Smuzhiyun __le32 hash_tbl_pbl_addr_hi; 370*4882a593Smuzhiyun __le32 t2_hash_tbl_addr_lo; 371*4882a593Smuzhiyun __le32 t2_hash_tbl_addr_hi; 372*4882a593Smuzhiyun __le32 t2_ptr_hash_tbl_addr_lo; 373*4882a593Smuzhiyun __le32 t2_ptr_hash_tbl_addr_hi; 374*4882a593Smuzhiyun __le32 free_list_count; 375*4882a593Smuzhiyun }; 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun /* 378*4882a593Smuzhiyun * FCoE firmware init request 3 $$KEEP_ENDIANNESS$$ 379*4882a593Smuzhiyun */ 380*4882a593Smuzhiyun struct fcoe_kwqe_init3 { 381*4882a593Smuzhiyun __le16 reserved0; 382*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 383*4882a593Smuzhiyun __le32 error_bit_map_lo; 384*4882a593Smuzhiyun __le32 error_bit_map_hi; 385*4882a593Smuzhiyun u8 perf_config; 386*4882a593Smuzhiyun u8 reserved21[3]; 387*4882a593Smuzhiyun __le32 reserved2[4]; 388*4882a593Smuzhiyun }; 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun /* 391*4882a593Smuzhiyun * FCoE connection offload request 1 $$KEEP_ENDIANNESS$$ 392*4882a593Smuzhiyun */ 393*4882a593Smuzhiyun struct fcoe_kwqe_conn_offload1 { 394*4882a593Smuzhiyun __le16 fcoe_conn_id; 395*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 396*4882a593Smuzhiyun __le32 sq_addr_lo; 397*4882a593Smuzhiyun __le32 sq_addr_hi; 398*4882a593Smuzhiyun __le32 rq_pbl_addr_lo; 399*4882a593Smuzhiyun __le32 rq_pbl_addr_hi; 400*4882a593Smuzhiyun __le32 rq_first_pbe_addr_lo; 401*4882a593Smuzhiyun __le32 rq_first_pbe_addr_hi; 402*4882a593Smuzhiyun __le16 rq_prod; 403*4882a593Smuzhiyun __le16 reserved0; 404*4882a593Smuzhiyun }; 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun /* 407*4882a593Smuzhiyun * FCoE connection offload request 2 $$KEEP_ENDIANNESS$$ 408*4882a593Smuzhiyun */ 409*4882a593Smuzhiyun struct fcoe_kwqe_conn_offload2 { 410*4882a593Smuzhiyun __le16 tx_max_fc_pay_len; 411*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 412*4882a593Smuzhiyun __le32 cq_addr_lo; 413*4882a593Smuzhiyun __le32 cq_addr_hi; 414*4882a593Smuzhiyun __le32 xferq_addr_lo; 415*4882a593Smuzhiyun __le32 xferq_addr_hi; 416*4882a593Smuzhiyun __le32 conn_db_addr_lo; 417*4882a593Smuzhiyun __le32 conn_db_addr_hi; 418*4882a593Smuzhiyun __le32 reserved1; 419*4882a593Smuzhiyun }; 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun /* 422*4882a593Smuzhiyun * FCoE connection offload request 3 $$KEEP_ENDIANNESS$$ 423*4882a593Smuzhiyun */ 424*4882a593Smuzhiyun struct fcoe_kwqe_conn_offload3 { 425*4882a593Smuzhiyun __le16 vlan_tag; 426*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_VLAN_ID (0xFFF<<0) 427*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_VLAN_ID_SHIFT 0 428*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_CFI (0x1<<12) 429*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_CFI_SHIFT 12 430*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_PRIORITY (0x7<<13) 431*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_PRIORITY_SHIFT 13 432*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 433*4882a593Smuzhiyun u8 s_id[3]; 434*4882a593Smuzhiyun u8 tx_max_conc_seqs_c3; 435*4882a593Smuzhiyun u8 d_id[3]; 436*4882a593Smuzhiyun u8 flags; 437*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_MUL_N_PORT_IDS (0x1<<0) 438*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_MUL_N_PORT_IDS_SHIFT 0 439*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_E_D_TOV_RES (0x1<<1) 440*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_E_D_TOV_RES_SHIFT 1 441*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_CONT_INCR_SEQ_CNT (0x1<<2) 442*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_CONT_INCR_SEQ_CNT_SHIFT 2 443*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_CONF_REQ (0x1<<3) 444*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_CONF_REQ_SHIFT 3 445*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_REC_VALID (0x1<<4) 446*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_REC_VALID_SHIFT 4 447*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_C2_VALID (0x1<<5) 448*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_C2_VALID_SHIFT 5 449*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_ACK_0 (0x1<<6) 450*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_ACK_0_SHIFT 6 451*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_VLAN_FLAG (0x1<<7) 452*4882a593Smuzhiyun #define FCOE_KWQE_CONN_OFFLOAD3_B_VLAN_FLAG_SHIFT 7 453*4882a593Smuzhiyun __le32 reserved; 454*4882a593Smuzhiyun __le32 confq_first_pbe_addr_lo; 455*4882a593Smuzhiyun __le32 confq_first_pbe_addr_hi; 456*4882a593Smuzhiyun __le16 tx_total_conc_seqs; 457*4882a593Smuzhiyun __le16 rx_max_fc_pay_len; 458*4882a593Smuzhiyun __le16 rx_total_conc_seqs; 459*4882a593Smuzhiyun u8 rx_max_conc_seqs_c3; 460*4882a593Smuzhiyun u8 rx_open_seqs_exch_c3; 461*4882a593Smuzhiyun }; 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun /* 464*4882a593Smuzhiyun * FCoE connection offload request 4 $$KEEP_ENDIANNESS$$ 465*4882a593Smuzhiyun */ 466*4882a593Smuzhiyun struct fcoe_kwqe_conn_offload4 { 467*4882a593Smuzhiyun u8 e_d_tov_timer_val; 468*4882a593Smuzhiyun u8 reserved2; 469*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 470*4882a593Smuzhiyun u8 src_mac_addr_lo[2]; 471*4882a593Smuzhiyun u8 src_mac_addr_mid[2]; 472*4882a593Smuzhiyun u8 src_mac_addr_hi[2]; 473*4882a593Smuzhiyun u8 dst_mac_addr_hi[2]; 474*4882a593Smuzhiyun u8 dst_mac_addr_lo[2]; 475*4882a593Smuzhiyun u8 dst_mac_addr_mid[2]; 476*4882a593Smuzhiyun __le32 lcq_addr_lo; 477*4882a593Smuzhiyun __le32 lcq_addr_hi; 478*4882a593Smuzhiyun __le32 confq_pbl_base_addr_lo; 479*4882a593Smuzhiyun __le32 confq_pbl_base_addr_hi; 480*4882a593Smuzhiyun }; 481*4882a593Smuzhiyun 482*4882a593Smuzhiyun /* 483*4882a593Smuzhiyun * FCoE connection enable request $$KEEP_ENDIANNESS$$ 484*4882a593Smuzhiyun */ 485*4882a593Smuzhiyun struct fcoe_kwqe_conn_enable_disable { 486*4882a593Smuzhiyun __le16 reserved0; 487*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 488*4882a593Smuzhiyun u8 src_mac_addr_lo[2]; 489*4882a593Smuzhiyun u8 src_mac_addr_mid[2]; 490*4882a593Smuzhiyun u8 src_mac_addr_hi[2]; 491*4882a593Smuzhiyun u16 vlan_tag; 492*4882a593Smuzhiyun #define FCOE_KWQE_CONN_ENABLE_DISABLE_VLAN_ID (0xFFF<<0) 493*4882a593Smuzhiyun #define FCOE_KWQE_CONN_ENABLE_DISABLE_VLAN_ID_SHIFT 0 494*4882a593Smuzhiyun #define FCOE_KWQE_CONN_ENABLE_DISABLE_CFI (0x1<<12) 495*4882a593Smuzhiyun #define FCOE_KWQE_CONN_ENABLE_DISABLE_CFI_SHIFT 12 496*4882a593Smuzhiyun #define FCOE_KWQE_CONN_ENABLE_DISABLE_PRIORITY (0x7<<13) 497*4882a593Smuzhiyun #define FCOE_KWQE_CONN_ENABLE_DISABLE_PRIORITY_SHIFT 13 498*4882a593Smuzhiyun u8 dst_mac_addr_lo[2]; 499*4882a593Smuzhiyun u8 dst_mac_addr_mid[2]; 500*4882a593Smuzhiyun u8 dst_mac_addr_hi[2]; 501*4882a593Smuzhiyun __le16 reserved1; 502*4882a593Smuzhiyun u8 s_id[3]; 503*4882a593Smuzhiyun u8 vlan_flag; 504*4882a593Smuzhiyun u8 d_id[3]; 505*4882a593Smuzhiyun u8 reserved3; 506*4882a593Smuzhiyun __le32 context_id; 507*4882a593Smuzhiyun __le32 conn_id; 508*4882a593Smuzhiyun __le32 reserved4; 509*4882a593Smuzhiyun }; 510*4882a593Smuzhiyun 511*4882a593Smuzhiyun /* 512*4882a593Smuzhiyun * FCoE connection destroy request $$KEEP_ENDIANNESS$$ 513*4882a593Smuzhiyun */ 514*4882a593Smuzhiyun struct fcoe_kwqe_conn_destroy { 515*4882a593Smuzhiyun __le16 reserved0; 516*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 517*4882a593Smuzhiyun __le32 context_id; 518*4882a593Smuzhiyun __le32 conn_id; 519*4882a593Smuzhiyun __le32 reserved1[5]; 520*4882a593Smuzhiyun }; 521*4882a593Smuzhiyun 522*4882a593Smuzhiyun /* 523*4882a593Smuzhiyun * FCoe destroy request $$KEEP_ENDIANNESS$$ 524*4882a593Smuzhiyun */ 525*4882a593Smuzhiyun struct fcoe_kwqe_destroy { 526*4882a593Smuzhiyun __le16 reserved0; 527*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 528*4882a593Smuzhiyun __le32 reserved1[7]; 529*4882a593Smuzhiyun }; 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun /* 532*4882a593Smuzhiyun * FCoe statistics request $$KEEP_ENDIANNESS$$ 533*4882a593Smuzhiyun */ 534*4882a593Smuzhiyun struct fcoe_kwqe_stat { 535*4882a593Smuzhiyun __le16 reserved0; 536*4882a593Smuzhiyun struct fcoe_kwqe_header hdr; 537*4882a593Smuzhiyun __le32 stat_params_addr_lo; 538*4882a593Smuzhiyun __le32 stat_params_addr_hi; 539*4882a593Smuzhiyun __le32 reserved1[5]; 540*4882a593Smuzhiyun }; 541*4882a593Smuzhiyun 542*4882a593Smuzhiyun /* 543*4882a593Smuzhiyun * FCoE KWQ WQE $$KEEP_ENDIANNESS$$ 544*4882a593Smuzhiyun */ 545*4882a593Smuzhiyun union fcoe_kwqe { 546*4882a593Smuzhiyun struct fcoe_kwqe_init1 init1; 547*4882a593Smuzhiyun struct fcoe_kwqe_init2 init2; 548*4882a593Smuzhiyun struct fcoe_kwqe_init3 init3; 549*4882a593Smuzhiyun struct fcoe_kwqe_conn_offload1 conn_offload1; 550*4882a593Smuzhiyun struct fcoe_kwqe_conn_offload2 conn_offload2; 551*4882a593Smuzhiyun struct fcoe_kwqe_conn_offload3 conn_offload3; 552*4882a593Smuzhiyun struct fcoe_kwqe_conn_offload4 conn_offload4; 553*4882a593Smuzhiyun struct fcoe_kwqe_conn_enable_disable conn_enable_disable; 554*4882a593Smuzhiyun struct fcoe_kwqe_conn_destroy conn_destroy; 555*4882a593Smuzhiyun struct fcoe_kwqe_destroy destroy; 556*4882a593Smuzhiyun struct fcoe_kwqe_stat statistics; 557*4882a593Smuzhiyun }; 558*4882a593Smuzhiyun 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun 561*4882a593Smuzhiyun 562*4882a593Smuzhiyun 563*4882a593Smuzhiyun 564*4882a593Smuzhiyun 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun 570*4882a593Smuzhiyun 571*4882a593Smuzhiyun 572*4882a593Smuzhiyun 573*4882a593Smuzhiyun 574*4882a593Smuzhiyun /* 575*4882a593Smuzhiyun * TX SGL context $$KEEP_ENDIANNESS$$ 576*4882a593Smuzhiyun */ 577*4882a593Smuzhiyun union fcoe_sgl_union_ctx { 578*4882a593Smuzhiyun struct fcoe_cached_sge_ctx cached_sge; 579*4882a593Smuzhiyun struct fcoe_ext_mul_sges_ctx sgl; 580*4882a593Smuzhiyun __le32 opaque[5]; 581*4882a593Smuzhiyun }; 582*4882a593Smuzhiyun 583*4882a593Smuzhiyun /* 584*4882a593Smuzhiyun * Data-In/ELS/BLS information $$KEEP_ENDIANNESS$$ 585*4882a593Smuzhiyun */ 586*4882a593Smuzhiyun struct fcoe_read_flow_info { 587*4882a593Smuzhiyun union fcoe_sgl_union_ctx sgl_ctx; 588*4882a593Smuzhiyun __le32 rsrv0[3]; 589*4882a593Smuzhiyun }; 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun /* 593*4882a593Smuzhiyun * Fcoe stat context $$KEEP_ENDIANNESS$$ 594*4882a593Smuzhiyun */ 595*4882a593Smuzhiyun struct fcoe_s_stat_ctx { 596*4882a593Smuzhiyun u8 flags; 597*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_ACTIVE (0x1<<0) 598*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_ACTIVE_SHIFT 0 599*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_ACK_ABORT_SEQ_COND (0x1<<1) 600*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_ACK_ABORT_SEQ_COND_SHIFT 1 601*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_ABTS_PERFORMED (0x1<<2) 602*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_ABTS_PERFORMED_SHIFT 2 603*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_SEQ_TIMEOUT (0x1<<3) 604*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_SEQ_TIMEOUT_SHIFT 3 605*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_P_RJT (0x1<<4) 606*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_P_RJT_SHIFT 4 607*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_ACK_EOFT (0x1<<5) 608*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_ACK_EOFT_SHIFT 5 609*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_RSRV1 (0x3<<6) 610*4882a593Smuzhiyun #define FCOE_S_STAT_CTX_RSRV1_SHIFT 6 611*4882a593Smuzhiyun }; 612*4882a593Smuzhiyun 613*4882a593Smuzhiyun /* 614*4882a593Smuzhiyun * Fcoe rx seq context $$KEEP_ENDIANNESS$$ 615*4882a593Smuzhiyun */ 616*4882a593Smuzhiyun struct fcoe_rx_seq_ctx { 617*4882a593Smuzhiyun u8 seq_id; 618*4882a593Smuzhiyun struct fcoe_s_stat_ctx s_stat; 619*4882a593Smuzhiyun __le16 seq_cnt; 620*4882a593Smuzhiyun __le32 low_exp_ro; 621*4882a593Smuzhiyun __le32 high_exp_ro; 622*4882a593Smuzhiyun }; 623*4882a593Smuzhiyun 624*4882a593Smuzhiyun 625*4882a593Smuzhiyun /* 626*4882a593Smuzhiyun * Fcoe rx_wr union context $$KEEP_ENDIANNESS$$ 627*4882a593Smuzhiyun */ 628*4882a593Smuzhiyun union fcoe_rx_wr_union_ctx { 629*4882a593Smuzhiyun struct fcoe_read_flow_info read_info; 630*4882a593Smuzhiyun union fcoe_comp_flow_info comp_info; 631*4882a593Smuzhiyun __le32 opaque[8]; 632*4882a593Smuzhiyun }; 633*4882a593Smuzhiyun 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun 636*4882a593Smuzhiyun /* 637*4882a593Smuzhiyun * FCoE SQ element $$KEEP_ENDIANNESS$$ 638*4882a593Smuzhiyun */ 639*4882a593Smuzhiyun struct fcoe_sqe { 640*4882a593Smuzhiyun __le16 wqe; 641*4882a593Smuzhiyun #define FCOE_SQE_TASK_ID (0x7FFF<<0) 642*4882a593Smuzhiyun #define FCOE_SQE_TASK_ID_SHIFT 0 643*4882a593Smuzhiyun #define FCOE_SQE_TOGGLE_BIT (0x1<<15) 644*4882a593Smuzhiyun #define FCOE_SQE_TOGGLE_BIT_SHIFT 15 645*4882a593Smuzhiyun }; 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun 648*4882a593Smuzhiyun 649*4882a593Smuzhiyun /* 650*4882a593Smuzhiyun * 14 regs $$KEEP_ENDIANNESS$$ 651*4882a593Smuzhiyun */ 652*4882a593Smuzhiyun struct fcoe_tce_tx_only { 653*4882a593Smuzhiyun union fcoe_sgl_union_ctx sgl_ctx; 654*4882a593Smuzhiyun __le32 rsrv0; 655*4882a593Smuzhiyun }; 656*4882a593Smuzhiyun 657*4882a593Smuzhiyun /* 658*4882a593Smuzhiyun * 32 bytes (8 regs) used for TX only purposes $$KEEP_ENDIANNESS$$ 659*4882a593Smuzhiyun */ 660*4882a593Smuzhiyun union fcoe_tx_wr_rx_rd_union_ctx { 661*4882a593Smuzhiyun struct fcoe_fc_frame tx_frame; 662*4882a593Smuzhiyun struct fcoe_fcp_cmd_payload fcp_cmd; 663*4882a593Smuzhiyun struct fcoe_ext_cleanup_info cleanup; 664*4882a593Smuzhiyun struct fcoe_ext_abts_info abts; 665*4882a593Smuzhiyun struct fcoe_ext_fw_tx_seq_ctx tx_seq; 666*4882a593Smuzhiyun __le32 opaque[8]; 667*4882a593Smuzhiyun }; 668*4882a593Smuzhiyun 669*4882a593Smuzhiyun /* 670*4882a593Smuzhiyun * tce_tx_wr_rx_rd_const $$KEEP_ENDIANNESS$$ 671*4882a593Smuzhiyun */ 672*4882a593Smuzhiyun struct fcoe_tce_tx_wr_rx_rd_const { 673*4882a593Smuzhiyun u8 init_flags; 674*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE (0x7<<0) 675*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE_SHIFT 0 676*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_DEV_TYPE (0x1<<3) 677*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_DEV_TYPE_SHIFT 3 678*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_CLASS_TYPE (0x1<<4) 679*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_CLASS_TYPE_SHIFT 4 680*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE (0x3<<5) 681*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE_SHIFT 5 682*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_SUPPORT_REC_TOV (0x1<<7) 683*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_SUPPORT_REC_TOV_SHIFT 7 684*4882a593Smuzhiyun u8 tx_flags; 685*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_VALID (0x1<<0) 686*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_VALID_SHIFT 0 687*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_STATE (0xF<<1) 688*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_STATE_SHIFT 1 689*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV1 (0x1<<5) 690*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV1_SHIFT 5 691*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_SEQ_INIT (0x1<<6) 692*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_SEQ_INIT_SHIFT 6 693*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV2 (0x1<<7) 694*4882a593Smuzhiyun #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV2_SHIFT 7 695*4882a593Smuzhiyun __le16 rsrv3; 696*4882a593Smuzhiyun __le32 verify_tx_seq; 697*4882a593Smuzhiyun }; 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun /* 700*4882a593Smuzhiyun * tce_tx_wr_rx_rd $$KEEP_ENDIANNESS$$ 701*4882a593Smuzhiyun */ 702*4882a593Smuzhiyun struct fcoe_tce_tx_wr_rx_rd { 703*4882a593Smuzhiyun union fcoe_tx_wr_rx_rd_union_ctx union_ctx; 704*4882a593Smuzhiyun struct fcoe_tce_tx_wr_rx_rd_const const_ctx; 705*4882a593Smuzhiyun }; 706*4882a593Smuzhiyun 707*4882a593Smuzhiyun /* 708*4882a593Smuzhiyun * tce_rx_wr_tx_rd_const $$KEEP_ENDIANNESS$$ 709*4882a593Smuzhiyun */ 710*4882a593Smuzhiyun struct fcoe_tce_rx_wr_tx_rd_const { 711*4882a593Smuzhiyun __le32 data_2_trns; 712*4882a593Smuzhiyun __le32 init_flags; 713*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_CONST_CID (0xFFFFFF<<0) 714*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_CONST_CID_SHIFT 0 715*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_CONST_RSRV0 (0xFF<<24) 716*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_CONST_RSRV0_SHIFT 24 717*4882a593Smuzhiyun }; 718*4882a593Smuzhiyun 719*4882a593Smuzhiyun /* 720*4882a593Smuzhiyun * tce_rx_wr_tx_rd_var $$KEEP_ENDIANNESS$$ 721*4882a593Smuzhiyun */ 722*4882a593Smuzhiyun struct fcoe_tce_rx_wr_tx_rd_var { 723*4882a593Smuzhiyun __le16 rx_flags; 724*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV1 (0xF<<0) 725*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV1_SHIFT 0 726*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_NUM_RQ_WQE (0x7<<4) 727*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_NUM_RQ_WQE_SHIFT 4 728*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_CONF_REQ (0x1<<7) 729*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_CONF_REQ_SHIFT 7 730*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_STATE (0xF<<8) 731*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_STATE_SHIFT 8 732*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_EXP_FIRST_FRAME (0x1<<12) 733*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_EXP_FIRST_FRAME_SHIFT 12 734*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_SEQ_INIT (0x1<<13) 735*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_SEQ_INIT_SHIFT 13 736*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV2 (0x1<<14) 737*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV2_SHIFT 14 738*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_VALID (0x1<<15) 739*4882a593Smuzhiyun #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_VALID_SHIFT 15 740*4882a593Smuzhiyun __le16 rx_id; 741*4882a593Smuzhiyun struct fcoe_fcp_xfr_rdy_payload fcp_xfr_rdy; 742*4882a593Smuzhiyun }; 743*4882a593Smuzhiyun 744*4882a593Smuzhiyun /* 745*4882a593Smuzhiyun * tce_rx_wr_tx_rd $$KEEP_ENDIANNESS$$ 746*4882a593Smuzhiyun */ 747*4882a593Smuzhiyun struct fcoe_tce_rx_wr_tx_rd { 748*4882a593Smuzhiyun struct fcoe_tce_rx_wr_tx_rd_const const_ctx; 749*4882a593Smuzhiyun struct fcoe_tce_rx_wr_tx_rd_var var_ctx; 750*4882a593Smuzhiyun }; 751*4882a593Smuzhiyun 752*4882a593Smuzhiyun /* 753*4882a593Smuzhiyun * tce_rx_only $$KEEP_ENDIANNESS$$ 754*4882a593Smuzhiyun */ 755*4882a593Smuzhiyun struct fcoe_tce_rx_only { 756*4882a593Smuzhiyun struct fcoe_rx_seq_ctx rx_seq_ctx; 757*4882a593Smuzhiyun union fcoe_rx_wr_union_ctx union_ctx; 758*4882a593Smuzhiyun }; 759*4882a593Smuzhiyun 760*4882a593Smuzhiyun /* 761*4882a593Smuzhiyun * task_ctx_entry $$KEEP_ENDIANNESS$$ 762*4882a593Smuzhiyun */ 763*4882a593Smuzhiyun struct fcoe_task_ctx_entry { 764*4882a593Smuzhiyun struct fcoe_tce_tx_only txwr_only; 765*4882a593Smuzhiyun struct fcoe_tce_tx_wr_rx_rd txwr_rxrd; 766*4882a593Smuzhiyun struct fcoe_tce_rx_wr_tx_rd rxwr_txrd; 767*4882a593Smuzhiyun struct fcoe_tce_rx_only rxwr_only; 768*4882a593Smuzhiyun }; 769*4882a593Smuzhiyun 770*4882a593Smuzhiyun 771*4882a593Smuzhiyun 772*4882a593Smuzhiyun 773*4882a593Smuzhiyun 774*4882a593Smuzhiyun 775*4882a593Smuzhiyun 776*4882a593Smuzhiyun 777*4882a593Smuzhiyun 778*4882a593Smuzhiyun 779*4882a593Smuzhiyun /* 780*4882a593Smuzhiyun * FCoE XFRQ element $$KEEP_ENDIANNESS$$ 781*4882a593Smuzhiyun */ 782*4882a593Smuzhiyun struct fcoe_xfrqe { 783*4882a593Smuzhiyun __le16 wqe; 784*4882a593Smuzhiyun #define FCOE_XFRQE_TASK_ID (0x7FFF<<0) 785*4882a593Smuzhiyun #define FCOE_XFRQE_TASK_ID_SHIFT 0 786*4882a593Smuzhiyun #define FCOE_XFRQE_TOGGLE_BIT (0x1<<15) 787*4882a593Smuzhiyun #define FCOE_XFRQE_TOGGLE_BIT_SHIFT 15 788*4882a593Smuzhiyun }; 789*4882a593Smuzhiyun 790*4882a593Smuzhiyun 791*4882a593Smuzhiyun /* 792*4882a593Smuzhiyun * fcoe rx doorbell message sent to the chip $$KEEP_ENDIANNESS$$ 793*4882a593Smuzhiyun */ 794*4882a593Smuzhiyun struct b577xx_fcoe_rx_doorbell { 795*4882a593Smuzhiyun struct b577xx_doorbell_hdr hdr; 796*4882a593Smuzhiyun u8 params; 797*4882a593Smuzhiyun #define B577XX_FCOE_RX_DOORBELL_NEGATIVE_ARM (0x1F<<0) 798*4882a593Smuzhiyun #define B577XX_FCOE_RX_DOORBELL_NEGATIVE_ARM_SHIFT 0 799*4882a593Smuzhiyun #define B577XX_FCOE_RX_DOORBELL_OPCODE (0x7<<5) 800*4882a593Smuzhiyun #define B577XX_FCOE_RX_DOORBELL_OPCODE_SHIFT 5 801*4882a593Smuzhiyun __le16 doorbell_cq_cons; 802*4882a593Smuzhiyun }; 803*4882a593Smuzhiyun 804*4882a593Smuzhiyun 805*4882a593Smuzhiyun /* 806*4882a593Smuzhiyun * FCoE CONFQ element $$KEEP_ENDIANNESS$$ 807*4882a593Smuzhiyun */ 808*4882a593Smuzhiyun struct fcoe_confqe { 809*4882a593Smuzhiyun __le16 ox_id; 810*4882a593Smuzhiyun __le16 rx_id; 811*4882a593Smuzhiyun __le32 param; 812*4882a593Smuzhiyun }; 813*4882a593Smuzhiyun 814*4882a593Smuzhiyun 815*4882a593Smuzhiyun /* 816*4882a593Smuzhiyun * FCoE connection data base 817*4882a593Smuzhiyun */ 818*4882a593Smuzhiyun struct fcoe_conn_db { 819*4882a593Smuzhiyun #if defined(__BIG_ENDIAN) 820*4882a593Smuzhiyun u16 rsrv0; 821*4882a593Smuzhiyun u16 rq_prod; 822*4882a593Smuzhiyun #elif defined(__LITTLE_ENDIAN) 823*4882a593Smuzhiyun u16 rq_prod; 824*4882a593Smuzhiyun u16 rsrv0; 825*4882a593Smuzhiyun #endif 826*4882a593Smuzhiyun u32 rsrv1; 827*4882a593Smuzhiyun struct regpair cq_arm; 828*4882a593Smuzhiyun }; 829*4882a593Smuzhiyun 830*4882a593Smuzhiyun 831*4882a593Smuzhiyun /* 832*4882a593Smuzhiyun * FCoE CQ element $$KEEP_ENDIANNESS$$ 833*4882a593Smuzhiyun */ 834*4882a593Smuzhiyun struct fcoe_cqe { 835*4882a593Smuzhiyun __le16 wqe; 836*4882a593Smuzhiyun #define FCOE_CQE_CQE_INFO (0x3FFF<<0) 837*4882a593Smuzhiyun #define FCOE_CQE_CQE_INFO_SHIFT 0 838*4882a593Smuzhiyun #define FCOE_CQE_CQE_TYPE (0x1<<14) 839*4882a593Smuzhiyun #define FCOE_CQE_CQE_TYPE_SHIFT 14 840*4882a593Smuzhiyun #define FCOE_CQE_TOGGLE_BIT (0x1<<15) 841*4882a593Smuzhiyun #define FCOE_CQE_TOGGLE_BIT_SHIFT 15 842*4882a593Smuzhiyun }; 843*4882a593Smuzhiyun 844*4882a593Smuzhiyun 845*4882a593Smuzhiyun /* 846*4882a593Smuzhiyun * FCoE error/warning reporting entry $$KEEP_ENDIANNESS$$ 847*4882a593Smuzhiyun */ 848*4882a593Smuzhiyun struct fcoe_partial_err_report_entry { 849*4882a593Smuzhiyun __le32 err_warn_bitmap_lo; 850*4882a593Smuzhiyun __le32 err_warn_bitmap_hi; 851*4882a593Smuzhiyun __le32 tx_buf_off; 852*4882a593Smuzhiyun __le32 rx_buf_off; 853*4882a593Smuzhiyun }; 854*4882a593Smuzhiyun 855*4882a593Smuzhiyun /* 856*4882a593Smuzhiyun * FCoE error/warning reporting entry $$KEEP_ENDIANNESS$$ 857*4882a593Smuzhiyun */ 858*4882a593Smuzhiyun struct fcoe_err_report_entry { 859*4882a593Smuzhiyun struct fcoe_partial_err_report_entry data; 860*4882a593Smuzhiyun struct fcoe_fc_hdr fc_hdr; 861*4882a593Smuzhiyun }; 862*4882a593Smuzhiyun 863*4882a593Smuzhiyun 864*4882a593Smuzhiyun /* 865*4882a593Smuzhiyun * FCoE hash table entry (32 bytes) $$KEEP_ENDIANNESS$$ 866*4882a593Smuzhiyun */ 867*4882a593Smuzhiyun struct fcoe_hash_table_entry { 868*4882a593Smuzhiyun u8 s_id_0; 869*4882a593Smuzhiyun u8 s_id_1; 870*4882a593Smuzhiyun u8 s_id_2; 871*4882a593Smuzhiyun u8 d_id_0; 872*4882a593Smuzhiyun u8 d_id_1; 873*4882a593Smuzhiyun u8 d_id_2; 874*4882a593Smuzhiyun __le16 dst_mac_addr_hi; 875*4882a593Smuzhiyun __le16 dst_mac_addr_mid; 876*4882a593Smuzhiyun __le16 dst_mac_addr_lo; 877*4882a593Smuzhiyun __le16 src_mac_addr_hi; 878*4882a593Smuzhiyun __le16 vlan_id; 879*4882a593Smuzhiyun __le16 src_mac_addr_lo; 880*4882a593Smuzhiyun __le16 src_mac_addr_mid; 881*4882a593Smuzhiyun u8 vlan_flag; 882*4882a593Smuzhiyun u8 reserved0; 883*4882a593Smuzhiyun __le16 reserved1; 884*4882a593Smuzhiyun __le32 reserved2; 885*4882a593Smuzhiyun __le32 field_id; 886*4882a593Smuzhiyun #define FCOE_HASH_TABLE_ENTRY_CID (0xFFFFFF<<0) 887*4882a593Smuzhiyun #define FCOE_HASH_TABLE_ENTRY_CID_SHIFT 0 888*4882a593Smuzhiyun #define FCOE_HASH_TABLE_ENTRY_RESERVED3 (0x7F<<24) 889*4882a593Smuzhiyun #define FCOE_HASH_TABLE_ENTRY_RESERVED3_SHIFT 24 890*4882a593Smuzhiyun #define FCOE_HASH_TABLE_ENTRY_VALID (0x1<<31) 891*4882a593Smuzhiyun #define FCOE_HASH_TABLE_ENTRY_VALID_SHIFT 31 892*4882a593Smuzhiyun }; 893*4882a593Smuzhiyun 894*4882a593Smuzhiyun 895*4882a593Smuzhiyun /* 896*4882a593Smuzhiyun * FCoE LCQ element $$KEEP_ENDIANNESS$$ 897*4882a593Smuzhiyun */ 898*4882a593Smuzhiyun struct fcoe_lcqe { 899*4882a593Smuzhiyun __le32 wqe; 900*4882a593Smuzhiyun #define FCOE_LCQE_TASK_ID (0xFFFF<<0) 901*4882a593Smuzhiyun #define FCOE_LCQE_TASK_ID_SHIFT 0 902*4882a593Smuzhiyun #define FCOE_LCQE_LCQE_TYPE (0xFF<<16) 903*4882a593Smuzhiyun #define FCOE_LCQE_LCQE_TYPE_SHIFT 16 904*4882a593Smuzhiyun #define FCOE_LCQE_RESERVED (0xFF<<24) 905*4882a593Smuzhiyun #define FCOE_LCQE_RESERVED_SHIFT 24 906*4882a593Smuzhiyun }; 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun 909*4882a593Smuzhiyun 910*4882a593Smuzhiyun /* 911*4882a593Smuzhiyun * FCoE pending work request CQE $$KEEP_ENDIANNESS$$ 912*4882a593Smuzhiyun */ 913*4882a593Smuzhiyun struct fcoe_pend_wq_cqe { 914*4882a593Smuzhiyun __le16 wqe; 915*4882a593Smuzhiyun #define FCOE_PEND_WQ_CQE_TASK_ID (0x3FFF<<0) 916*4882a593Smuzhiyun #define FCOE_PEND_WQ_CQE_TASK_ID_SHIFT 0 917*4882a593Smuzhiyun #define FCOE_PEND_WQ_CQE_CQE_TYPE (0x1<<14) 918*4882a593Smuzhiyun #define FCOE_PEND_WQ_CQE_CQE_TYPE_SHIFT 14 919*4882a593Smuzhiyun #define FCOE_PEND_WQ_CQE_TOGGLE_BIT (0x1<<15) 920*4882a593Smuzhiyun #define FCOE_PEND_WQ_CQE_TOGGLE_BIT_SHIFT 15 921*4882a593Smuzhiyun }; 922*4882a593Smuzhiyun 923*4882a593Smuzhiyun 924*4882a593Smuzhiyun /* 925*4882a593Smuzhiyun * FCoE RX statistics parameters section#0 $$KEEP_ENDIANNESS$$ 926*4882a593Smuzhiyun */ 927*4882a593Smuzhiyun struct fcoe_rx_stat_params_section0 { 928*4882a593Smuzhiyun __le32 fcoe_rx_pkt_cnt; 929*4882a593Smuzhiyun __le32 fcoe_rx_byte_cnt; 930*4882a593Smuzhiyun }; 931*4882a593Smuzhiyun 932*4882a593Smuzhiyun 933*4882a593Smuzhiyun /* 934*4882a593Smuzhiyun * FCoE RX statistics parameters section#1 $$KEEP_ENDIANNESS$$ 935*4882a593Smuzhiyun */ 936*4882a593Smuzhiyun struct fcoe_rx_stat_params_section1 { 937*4882a593Smuzhiyun __le32 fcoe_ver_cnt; 938*4882a593Smuzhiyun __le32 fcoe_rx_drop_pkt_cnt; 939*4882a593Smuzhiyun }; 940*4882a593Smuzhiyun 941*4882a593Smuzhiyun 942*4882a593Smuzhiyun /* 943*4882a593Smuzhiyun * FCoE RX statistics parameters section#2 $$KEEP_ENDIANNESS$$ 944*4882a593Smuzhiyun */ 945*4882a593Smuzhiyun struct fcoe_rx_stat_params_section2 { 946*4882a593Smuzhiyun __le32 fc_crc_cnt; 947*4882a593Smuzhiyun __le32 eofa_del_cnt; 948*4882a593Smuzhiyun __le32 miss_frame_cnt; 949*4882a593Smuzhiyun __le32 seq_timeout_cnt; 950*4882a593Smuzhiyun __le32 drop_seq_cnt; 951*4882a593Smuzhiyun __le32 fcoe_rx_drop_pkt_cnt; 952*4882a593Smuzhiyun __le32 fcp_rx_pkt_cnt; 953*4882a593Smuzhiyun __le32 reserved0; 954*4882a593Smuzhiyun }; 955*4882a593Smuzhiyun 956*4882a593Smuzhiyun 957*4882a593Smuzhiyun /* 958*4882a593Smuzhiyun * FCoE TX statistics parameters $$KEEP_ENDIANNESS$$ 959*4882a593Smuzhiyun */ 960*4882a593Smuzhiyun struct fcoe_tx_stat_params { 961*4882a593Smuzhiyun __le32 fcoe_tx_pkt_cnt; 962*4882a593Smuzhiyun __le32 fcoe_tx_byte_cnt; 963*4882a593Smuzhiyun __le32 fcp_tx_pkt_cnt; 964*4882a593Smuzhiyun __le32 reserved0; 965*4882a593Smuzhiyun }; 966*4882a593Smuzhiyun 967*4882a593Smuzhiyun /* 968*4882a593Smuzhiyun * FCoE statistics parameters $$KEEP_ENDIANNESS$$ 969*4882a593Smuzhiyun */ 970*4882a593Smuzhiyun struct fcoe_statistics_params { 971*4882a593Smuzhiyun struct fcoe_tx_stat_params tx_stat; 972*4882a593Smuzhiyun struct fcoe_rx_stat_params_section0 rx_stat0; 973*4882a593Smuzhiyun struct fcoe_rx_stat_params_section1 rx_stat1; 974*4882a593Smuzhiyun struct fcoe_rx_stat_params_section2 rx_stat2; 975*4882a593Smuzhiyun }; 976*4882a593Smuzhiyun 977*4882a593Smuzhiyun 978*4882a593Smuzhiyun /* 979*4882a593Smuzhiyun * FCoE t2 hash table entry (64 bytes) $$KEEP_ENDIANNESS$$ 980*4882a593Smuzhiyun */ 981*4882a593Smuzhiyun struct fcoe_t2_hash_table_entry { 982*4882a593Smuzhiyun struct fcoe_hash_table_entry data; 983*4882a593Smuzhiyun struct regpair next; 984*4882a593Smuzhiyun struct regpair reserved0[3]; 985*4882a593Smuzhiyun }; 986*4882a593Smuzhiyun 987*4882a593Smuzhiyun 988*4882a593Smuzhiyun 989*4882a593Smuzhiyun /* 990*4882a593Smuzhiyun * FCoE unsolicited CQE $$KEEP_ENDIANNESS$$ 991*4882a593Smuzhiyun */ 992*4882a593Smuzhiyun struct fcoe_unsolicited_cqe { 993*4882a593Smuzhiyun __le16 wqe; 994*4882a593Smuzhiyun #define FCOE_UNSOLICITED_CQE_SUBTYPE (0x3<<0) 995*4882a593Smuzhiyun #define FCOE_UNSOLICITED_CQE_SUBTYPE_SHIFT 0 996*4882a593Smuzhiyun #define FCOE_UNSOLICITED_CQE_PKT_LEN (0xFFF<<2) 997*4882a593Smuzhiyun #define FCOE_UNSOLICITED_CQE_PKT_LEN_SHIFT 2 998*4882a593Smuzhiyun #define FCOE_UNSOLICITED_CQE_CQE_TYPE (0x1<<14) 999*4882a593Smuzhiyun #define FCOE_UNSOLICITED_CQE_CQE_TYPE_SHIFT 14 1000*4882a593Smuzhiyun #define FCOE_UNSOLICITED_CQE_TOGGLE_BIT (0x1<<15) 1001*4882a593Smuzhiyun #define FCOE_UNSOLICITED_CQE_TOGGLE_BIT_SHIFT 15 1002*4882a593Smuzhiyun }; 1003*4882a593Smuzhiyun 1004*4882a593Smuzhiyun #endif /* __57XX_FCOE_HSI_LINUX_LE__ */ 1005