^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * QLogic iSCSI Offload Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 2016 Cavium Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #ifndef _QEDI_ISCSI_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define _QEDI_ISCSI_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/socket.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/completion.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include "qedi.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define ISCSI_MAX_SESS_PER_HBA 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define DEF_KA_TIMEOUT 7200000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define DEF_KA_INTERVAL 10000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define DEF_KA_MAX_PROBE_COUNT 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define DEF_TOS 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define DEF_TTL 0xfe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define DEF_SND_SEQ_SCALE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define DEF_RCV_BUF 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define DEF_SND_BUF 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define DEF_SEED 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define DEF_MAX_RT_TIME 8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define DEF_MAX_DA_COUNT 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define DEF_SWS_TIMER 1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define DEF_MAX_CWND 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define DEF_PATH_MTU 1500
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define DEF_MSS 1460
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define DEF_LL2_MTU 1560
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define JUMBO_MTU 9000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define MIN_MTU 576 /* rfc 793 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define IPV4_HDR_LEN 20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define IPV6_HDR_LEN 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define TCP_HDR_LEN 20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define TCP_OPTION_LEN 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define VLAN_LEN 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) EP_STATE_IDLE = 0x0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) EP_STATE_ACQRCONN_START = 0x1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) EP_STATE_ACQRCONN_COMPL = 0x2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) EP_STATE_OFLDCONN_START = 0x4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) EP_STATE_OFLDCONN_COMPL = 0x8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) EP_STATE_DISCONN_START = 0x10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) EP_STATE_DISCONN_COMPL = 0x20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) EP_STATE_CLEANUP_START = 0x40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) EP_STATE_CLEANUP_CMPL = 0x80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) EP_STATE_TCP_FIN_RCVD = 0x100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) EP_STATE_TCP_RST_RCVD = 0x200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) EP_STATE_LOGOUT_SENT = 0x400,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) EP_STATE_LOGOUT_RESP_RCVD = 0x800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) EP_STATE_CLEANUP_FAILED = 0x1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) EP_STATE_OFLDCONN_FAILED = 0x2000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) EP_STATE_CONNECT_FAILED = 0x4000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) EP_STATE_DISCONN_TIMEDOUT = 0x8000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) EP_STATE_OFLDCONN_NONE = 0x10000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) struct qedi_conn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) struct qedi_endpoint {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) struct qedi_ctx *qedi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) u32 dst_addr[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) u32 src_addr[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) u16 src_port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) u16 dst_port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) u16 vlan_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) u16 pmtu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) u8 src_mac[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) u8 dst_mac[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) u8 ip_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) int state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) wait_queue_head_t ofld_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) wait_queue_head_t tcp_ofld_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) u32 iscsi_cid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) /* identifier of the connection from qed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) u32 fw_cid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) void __iomem *p_doorbell;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) /* Send queue management */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) struct iscsi_wqe *sq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) dma_addr_t sq_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) u16 sq_prod_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) u16 fw_sq_prod_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) u16 sq_con_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) u32 sq_mem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) void *sq_pbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) dma_addr_t sq_pbl_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) u32 sq_pbl_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) struct qedi_conn *conn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) struct work_struct offload_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define QEDI_SQ_WQES_MIN 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) struct qedi_io_bdt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) struct scsi_sge *sge_tbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) dma_addr_t sge_tbl_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) u16 sge_valid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) * struct generic_pdu_resc - login pdu resource structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) * @req_buf: driver buffer used to stage payload associated with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) * the login request
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) * @req_dma_addr: dma address for iscsi login request payload buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) * @req_buf_size: actual login request payload length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) * @req_wr_ptr: pointer into login request buffer when next data is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) * to be written
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) * @resp_hdr: iscsi header where iscsi login response header is to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) * be recreated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) * @resp_buf: buffer to stage login response payload
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) * @resp_dma_addr: login response payload buffer dma address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) * @resp_buf_size: login response paylod length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) * @resp_wr_ptr: pointer into login response buffer when next data is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) * to be written
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) * @req_bd_tbl: iscsi login request payload BD table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) * @req_bd_dma: login request BD table dma address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) * @resp_bd_tbl: iscsi login response payload BD table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) * @resp_bd_dma: login request BD table dma address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) * following structure defines buffer info for generic pdus such as iSCSI Login,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) * Logout and NOP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) struct generic_pdu_resc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) char *req_buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) dma_addr_t req_dma_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) u32 req_buf_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) char *req_wr_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) struct iscsi_hdr resp_hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) char *resp_buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) dma_addr_t resp_dma_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) u32 resp_buf_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) char *resp_wr_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) char *req_bd_tbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) dma_addr_t req_bd_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) char *resp_bd_tbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) dma_addr_t resp_bd_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) struct qedi_conn {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) struct iscsi_cls_conn *cls_conn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) struct qedi_ctx *qedi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) struct qedi_endpoint *ep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) struct iscsi_endpoint *iscsi_ep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) struct list_head active_cmd_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) spinlock_t list_lock; /* internal conn lock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) u32 active_cmd_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) u32 cmd_cleanup_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) u32 cmd_cleanup_cmpl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) u32 iscsi_conn_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) int itt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) int abrt_conn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define QEDI_CID_RESERVED 0x5AFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) u32 fw_cid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) * Buffer for login negotiation process
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) struct generic_pdu_resc gen_pdu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) struct list_head tmf_work_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) wait_queue_head_t wait_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) spinlock_t tmf_work_lock; /* tmf work lock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) unsigned long flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define QEDI_CONN_FW_CLEANUP 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) struct qedi_cmd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) struct list_head io_cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) bool io_cmd_in_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) struct iscsi_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) struct qedi_conn *conn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) struct scsi_cmnd *scsi_cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) struct scatterlist *sg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) struct qedi_io_bdt io_tbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) struct e4_iscsi_task_context request;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) unsigned char *sense_buffer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) dma_addr_t sense_buffer_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) u16 task_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) /* field populated for tmf work queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) struct iscsi_task *task;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) struct work_struct tmf_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) int state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define CLEANUP_WAIT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #define CLEANUP_RECV 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define CLEANUP_WAIT_FAILED 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define CLEANUP_NOT_REQUIRED 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define LUN_RESET_RESPONSE_RECEIVED 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define RESPONSE_RECEIVED 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) int type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define TYPEIO 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define TYPERESET 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) struct qedi_work_map *list_tmf_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) /* slowpath management */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) bool use_slowpath;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) struct iscsi_tm_rsp *tmf_resp_buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) struct qedi_work cqe_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) struct qedi_work_map {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) struct qedi_cmd *qedi_cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) int rtid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) int state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #define QEDI_WORK_QUEUED 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define QEDI_WORK_SCHEDULED 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #define QEDI_WORK_EXIT 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) struct work_struct *ptr_tmf_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) struct qedi_boot_target {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) char ip_addr[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) char iscsi_name[255];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) u32 ipv6_en;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define qedi_set_itt(task_id, itt) ((u32)(((task_id) & 0xffff) | ((itt) << 16)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #define qedi_get_itt(cqe) (cqe.iscsi_hdr.cmd.itt >> 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define QEDI_OFLD_WAIT_STATE(q) ((q)->state == EP_STATE_OFLDCONN_FAILED || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) (q)->state == EP_STATE_OFLDCONN_COMPL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #endif /* _QEDI_ISCSI_H_ */