drivers/infiniband/ulp/rtrs/rtrs.h

Source file repositories/reference/linux-study-clean/drivers/infiniband/ulp/rtrs/rtrs.h

File Facts

System
Linux kernel
Corpus path
drivers/infiniband/ulp/rtrs/rtrs.h
Extension
.h
Size
5719 bytes
Lines
195
Domain
Driver Families
Bucket
drivers/infiniband
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct rtrs_addr {
	struct sockaddr_storage *src;
	struct sockaddr_storage *dst;
};

/**
 * struct rtrs_clt_ops - it holds the link event callback and private pointer.
 * @priv: User supplied private data.
 * @link_ev: Event notification callback function for connection state changes
 *	@priv: User supplied data that was passed to rtrs_clt_open()
 *	@ev: Occurred event
 */
struct rtrs_clt_ops {
	void	*priv;
	void	(*link_ev)(void *priv, enum rtrs_clt_link_ev ev);
};

struct rtrs_clt_sess *rtrs_clt_open(struct rtrs_clt_ops *ops,
				 const char *pathname,
				 const struct rtrs_addr *paths,
				 size_t path_cnt, u16 port,
				 size_t pdu_sz, u8 reconnect_delay_sec,
				 s16 max_reconnect_attempts, u32 nr_poll_queues);

void rtrs_clt_close(struct rtrs_clt_sess *clt);

enum wait_type {
	RTRS_PERMIT_NOWAIT = 0,
	RTRS_PERMIT_WAIT   = 1
};

/**
 * enum rtrs_clt_con_type - type of ib connection to use with a given
 * rtrs_permit
 * @RTRS_ADMIN_CON: use connection reserved for "service" messages
 * @RTRS_IO_CON: use a connection reserved for IO
 */
enum rtrs_clt_con_type {
	RTRS_ADMIN_CON,
	RTRS_IO_CON
};

struct rtrs_permit *rtrs_clt_get_permit(struct rtrs_clt_sess *sess,
					enum rtrs_clt_con_type con_type,
					enum wait_type wait);

void rtrs_clt_put_permit(struct rtrs_clt_sess *sess,
			 struct rtrs_permit *permit);

/**
 * struct rtrs_clt_req_ops - it holds the request confirmation callback
 * and a private pointer.
 * @priv: User supplied private data.
 * @conf_fn:	callback function to be called as confirmation
 *	@priv:	User provided data, passed back with corresponding
 *		@(conf) confirmation.
 *	@errno: error number.
 */
struct rtrs_clt_req_ops {
	void	*priv;
	void	(*conf_fn)(void *priv, int errno);
};

int rtrs_clt_request(int dir, struct rtrs_clt_req_ops *ops,
		     struct rtrs_clt_sess *sess, struct rtrs_permit *permit,
		     const struct kvec *vec, size_t nr, size_t len,
		     struct scatterlist *sg, unsigned int sg_cnt);
int rtrs_clt_rdma_cq_direct(struct rtrs_clt_sess *clt, unsigned int index);

/**
 * struct rtrs_attrs - RTRS session attributes
 * @queue_depth:	queue_depth saved from rtrs_clt_sess message
 * @max_io_size:	max_io_size from rtrs_clt_sess message, capped to
 *			  @max_segments * %SZ_4K
 * @max_segments:	max_segments saved from rtrs_clt_sess message
 */
struct rtrs_attrs {
	u32		queue_depth;
	u32		max_io_size;
	u32		max_segments;
};

int rtrs_clt_query(struct rtrs_clt_sess *sess, struct rtrs_attrs *attr);

/*
 * Here goes RTRS server API
 */

/**
 * enum rtrs_srv_link_ev - Server link events

Annotation

Implementation Notes