2019-05-27 08:55:05 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-08-04 19:31:00 -07:00
/*
2005-04-16 15:20:36 -07:00
* iSCSI transport class definitions
*
* Copyright ( C ) IBM Corporation , 2004
2006-04-06 21:13:41 -05:00
* Copyright ( C ) Mike Christie , 2004 - 2006
2005-08-04 19:31:00 -07:00
* Copyright ( C ) Dmitry Yusupov , 2004 - 2005
* Copyright ( C ) Alex Aizman , 2004 - 2005
2005-04-16 15:20:36 -07:00
*/
# ifndef SCSI_TRANSPORT_ISCSI_H
# define SCSI_TRANSPORT_ISCSI_H
2006-01-13 18:05:50 -06:00
# include <linux/device.h>
2007-10-02 14:38:05 -07:00
# include <linux/list.h>
# include <linux/mutex.h>
2005-08-04 19:31:00 -07:00
# include <scsi/iscsi_if.h>
2005-04-16 15:20:36 -07:00
2006-01-13 18:05:50 -06:00
struct scsi_transport_template ;
2006-04-06 21:13:41 -05:00
struct iscsi_transport ;
2008-05-21 15:54:13 -05:00
struct iscsi_endpoint ;
2006-01-13 18:05:50 -06:00
struct Scsi_Host ;
2010-07-22 16:59:49 +05:30
struct scsi_cmnd ;
2006-01-13 18:05:50 -06:00
struct iscsi_cls_conn ;
2006-04-06 21:13:41 -05:00
struct iscsi_conn ;
2008-05-21 15:54:09 -05:00
struct iscsi_task ;
2006-06-28 12:00:23 -05:00
struct sockaddr ;
2011-07-25 13:48:40 -05:00
struct iscsi_iface ;
2011-07-25 13:48:50 -05:00
struct bsg_job ;
2013-03-22 07:41:29 -04:00
struct iscsi_bus_flash_session ;
struct iscsi_bus_flash_conn ;
2006-01-13 18:05:50 -06:00
2005-08-04 19:31:00 -07:00
/**
* struct iscsi_transport - iSCSI Transport template
*
* @ name : transport name
* @ caps : iSCSI Data - Path capabilities
* @ create_session : create new iSCSI session object
* @ destroy_session : destroy existing iSCSI session object
* @ create_conn : create new iSCSI connection
* @ bind_conn : associate this connection with existing iSCSI session
* and specified transport descriptor
* @ destroy_conn : destroy inactive iSCSI connection
2006-06-28 12:00:23 -05:00
* @ set_param : set iSCSI parameter . Return 0 on success , - ENODATA
* when param is not supported , and a - Exx value on other
* error .
* @ get_param get iSCSI parameter . Must return number of bytes
* copied to buffer on success , - ENODATA when param
* is not supported , and a - Exx value on other error
2005-08-04 19:31:00 -07:00
* @ start_conn : set connection to be operational
* @ stop_conn : suspend / recover / terminate connection
* @ send_pdu : send iSCSI PDU , Login , Logout , NOP - Out , Reject , Text .
2006-04-06 21:13:41 -05:00
* @ session_recovery_timedout : notify LLD a block during recovery timed out
2008-05-21 15:54:06 -05:00
* @ init_task : Initialize a iscsi_task and any internal structs .
* When offloading the data path , this is called from
* queuecommand with the session lock , or from the
* iscsi_conn_send_pdu context with the session lock .
* When not offloading the data path , this is called
* from the scsi work queue without the session lock .
* @ xmit_task Requests LLD to transfer cmd task . Returns 0 or the
2020-07-18 17:32:32 -07:00
* number of bytes transferred on success , and - Exyz
2008-05-21 15:54:06 -05:00
* value on error . When offloading the data path , this
* is called from queuecommand with the session lock , or
* from the iscsi_conn_send_pdu context with the session
* lock . When not offloading the data path , this is called
* from the scsi work queue without the session lock .
* @ cleanup_task : requests LLD to fail task . Called with session lock
* and after the connection has been suspended and
* terminated during recovery . If called
2006-04-06 21:13:41 -05:00
* from abort task then connection is not suspended
* or terminated but sk_callback_lock is held
2005-08-04 19:31:00 -07:00
*
* Template API provided by iSCSI Transport
*/
struct iscsi_transport {
struct module * owner ;
char * name ;
unsigned int caps ;
2011-07-25 13:48:40 -05:00
2008-05-21 15:54:13 -05:00
struct iscsi_cls_session * ( * create_session ) ( struct iscsi_endpoint * ep ,
2008-05-21 15:53:59 -05:00
uint16_t cmds_max , uint16_t qdepth ,
2009-03-05 14:46:06 -06:00
uint32_t sn ) ;
2006-02-01 21:06:49 -06:00
void ( * destroy_session ) ( struct iscsi_cls_session * session ) ;
struct iscsi_cls_conn * ( * create_conn ) ( struct iscsi_cls_session * sess ,
2006-01-13 18:05:50 -06:00
uint32_t cid ) ;
2021-05-25 13:17:55 -05:00
void ( * unbind_conn ) ( struct iscsi_cls_conn * conn , bool is_active ) ;
2006-02-01 21:06:49 -06:00
int ( * bind_conn ) ( struct iscsi_cls_session * session ,
struct iscsi_cls_conn * cls_conn ,
2006-05-02 19:46:36 -05:00
uint64_t transport_eph , int is_leading ) ;
2006-02-01 21:06:49 -06:00
int ( * start_conn ) ( struct iscsi_cls_conn * conn ) ;
void ( * stop_conn ) ( struct iscsi_cls_conn * conn , int flag ) ;
2006-01-13 18:05:50 -06:00
void ( * destroy_conn ) ( struct iscsi_cls_conn * conn ) ;
2006-02-01 21:06:49 -06:00
int ( * set_param ) ( struct iscsi_cls_conn * conn , enum iscsi_param param ,
2006-06-28 12:00:23 -05:00
char * buf , int buflen ) ;
2011-02-16 15:04:37 -06:00
int ( * get_ep_param ) ( struct iscsi_endpoint * ep , enum iscsi_param param ,
char * buf ) ;
2006-02-01 21:06:49 -06:00
int ( * get_conn_param ) ( struct iscsi_cls_conn * conn ,
2006-06-28 12:00:23 -05:00
enum iscsi_param param , char * buf ) ;
2006-02-01 21:06:49 -06:00
int ( * get_session_param ) ( struct iscsi_cls_session * session ,
2006-06-28 12:00:23 -05:00
enum iscsi_param param , char * buf ) ;
2007-05-30 12:57:08 -05:00
int ( * get_host_param ) ( struct Scsi_Host * shost ,
enum iscsi_host_param param , char * buf ) ;
2007-05-30 12:57:11 -05:00
int ( * set_host_param ) ( struct Scsi_Host * shost ,
enum iscsi_host_param param , char * buf ,
int buflen ) ;
2006-02-01 21:06:49 -06:00
int ( * send_pdu ) ( struct iscsi_cls_conn * conn , struct iscsi_hdr * hdr ,
2005-08-04 19:31:00 -07:00
char * data , uint32_t data_size ) ;
2006-02-01 21:06:49 -06:00
void ( * get_stats ) ( struct iscsi_cls_conn * conn ,
struct iscsi_stats * stats ) ;
2008-12-02 00:32:05 -06:00
2008-05-21 15:54:09 -05:00
int ( * init_task ) ( struct iscsi_task * task ) ;
int ( * xmit_task ) ( struct iscsi_task * task ) ;
2008-12-02 00:32:05 -06:00
void ( * cleanup_task ) ( struct iscsi_task * task ) ;
2008-12-02 00:32:14 -06:00
int ( * alloc_pdu ) ( struct iscsi_task * task , uint8_t opcode ) ;
2008-12-02 00:32:05 -06:00
int ( * xmit_pdu ) ( struct iscsi_task * task ) ;
int ( * init_pdu ) ( struct iscsi_task * task , unsigned int offset ,
unsigned int count ) ;
2008-12-02 00:32:13 -06:00
void ( * parse_pdu_itt ) ( struct iscsi_conn * conn , itt_t itt ,
int * index , int * age ) ;
2006-04-06 21:13:39 -05:00
void ( * session_recovery_timedout ) ( struct iscsi_cls_session * session ) ;
2009-05-13 17:57:38 -05:00
struct iscsi_endpoint * ( * ep_connect ) ( struct Scsi_Host * shost ,
struct sockaddr * dst_addr ,
2008-05-21 15:54:13 -05:00
int non_blocking ) ;
int ( * ep_poll ) ( struct iscsi_endpoint * ep , int timeout_ms ) ;
void ( * ep_disconnect ) ( struct iscsi_endpoint * ep ) ;
2007-05-30 12:57:10 -05:00
int ( * tgt_dscvr ) ( struct Scsi_Host * shost , enum iscsi_tgt_dscvr type ,
2006-06-28 12:00:22 -05:00
uint32_t enable , struct sockaddr * dst_addr ) ;
2009-06-08 18:14:41 -07:00
int ( * set_path ) ( struct Scsi_Host * shost , struct iscsi_path * params ) ;
2011-10-06 03:56:59 -05:00
int ( * set_iface_param ) ( struct Scsi_Host * shost , void * data ,
uint32_t len ) ;
2011-07-25 13:48:40 -05:00
int ( * get_iface_param ) ( struct iscsi_iface * iface ,
enum iscsi_param_type param_type ,
int param , char * buf ) ;
2011-07-23 23:11:19 -04:00
umode_t ( * attr_is_visible ) ( int param_type , int param ) ;
2011-07-25 13:48:50 -05:00
int ( * bsg_request ) ( struct bsg_job * job ) ;
2012-02-13 18:30:48 +05:30
int ( * send_ping ) ( struct Scsi_Host * shost , uint32_t iface_num ,
uint32_t iface_type , uint32_t payload_size ,
uint32_t pid , struct sockaddr * dst_addr ) ;
2012-02-27 03:08:51 -08:00
int ( * get_chap ) ( struct Scsi_Host * shost , uint16_t chap_tbl_idx ,
uint32_t * num_entries , char * buf ) ;
int ( * delete_chap ) ( struct Scsi_Host * shost , uint16_t chap_tbl_idx ) ;
2013-09-17 07:54:48 -04:00
int ( * set_chap ) ( struct Scsi_Host * shost , void * data , int len ) ;
2013-03-22 07:41:29 -04:00
int ( * get_flashnode_param ) ( struct iscsi_bus_flash_session * fnode_sess ,
int param , char * buf ) ;
int ( * set_flashnode_param ) ( struct iscsi_bus_flash_session * fnode_sess ,
struct iscsi_bus_flash_conn * fnode_conn ,
void * data , int len ) ;
int ( * new_flashnode ) ( struct Scsi_Host * shost , const char * buf ,
int len ) ;
int ( * del_flashnode ) ( struct iscsi_bus_flash_session * fnode_sess ) ;
int ( * login_flashnode ) ( struct iscsi_bus_flash_session * fnode_sess ,
struct iscsi_bus_flash_conn * fnode_conn ) ;
int ( * logout_flashnode ) ( struct iscsi_bus_flash_session * fnode_sess ,
struct iscsi_bus_flash_conn * fnode_conn ) ;
int ( * logout_flashnode_sid ) ( struct iscsi_cls_session * cls_sess ) ;
2013-11-22 05:28:18 -05:00
int ( * get_host_stats ) ( struct Scsi_Host * shost , char * buf , int len ) ;
2014-03-05 19:43:49 +02:00
u8 ( * check_protection ) ( struct iscsi_task * task , sector_t * sector ) ;
2005-04-16 15:20:36 -07:00
} ;
/*
2005-08-04 19:31:00 -07:00
* transport registration upcalls
2005-04-16 15:20:36 -07:00
*/
2006-01-13 18:05:50 -06:00
extern struct scsi_transport_template * iscsi_register_transport ( struct iscsi_transport * tt ) ;
2005-08-04 19:31:00 -07:00
extern int iscsi_unregister_transport ( struct iscsi_transport * tt ) ;
2005-04-16 15:20:36 -07:00
/*
2005-08-04 19:31:00 -07:00
* control plane upcalls
2005-04-16 15:20:36 -07:00
*/
2008-09-24 11:46:10 -05:00
extern void iscsi_conn_error_event ( struct iscsi_cls_conn * conn ,
enum iscsi_err error ) ;
2011-07-25 13:48:52 -05:00
extern void iscsi_conn_login_event ( struct iscsi_cls_conn * conn ,
enum iscsi_conn_state state ) ;
2006-02-01 21:06:49 -06:00
extern int iscsi_recv_pdu ( struct iscsi_cls_conn * conn , struct iscsi_hdr * hdr ,
2005-08-04 19:31:00 -07:00
char * data , uint32_t data_size ) ;
2005-04-16 15:20:36 -07:00
2009-06-08 18:14:41 -07:00
extern int iscsi_offload_mesg ( struct Scsi_Host * shost ,
struct iscsi_transport * transport , uint32_t type ,
char * data , uint16_t data_size ) ;
2012-02-13 18:30:46 +05:30
extern void iscsi_post_host_event ( uint32_t host_no ,
struct iscsi_transport * transport ,
enum iscsi_host_event_code code ,
uint32_t data_size ,
uint8_t * data ) ;
2012-02-13 18:30:48 +05:30
extern void iscsi_ping_comp_event ( uint32_t host_no ,
struct iscsi_transport * transport ,
uint32_t status , uint32_t pid ,
uint32_t data_size , uint8_t * data ) ;
2020-03-17 19:34:22 -04:00
/* iscsi class connection state */
enum iscsi_connection_state {
ISCSI_CONN_UP = 0 ,
ISCSI_CONN_DOWN ,
ISCSI_CONN_FAILED ,
2021-03-25 09:32:48 +00:00
ISCSI_CONN_BOUND ,
2020-03-17 19:34:22 -04:00
} ;
2021-05-25 13:18:00 -05:00
# define ISCSI_CLS_CONN_BIT_CLEANUP 1
2006-01-13 18:05:50 -06:00
struct iscsi_cls_conn {
struct list_head conn_list ; /* item in connlist */
void * dd_data ; /* LLD private data */
struct iscsi_transport * transport ;
2006-04-06 21:13:33 -05:00
uint32_t cid ; /* connection id */
2021-05-25 13:18:00 -05:00
/*
* This protects the conn startup and binding / unbinding of the ep to
* the conn . Unbinding includes ep_disconnect and stop_conn .
*/
2011-02-16 15:04:33 -06:00
struct mutex ep_mutex ;
struct iscsi_endpoint * ep ;
2006-04-06 21:13:36 -05:00
2021-05-25 13:18:00 -05:00
unsigned long flags ;
struct work_struct cleanup_work ;
2006-01-13 18:05:50 -06:00
struct device dev ; /* sysfs transport/container device */
2020-03-17 19:34:22 -04:00
enum iscsi_connection_state state ;
2006-01-13 18:05:50 -06:00
} ;
# define iscsi_dev_to_conn(_dev) \
container_of ( _dev , struct iscsi_cls_conn , dev )
2011-07-25 13:48:42 -05:00
# define transport_class_to_conn(_cdev) \
iscsi_dev_to_conn ( _cdev - > parent )
2008-01-31 13:36:43 -06:00
# define iscsi_conn_to_session(_conn) \
iscsi_dev_to_session ( _conn - > dev . parent )
/* iscsi class session state */
enum {
ISCSI_SESSION_LOGGED_IN ,
ISCSI_SESSION_FAILED ,
ISCSI_SESSION_FREE ,
} ;
2006-04-06 21:13:41 -05:00
2008-05-21 15:54:12 -05:00
# define ISCSI_MAX_TARGET -1
2006-01-13 18:05:50 -06:00
struct iscsi_cls_session {
2006-02-01 21:06:49 -06:00
struct list_head sess_list ; /* item in session_list */
2006-01-13 18:05:50 -06:00
struct iscsi_transport * transport ;
2008-01-31 13:36:43 -06:00
spinlock_t lock ;
2008-03-04 13:26:55 -06:00
struct work_struct block_work ;
struct work_struct unblock_work ;
2008-01-31 13:36:46 -06:00
struct work_struct scan_work ;
struct work_struct unbind_work ;
2020-02-27 14:59:45 -05:00
struct work_struct destroy_work ;
2006-04-06 21:13:36 -05:00
2006-04-06 21:13:39 -05:00
/* recovery fields */
int recovery_tmo ;
2015-06-16 16:07:13 -07:00
bool recovery_tmo_sysfs_override ;
2006-11-22 14:57:56 +00:00
struct delayed_work recovery_work ;
2006-04-06 21:13:39 -05:00
2008-05-21 15:54:12 -05:00
unsigned int target_id ;
2011-10-06 03:56:57 -05:00
bool ida_used ;
2006-04-06 21:13:39 -05:00
2011-12-05 16:44:01 -06:00
/*
* pid of userspace process that created session or - 1 if
* created by the kernel .
*/
pid_t creator ;
2008-01-31 13:36:43 -06:00
int state ;
2006-04-06 21:13:33 -05:00
int sid ; /* session id */
void * dd_data ; /* LLD private data */
2006-01-13 18:05:50 -06:00
struct device dev ; /* sysfs transport/container device */
} ;
# define iscsi_dev_to_session(_dev) \
container_of ( _dev , struct iscsi_cls_session , dev )
2011-07-25 13:48:43 -05:00
# define transport_class_to_session(_cdev) \
iscsi_dev_to_session ( _cdev - > parent )
2006-01-13 18:05:50 -06:00
# define iscsi_session_to_shost(_session) \
dev_to_shost ( _session - > dev . parent )
2006-06-28 12:00:30 -05:00
# define starget_to_session(_stgt) \
iscsi_dev_to_session ( _stgt - > dev . parent )
2008-05-21 15:53:58 -05:00
struct iscsi_cls_host {
2008-01-31 13:36:48 -06:00
atomic_t nr_scans ;
2006-04-06 21:13:39 -05:00
struct mutex mutex ;
2011-07-25 13:48:50 -05:00
struct request_queue * bsg_q ;
2012-01-19 03:06:55 -08:00
uint32_t port_speed ;
uint32_t port_state ;
2006-04-06 21:13:39 -05:00
} ;
2011-07-25 13:48:50 -05:00
# define iscsi_job_to_shost(_job) \
dev_to_shost ( _job - > dev )
2008-05-21 15:54:00 -05:00
extern void iscsi_host_for_each_session ( struct Scsi_Host * shost ,
void ( * fn ) ( struct iscsi_cls_session * ) ) ;
2008-05-21 15:54:13 -05:00
struct iscsi_endpoint {
void * dd_data ; /* LLD private data */
struct device dev ;
2008-09-24 11:46:11 -05:00
uint64_t id ;
2011-02-16 15:04:33 -06:00
struct iscsi_cls_conn * conn ;
2008-05-21 15:54:13 -05:00
} ;
2008-05-21 15:54:00 -05:00
2011-07-25 13:48:40 -05:00
struct iscsi_iface {
struct device dev ;
struct iscsi_transport * transport ;
uint32_t iface_type ; /* IPv4 or IPv6 */
uint32_t iface_num ; /* iface number, 0 - n */
void * dd_data ; /* LLD private data */
} ;
# define iscsi_dev_to_iface(_dev) \
container_of ( _dev , struct iscsi_iface , dev )
# define iscsi_iface_to_shost(_iface) \
dev_to_shost ( _iface - > dev . parent )
2013-03-22 07:41:29 -04:00
struct iscsi_bus_flash_conn {
struct list_head conn_list ; /* item in connlist */
void * dd_data ; /* LLD private data */
struct iscsi_transport * transport ;
struct device dev ; /* sysfs transport/container device */
/* iscsi connection parameters */
uint32_t exp_statsn ;
uint32_t statsn ;
unsigned max_recv_dlength ; /* initiator_max_recv_dsl*/
unsigned max_xmit_dlength ; /* target_max_recv_dsl */
unsigned max_segment_size ;
unsigned tcp_xmit_wsf ;
unsigned tcp_recv_wsf ;
int hdrdgst_en ;
int datadgst_en ;
int port ;
char * ipaddress ;
char * link_local_ipv6_addr ;
char * redirect_ipaddr ;
uint16_t keepalive_timeout ;
uint16_t local_port ;
uint8_t snack_req_en ;
/* tcp timestamp negotiation status */
uint8_t tcp_timestamp_stat ;
uint8_t tcp_nagle_disable ;
/* tcp window scale factor */
uint8_t tcp_wsf_disable ;
uint8_t tcp_timer_scale ;
uint8_t tcp_timestamp_en ;
uint8_t ipv4_tos ;
uint8_t ipv6_traffic_class ;
uint8_t ipv6_flow_label ;
uint8_t fragment_disable ;
/* Link local IPv6 address is assigned by firmware or driver */
uint8_t is_fw_assigned_ipv6 ;
} ;
# define iscsi_dev_to_flash_conn(_dev) \
container_of ( _dev , struct iscsi_bus_flash_conn , dev )
# define iscsi_flash_conn_to_flash_session(_conn) \
iscsi_dev_to_flash_session ( _conn - > dev . parent )
# define ISID_SIZE 6
struct iscsi_bus_flash_session {
struct list_head sess_list ; /* item in session_list */
struct iscsi_transport * transport ;
unsigned int target_id ;
int flash_state ; /* persistent or non-persistent */
void * dd_data ; /* LLD private data */
struct device dev ; /* sysfs transport/container device */
/* iscsi session parameters */
unsigned first_burst ;
unsigned max_burst ;
unsigned short max_r2t ;
int default_taskmgmt_timeout ;
int initial_r2t_en ;
int imm_data_en ;
int time2wait ;
int time2retain ;
int pdu_inorder_en ;
int dataseq_inorder_en ;
int erl ;
int tpgt ;
char * username ;
char * username_in ;
char * password ;
char * password_in ;
char * targetname ;
char * targetalias ;
char * portal_type ;
uint16_t tsid ;
uint16_t chap_in_idx ;
uint16_t chap_out_idx ;
/* index of iSCSI discovery session if the entry is
* discovered by iSCSI discovery session
*/
uint16_t discovery_parent_idx ;
/* indicates if discovery was done through iSNS discovery service
* or through sendTarget */
uint16_t discovery_parent_type ;
/* Firmware auto sendtarget discovery disable */
uint8_t auto_snd_tgt_disable ;
uint8_t discovery_sess ;
/* indicates if this flashnode entry is enabled or disabled */
uint8_t entry_state ;
uint8_t chap_auth_en ;
/* enables firmware to auto logout the discovery session on discovery
* completion
*/
uint8_t discovery_logout_en ;
uint8_t bidi_chap_en ;
/* makes authentication for discovery session optional */
uint8_t discovery_auth_optional ;
uint8_t isid [ ISID_SIZE ] ;
uint8_t is_boot_target ;
} ;
# define iscsi_dev_to_flash_session(_dev) \
container_of ( _dev , struct iscsi_bus_flash_session , dev )
# define iscsi_flash_session_to_shost(_session) \
dev_to_shost ( _session - > dev . parent )
2006-01-13 18:05:50 -06:00
/*
* session and connection functions that can be used by HW iSCSI LLDs
*/
2008-01-31 13:36:52 -06:00
# define iscsi_cls_session_printk(prefix, _cls_session, fmt, a...) \
dev_printk ( prefix , & ( _cls_session ) - > dev , fmt , # # a )
# define iscsi_cls_conn_printk(prefix, _cls_conn, fmt, a...) \
dev_printk ( prefix , & ( _cls_conn ) - > dev , fmt , # # a )
2008-01-31 13:36:43 -06:00
extern int iscsi_session_chkready ( struct iscsi_cls_session * session ) ;
2011-07-25 13:48:52 -05:00
extern int iscsi_is_session_online ( struct iscsi_cls_session * session ) ;
2006-06-28 12:00:30 -05:00
extern struct iscsi_cls_session * iscsi_alloc_session ( struct Scsi_Host * shost ,
2008-05-21 15:54:01 -05:00
struct iscsi_transport * transport , int dd_size ) ;
2006-06-28 12:00:31 -05:00
extern int iscsi_add_session ( struct iscsi_cls_session * session ,
unsigned int target_id ) ;
2007-12-13 12:43:29 -06:00
extern int iscsi_session_event ( struct iscsi_cls_session * session ,
enum iscsi_uevent_e event ) ;
2006-01-13 18:05:50 -06:00
extern struct iscsi_cls_session * iscsi_create_session ( struct Scsi_Host * shost ,
2006-06-28 12:00:31 -05:00
struct iscsi_transport * t ,
2008-05-21 15:54:01 -05:00
int dd_size ,
2006-06-28 12:00:31 -05:00
unsigned int target_id ) ;
2006-06-28 12:00:30 -05:00
extern void iscsi_remove_session ( struct iscsi_cls_session * session ) ;
extern void iscsi_free_session ( struct iscsi_cls_session * session ) ;
2006-01-13 18:05:50 -06:00
extern struct iscsi_cls_conn * iscsi_create_conn ( struct iscsi_cls_session * sess ,
2008-05-21 15:54:01 -05:00
int dd_size , uint32_t cid ) ;
2021-05-25 13:18:03 -05:00
extern void iscsi_put_conn ( struct iscsi_cls_conn * conn ) ;
extern void iscsi_get_conn ( struct iscsi_cls_conn * conn ) ;
2006-01-13 18:05:50 -06:00
extern int iscsi_destroy_conn ( struct iscsi_cls_conn * conn ) ;
2006-04-06 21:13:39 -05:00
extern void iscsi_unblock_session ( struct iscsi_cls_session * session ) ;
extern void iscsi_block_session ( struct iscsi_cls_session * session ) ;
2008-01-31 13:36:48 -06:00
extern int iscsi_scan_finished ( struct Scsi_Host * shost , unsigned long time ) ;
2008-05-21 15:54:13 -05:00
extern struct iscsi_endpoint * iscsi_create_endpoint ( int dd_size ) ;
extern void iscsi_destroy_endpoint ( struct iscsi_endpoint * ep ) ;
extern struct iscsi_endpoint * iscsi_lookup_endpoint ( u64 handle ) ;
2021-05-25 13:17:59 -05:00
extern void iscsi_put_endpoint ( struct iscsi_endpoint * ep ) ;
2010-07-22 16:59:49 +05:30
extern int iscsi_block_scsi_eh ( struct scsi_cmnd * cmd ) ;
2011-07-25 13:48:40 -05:00
extern struct iscsi_iface * iscsi_create_iface ( struct Scsi_Host * shost ,
struct iscsi_transport * t ,
uint32_t iface_type ,
uint32_t iface_num , int dd_size ) ;
extern void iscsi_destroy_iface ( struct iscsi_iface * iface ) ;
extern struct iscsi_iface * iscsi_lookup_iface ( int handle ) ;
2012-01-19 03:06:55 -08:00
extern char * iscsi_get_port_speed_name ( struct Scsi_Host * shost ) ;
extern char * iscsi_get_port_state_name ( struct Scsi_Host * shost ) ;
2012-02-27 03:08:51 -08:00
extern int iscsi_is_session_dev ( const struct device * dev ) ;
2006-06-28 12:00:32 -05:00
2013-03-22 07:41:29 -04:00
extern char * iscsi_get_discovery_parent_name ( int parent_type ) ;
extern struct device *
iscsi_find_flashnode ( struct Scsi_Host * shost , void * data ,
int ( * fn ) ( struct device * dev , void * data ) ) ;
extern struct iscsi_bus_flash_session *
iscsi_create_flashnode_sess ( struct Scsi_Host * shost , int index ,
struct iscsi_transport * transport , int dd_size ) ;
extern struct iscsi_bus_flash_conn *
iscsi_create_flashnode_conn ( struct Scsi_Host * shost ,
struct iscsi_bus_flash_session * fnode_sess ,
struct iscsi_transport * transport , int dd_size ) ;
extern void
iscsi_destroy_flashnode_sess ( struct iscsi_bus_flash_session * fnode_sess ) ;
extern void iscsi_destroy_all_flashnode ( struct Scsi_Host * shost ) ;
extern int iscsi_flashnode_bus_match ( struct device * dev ,
struct device_driver * drv ) ;
extern struct device *
iscsi_find_flashnode_sess ( struct Scsi_Host * shost , void * data ,
int ( * fn ) ( struct device * dev , void * data ) ) ;
extern struct device *
2013-05-06 12:06:56 -05:00
iscsi_find_flashnode_conn ( struct iscsi_bus_flash_session * fnode_sess ) ;
2013-10-18 09:01:41 -04:00
extern char *
iscsi_get_ipaddress_state_name ( enum iscsi_ipaddress_state port_state ) ;
extern char * iscsi_get_router_state_name ( enum iscsi_router_state router_state ) ;
2005-04-16 15:20:36 -07:00
# endif