1 #include <linux/socket.h>
4 #include <rdma/ib_verbs.h>
5 #include <rdma/rdma_cm.h>
7 #define ISERT_RDMA_LISTEN_BACKLOG 10
8 #define ISCSI_ISER_SG_TABLESIZE 256
9 #define ISER_FASTREG_LI_WRID 0xffffffffffffffffULL
11 enum isert_desc_type
{
16 enum iser_ib_op_code
{
23 enum iser_conn_state
{
26 ISER_CONN_TERMINATING
,
31 struct iser_hdr iser_header
;
32 struct iscsi_hdr iscsi_header
;
33 char data
[ISER_RECV_DATA_SEG_LEN
];
36 char pad
[ISER_RX_PAD_SIZE
];
40 struct iser_hdr iser_header
;
41 struct iscsi_hdr iscsi_header
;
42 enum isert_desc_type type
;
44 struct ib_sge tx_sg
[2];
46 struct isert_cmd
*isert_cmd
;
47 struct ib_send_wr send_wr
;
50 struct fast_reg_descriptor
{
51 struct list_head list
;
52 struct ib_mr
*data_mr
;
53 struct ib_fast_reg_page_list
*data_frpl
;
57 struct isert_rdma_wr
{
58 struct list_head wr_list
;
59 struct isert_cmd
*isert_cmd
;
60 enum iser_ib_op_code iser_ib_op
;
61 struct ib_sge
*ib_sge
;
62 struct ib_sge s_ib_sge
;
64 struct scatterlist
*sge
;
66 struct ib_send_wr
*send_wr
;
67 struct ib_send_wr s_send_wr
;
69 struct fast_reg_descriptor
*fr_desc
;
82 struct isert_conn
*conn
;
83 struct iscsi_cmd
*iscsi_cmd
;
84 struct iser_tx_desc tx_desc
;
85 struct isert_rdma_wr rdma_wr
;
86 struct work_struct comp_work
;
92 enum iser_conn_state state
;
93 int post_recv_buf_count
;
94 atomic_t post_send_buf_count
;
95 u32 responder_resources
;
103 unsigned int conn_rx_desc_head
;
104 struct iser_rx_desc
*conn_rx_descs
;
105 struct ib_recv_wr conn_rx_wr
[ISERT_MIN_POSTED_RX
];
106 struct iscsi_conn
*conn
;
107 struct list_head conn_accept_node
;
108 struct completion conn_login_comp
;
109 struct iser_tx_desc conn_login_tx_desc
;
110 struct rdma_cm_id
*conn_cm_id
;
111 struct ib_pd
*conn_pd
;
112 struct ib_mr
*conn_mr
;
113 struct ib_qp
*conn_qp
;
114 struct isert_device
*conn_device
;
115 struct work_struct conn_logout_work
;
116 struct mutex conn_mutex
;
117 struct completion conn_wait
;
118 struct completion conn_wait_comp_err
;
119 struct kref conn_kref
;
120 struct list_head conn_frwr_pool
;
121 int conn_frwr_pool_size
;
122 /* lock to protect frwr_pool */
123 spinlock_t conn_lock
;
127 #define ISERT_MAX_CQ 64
129 struct isert_cq_desc
{
130 struct isert_device
*device
;
132 struct work_struct cq_rx_work
;
133 struct work_struct cq_tx_work
;
136 struct isert_device
{
140 int cq_active_qps
[ISERT_MAX_CQ
];
141 struct ib_device
*ib_device
;
142 struct ib_pd
*dev_pd
;
143 struct ib_mr
*dev_mr
;
144 struct ib_cq
*dev_rx_cq
[ISERT_MAX_CQ
];
145 struct ib_cq
*dev_tx_cq
[ISERT_MAX_CQ
];
146 struct isert_cq_desc
*cq_desc
;
147 struct list_head dev_node
;
148 struct ib_device_attr dev_attr
;
149 int (*reg_rdma_mem
)(struct iscsi_conn
*conn
,
150 struct iscsi_cmd
*cmd
,
151 struct isert_rdma_wr
*wr
);
152 void (*unreg_rdma_mem
)(struct isert_cmd
*isert_cmd
,
153 struct isert_conn
*isert_conn
);
157 struct semaphore np_sem
;
158 struct rdma_cm_id
*np_cm_id
;
159 struct mutex np_accept_mutex
;
160 struct list_head np_accept_list
;
161 struct completion np_login_comp
;