
#ifndef __ISCSI_TRANSPORT_H__
#define __ISCSI_TRANSPORT_H__

#include <linux/module.h>
#include <linux/list.h>

#ifdef INSIDE_KERNEL_TREE
#include <scst/scst.h>
#else
#include <scst.h>
#endif

/* Forward declarations */
struct iscsi_session;
struct iscsi_kern_conn_info;
struct iscsi_conn;

enum iscsit_transport_type {
	ISCSI_TCP,
	ISCSI_RDMA,
};

struct iscsit_transport {
	struct iscsi_cmnd* (*iscsit_alloc_cmd)(struct iscsi_conn *conn,
					       struct iscsi_cmnd *parent);
	void (*iscsit_preprocessing_done)(struct iscsi_cmnd *cmnd);
	void (*iscsit_send_data_rsp)(struct iscsi_cmnd *req, u8 *sense,
				     int sense_len, u8 status,
				     int send_status);
	int (*iscsit_send_locally)(struct iscsi_cmnd *cmnd,
				   unsigned int cmd_count);
	void (*iscsit_set_sense_data)(struct iscsi_cmnd *rsp,
				      const u8 *sense_buf, int sense_len);
	int (*iscsit_receive_cmnd_data)(struct iscsi_cmnd *cmnd);
	void (*iscsit_make_conn_wr_active)(struct iscsi_conn *conn);
	void (*iscsit_free_cmd)(struct iscsi_cmnd *cmnd);

	void (*iscsit_set_req_data)(struct iscsi_cmnd *req,
				    struct iscsi_cmnd *rsp);

	int (*iscsit_conn_alloc)(struct iscsi_session *session,
				 struct iscsi_kern_conn_info *info,
				 struct iscsi_conn **new_conn,
				 struct iscsit_transport *transport);
	int (*iscsit_conn_activate)(struct iscsi_conn *conn);
	void (*iscsit_conn_free)(struct iscsi_conn *conn);
	void (*iscsit_conn_close)(struct iscsi_conn *conn, int flags);
	void (*iscsit_mark_conn_closed)(struct iscsi_conn *conn, int flags);

	ssize_t (*iscsit_get_initiator_ip)(struct iscsi_conn *conn, char *buf,
					   int size);

	void (*iscsit_close_all_portals)(void);

	unsigned int need_alloc_write_buf:1;

	struct module *owner;
	const char name[SCST_MAX_NAME];
	enum iscsit_transport_type transport_type;
	struct list_head transport_list_entry;
} ____cacheline_aligned;

extern int iscsit_reg_transport(struct iscsit_transport *t);
extern void iscsit_unreg_transport(struct iscsit_transport *t);
extern struct iscsit_transport *iscsit_get_transport(enum iscsit_transport_type type);

#endif /* __ISCSI_TRANSPORT_H__ */

