root/drivers/scsi/bnx2fc/57xx_hsi_bnx2fc.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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  */
  21 struct 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  */
  36 struct 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  */
  53 struct 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 
  66 struct regpair {
  67         __le32 lo;
  68         __le32 hi;
  69 };
  70 
  71 
  72 /*
  73  * ABTS info $$KEEP_ENDIANNESS$$
  74  */
  75 struct 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  */
  86 struct 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  */
  96 struct 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  */
 109 struct 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  */
 120 struct 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  */
 130 struct 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  */
 149 struct 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  */
 163 struct fcoe_fcp_rsp_union {
 164         struct fcoe_fcp_rsp_payload payload;
 165         struct regpair reserved0;
 166 };
 167 
 168 /*
 169  * FC header $$KEEP_ENDIANNESS$$
 170  */
 171 struct 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  */
 189 struct 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  */
 198 union 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  */
 209 struct 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  */
 218 struct 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  */
 227 struct 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  */
 236 struct 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  */
 245 struct 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  */
 255 struct 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  */
 264 struct fcoe_fcp_cmd_payload {
 265         __le32 opaque[8];
 266 };
 267 
 268 
 269 
 270 
 271 
 272 /*
 273  * Fcp xfr rdy payload $$KEEP_ENDIANNESS$$
 274  */
 275 struct fcoe_fcp_xfr_rdy_payload {
 276         __le32 burst_len;
 277         __le32 data_ro;
 278 };
 279 
 280 
 281 /*
 282  * FC frame $$KEEP_ENDIANNESS$$
 283  */
 284 struct 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  */
 295 union fcoe_kcqe_params {
 296         __le32 reserved0[4];
 297 };
 298 
 299 /*
 300  * FCoE KCQ CQE $$KEEP_ENDIANNESS$$
 301  */
 302 struct 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  */
 325 struct 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  */
 339 struct 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  */
 364 struct 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  */
 380 struct 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  */
 393 struct 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  */
 409 struct 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  */
 424 struct 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  */
 466 struct 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  */
 485 struct 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  */
 514 struct 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  */
 525 struct 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  */
 534 struct 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  */
 545 union 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  */
 577 union 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  */
 586 struct 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  */
 595 struct 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  */
 616 struct 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  */
 628 union 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  */
 639 struct 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  */
 652 struct 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  */
 660 union 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  */
 672 struct 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  */
 702 struct 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  */
 710 struct 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  */
 722 struct 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  */
 747 struct 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  */
 755 struct 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  */
 763 struct 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  */
 782 struct 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  */
 794 struct 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  */
 808 struct fcoe_confqe {
 809         __le16 ox_id;
 810         __le16 rx_id;
 811         __le32 param;
 812 };
 813 
 814 
 815 /*
 816  * FCoE conection data base
 817  */
 818 struct 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  */
 834 struct 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  */
 848 struct 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  */
 858 struct 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  */
 867 struct 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  */
 898 struct 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  */
 913 struct 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  */
 927 struct 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  */
 936 struct 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  */
 945 struct 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  */
 960 struct 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  */
 970 struct 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  */
 981 struct 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  */
 992 struct 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__ */

/* [<][>][^][v][top][bottom][index][help] */