| .. | .. |
|---|
| 66 | 66 | #include "bnx2fc_constants.h" |
|---|
| 67 | 67 | |
|---|
| 68 | 68 | #define BNX2FC_NAME "bnx2fc" |
|---|
| 69 | | -#define BNX2FC_VERSION "2.11.8" |
|---|
| 69 | +#define BNX2FC_VERSION "2.12.13" |
|---|
| 70 | 70 | |
|---|
| 71 | 71 | #define PFX "bnx2fc: " |
|---|
| 72 | 72 | |
|---|
| .. | .. |
|---|
| 75 | 75 | #define BNX2X_DOORBELL_PCI_BAR 2 |
|---|
| 76 | 76 | |
|---|
| 77 | 77 | #define BNX2FC_MAX_BD_LEN 0xffff |
|---|
| 78 | | -#define BNX2FC_BD_SPLIT_SZ 0x8000 |
|---|
| 79 | | -#define BNX2FC_MAX_BDS_PER_CMD 256 |
|---|
| 78 | +#define BNX2FC_BD_SPLIT_SZ 0xffff |
|---|
| 79 | +#define BNX2FC_MAX_BDS_PER_CMD 255 |
|---|
| 80 | +#define BNX2FC_FW_MAX_BDS_PER_CMD 255 |
|---|
| 80 | 81 | |
|---|
| 81 | 82 | #define BNX2FC_SQ_WQES_MAX 256 |
|---|
| 82 | 83 | |
|---|
| .. | .. |
|---|
| 433 | 434 | void (*cb_func)(struct bnx2fc_els_cb_arg *cb_arg); |
|---|
| 434 | 435 | struct bnx2fc_els_cb_arg *cb_arg; |
|---|
| 435 | 436 | struct delayed_work timeout_work; /* timer for ULP timeouts */ |
|---|
| 436 | | - struct completion tm_done; |
|---|
| 437 | | - int wait_for_comp; |
|---|
| 437 | + struct completion abts_done; |
|---|
| 438 | + struct completion cleanup_done; |
|---|
| 439 | + int wait_for_abts_comp; |
|---|
| 440 | + int wait_for_cleanup_comp; |
|---|
| 438 | 441 | u16 xid; |
|---|
| 439 | 442 | struct fcoe_err_report_entry err_entry; |
|---|
| 440 | 443 | struct fcoe_task_ctx_entry *task; |
|---|
| .. | .. |
|---|
| 455 | 458 | #define BNX2FC_FLAG_ELS_TIMEOUT 0xb |
|---|
| 456 | 459 | #define BNX2FC_FLAG_CMD_LOST 0xc |
|---|
| 457 | 460 | #define BNX2FC_FLAG_SRR_SENT 0xd |
|---|
| 461 | +#define BNX2FC_FLAG_ISSUE_CLEANUP_REQ 0xe |
|---|
| 458 | 462 | u8 rec_retry; |
|---|
| 459 | 463 | u8 srr_retry; |
|---|
| 460 | 464 | u32 srr_offset; |
|---|
| .. | .. |
|---|
| 478 | 482 | struct bnx2fc_work { |
|---|
| 479 | 483 | struct list_head list; |
|---|
| 480 | 484 | struct bnx2fc_rport *tgt; |
|---|
| 485 | + struct fcoe_task_ctx_entry *task; |
|---|
| 486 | + unsigned char rq_data[BNX2FC_RQ_BUF_SZ]; |
|---|
| 481 | 487 | u16 wqe; |
|---|
| 488 | + u8 num_rq; |
|---|
| 482 | 489 | }; |
|---|
| 483 | 490 | struct bnx2fc_unsol_els { |
|---|
| 484 | 491 | struct fc_lport *lport; |
|---|
| .. | .. |
|---|
| 546 | 553 | enum fc_rport_event event); |
|---|
| 547 | 554 | void bnx2fc_process_scsi_cmd_compl(struct bnx2fc_cmd *io_req, |
|---|
| 548 | 555 | struct fcoe_task_ctx_entry *task, |
|---|
| 549 | | - u8 num_rq); |
|---|
| 556 | + u8 num_rq, unsigned char *rq_data); |
|---|
| 550 | 557 | void bnx2fc_process_cleanup_compl(struct bnx2fc_cmd *io_req, |
|---|
| 551 | 558 | struct fcoe_task_ctx_entry *task, |
|---|
| 552 | 559 | u8 num_rq); |
|---|
| .. | .. |
|---|
| 555 | 562 | u8 num_rq); |
|---|
| 556 | 563 | void bnx2fc_process_tm_compl(struct bnx2fc_cmd *io_req, |
|---|
| 557 | 564 | struct fcoe_task_ctx_entry *task, |
|---|
| 558 | | - u8 num_rq); |
|---|
| 565 | + u8 num_rq, unsigned char *rq_data); |
|---|
| 559 | 566 | void bnx2fc_process_els_compl(struct bnx2fc_cmd *els_req, |
|---|
| 560 | 567 | struct fcoe_task_ctx_entry *task, |
|---|
| 561 | 568 | u8 num_rq); |
|---|
| .. | .. |
|---|
| 573 | 580 | void *arg, u32 timeout); |
|---|
| 574 | 581 | void bnx2fc_arm_cq(struct bnx2fc_rport *tgt); |
|---|
| 575 | 582 | int bnx2fc_process_new_cqes(struct bnx2fc_rport *tgt); |
|---|
| 576 | | -void bnx2fc_process_cq_compl(struct bnx2fc_rport *tgt, u16 wqe); |
|---|
| 583 | +void bnx2fc_process_cq_compl(struct bnx2fc_rport *tgt, u16 wqe, |
|---|
| 584 | + unsigned char *rq_data, u8 num_rq, |
|---|
| 585 | + struct fcoe_task_ctx_entry *task); |
|---|
| 577 | 586 | struct bnx2fc_rport *bnx2fc_tgt_lookup(struct fcoe_port *port, |
|---|
| 578 | 587 | u32 port_id); |
|---|
| 579 | 588 | void bnx2fc_process_l2_frame_compl(struct bnx2fc_rport *tgt, |
|---|