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