13f993063SNicholas Bellinger #include <linux/module.h> 23f993063SNicholas Bellinger #include <linux/list.h> 367f091f2SSagi Grimberg #include "iscsi_target_core.h" 43f993063SNicholas Bellinger 53f993063SNicholas Bellinger struct iscsit_transport { 63f993063SNicholas Bellinger #define ISCSIT_TRANSPORT_NAME 16 73f993063SNicholas Bellinger char name[ISCSIT_TRANSPORT_NAME]; 83f993063SNicholas Bellinger int transport_type; 9d703ce2fSNicholas Bellinger int priv_size; 103f993063SNicholas Bellinger struct module *owner; 113f993063SNicholas Bellinger struct list_head t_node; 1213a3cf08SAndy Grover int (*iscsit_setup_np)(struct iscsi_np *, struct sockaddr_storage *); 133f993063SNicholas Bellinger int (*iscsit_accept_np)(struct iscsi_np *, struct iscsi_conn *); 143f993063SNicholas Bellinger void (*iscsit_free_np)(struct iscsi_np *); 15defd8848SNicholas Bellinger void (*iscsit_wait_conn)(struct iscsi_conn *); 163f993063SNicholas Bellinger void (*iscsit_free_conn)(struct iscsi_conn *); 173f993063SNicholas Bellinger int (*iscsit_get_login_rx)(struct iscsi_conn *, struct iscsi_login *); 183f993063SNicholas Bellinger int (*iscsit_put_login_tx)(struct iscsi_conn *, struct iscsi_login *, u32); 193f993063SNicholas Bellinger int (*iscsit_immediate_queue)(struct iscsi_conn *, struct iscsi_cmd *, int); 203f993063SNicholas Bellinger int (*iscsit_response_queue)(struct iscsi_conn *, struct iscsi_cmd *, int); 213f993063SNicholas Bellinger int (*iscsit_get_dataout)(struct iscsi_conn *, struct iscsi_cmd *, bool); 223f993063SNicholas Bellinger int (*iscsit_queue_data_in)(struct iscsi_conn *, struct iscsi_cmd *); 233f993063SNicholas Bellinger int (*iscsit_queue_status)(struct iscsi_conn *, struct iscsi_cmd *); 24131e6abcSNicholas Bellinger void (*iscsit_aborted_task)(struct iscsi_conn *, struct iscsi_cmd *); 252854bb23SVarun Prakash int (*iscsit_xmit_pdu)(struct iscsi_conn *, struct iscsi_cmd *, 262854bb23SVarun Prakash struct iscsi_datain_req *, const void *, u32); 277ec811a8SVarun Prakash void (*iscsit_release_cmd)(struct iscsi_conn *, struct iscsi_cmd *); 28187e84f7SVarun Prakash void (*iscsit_get_rx_pdu)(struct iscsi_conn *); 2942bc3e57SVarun Prakash int (*iscsit_validate_params)(struct iscsi_conn *); 308567270dSVarun Prakash void (*iscsit_get_r2t_ttt)(struct iscsi_conn *, struct iscsi_cmd *, 318567270dSVarun Prakash struct iscsi_r2t *); 32e70beee7SNicholas Bellinger enum target_prot_op (*iscsit_get_sup_prot_ops)(struct iscsi_conn *); 333f993063SNicholas Bellinger }; 343f993063SNicholas Bellinger 35d703ce2fSNicholas Bellinger static inline void *iscsit_priv_cmd(struct iscsi_cmd *cmd) 36d703ce2fSNicholas Bellinger { 37d703ce2fSNicholas Bellinger return (void *)(cmd + 1); 38d703ce2fSNicholas Bellinger } 39d703ce2fSNicholas Bellinger 403f993063SNicholas Bellinger /* 413f993063SNicholas Bellinger * From iscsi_target_transport.c 423f993063SNicholas Bellinger */ 433f993063SNicholas Bellinger 443f993063SNicholas Bellinger extern int iscsit_register_transport(struct iscsit_transport *); 453f993063SNicholas Bellinger extern void iscsit_unregister_transport(struct iscsit_transport *); 463f993063SNicholas Bellinger extern struct iscsit_transport *iscsit_get_transport(int); 473f993063SNicholas Bellinger extern void iscsit_put_transport(struct iscsit_transport *); 483f993063SNicholas Bellinger 493f993063SNicholas Bellinger /* 503f993063SNicholas Bellinger * From iscsi_target.c 513f993063SNicholas Bellinger */ 523f993063SNicholas Bellinger extern int iscsit_setup_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *, 533f993063SNicholas Bellinger unsigned char *); 543f993063SNicholas Bellinger extern void iscsit_set_unsoliticed_dataout(struct iscsi_cmd *); 553f993063SNicholas Bellinger extern int iscsit_process_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *, 563f993063SNicholas Bellinger struct iscsi_scsi_req *); 573f993063SNicholas Bellinger extern int iscsit_check_dataout_hdr(struct iscsi_conn *, unsigned char *, 583f993063SNicholas Bellinger struct iscsi_cmd **); 593f993063SNicholas Bellinger extern int iscsit_check_dataout_payload(struct iscsi_cmd *, struct iscsi_data *, 603f993063SNicholas Bellinger bool); 61778de368SNicholas Bellinger extern int iscsit_setup_nop_out(struct iscsi_conn *, struct iscsi_cmd *, 62778de368SNicholas Bellinger struct iscsi_nopout *); 63778de368SNicholas Bellinger extern int iscsit_process_nop_out(struct iscsi_conn *, struct iscsi_cmd *, 64778de368SNicholas Bellinger struct iscsi_nopout *); 653f993063SNicholas Bellinger extern int iscsit_handle_logout_cmd(struct iscsi_conn *, struct iscsi_cmd *, 663f993063SNicholas Bellinger unsigned char *); 673f993063SNicholas Bellinger extern int iscsit_handle_task_mgt_cmd(struct iscsi_conn *, struct iscsi_cmd *, 683f993063SNicholas Bellinger unsigned char *); 6964534aa7SNicholas Bellinger extern int iscsit_setup_text_cmd(struct iscsi_conn *, struct iscsi_cmd *, 7064534aa7SNicholas Bellinger struct iscsi_text *); 7164534aa7SNicholas Bellinger extern int iscsit_process_text_cmd(struct iscsi_conn *, struct iscsi_cmd *, 7264534aa7SNicholas Bellinger struct iscsi_text *); 733f993063SNicholas Bellinger extern void iscsit_build_rsp_pdu(struct iscsi_cmd *, struct iscsi_conn *, 743f993063SNicholas Bellinger bool, struct iscsi_scsi_rsp *); 753f993063SNicholas Bellinger extern void iscsit_build_nopin_rsp(struct iscsi_cmd *, struct iscsi_conn *, 763f993063SNicholas Bellinger struct iscsi_nopin *, bool); 773f993063SNicholas Bellinger extern void iscsit_build_task_mgt_rsp(struct iscsi_cmd *, struct iscsi_conn *, 783f993063SNicholas Bellinger struct iscsi_tm_rsp *); 79889c8a68SNicholas Bellinger extern int iscsit_build_text_rsp(struct iscsi_cmd *, struct iscsi_conn *, 8022c7aaa5SSagi Grimberg struct iscsi_text_rsp *, 8122c7aaa5SSagi Grimberg enum iscsit_transport_type); 823f993063SNicholas Bellinger extern void iscsit_build_reject(struct iscsi_cmd *, struct iscsi_conn *, 833f993063SNicholas Bellinger struct iscsi_reject *); 843f993063SNicholas Bellinger extern int iscsit_build_logout_rsp(struct iscsi_cmd *, struct iscsi_conn *, 853f993063SNicholas Bellinger struct iscsi_logout_rsp *); 863f993063SNicholas Bellinger extern int iscsit_logout_post_handler(struct iscsi_cmd *, struct iscsi_conn *); 873f993063SNicholas Bellinger /* 883f993063SNicholas Bellinger * From iscsi_target_device.c 893f993063SNicholas Bellinger */ 903f993063SNicholas Bellinger extern void iscsit_increment_maxcmdsn(struct iscsi_cmd *, struct iscsi_session *); 913f993063SNicholas Bellinger /* 92b2cb9649SNicholas Bellinger * From iscsi_target_erl0.c 93b2cb9649SNicholas Bellinger */ 94b2cb9649SNicholas Bellinger extern void iscsit_cause_connection_reinstatement(struct iscsi_conn *, int); 95b2cb9649SNicholas Bellinger /* 963f993063SNicholas Bellinger * From iscsi_target_erl1.c 973f993063SNicholas Bellinger */ 983f993063SNicholas Bellinger extern void iscsit_stop_dataout_timer(struct iscsi_cmd *); 993f993063SNicholas Bellinger 1003f993063SNicholas Bellinger /* 1013f993063SNicholas Bellinger * From iscsi_target_tmr.c 1023f993063SNicholas Bellinger */ 1033f993063SNicholas Bellinger extern int iscsit_tmr_post_handler(struct iscsi_cmd *, struct iscsi_conn *); 1043f993063SNicholas Bellinger 1053f993063SNicholas Bellinger /* 1063f993063SNicholas Bellinger * From iscsi_target_util.c 1073f993063SNicholas Bellinger */ 108676687c6SNicholas Bellinger extern struct iscsi_cmd *iscsit_allocate_cmd(struct iscsi_conn *, int); 109561bf158SNicholas Bellinger extern int iscsit_sequence_cmd(struct iscsi_conn *, struct iscsi_cmd *, 110561bf158SNicholas Bellinger unsigned char *, __be32); 111d703ce2fSNicholas Bellinger extern void iscsit_release_cmd(struct iscsi_cmd *); 112