1 /** 2 * Copyright (C) 2005 - 2013 Emulex 3 * All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License version 2 7 * as published by the Free Software Foundation. The full GNU General 8 * Public License is included in this distribution in the file called COPYING. 9 * 10 * Contact Information: 11 * linux-drivers@emulex.com 12 * 13 * Emulex 14 * 3333 Susan Street 15 * Costa Mesa, CA 92626 16 */ 17 18 #ifndef BEISCSI_CMDS_H 19 #define BEISCSI_CMDS_H 20 21 /** 22 * The driver sends configuration and managements command requests to the 23 * firmware in the BE. These requests are communicated to the processor 24 * using Work Request Blocks (WRBs) submitted to the MCC-WRB ring or via one 25 * WRB inside a MAILBOX. 26 * The commands are serviced by the ARM processor in the OneConnect's MPU. 27 */ 28 struct be_sge { 29 u32 pa_lo; 30 u32 pa_hi; 31 u32 len; 32 }; 33 34 #define MCC_WRB_SGE_CNT_SHIFT 3 /* bits 3 - 7 of dword 0 */ 35 #define MCC_WRB_SGE_CNT_MASK 0x1F /* bits 3 - 7 of dword 0 */ 36 struct be_mcc_wrb { 37 u32 embedded; /* dword 0 */ 38 u32 payload_length; /* dword 1 */ 39 u32 tag0; /* dword 2 */ 40 u32 tag1; /* dword 3 */ 41 u32 rsvd; /* dword 4 */ 42 union { 43 #define EMBED_MBX_MAX_PAYLOAD_SIZE 220 44 u8 embedded_payload[236]; /* used by embedded cmds */ 45 struct be_sge sgl[19]; /* used by non-embedded cmds */ 46 } payload; 47 }; 48 49 #define CQE_FLAGS_VALID_MASK (1 << 31) 50 #define CQE_FLAGS_ASYNC_MASK (1 << 30) 51 #define CQE_FLAGS_COMPLETED_MASK (1 << 28) 52 #define CQE_FLAGS_CONSUMED_MASK (1 << 27) 53 54 /* Completion Status */ 55 #define MCC_STATUS_SUCCESS 0x0 56 #define MCC_STATUS_FAILED 0x1 57 #define MCC_STATUS_ILLEGAL_REQUEST 0x2 58 #define MCC_STATUS_ILLEGAL_FIELD 0x3 59 #define MCC_STATUS_INSUFFICIENT_BUFFER 0x4 60 61 #define CQE_STATUS_COMPL_MASK 0xFFFF 62 #define CQE_STATUS_COMPL_SHIFT 0 /* bits 0 - 15 */ 63 #define CQE_STATUS_EXTD_MASK 0xFFFF 64 #define CQE_STATUS_EXTD_SHIFT 16 /* bits 0 - 15 */ 65 #define CQE_STATUS_ADDL_MASK 0xFF00 66 #define CQE_STATUS_MASK 0xFF 67 #define CQE_STATUS_ADDL_SHIFT 0x08 68 #define CQE_STATUS_WRB_MASK 0xFF0000 69 #define CQE_STATUS_WRB_SHIFT 16 70 #define BEISCSI_HOST_MBX_TIMEOUT (110 * 1000) 71 #define BEISCSI_FW_MBX_TIMEOUT 100 72 73 /* MBOX Command VER */ 74 #define MBX_CMD_VER2 0x02 75 76 struct be_mcc_compl { 77 u32 status; /* dword 0 */ 78 u32 tag0; /* dword 1 */ 79 u32 tag1; /* dword 2 */ 80 u32 flags; /* dword 3 */ 81 }; 82 83 /********* Mailbox door bell *************/ 84 /** 85 * Used for driver communication with the FW. 86 * The software must write this register twice to post any command. First, 87 * it writes the register with hi=1 and the upper bits of the physical address 88 * for the MAILBOX structure. Software must poll the ready bit until this 89 * is acknowledged. Then, sotware writes the register with hi=0 with the lower 90 * bits in the address. It must poll the ready bit until the command is 91 * complete. Upon completion, the MAILBOX will contain a valid completion 92 * queue entry. 93 */ 94 #define MPU_MAILBOX_DB_OFFSET 0x160 95 #define MPU_MAILBOX_DB_RDY_MASK 0x1 /* bit 0 */ 96 #define MPU_MAILBOX_DB_HI_MASK 0x2 /* bit 1 */ 97 98 /********** MPU semphore ******************/ 99 #define MPU_EP_SEMAPHORE_OFFSET 0xac 100 #define EP_SEMAPHORE_POST_STAGE_MASK 0x0000FFFF 101 #define EP_SEMAPHORE_POST_ERR_MASK 0x1 102 #define EP_SEMAPHORE_POST_ERR_SHIFT 31 103 104 /********** MCC door bell ************/ 105 #define DB_MCCQ_OFFSET 0x140 106 #define DB_MCCQ_RING_ID_MASK 0x7FF /* bits 0 - 10 */ 107 /* Number of entries posted */ 108 #define DB_MCCQ_NUM_POSTED_SHIFT 16 /* bits 16 - 29 */ 109 110 /* MPU semphore POST stage values */ 111 #define POST_STAGE_ARMFW_RDY 0xc000 /* FW is done with POST */ 112 113 /** 114 * When the async bit of mcc_compl is set, the last 4 bytes of 115 * mcc_compl is interpreted as follows: 116 */ 117 #define ASYNC_TRAILER_EVENT_CODE_SHIFT 8 /* bits 8 - 15 */ 118 #define ASYNC_TRAILER_EVENT_CODE_MASK 0xFF 119 #define ASYNC_EVENT_CODE_LINK_STATE 0x1 120 struct be_async_event_trailer { 121 u32 code; 122 }; 123 124 enum { 125 ASYNC_EVENT_LINK_DOWN = 0x0, 126 ASYNC_EVENT_LINK_UP = 0x1, 127 ASYNC_EVENT_LOGICAL = 0x2 128 }; 129 130 /** 131 * When the event code of an async trailer is link-state, the mcc_compl 132 * must be interpreted as follows 133 */ 134 struct be_async_event_link_state { 135 u8 physical_port; 136 u8 port_link_status; 137 u8 port_duplex; 138 u8 port_speed; 139 #define BEISCSI_PHY_LINK_FAULT_NONE 0x00 140 #define BEISCSI_PHY_LINK_FAULT_LOCAL 0x01 141 #define BEISCSI_PHY_LINK_FAULT_REMOTE 0x02 142 u8 port_fault; 143 u8 rsvd0[7]; 144 struct be_async_event_trailer trailer; 145 } __packed; 146 147 struct be_mcc_mailbox { 148 struct be_mcc_wrb wrb; 149 struct be_mcc_compl compl; 150 }; 151 152 /* Type of subsystems supported by FW */ 153 #define CMD_SUBSYSTEM_COMMON 0x1 154 #define CMD_SUBSYSTEM_ISCSI 0x2 155 #define CMD_SUBSYSTEM_ETH 0x3 156 #define CMD_SUBSYSTEM_ISCSI_INI 0x6 157 #define CMD_COMMON_TCP_UPLOAD 0x1 158 159 /** 160 * List of common opcodes subsystem CMD_SUBSYSTEM_COMMON 161 * These opcodes are unique for each subsystem defined above 162 */ 163 #define OPCODE_COMMON_CQ_CREATE 12 164 #define OPCODE_COMMON_EQ_CREATE 13 165 #define OPCODE_COMMON_MCC_CREATE 21 166 #define OPCODE_COMMON_ADD_TEMPLATE_HEADER_BUFFERS 24 167 #define OPCODE_COMMON_REMOVE_TEMPLATE_HEADER_BUFFERS 25 168 #define OPCODE_COMMON_GET_CNTL_ATTRIBUTES 32 169 #define OPCODE_COMMON_GET_FW_VERSION 35 170 #define OPCODE_COMMON_MODIFY_EQ_DELAY 41 171 #define OPCODE_COMMON_FIRMWARE_CONFIG 42 172 #define OPCODE_COMMON_MCC_DESTROY 53 173 #define OPCODE_COMMON_CQ_DESTROY 54 174 #define OPCODE_COMMON_EQ_DESTROY 55 175 #define OPCODE_COMMON_QUERY_FIRMWARE_CONFIG 58 176 #define OPCODE_COMMON_FUNCTION_RESET 61 177 178 /** 179 * LIST of opcodes that are common between Initiator and Target 180 * used by CMD_SUBSYSTEM_ISCSI 181 * These opcodes are unique for each subsystem defined above 182 */ 183 #define OPCODE_COMMON_ISCSI_CFG_POST_SGL_PAGES 2 184 #define OPCODE_COMMON_ISCSI_CFG_REMOVE_SGL_PAGES 3 185 #define OPCODE_COMMON_ISCSI_NTWK_GET_NIC_CONFIG 7 186 #define OPCODE_COMMON_ISCSI_NTWK_SET_VLAN 14 187 #define OPCODE_COMMON_ISCSI_NTWK_CONFIG_STATELESS_IP_ADDR 17 188 #define OPCODE_COMMON_ISCSI_NTWK_REL_STATELESS_IP_ADDR 18 189 #define OPCODE_COMMON_ISCSI_NTWK_MODIFY_IP_ADDR 21 190 #define OPCODE_COMMON_ISCSI_NTWK_GET_DEFAULT_GATEWAY 22 191 #define OPCODE_COMMON_ISCSI_NTWK_MODIFY_DEFAULT_GATEWAY 23 192 #define OPCODE_COMMON_ISCSI_NTWK_GET_ALL_IF_ID 24 193 #define OPCODE_COMMON_ISCSI_NTWK_GET_IF_INFO 25 194 #define OPCODE_COMMON_ISCSI_SET_FRAGNUM_BITS_FOR_SGL_CRA 61 195 #define OPCODE_COMMON_ISCSI_DEFQ_CREATE 64 196 #define OPCODE_COMMON_ISCSI_DEFQ_DESTROY 65 197 #define OPCODE_COMMON_ISCSI_WRBQ_CREATE 66 198 #define OPCODE_COMMON_ISCSI_WRBQ_DESTROY 67 199 200 struct be_cmd_req_hdr { 201 u8 opcode; /* dword 0 */ 202 u8 subsystem; /* dword 0 */ 203 u8 port_number; /* dword 0 */ 204 u8 domain; /* dword 0 */ 205 u32 timeout; /* dword 1 */ 206 u32 request_length; /* dword 2 */ 207 u8 version; /* dword 3 */ 208 u8 rsvd0[3]; /* dword 3 */ 209 }; 210 211 struct be_cmd_resp_hdr { 212 u32 info; /* dword 0 */ 213 u32 status; /* dword 1 */ 214 u32 response_length; /* dword 2 */ 215 u32 actual_resp_len; /* dword 3 */ 216 }; 217 218 struct phys_addr { 219 u32 lo; 220 u32 hi; 221 }; 222 223 struct virt_addr { 224 u32 lo; 225 u32 hi; 226 }; 227 /************************** 228 * BE Command definitions * 229 **************************/ 230 231 /** 232 * Pseudo amap definition in which each bit of the actual structure is defined 233 * as a byte - used to calculate offset/shift/mask of each field 234 */ 235 struct amap_eq_context { 236 u8 cidx[13]; /* dword 0 */ 237 u8 rsvd0[3]; /* dword 0 */ 238 u8 epidx[13]; /* dword 0 */ 239 u8 valid; /* dword 0 */ 240 u8 rsvd1; /* dword 0 */ 241 u8 size; /* dword 0 */ 242 u8 pidx[13]; /* dword 1 */ 243 u8 rsvd2[3]; /* dword 1 */ 244 u8 pd[10]; /* dword 1 */ 245 u8 count[3]; /* dword 1 */ 246 u8 solevent; /* dword 1 */ 247 u8 stalled; /* dword 1 */ 248 u8 armed; /* dword 1 */ 249 u8 rsvd3[4]; /* dword 2 */ 250 u8 func[8]; /* dword 2 */ 251 u8 rsvd4; /* dword 2 */ 252 u8 delaymult[10]; /* dword 2 */ 253 u8 rsvd5[2]; /* dword 2 */ 254 u8 phase[2]; /* dword 2 */ 255 u8 nodelay; /* dword 2 */ 256 u8 rsvd6[4]; /* dword 2 */ 257 u8 rsvd7[32]; /* dword 3 */ 258 } __packed; 259 260 struct be_cmd_req_eq_create { 261 struct be_cmd_req_hdr hdr; /* dw[4] */ 262 u16 num_pages; /* sword */ 263 u16 rsvd0; /* sword */ 264 u8 context[sizeof(struct amap_eq_context) / 8]; /* dw[4] */ 265 struct phys_addr pages[8]; 266 } __packed; 267 268 struct be_cmd_resp_eq_create { 269 struct be_cmd_resp_hdr resp_hdr; 270 u16 eq_id; /* sword */ 271 u16 rsvd0; /* sword */ 272 } __packed; 273 274 struct mgmt_chap_format { 275 u32 flags; 276 u8 intr_chap_name[256]; 277 u8 intr_secret[16]; 278 u8 target_chap_name[256]; 279 u8 target_secret[16]; 280 u16 intr_chap_name_length; 281 u16 intr_secret_length; 282 u16 target_chap_name_length; 283 u16 target_secret_length; 284 } __packed; 285 286 struct mgmt_auth_method_format { 287 u8 auth_method_type; 288 u8 padding[3]; 289 struct mgmt_chap_format chap; 290 } __packed; 291 292 struct mgmt_conn_login_options { 293 u8 flags; 294 u8 header_digest; 295 u8 data_digest; 296 u8 rsvd0; 297 u32 max_recv_datasegment_len_ini; 298 u32 max_recv_datasegment_len_tgt; 299 u32 tcp_mss; 300 u32 tcp_window_size; 301 struct mgmt_auth_method_format auth_data; 302 } __packed; 303 304 struct ip_addr_format { 305 u16 size_of_structure; 306 u8 reserved; 307 u8 ip_type; 308 u8 addr[16]; 309 u32 rsvd0; 310 } __packed; 311 312 struct mgmt_conn_info { 313 u32 connection_handle; 314 u32 connection_status; 315 u16 src_port; 316 u16 dest_port; 317 u16 dest_port_redirected; 318 u16 cid; 319 u32 estimated_throughput; 320 struct ip_addr_format src_ipaddr; 321 struct ip_addr_format dest_ipaddr; 322 struct ip_addr_format dest_ipaddr_redirected; 323 struct mgmt_conn_login_options negotiated_login_options; 324 } __packed; 325 326 struct mgmt_session_login_options { 327 u8 flags; 328 u8 error_recovery_level; 329 u16 rsvd0; 330 u32 first_burst_length; 331 u32 max_burst_length; 332 u16 max_connections; 333 u16 max_outstanding_r2t; 334 u16 default_time2wait; 335 u16 default_time2retain; 336 } __packed; 337 338 struct mgmt_session_info { 339 u32 session_handle; 340 u32 status; 341 u8 isid[6]; 342 u16 tsih; 343 u32 session_flags; 344 u16 conn_count; 345 u16 pad; 346 u8 target_name[224]; 347 u8 initiator_iscsiname[224]; 348 struct mgmt_session_login_options negotiated_login_options; 349 struct mgmt_conn_info conn_list[1]; 350 } __packed; 351 352 struct be_cmd_get_session_req { 353 struct be_cmd_req_hdr hdr; 354 u32 session_handle; 355 } __packed; 356 357 struct be_cmd_get_session_resp { 358 struct be_cmd_resp_hdr hdr; 359 struct mgmt_session_info session_info; 360 } __packed; 361 362 struct mac_addr { 363 u16 size_of_structure; 364 u8 addr[ETH_ALEN]; 365 } __packed; 366 367 struct be_cmd_get_boot_target_req { 368 struct be_cmd_req_hdr hdr; 369 } __packed; 370 371 struct be_cmd_get_boot_target_resp { 372 struct be_cmd_resp_hdr hdr; 373 u32 boot_session_count; 374 int boot_session_handle; 375 }; 376 377 struct be_cmd_reopen_session_req { 378 struct be_cmd_req_hdr hdr; 379 #define BE_REOPEN_ALL_SESSIONS 0x00 380 #define BE_REOPEN_BOOT_SESSIONS 0x01 381 #define BE_REOPEN_A_SESSION 0x02 382 u16 reopen_type; 383 u16 rsvd; 384 u32 session_handle; 385 } __packed; 386 387 struct be_cmd_reopen_session_resp { 388 struct be_cmd_resp_hdr hdr; 389 u32 rsvd; 390 u32 session_handle; 391 } __packed; 392 393 394 struct be_cmd_mac_query_req { 395 struct be_cmd_req_hdr hdr; 396 u8 type; 397 u8 permanent; 398 u16 if_id; 399 } __packed; 400 401 struct be_cmd_get_mac_resp { 402 struct be_cmd_resp_hdr hdr; 403 struct mac_addr mac; 404 }; 405 406 struct be_ip_addr_subnet_format { 407 u16 size_of_structure; 408 u8 ip_type; 409 u8 ipv6_prefix_length; 410 u8 addr[16]; 411 u8 subnet_mask[16]; 412 u32 rsvd0; 413 } __packed; 414 415 struct be_cmd_get_if_info_req { 416 struct be_cmd_req_hdr hdr; 417 u32 interface_hndl; 418 u32 ip_type; 419 } __packed; 420 421 struct be_cmd_get_if_info_resp { 422 struct be_cmd_req_hdr hdr; 423 u32 interface_hndl; 424 u32 vlan_priority; 425 u32 ip_addr_count; 426 u32 dhcp_state; 427 struct be_ip_addr_subnet_format ip_addr; 428 } __packed; 429 430 struct be_ip_addr_record { 431 u32 action; 432 u32 interface_hndl; 433 struct be_ip_addr_subnet_format ip_addr; 434 u32 status; 435 } __packed; 436 437 struct be_ip_addr_record_params { 438 u32 record_entry_count; 439 struct be_ip_addr_record ip_record; 440 } __packed; 441 442 struct be_cmd_set_ip_addr_req { 443 struct be_cmd_req_hdr hdr; 444 struct be_ip_addr_record_params ip_params; 445 } __packed; 446 447 448 struct be_cmd_set_dhcp_req { 449 struct be_cmd_req_hdr hdr; 450 u32 interface_hndl; 451 u32 ip_type; 452 u32 flags; 453 u32 retry_count; 454 } __packed; 455 456 struct be_cmd_rel_dhcp_req { 457 struct be_cmd_req_hdr hdr; 458 u32 interface_hndl; 459 u32 ip_type; 460 } __packed; 461 462 struct be_cmd_set_def_gateway_req { 463 struct be_cmd_req_hdr hdr; 464 u32 action; 465 struct ip_addr_format ip_addr; 466 } __packed; 467 468 struct be_cmd_get_def_gateway_req { 469 struct be_cmd_req_hdr hdr; 470 u32 ip_type; 471 } __packed; 472 473 struct be_cmd_get_def_gateway_resp { 474 struct be_cmd_req_hdr hdr; 475 struct ip_addr_format ip_addr; 476 } __packed; 477 478 #define BEISCSI_VLAN_DISABLE 0xFFFF 479 struct be_cmd_set_vlan_req { 480 struct be_cmd_req_hdr hdr; 481 u32 interface_hndl; 482 u32 vlan_priority; 483 } __packed; 484 /******************** Create CQ ***************************/ 485 /** 486 * Pseudo amap definition in which each bit of the actual structure is defined 487 * as a byte - used to calculate offset/shift/mask of each field 488 */ 489 struct amap_cq_context { 490 u8 cidx[11]; /* dword 0 */ 491 u8 rsvd0; /* dword 0 */ 492 u8 coalescwm[2]; /* dword 0 */ 493 u8 nodelay; /* dword 0 */ 494 u8 epidx[11]; /* dword 0 */ 495 u8 rsvd1; /* dword 0 */ 496 u8 count[2]; /* dword 0 */ 497 u8 valid; /* dword 0 */ 498 u8 solevent; /* dword 0 */ 499 u8 eventable; /* dword 0 */ 500 u8 pidx[11]; /* dword 1 */ 501 u8 rsvd2; /* dword 1 */ 502 u8 pd[10]; /* dword 1 */ 503 u8 eqid[8]; /* dword 1 */ 504 u8 stalled; /* dword 1 */ 505 u8 armed; /* dword 1 */ 506 u8 rsvd3[4]; /* dword 2 */ 507 u8 func[8]; /* dword 2 */ 508 u8 rsvd4[20]; /* dword 2 */ 509 u8 rsvd5[32]; /* dword 3 */ 510 } __packed; 511 512 struct amap_cq_context_v2 { 513 u8 rsvd0[12]; /* dword 0 */ 514 u8 coalescwm[2]; /* dword 0 */ 515 u8 nodelay; /* dword 0 */ 516 u8 rsvd1[12]; /* dword 0 */ 517 u8 count[2]; /* dword 0 */ 518 u8 valid; /* dword 0 */ 519 u8 rsvd2; /* dword 0 */ 520 u8 eventable; /* dword 0 */ 521 u8 eqid[16]; /* dword 1 */ 522 u8 rsvd3[15]; /* dword 1 */ 523 u8 armed; /* dword 1 */ 524 u8 cqecount[16];/* dword 2 */ 525 u8 rsvd4[16]; /* dword 2 */ 526 u8 rsvd5[32]; /* dword 3 */ 527 }; 528 529 struct be_cmd_req_cq_create { 530 struct be_cmd_req_hdr hdr; 531 u16 num_pages; 532 u8 page_size; 533 u8 rsvd0; 534 u8 context[sizeof(struct amap_cq_context) / 8]; 535 struct phys_addr pages[4]; 536 } __packed; 537 538 struct be_cmd_resp_cq_create { 539 struct be_cmd_resp_hdr hdr; 540 u16 cq_id; 541 u16 rsvd0; 542 } __packed; 543 544 /******************** Create MCCQ ***************************/ 545 /** 546 * Pseudo amap definition in which each bit of the actual structure is defined 547 * as a byte - used to calculate offset/shift/mask of each field 548 */ 549 struct amap_mcc_context { 550 u8 con_index[14]; 551 u8 rsvd0[2]; 552 u8 ring_size[4]; 553 u8 fetch_wrb; 554 u8 fetch_r2t; 555 u8 cq_id[10]; 556 u8 prod_index[14]; 557 u8 fid[8]; 558 u8 pdid[9]; 559 u8 valid; 560 u8 rsvd1[32]; 561 u8 rsvd2[32]; 562 } __packed; 563 564 struct be_cmd_req_mcc_create { 565 struct be_cmd_req_hdr hdr; 566 u16 num_pages; 567 u16 rsvd0; 568 u8 context[sizeof(struct amap_mcc_context) / 8]; 569 struct phys_addr pages[8]; 570 } __packed; 571 572 struct be_cmd_resp_mcc_create { 573 struct be_cmd_resp_hdr hdr; 574 u16 id; 575 u16 rsvd0; 576 } __packed; 577 578 /******************** Q Destroy ***************************/ 579 /* Type of Queue to be destroyed */ 580 enum { 581 QTYPE_EQ = 1, 582 QTYPE_CQ, 583 QTYPE_MCCQ, 584 QTYPE_WRBQ, 585 QTYPE_DPDUQ, 586 QTYPE_SGL 587 }; 588 589 struct be_cmd_req_q_destroy { 590 struct be_cmd_req_hdr hdr; 591 u16 id; 592 u16 bypass_flush; /* valid only for rx q destroy */ 593 } __packed; 594 595 struct macaddr { 596 u8 byte[ETH_ALEN]; 597 }; 598 599 struct be_cmd_req_mcast_mac_config { 600 struct be_cmd_req_hdr hdr; 601 u16 num_mac; 602 u8 promiscuous; 603 u8 interface_id; 604 struct macaddr mac[32]; 605 } __packed; 606 607 static inline void *embedded_payload(struct be_mcc_wrb *wrb) 608 { 609 return wrb->payload.embedded_payload; 610 } 611 612 static inline struct be_sge *nonembedded_sgl(struct be_mcc_wrb *wrb) 613 { 614 return &wrb->payload.sgl[0]; 615 } 616 617 /******************** Modify EQ Delay *******************/ 618 struct be_cmd_req_modify_eq_delay { 619 struct be_cmd_req_hdr hdr; 620 u32 num_eq; 621 struct { 622 u32 eq_id; 623 u32 phase; 624 u32 delay_multiplier; 625 } delay[8]; 626 } __packed; 627 628 /******************** Get MAC ADDR *******************/ 629 630 #define ETH_ALEN 6 631 632 struct be_cmd_get_nic_conf_req { 633 struct be_cmd_req_hdr hdr; 634 u32 nic_port_count; 635 u32 speed; 636 u32 max_speed; 637 u32 link_state; 638 u32 max_frame_size; 639 u16 size_of_structure; 640 u8 mac_address[ETH_ALEN]; 641 u32 rsvd[23]; 642 }; 643 644 struct be_cmd_get_nic_conf_resp { 645 struct be_cmd_resp_hdr hdr; 646 u32 nic_port_count; 647 u32 speed; 648 u32 max_speed; 649 u32 link_state; 650 u32 max_frame_size; 651 u16 size_of_structure; 652 u8 mac_address[6]; 653 u32 rsvd[23]; 654 }; 655 656 #define BEISCSI_ALIAS_LEN 32 657 658 struct be_cmd_hba_name { 659 struct be_cmd_req_hdr hdr; 660 u16 flags; 661 u16 rsvd0; 662 u8 initiator_name[ISCSI_NAME_LEN]; 663 u8 initiator_alias[BEISCSI_ALIAS_LEN]; 664 } __packed; 665 666 struct be_cmd_ntwk_link_status_req { 667 struct be_cmd_req_hdr hdr; 668 u32 rsvd0; 669 } __packed; 670 671 /*** Port Speed Values ***/ 672 #define BE2ISCSI_LINK_SPEED_ZERO 0x00 673 #define BE2ISCSI_LINK_SPEED_10MBPS 0x01 674 #define BE2ISCSI_LINK_SPEED_100MBPS 0x02 675 #define BE2ISCSI_LINK_SPEED_1GBPS 0x03 676 #define BE2ISCSI_LINK_SPEED_10GBPS 0x04 677 struct be_cmd_ntwk_link_status_resp { 678 struct be_cmd_resp_hdr hdr; 679 u8 phys_port; 680 u8 mac_duplex; 681 u8 mac_speed; 682 u8 mac_fault; 683 u8 mgmt_mac_duplex; 684 u8 mgmt_mac_speed; 685 u16 qos_link_speed; 686 u32 logical_link_speed; 687 } __packed; 688 689 int beiscsi_cmd_eq_create(struct be_ctrl_info *ctrl, 690 struct be_queue_info *eq, int eq_delay); 691 692 int beiscsi_cmd_cq_create(struct be_ctrl_info *ctrl, 693 struct be_queue_info *cq, struct be_queue_info *eq, 694 bool sol_evts, bool no_delay, 695 int num_cqe_dma_coalesce); 696 697 int beiscsi_cmd_q_destroy(struct be_ctrl_info *ctrl, struct be_queue_info *q, 698 int type); 699 int beiscsi_cmd_mccq_create(struct beiscsi_hba *phba, 700 struct be_queue_info *mccq, 701 struct be_queue_info *cq); 702 703 int be_poll_mcc(struct be_ctrl_info *ctrl); 704 int mgmt_check_supported_fw(struct be_ctrl_info *ctrl, 705 struct beiscsi_hba *phba); 706 unsigned int be_cmd_get_initname(struct beiscsi_hba *phba); 707 unsigned int be_cmd_get_port_speed(struct beiscsi_hba *phba); 708 709 void free_mcc_tag(struct be_ctrl_info *ctrl, unsigned int tag); 710 711 int beiscsi_mccq_compl(struct beiscsi_hba *phba, 712 uint32_t tag, struct be_mcc_wrb **wrb, void *cmd_va); 713 /*ISCSI Functuions */ 714 int be_cmd_fw_initialize(struct be_ctrl_info *ctrl); 715 int be_cmd_fw_uninit(struct be_ctrl_info *ctrl); 716 717 struct be_mcc_wrb *wrb_from_mbox(struct be_dma_mem *mbox_mem); 718 struct be_mcc_wrb *wrb_from_mccq(struct beiscsi_hba *phba); 719 int be_mcc_notify_wait(struct beiscsi_hba *phba); 720 void be_mcc_notify(struct beiscsi_hba *phba); 721 unsigned int alloc_mcc_tag(struct beiscsi_hba *phba); 722 void beiscsi_async_link_state_process(struct beiscsi_hba *phba, 723 struct be_async_event_link_state *evt); 724 int be_mcc_compl_process_isr(struct be_ctrl_info *ctrl, 725 struct be_mcc_compl *compl); 726 727 int be_mbox_notify(struct be_ctrl_info *ctrl); 728 729 int be_cmd_create_default_pdu_queue(struct be_ctrl_info *ctrl, 730 struct be_queue_info *cq, 731 struct be_queue_info *dq, int length, 732 int entry_size, uint8_t is_header, 733 uint8_t ulp_num); 734 735 int be_cmd_iscsi_post_template_hdr(struct be_ctrl_info *ctrl, 736 struct be_dma_mem *q_mem); 737 738 int be_cmd_iscsi_remove_template_hdr(struct be_ctrl_info *ctrl); 739 740 int be_cmd_iscsi_post_sgl_pages(struct be_ctrl_info *ctrl, 741 struct be_dma_mem *q_mem, u32 page_offset, 742 u32 num_pages); 743 744 int beiscsi_cmd_reset_function(struct beiscsi_hba *phba); 745 746 int be_cmd_wrbq_create(struct be_ctrl_info *ctrl, struct be_dma_mem *q_mem, 747 struct be_queue_info *wrbq, 748 struct hwi_wrb_context *pwrb_context, 749 uint8_t ulp_num); 750 751 bool is_link_state_evt(u32 trailer); 752 753 /* Configuration Functions */ 754 int be_cmd_set_vlan(struct beiscsi_hba *phba, uint16_t vlan_tag); 755 756 struct be_default_pdu_context { 757 u32 dw[4]; 758 } __packed; 759 760 struct amap_be_default_pdu_context { 761 u8 dbuf_cindex[13]; /* dword 0 */ 762 u8 rsvd0[3]; /* dword 0 */ 763 u8 ring_size[4]; /* dword 0 */ 764 u8 ring_state[4]; /* dword 0 */ 765 u8 rsvd1[8]; /* dword 0 */ 766 u8 dbuf_pindex[13]; /* dword 1 */ 767 u8 rsvd2; /* dword 1 */ 768 u8 pci_func_id[8]; /* dword 1 */ 769 u8 rx_pdid[9]; /* dword 1 */ 770 u8 rx_pdid_valid; /* dword 1 */ 771 u8 default_buffer_size[16]; /* dword 2 */ 772 u8 cq_id_recv[10]; /* dword 2 */ 773 u8 rx_pdid_not_valid; /* dword 2 */ 774 u8 rsvd3[5]; /* dword 2 */ 775 u8 rsvd4[32]; /* dword 3 */ 776 } __packed; 777 778 struct amap_default_pdu_context_ext { 779 u8 rsvd0[16]; /* dword 0 */ 780 u8 ring_size[4]; /* dword 0 */ 781 u8 rsvd1[12]; /* dword 0 */ 782 u8 rsvd2[22]; /* dword 1 */ 783 u8 rx_pdid[9]; /* dword 1 */ 784 u8 rx_pdid_valid; /* dword 1 */ 785 u8 default_buffer_size[16]; /* dword 2 */ 786 u8 cq_id_recv[16]; /* dword 2 */ 787 u8 rsvd3[32]; /* dword 3 */ 788 } __packed; 789 790 struct be_defq_create_req { 791 struct be_cmd_req_hdr hdr; 792 u16 num_pages; 793 u8 ulp_num; 794 #define BEISCSI_DUAL_ULP_AWARE_BIT 0 /* Byte 3 - Bit 0 */ 795 #define BEISCSI_BIND_Q_TO_ULP_BIT 1 /* Byte 3 - Bit 1 */ 796 u8 dua_feature; 797 struct be_default_pdu_context context; 798 struct phys_addr pages[8]; 799 } __packed; 800 801 struct be_defq_create_resp { 802 struct be_cmd_req_hdr hdr; 803 u16 id; 804 u8 rsvd0; 805 u8 ulp_num; 806 u32 doorbell_offset; 807 u16 register_set; 808 u16 doorbell_format; 809 } __packed; 810 811 struct be_post_template_pages_req { 812 struct be_cmd_req_hdr hdr; 813 u16 num_pages; 814 #define BEISCSI_TEMPLATE_HDR_TYPE_ISCSI 0x1 815 u16 type; 816 struct phys_addr scratch_pa; 817 struct virt_addr scratch_va; 818 struct virt_addr pages_va; 819 struct phys_addr pages[16]; 820 } __packed; 821 822 struct be_remove_template_pages_req { 823 struct be_cmd_req_hdr hdr; 824 u16 type; 825 u16 rsvd0; 826 } __packed; 827 828 struct be_post_sgl_pages_req { 829 struct be_cmd_req_hdr hdr; 830 u16 num_pages; 831 u16 page_offset; 832 u32 rsvd0; 833 struct phys_addr pages[26]; 834 u32 rsvd1; 835 } __packed; 836 837 struct be_wrbq_create_req { 838 struct be_cmd_req_hdr hdr; 839 u16 num_pages; 840 u8 ulp_num; 841 u8 dua_feature; 842 struct phys_addr pages[8]; 843 } __packed; 844 845 struct be_wrbq_create_resp { 846 struct be_cmd_resp_hdr resp_hdr; 847 u16 cid; 848 u8 rsvd0; 849 u8 ulp_num; 850 u32 doorbell_offset; 851 u16 register_set; 852 u16 doorbell_format; 853 } __packed; 854 855 #define SOL_CID_MASK 0x0000FFC0 856 #define SOL_CODE_MASK 0x0000003F 857 #define SOL_WRB_INDEX_MASK 0x00FF0000 858 #define SOL_CMD_WND_MASK 0xFF000000 859 #define SOL_RES_CNT_MASK 0x7FFFFFFF 860 #define SOL_EXP_CMD_SN_MASK 0xFFFFFFFF 861 #define SOL_HW_STS_MASK 0x000000FF 862 #define SOL_STS_MASK 0x0000FF00 863 #define SOL_RESP_MASK 0x00FF0000 864 #define SOL_FLAGS_MASK 0x7F000000 865 #define SOL_S_MASK 0x80000000 866 867 struct sol_cqe { 868 u32 dw[4]; 869 }; 870 871 struct amap_sol_cqe { 872 u8 hw_sts[8]; /* dword 0 */ 873 u8 i_sts[8]; /* dword 0 */ 874 u8 i_resp[8]; /* dword 0 */ 875 u8 i_flags[7]; /* dword 0 */ 876 u8 s; /* dword 0 */ 877 u8 i_exp_cmd_sn[32]; /* dword 1 */ 878 u8 code[6]; /* dword 2 */ 879 u8 cid[10]; /* dword 2 */ 880 u8 wrb_index[8]; /* dword 2 */ 881 u8 i_cmd_wnd[8]; /* dword 2 */ 882 u8 i_res_cnt[31]; /* dword 3 */ 883 u8 valid; /* dword 3 */ 884 } __packed; 885 886 #define SOL_ICD_INDEX_MASK 0x0003FFC0 887 struct amap_sol_cqe_ring { 888 u8 hw_sts[8]; /* dword 0 */ 889 u8 i_sts[8]; /* dword 0 */ 890 u8 i_resp[8]; /* dword 0 */ 891 u8 i_flags[7]; /* dword 0 */ 892 u8 s; /* dword 0 */ 893 u8 i_exp_cmd_sn[32]; /* dword 1 */ 894 u8 code[6]; /* dword 2 */ 895 u8 icd_index[12]; /* dword 2 */ 896 u8 rsvd[6]; /* dword 2 */ 897 u8 i_cmd_wnd[8]; /* dword 2 */ 898 u8 i_res_cnt[31]; /* dword 3 */ 899 u8 valid; /* dword 3 */ 900 } __packed; 901 902 struct amap_sol_cqe_v2 { 903 u8 hw_sts[8]; /* dword 0 */ 904 u8 i_sts[8]; /* dword 0 */ 905 u8 wrb_index[16]; /* dword 0 */ 906 u8 i_exp_cmd_sn[32]; /* dword 1 */ 907 u8 code[6]; /* dword 2 */ 908 u8 cmd_cmpl; /* dword 2 */ 909 u8 rsvd0; /* dword 2 */ 910 u8 i_cmd_wnd[8]; /* dword 2 */ 911 u8 cid[13]; /* dword 2 */ 912 u8 u; /* dword 2 */ 913 u8 o; /* dword 2 */ 914 u8 s; /* dword 2 */ 915 u8 i_res_cnt[31]; /* dword 3 */ 916 u8 valid; /* dword 3 */ 917 } __packed; 918 919 struct common_sol_cqe { 920 u32 exp_cmdsn; 921 u32 res_cnt; 922 u16 wrb_index; 923 u16 cid; 924 u8 hw_sts; 925 u8 cmd_wnd; 926 u8 res_flag; /* the s feild of structure */ 927 u8 i_resp; /* for skh if cmd_complete is set then i_sts is response */ 928 u8 i_flags; /* for skh or the u and o feilds */ 929 u8 i_sts; /* for skh if cmd_complete is not-set then i_sts is status */ 930 }; 931 932 /*** iSCSI ack/driver message completions ***/ 933 struct amap_it_dmsg_cqe { 934 u8 ack_num[32]; /* DWORD 0 */ 935 u8 pdu_bytes_rcvd[32]; /* DWORD 1 */ 936 u8 code[6]; /* DWORD 2 */ 937 u8 cid[10]; /* DWORD 2 */ 938 u8 wrb_idx[8]; /* DWORD 2 */ 939 u8 rsvd0[8]; /* DWORD 2*/ 940 u8 rsvd1[31]; /* DWORD 3*/ 941 u8 valid; /* DWORD 3 */ 942 } __packed; 943 944 struct amap_it_dmsg_cqe_v2 { 945 u8 ack_num[32]; /* DWORD 0 */ 946 u8 pdu_bytes_rcvd[32]; /* DWORD 1 */ 947 u8 code[6]; /* DWORD 2 */ 948 u8 rsvd0[10]; /* DWORD 2 */ 949 u8 wrb_idx[16]; /* DWORD 2 */ 950 u8 rsvd1[16]; /* DWORD 3 */ 951 u8 cid[13]; /* DWORD 3 */ 952 u8 rsvd2[2]; /* DWORD 3 */ 953 u8 valid; /* DWORD 3 */ 954 } __packed; 955 956 957 /** 958 * Post WRB Queue Doorbell Register used by the host Storage 959 * stack to notify the 960 * controller of a posted Work Request Block 961 */ 962 #define DB_WRB_POST_CID_MASK 0xFFFF /* bits 0 - 16 */ 963 #define DB_DEF_PDU_WRB_INDEX_MASK 0xFF /* bits 0 - 9 */ 964 965 #define DB_DEF_PDU_WRB_INDEX_SHIFT 16 966 #define DB_DEF_PDU_NUM_POSTED_SHIFT 24 967 968 struct fragnum_bits_for_sgl_cra_in { 969 struct be_cmd_req_hdr hdr; 970 u32 num_bits; 971 } __packed; 972 973 struct iscsi_cleanup_req { 974 struct be_cmd_req_hdr hdr; 975 u16 chute; 976 u8 hdr_ring_id; 977 u8 data_ring_id; 978 979 } __packed; 980 981 struct eq_delay { 982 u32 eq_id; 983 u32 phase; 984 u32 delay_multiplier; 985 } __packed; 986 987 struct be_eq_delay_params_in { 988 struct be_cmd_req_hdr hdr; 989 u32 num_eq; 990 struct eq_delay delay[8]; 991 } __packed; 992 993 struct tcp_connect_and_offload_in { 994 struct be_cmd_req_hdr hdr; 995 struct ip_addr_format ip_address; 996 u16 tcp_port; 997 u16 cid; 998 u16 cq_id; 999 u16 defq_id; 1000 struct phys_addr dataout_template_pa; 1001 u16 hdr_ring_id; 1002 u16 data_ring_id; 1003 u8 do_offload; 1004 u8 rsvd0[3]; 1005 } __packed; 1006 1007 struct tcp_connect_and_offload_out { 1008 struct be_cmd_resp_hdr hdr; 1009 u32 connection_handle; 1010 u16 cid; 1011 u16 rsvd0; 1012 1013 } __packed; 1014 1015 struct be_mcc_wrb_context { 1016 struct MCC_WRB *wrb; 1017 int *users_final_status; 1018 } __packed; 1019 1020 #define DB_DEF_PDU_RING_ID_MASK 0x3FF /* bits 0 - 9 */ 1021 #define DB_DEF_PDU_CQPROC_MASK 0x3FFF /* bits 0 - 9 */ 1022 #define DB_DEF_PDU_REARM_SHIFT 14 1023 #define DB_DEF_PDU_EVENT_SHIFT 15 1024 #define DB_DEF_PDU_CQPROC_SHIFT 16 1025 1026 struct dmsg_cqe { 1027 u32 dw[4]; 1028 } __packed; 1029 1030 struct tcp_upload_params_in { 1031 struct be_cmd_req_hdr hdr; 1032 u16 id; 1033 u16 upload_type; 1034 u32 reset_seq; 1035 } __packed; 1036 1037 struct tcp_upload_params_out { 1038 u32 dw[32]; 1039 } __packed; 1040 1041 union tcp_upload_params { 1042 struct tcp_upload_params_in request; 1043 struct tcp_upload_params_out response; 1044 } __packed; 1045 1046 struct be_ulp_fw_cfg { 1047 #define BEISCSI_ULP_ISCSI_INI_MODE 0x10 1048 u32 ulp_mode; 1049 u32 etx_base; 1050 u32 etx_count; 1051 u32 sq_base; 1052 u32 sq_count; 1053 u32 rq_base; 1054 u32 rq_count; 1055 u32 dq_base; 1056 u32 dq_count; 1057 u32 lro_base; 1058 u32 lro_count; 1059 u32 icd_base; 1060 u32 icd_count; 1061 }; 1062 1063 struct be_ulp_chain_icd { 1064 u32 chain_base; 1065 u32 chain_count; 1066 }; 1067 1068 struct be_fw_cfg { 1069 struct be_cmd_req_hdr hdr; 1070 u32 be_config_number; 1071 u32 asic_revision; 1072 u32 phys_port; 1073 #define BEISCSI_FUNC_ISCSI_INI_MODE 0x10 1074 #define BEISCSI_FUNC_DUA_MODE 0x800 1075 u32 function_mode; 1076 struct be_ulp_fw_cfg ulp[2]; 1077 u32 function_caps; 1078 u32 cqid_base; 1079 u32 cqid_count; 1080 u32 eqid_base; 1081 u32 eqid_count; 1082 struct be_ulp_chain_icd chain_icd[2]; 1083 } __packed; 1084 1085 struct be_cmd_get_all_if_id_req { 1086 struct be_cmd_req_hdr hdr; 1087 u32 if_count; 1088 u32 if_hndl_list[1]; 1089 } __packed; 1090 1091 #define ISCSI_OPCODE_SCSI_DATA_OUT 5 1092 #define OPCODE_COMMON_NTWK_LINK_STATUS_QUERY 5 1093 #define OPCODE_COMMON_MODIFY_EQ_DELAY 41 1094 #define OPCODE_COMMON_ISCSI_CLEANUP 59 1095 #define OPCODE_COMMON_TCP_UPLOAD 56 1096 #define OPCODE_COMMON_ISCSI_TCP_CONNECT_AND_OFFLOAD 70 1097 #define OPCODE_COMMON_ISCSI_ERROR_RECOVERY_INVALIDATE_COMMANDS 1 1098 #define OPCODE_ISCSI_INI_CFG_GET_HBA_NAME 6 1099 #define OPCODE_ISCSI_INI_CFG_SET_HBA_NAME 7 1100 #define OPCODE_ISCSI_INI_SESSION_GET_A_SESSION 14 1101 #define OPCODE_ISCSI_INI_DRIVER_REOPEN_ALL_SESSIONS 36 1102 #define OPCODE_ISCSI_INI_DRIVER_OFFLOAD_SESSION 41 1103 #define OPCODE_ISCSI_INI_DRIVER_INVALIDATE_CONNECTION 42 1104 #define OPCODE_ISCSI_INI_BOOT_GET_BOOT_TARGET 52 1105 #define OPCODE_COMMON_WRITE_FLASH 96 1106 #define OPCODE_COMMON_READ_FLASH 97 1107 1108 /* --- CMD_ISCSI_INVALIDATE_CONNECTION_TYPE --- */ 1109 #define CMD_ISCSI_COMMAND_INVALIDATE 1 1110 #define CMD_ISCSI_CONNECTION_INVALIDATE 0x8001 1111 #define CMD_ISCSI_CONNECTION_ISSUE_TCP_RST 0x8002 1112 1113 #define INI_WR_CMD 1 /* Initiator write command */ 1114 #define INI_TMF_CMD 2 /* Initiator TMF command */ 1115 #define INI_NOPOUT_CMD 3 /* Initiator; Send a NOP-OUT */ 1116 #define INI_RD_CMD 5 /* Initiator requesting to send 1117 * a read command 1118 */ 1119 #define TGT_CTX_UPDT_CMD 7 /* Target context update */ 1120 #define TGT_STS_CMD 8 /* Target R2T and other BHS 1121 * where only the status number 1122 * need to be updated 1123 */ 1124 #define TGT_DATAIN_CMD 9 /* Target Data-Ins in response 1125 * to read command 1126 */ 1127 #define TGT_SOS_PDU 10 /* Target:standalone status 1128 * response 1129 */ 1130 #define TGT_DM_CMD 11 /* Indicates that the bhs 1131 * preparedby 1132 * driver should not be touched 1133 */ 1134 /* --- CMD_CHUTE_TYPE --- */ 1135 #define CMD_CONNECTION_CHUTE_0 1 1136 #define CMD_CONNECTION_CHUTE_1 2 1137 #define CMD_CONNECTION_CHUTE_2 3 1138 1139 #define EQ_MAJOR_CODE_COMPLETION 0 1140 1141 #define CMD_ISCSI_SESSION_DEL_CFG_FROM_FLASH 0 1142 #define CMD_ISCSI_SESSION_SAVE_CFG_ON_FLASH 1 1143 1144 /* --- CONNECTION_UPLOAD_PARAMS --- */ 1145 /* These parameters are used to define the type of upload desired. */ 1146 #define CONNECTION_UPLOAD_GRACEFUL 1 /* Graceful upload */ 1147 #define CONNECTION_UPLOAD_ABORT_RESET 2 /* Abortive upload with 1148 * reset 1149 */ 1150 #define CONNECTION_UPLOAD_ABORT 3 /* Abortive upload without 1151 * reset 1152 */ 1153 #define CONNECTION_UPLOAD_ABORT_WITH_SEQ 4 /* Abortive upload with reset, 1154 * sequence number by driver */ 1155 1156 /* Returns the number of items in the field array. */ 1157 #define BE_NUMBER_OF_FIELD(_type_, _field_) \ 1158 (FIELD_SIZEOF(_type_, _field_)/sizeof((((_type_ *)0)->_field_[0])))\ 1159 1160 /** 1161 * Different types of iSCSI completions to host driver for both initiator 1162 * and taget mode 1163 * of operation. 1164 */ 1165 #define SOL_CMD_COMPLETE 1 /* Solicited command completed 1166 * normally 1167 */ 1168 #define SOL_CMD_KILLED_DATA_DIGEST_ERR 2 /* Solicited command got 1169 * invalidated internally due 1170 * to Data Digest error 1171 */ 1172 #define CXN_KILLED_PDU_SIZE_EXCEEDS_DSL 3 /* Connection got invalidated 1173 * internally 1174 * due to a received PDU 1175 * size > DSL 1176 */ 1177 #define CXN_KILLED_BURST_LEN_MISMATCH 4 /* Connection got invalidated 1178 * internally due ti received 1179 * PDU sequence size > 1180 * FBL/MBL. 1181 */ 1182 #define CXN_KILLED_AHS_RCVD 5 /* Connection got invalidated 1183 * internally due to a received 1184 * PDU Hdr that has 1185 * AHS */ 1186 #define CXN_KILLED_HDR_DIGEST_ERR 6 /* Connection got invalidated 1187 * internally due to Hdr Digest 1188 * error 1189 */ 1190 #define CXN_KILLED_UNKNOWN_HDR 7 /* Connection got invalidated 1191 * internally 1192 * due to a bad opcode in the 1193 * pdu hdr 1194 */ 1195 #define CXN_KILLED_STALE_ITT_TTT_RCVD 8 /* Connection got invalidated 1196 * internally due to a received 1197 * ITT/TTT that does not belong 1198 * to this Connection 1199 */ 1200 #define CXN_KILLED_INVALID_ITT_TTT_RCVD 9 /* Connection got invalidated 1201 * internally due to received 1202 * ITT/TTT value > Max 1203 * Supported ITTs/TTTs 1204 */ 1205 #define CXN_KILLED_RST_RCVD 10 /* Connection got invalidated 1206 * internally due to an 1207 * incoming TCP RST 1208 */ 1209 #define CXN_KILLED_TIMED_OUT 11 /* Connection got invalidated 1210 * internally due to timeout on 1211 * tcp segment 12 retransmit 1212 * attempts failed 1213 */ 1214 #define CXN_KILLED_RST_SENT 12 /* Connection got invalidated 1215 * internally due to TCP RST 1216 * sent by the Tx side 1217 */ 1218 #define CXN_KILLED_FIN_RCVD 13 /* Connection got invalidated 1219 * internally due to an 1220 * incoming TCP FIN. 1221 */ 1222 #define CXN_KILLED_BAD_UNSOL_PDU_RCVD 14 /* Connection got invalidated 1223 * internally due to bad 1224 * unsolicited PDU Unsolicited 1225 * PDUs are PDUs with 1226 * ITT=0xffffffff 1227 */ 1228 #define CXN_KILLED_BAD_WRB_INDEX_ERROR 15 /* Connection got invalidated 1229 * internally due to bad WRB 1230 * index. 1231 */ 1232 #define CXN_KILLED_OVER_RUN_RESIDUAL 16 /* Command got invalidated 1233 * internally due to received 1234 * command has residual 1235 * over run bytes. 1236 */ 1237 #define CXN_KILLED_UNDER_RUN_RESIDUAL 17 /* Command got invalidated 1238 * internally due to received 1239 * command has residual under 1240 * run bytes. 1241 */ 1242 #define CMD_KILLED_INVALID_STATSN_RCVD 18 /* Command got invalidated 1243 * internally due to a received 1244 * PDU has an invalid StatusSN 1245 */ 1246 #define CMD_KILLED_INVALID_R2T_RCVD 19 /* Command got invalidated 1247 * internally due to a received 1248 * an R2T with some invalid 1249 * fields in it 1250 */ 1251 #define CMD_CXN_KILLED_LUN_INVALID 20 /* Command got invalidated 1252 * internally due to received 1253 * PDU has an invalid LUN. 1254 */ 1255 #define CMD_CXN_KILLED_ICD_INVALID 21 /* Command got invalidated 1256 * internally due to the 1257 * corresponding ICD not in a 1258 * valid state 1259 */ 1260 #define CMD_CXN_KILLED_ITT_INVALID 22 /* Command got invalidated due 1261 * to received PDU has an 1262 * invalid ITT. 1263 */ 1264 #define CMD_CXN_KILLED_SEQ_OUTOFORDER 23 /* Command got invalidated due 1265 * to received sequence buffer 1266 * offset is out of order. 1267 */ 1268 #define CMD_CXN_KILLED_INVALID_DATASN_RCVD 24 /* Command got invalidated 1269 * internally due to a 1270 * received PDU has an invalid 1271 * DataSN 1272 */ 1273 #define CXN_INVALIDATE_NOTIFY 25 /* Connection invalidation 1274 * completion notify. 1275 */ 1276 #define CXN_INVALIDATE_INDEX_NOTIFY 26 /* Connection invalidation 1277 * completion 1278 * with data PDU index. 1279 */ 1280 #define CMD_INVALIDATED_NOTIFY 27 /* Command invalidation 1281 * completionnotifify. 1282 */ 1283 #define UNSOL_HDR_NOTIFY 28 /* Unsolicited header notify.*/ 1284 #define UNSOL_DATA_NOTIFY 29 /* Unsolicited data notify.*/ 1285 #define UNSOL_DATA_DIGEST_ERROR_NOTIFY 30 /* Unsolicited data digest 1286 * error notify. 1287 */ 1288 #define DRIVERMSG_NOTIFY 31 /* TCP acknowledge based 1289 * notification. 1290 */ 1291 #define CXN_KILLED_CMND_DATA_NOT_ON_SAME_CONN 32 /* Connection got invalidated 1292 * internally due to command 1293 * and data are not on same 1294 * connection. 1295 */ 1296 #define SOL_CMD_KILLED_DIF_ERR 33 /* Solicited command got 1297 * invalidated internally due 1298 * to DIF error 1299 */ 1300 #define CXN_KILLED_SYN_RCVD 34 /* Connection got invalidated 1301 * internally due to incoming 1302 * TCP SYN 1303 */ 1304 #define CXN_KILLED_IMM_DATA_RCVD 35 /* Connection got invalidated 1305 * internally due to an 1306 * incoming Unsolicited PDU 1307 * that has immediate data on 1308 * the cxn 1309 */ 1310 1311 int beiscsi_pci_soft_reset(struct beiscsi_hba *phba); 1312 int be_chk_reset_complete(struct beiscsi_hba *phba); 1313 1314 void be_wrb_hdr_prepare(struct be_mcc_wrb *wrb, int payload_len, 1315 bool embedded, u8 sge_cnt); 1316 1317 void be_cmd_hdr_prepare(struct be_cmd_req_hdr *req_hdr, 1318 u8 subsystem, u8 opcode, int cmd_len); 1319 1320 #endif /* !BEISCSI_CMDS_H */ 1321