Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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_ */