2011-10-14 01:30:46 +00:00
/*
* Copyright ( c ) 2006 - 2009 Mellanox Technology Inc . All rights reserved .
* Copyright ( C ) 2009 - 2010 Bart Van Assche < bvanassche @ acm . org > .
*
* This software is available to you under a choice of one of two
* licenses . You may choose to be licensed under the terms of the GNU
* General Public License ( GPL ) Version 2 , available from the file
* COPYING in the main directory of this source tree , or the
* OpenIB . org BSD license below :
*
* Redistribution and use in source and binary forms , with or
* without modification , are permitted provided that the following
* conditions are met :
*
* - Redistributions of source code must retain the above
* copyright notice , this list of conditions and the following
* disclaimer .
*
* - Redistributions in binary form must reproduce the above
* copyright notice , this list of conditions and the following
* disclaimer in the documentation and / or other materials
* provided with the distribution .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND ,
* EXPRESS OR IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT . IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY , WHETHER IN AN
* ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM , OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE .
*
*/
# ifndef IB_SRPT_H
# define IB_SRPT_H
# include <linux/types.h>
# include <linux/list.h>
# include <linux/wait.h>
# include <rdma/ib_verbs.h>
# include <rdma/ib_sa.h>
# include <rdma/ib_cm.h>
2018-03-02 13:14:15 -08:00
# include <rdma/rdma_cm.h>
2016-05-03 18:01:11 +02:00
# include <rdma/rw.h>
2011-10-14 01:30:46 +00:00
# include <scsi/srp.h>
# include "ib_dm_mad.h"
/*
* The prefix the ServiceName field must start with in the device management
* ServiceEntries attribute pair . See also the SRP specification .
*/
# define SRP_SERVICE_NAME_PREFIX "SRP.T10:"
2018-01-16 16:14:10 -08:00
struct srpt_nexus ;
2011-10-14 01:30:46 +00:00
enum {
/*
* SRP IOControllerProfile attributes for SRP target ports that have
* not been defined in < scsi / srp . h > . Source : section B .7 , table B .7
* in the SRP specification .
*/
SRP_PROTOCOL = 0x0108 ,
SRP_PROTOCOL_VERSION = 0x0001 ,
SRP_IO_SUBCLASS = 0x609e ,
SRP_SEND_TO_IOC = 0x01 ,
SRP_SEND_FROM_IOC = 0x02 ,
SRP_RDMA_READ_FROM_IOC = 0x08 ,
SRP_RDMA_WRITE_FROM_IOC = 0x20 ,
/*
* srp_login_cmd . req_flags bitmasks . See also table 9 in the SRP
* specification .
*/
SRP_MTCH_ACTION = 0x03 , /* MULTI-CHANNEL ACTION */
SRP_LOSOLNT = 0x10 , /* logout solicited notification */
SRP_CRSOLNT = 0x20 , /* credit request solicited notification */
SRP_AESOLNT = 0x40 , /* asynchronous event solicited notification */
/*
* srp_cmd . sol_nt / srp_tsk_mgmt . sol_not bitmasks . See also tables
* 18 and 20 in the SRP specification .
*/
SRP_SCSOLNT = 0x02 , /* SCSOLNT = successful solicited notification */
SRP_UCSOLNT = 0x04 , /* UCSOLNT = unsuccessful solicited notification */
/*
* srp_rsp . sol_not / srp_t_logout . sol_not bitmasks . See also tables
* 16 and 22 in the SRP specification .
*/
SRP_SOLNT = 0x01 , /* SOLNT = solicited notification */
/* See also table 24 in the SRP specification. */
SRP_TSK_MGMT_SUCCESS = 0x00 ,
SRP_TSK_MGMT_FUNC_NOT_SUPP = 0x04 ,
SRP_TSK_MGMT_FAILED = 0x05 ,
/* See also table 21 in the SRP specification. */
SRP_CMD_SIMPLE_Q = 0x0 ,
SRP_CMD_HEAD_OF_Q = 0x1 ,
SRP_CMD_ORDERED_Q = 0x2 ,
SRP_CMD_ACA = 0x4 ,
SRPT_DEF_SG_TABLESIZE = 128 ,
MIN_SRPT_SQ_SIZE = 16 ,
DEF_SRPT_SQ_SIZE = 4096 ,
2018-01-08 11:00:43 -08:00
MAX_SRPT_RQ_SIZE = 128 ,
2011-10-14 01:30:46 +00:00
MIN_SRPT_SRQ_SIZE = 4 ,
DEFAULT_SRPT_SRQ_SIZE = 4095 ,
MAX_SRPT_SRQ_SIZE = 65535 ,
MAX_SRPT_RDMA_SIZE = 1U < < 24 ,
MAX_SRPT_RSP_SIZE = 1024 ,
2018-12-17 13:20:46 -08:00
SRP_MAX_ADD_CDB_LEN = 16 ,
SRP_MAX_IMM_DATA_OFFSET = 80 ,
SRP_MAX_IMM_DATA = 8 * 1024 ,
2011-10-14 01:30:46 +00:00
MIN_MAX_REQ_SIZE = 996 ,
2018-12-17 13:20:46 -08:00
DEFAULT_MAX_REQ_SIZE_1 = sizeof ( struct srp_cmd ) /*48*/ +
SRP_MAX_ADD_CDB_LEN +
sizeof ( struct srp_indirect_buf ) /*20*/ +
128 * sizeof ( struct srp_direct_buf ) /*16*/ ,
DEFAULT_MAX_REQ_SIZE_2 = SRP_MAX_IMM_DATA_OFFSET +
sizeof ( struct srp_imm_buf ) + SRP_MAX_IMM_DATA ,
DEFAULT_MAX_REQ_SIZE = DEFAULT_MAX_REQ_SIZE_1 > DEFAULT_MAX_REQ_SIZE_2 ?
DEFAULT_MAX_REQ_SIZE_1 : DEFAULT_MAX_REQ_SIZE_2 ,
2011-10-14 01:30:46 +00:00
MIN_MAX_RSP_SIZE = sizeof ( struct srp_rsp ) /*36*/ + 4 ,
DEFAULT_MAX_RSP_SIZE = 256 , /* leaves 220 bytes for sense data */
DEFAULT_MAX_RDMA_SIZE = 65536 ,
} ;
/**
2018-01-08 11:00:42 -08:00
* enum srpt_command_state - SCSI command state managed by SRPT
2011-10-14 01:30:46 +00:00
* @ SRPT_STATE_NEW : New command arrived and is being processed .
* @ SRPT_STATE_NEED_DATA : Processing a write or bidir command and waiting
* for data arrival .
* @ SRPT_STATE_DATA_IN : Data for the write or bidir command arrived and is
* being processed .
* @ SRPT_STATE_CMD_RSP_SENT : SRP_RSP for SRP_CMD has been sent .
* @ SRPT_STATE_MGMT : Processing a SCSI task management command .
* @ SRPT_STATE_MGMT_RSP_SENT : SRP_RSP for SRP_TSK_MGMT has been sent .
* @ SRPT_STATE_DONE : Command processing finished successfully , command
* processing has been aborted or command processing
* failed .
*/
enum srpt_command_state {
SRPT_STATE_NEW = 0 ,
SRPT_STATE_NEED_DATA = 1 ,
SRPT_STATE_DATA_IN = 2 ,
SRPT_STATE_CMD_RSP_SENT = 3 ,
SRPT_STATE_MGMT = 4 ,
SRPT_STATE_MGMT_RSP_SENT = 5 ,
SRPT_STATE_DONE = 6 ,
} ;
/**
2018-01-08 11:00:42 -08:00
* struct srpt_ioctx - shared SRPT I / O context information
* @ cqe : Completion queue element .
2011-10-14 01:30:46 +00:00
* @ buf : Pointer to the buffer .
* @ dma : DMA address of the buffer .
2018-12-17 13:20:46 -08:00
* @ offset : Offset of the first byte in @ buf and @ dma that is actually used .
2011-10-14 01:30:46 +00:00
* @ index : Index of the I / O context in its ioctx_ring array .
*/
struct srpt_ioctx {
2015-09-29 13:00:44 +02:00
struct ib_cqe cqe ;
2011-10-14 01:30:46 +00:00
void * buf ;
dma_addr_t dma ;
2018-12-17 13:20:46 -08:00
uint32_t offset ;
2011-10-14 01:30:46 +00:00
uint32_t index ;
} ;
/**
2018-01-08 11:00:42 -08:00
* struct srpt_recv_ioctx - SRPT receive I / O context
2011-10-14 01:30:46 +00:00
* @ ioctx : See above .
* @ wait_list : Node for insertion in srpt_rdma_ch . cmd_wait_list .
2018-12-17 13:20:46 -08:00
* @ byte_len : Number of bytes in @ ioctx . buf .
2011-10-14 01:30:46 +00:00
*/
struct srpt_recv_ioctx {
struct srpt_ioctx ioctx ;
struct list_head wait_list ;
2018-12-17 13:20:46 -08:00
int byte_len ;
2011-10-14 01:30:46 +00:00
} ;
2018-12-17 13:20:41 -08:00
2016-05-03 18:01:11 +02:00
struct srpt_rw_ctx {
struct rdma_rw_ctx rw ;
struct scatterlist * sg ;
unsigned int nents ;
} ;
2011-10-14 01:30:46 +00:00
/**
2018-01-08 11:00:42 -08:00
* struct srpt_send_ioctx - SRPT send I / O context
2011-10-14 01:30:46 +00:00
* @ ioctx : See above .
* @ ch : Channel pointer .
2018-12-17 13:20:46 -08:00
* @ recv_ioctx : Receive I / O context associated with this send I / O context .
* Only used for processing immediate data .
2018-01-08 11:00:42 -08:00
* @ s_rw_ctx : @ rw_ctxs points here if only a single rw_ctx is needed .
* @ rw_ctxs : RDMA read / write contexts .
2018-12-17 13:20:46 -08:00
* @ imm_sg : Scatterlist for immediate data .
2018-01-08 11:00:42 -08:00
* @ rdma_cqe : RDMA completion queue element .
2011-10-14 01:30:46 +00:00
* @ state : I / O context state .
* @ cmd : Target core command data structure .
* @ sense_data : SCSI sense data .
2018-01-08 11:00:42 -08:00
* @ n_rdma : Number of work requests needed to transfer this ioctx .
* @ n_rw_ctx : Size of rw_ctxs array .
* @ queue_status_only : Send a SCSI status back to the initiator but no data .
* @ sense_data : Sense data to be sent to the initiator .
2011-10-14 01:30:46 +00:00
*/
struct srpt_send_ioctx {
struct srpt_ioctx ioctx ;
struct srpt_rdma_ch * ch ;
2018-12-17 13:20:46 -08:00
struct srpt_recv_ioctx * recv_ioctx ;
2016-05-03 18:01:11 +02:00
struct srpt_rw_ctx s_rw_ctx ;
struct srpt_rw_ctx * rw_ctxs ;
2018-12-17 13:20:46 -08:00
struct scatterlist imm_sg ;
2015-09-29 13:00:44 +02:00
struct ib_cqe rdma_cqe ;
2011-10-14 01:30:46 +00:00
enum srpt_command_state state ;
struct se_cmd cmd ;
u8 n_rdma ;
2016-05-03 18:01:11 +02:00
u8 n_rw_ctx ;
2011-10-14 01:30:46 +00:00
bool queue_status_only ;
2015-05-08 10:11:12 +02:00
u8 sense_data [ TRANSPORT_SENSE_BUFFER ] ;
2011-10-14 01:30:46 +00:00
} ;
/**
2018-01-08 11:00:42 -08:00
* enum rdma_ch_state - SRP channel state
2016-02-11 11:08:53 -08:00
* @ CH_CONNECTING : QP is in RTR state ; waiting for RTU .
* @ CH_LIVE : QP is in RTS state .
* @ CH_DISCONNECTING : DREQ has been sent and waiting for DREP or DREQ has
* been received .
* @ CH_DRAINING : DREP has been received or waiting for DREP timed out
* and last work request has been queued .
* @ CH_DISCONNECTED : Last completion has been received .
2011-10-14 01:30:46 +00:00
*/
enum rdma_ch_state {
CH_CONNECTING ,
CH_LIVE ,
CH_DISCONNECTING ,
CH_DRAINING ,
2016-02-11 11:08:53 -08:00
CH_DISCONNECTED ,
2011-10-14 01:30:46 +00:00
} ;
/**
2018-01-08 11:00:42 -08:00
* struct srpt_rdma_ch - RDMA channel
2018-01-16 16:14:10 -08:00
* @ nexus : I_T nexus this channel is associated with .
2011-10-14 01:30:46 +00:00
* @ qp : IB queue pair used for communicating over this channel .
2018-12-17 13:20:43 -08:00
* @ ib_cm : See below .
* @ ib_cm . cm_id : IB CM ID associated with the channel .
* @ rdma_cm : See below .
* @ rdma_cm . cm_id : RDMA CM ID associated with the channel .
2011-10-14 01:30:46 +00:00
* @ cq : IB completion queue for this channel .
2020-10-27 10:51:24 +01:00
* @ cq_size : Number of CQEs in @ cq .
2018-01-08 11:00:42 -08:00
* @ zw_cqe : Zero - length write CQE .
2018-01-16 16:14:05 -08:00
* @ rcu : RCU head .
2018-01-08 11:00:42 -08:00
* @ kref : kref for this channel .
2019-09-30 16:17:04 -07:00
* @ closed : Completion object that will be signaled as soon as a new
* channel object with the same identity can be created .
2011-10-14 01:30:46 +00:00
* @ rq_size : IB receive queue size .
2018-01-08 11:00:43 -08:00
* @ max_rsp_size : Maximum size of an RSP response message in bytes .
2011-10-14 01:30:46 +00:00
* @ sq_wr_avail : number of work requests available in the send queue .
* @ sport : pointer to the information of the HCA port used by this
* channel .
* @ max_ti_iu_len : maximum target - to - initiator information unit length .
* @ req_lim : request limit : maximum number of requests that may be sent
* by the initiator without having received a response .
* @ req_lim_delta : Number of credits not yet sent back to the initiator .
2018-12-17 13:20:46 -08:00
* @ imm_data_offset : Offset from start of SRP_CMD for immediate data .
2011-10-14 01:30:46 +00:00
* @ spinlock : Protects free_list and state .
* @ state : channel state . See also enum rdma_ch_state .
2018-03-02 13:14:15 -08:00
* @ using_rdma_cm : Whether the RDMA / CM or IB / CM is used for this channel .
2018-01-16 16:14:15 -08:00
* @ processing_wait_list : Whether or not cmd_wait_list is being processed .
2018-12-17 13:20:46 -08:00
* @ rsp_buf_cache : kmem_cache for @ ioctx_ring .
2011-10-14 01:30:46 +00:00
* @ ioctx_ring : Send ring .
2018-12-17 13:20:46 -08:00
* @ req_buf_cache : kmem_cache for @ ioctx_recv_ring .
2017-10-11 10:27:25 -07:00
* @ ioctx_recv_ring : Receive I / O context ring .
2018-01-16 16:14:10 -08:00
* @ list : Node in srpt_nexus . ch_list .
2011-10-14 01:30:46 +00:00
* @ cmd_wait_list : List of SCSI commands that arrived before the RTU event . This
* list contains struct srpt_ioctx elements and is protected
* against concurrent modification by the cm_id spinlock .
2018-01-16 16:14:07 -08:00
* @ pkey : P_Key of the IB partition for this SRP channel .
2011-10-14 01:30:46 +00:00
* @ sess : Session information associated with this SRP channel .
* @ sess_name : Session name .
* @ release_work : Allows scheduling of srpt_release_channel ( ) .
*/
struct srpt_rdma_ch {
2018-01-16 16:14:10 -08:00
struct srpt_nexus * nexus ;
2011-10-14 01:30:46 +00:00
struct ib_qp * qp ;
2018-01-16 16:14:16 -08:00
union {
struct {
struct ib_cm_id * cm_id ;
} ib_cm ;
2018-03-02 13:14:15 -08:00
struct {
struct rdma_cm_id * cm_id ;
} rdma_cm ;
2018-01-16 16:14:16 -08:00
} ;
2011-10-14 01:30:46 +00:00
struct ib_cq * cq ;
2020-07-22 16:56:29 +03:00
u32 cq_size ;
2016-02-11 11:08:53 -08:00
struct ib_cqe zw_cqe ;
2018-01-16 16:14:05 -08:00
struct rcu_head rcu ;
2016-02-11 11:08:53 -08:00
struct kref kref ;
2019-09-30 16:17:04 -07:00
struct completion * closed ;
2011-10-14 01:30:46 +00:00
int rq_size ;
2018-01-08 11:00:43 -08:00
u32 max_rsp_size ;
2011-10-14 01:30:46 +00:00
atomic_t sq_wr_avail ;
struct srpt_port * sport ;
int max_ti_iu_len ;
atomic_t req_lim ;
atomic_t req_lim_delta ;
2018-12-17 13:20:46 -08:00
u16 imm_data_offset ;
2011-10-14 01:30:46 +00:00
spinlock_t spinlock ;
enum rdma_ch_state state ;
2018-12-17 13:20:46 -08:00
struct kmem_cache * rsp_buf_cache ;
2011-10-14 01:30:46 +00:00
struct srpt_send_ioctx * * ioctx_ring ;
2018-12-17 13:20:46 -08:00
struct kmem_cache * req_buf_cache ;
2017-10-11 10:27:25 -07:00
struct srpt_recv_ioctx * * ioctx_recv_ring ;
2011-10-14 01:30:46 +00:00
struct list_head list ;
struct list_head cmd_wait_list ;
2018-01-16 16:14:07 -08:00
uint16_t pkey ;
2018-03-02 13:14:15 -08:00
bool using_rdma_cm ;
2018-01-16 16:14:15 -08:00
bool processing_wait_list ;
2011-10-14 01:30:46 +00:00
struct se_session * sess ;
2018-03-02 13:14:15 -08:00
u8 sess_name [ 40 ] ;
2011-10-14 01:30:46 +00:00
struct work_struct release_work ;
} ;
2018-01-16 16:14:10 -08:00
/**
* struct srpt_nexus - I_T nexus
* @ rcu : RCU head for this data structure .
* @ entry : srpt_port . nexus_list list node .
* @ ch_list : struct srpt_rdma_ch list . Protected by srpt_port . mutex .
* @ i_port_id : 128 - bit initiator port identifier copied from SRP_LOGIN_REQ .
* @ t_port_id : 128 - bit target port identifier copied from SRP_LOGIN_REQ .
*/
struct srpt_nexus {
struct rcu_head rcu ;
struct list_head entry ;
struct list_head ch_list ;
u8 i_port_id [ 16 ] ;
u8 t_port_id [ 16 ] ;
} ;
2011-10-14 01:30:46 +00:00
/**
2020-12-01 13:08:55 +01:00
* struct srpt_port_attrib - attributes for SRPT port
2011-10-14 01:30:46 +00:00
* @ srp_max_rdma_size : Maximum size of SRP RDMA transfers for new connections .
* @ srp_max_rsp_size : Maximum size of SRP response messages in bytes .
* @ srp_sq_size : Shared receive queue ( SRQ ) size .
2017-10-11 10:27:25 -07:00
* @ use_srq : Whether or not to use SRQ .
2011-10-14 01:30:46 +00:00
*/
struct srpt_port_attrib {
u32 srp_max_rdma_size ;
u32 srp_max_rsp_size ;
u32 srp_sq_size ;
2017-10-11 10:27:25 -07:00
bool use_srq ;
2011-10-14 01:30:46 +00:00
} ;
2019-10-23 13:41:06 -07:00
/**
* struct srpt_tpg - information about a single " target portal group "
* @ entry : Entry in @ sport_id - > tpg_list .
* @ sport_id : Port name this TPG is associated with .
* @ tpg : LIO TPG data structure .
*
* Zero or more target portal groups are associated with each port name
* ( srpt_port_id ) . With each TPG an ACL list is associated .
*/
struct srpt_tpg {
struct list_head entry ;
struct srpt_port_id * sport_id ;
struct se_portal_group tpg ;
} ;
2019-09-30 16:17:06 -07:00
/**
* struct srpt_port_id - information about an RDMA port name
2019-10-23 13:41:06 -07:00
* @ mutex : Protects @ tpg_list changes .
* @ tpg_list : TPGs associated with the RDMA port name .
* @ wwn : WWN associated with the RDMA port name .
* @ name : ASCII representation of the port name .
2019-09-30 16:17:06 -07:00
*
* Multiple sysfs directories can be associated with a single RDMA port . This
* data structure represents a single ( port , name ) pair .
*/
struct srpt_port_id {
2019-10-23 13:41:06 -07:00
struct mutex mutex ;
struct list_head tpg_list ;
2019-09-30 16:17:06 -07:00
struct se_wwn wwn ;
char name [ 64 ] ;
} ;
2011-10-14 01:30:46 +00:00
/**
2018-01-08 11:00:42 -08:00
* struct srpt_port - information associated by SRPT with a single IB port
2011-10-14 01:30:46 +00:00
* @ sdev : backpointer to the HCA information .
* @ mad_agent : per - port management datagram processing information .
* @ enabled : Whether or not this target port is enabled .
* @ port : one - based port number .
* @ sm_lid : cached value of the port ' s sm_lid .
* @ lid : cached value of the port ' s lid .
* @ gid : cached value of the port ' s gid .
* @ work : work structure for refreshing the aforementioned cached values .
2019-10-09 20:52:45 -07:00
* @ port_guid_id : target port GUID
* @ port_gid_id : target port GID
2018-01-08 11:00:42 -08:00
* @ port_attrib : Port attributes that can be accessed through configfs .
2019-09-30 16:17:05 -07:00
* @ refcount : Number of objects associated with this port .
* @ freed_channels : Completion that will be signaled once @ refcount becomes 0.
2018-01-16 16:14:10 -08:00
* @ mutex : Protects nexus_list .
* @ nexus_list : Nexus list . See also srpt_nexus . entry .
2011-10-14 01:30:46 +00:00
*/
struct srpt_port {
struct srpt_device * sdev ;
struct ib_mad_agent * mad_agent ;
bool enabled ;
u8 port ;
2017-06-08 13:37:44 -04:00
u32 sm_lid ;
u32 lid ;
2011-10-14 01:30:46 +00:00
union ib_gid gid ;
struct work_struct work ;
2019-09-30 16:17:06 -07:00
struct srpt_port_id port_guid_id ;
struct srpt_port_id port_gid_id ;
2011-10-14 01:30:46 +00:00
struct srpt_port_attrib port_attrib ;
2019-09-30 16:17:05 -07:00
atomic_t refcount ;
struct completion * freed_channels ;
2018-01-16 16:14:08 -08:00
struct mutex mutex ;
2018-01-16 16:14:10 -08:00
struct list_head nexus_list ;
2011-10-14 01:30:46 +00:00
} ;
/**
2018-01-08 11:00:42 -08:00
* struct srpt_device - information associated by SRPT with a single HCA
2011-10-14 01:30:46 +00:00
* @ device : Backpointer to the struct ib_device managed by the IB core .
* @ pd : IB protection domain .
2017-10-11 10:27:24 -07:00
* @ lkey : L_Key ( local key ) with write access to all local memory .
2011-10-14 01:30:46 +00:00
* @ srq : Per - HCA SRQ ( shared receive queue ) .
* @ cm_id : Connection identifier .
* @ srq_size : SRQ size .
2018-01-16 16:14:08 -08:00
* @ sdev_mutex : Serializes use_srq changes .
2017-10-11 10:27:25 -07:00
* @ use_srq : Whether or not to use SRQ .
2018-12-17 13:20:46 -08:00
* @ req_buf_cache : kmem_cache for @ ioctx_ring buffers .
2011-10-14 01:30:46 +00:00
* @ ioctx_ring : Per - HCA SRQ .
* @ event_handler : Per - HCA asynchronous IB event handler .
* @ list : Node in srpt_dev_list .
2018-06-26 15:24:48 -07:00
* @ port : Information about the ports owned by this HCA .
2011-10-14 01:30:46 +00:00
*/
struct srpt_device {
struct ib_device * device ;
struct ib_pd * pd ;
2017-10-11 10:27:24 -07:00
u32 lkey ;
2011-10-14 01:30:46 +00:00
struct ib_srq * srq ;
struct ib_cm_id * cm_id ;
int srq_size ;
2018-01-16 16:14:08 -08:00
struct mutex sdev_mutex ;
2017-10-11 10:27:25 -07:00
bool use_srq ;
2018-12-17 13:20:46 -08:00
struct kmem_cache * req_buf_cache ;
2011-10-14 01:30:46 +00:00
struct srpt_recv_ioctx * * ioctx_ring ;
struct ib_event_handler event_handler ;
struct list_head list ;
2018-06-26 15:24:48 -07:00
struct srpt_port port [ ] ;
2011-10-14 01:30:46 +00:00
} ;
# endif /* IB_SRPT_H */