1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 266cd9d4eSMax Gurtovoy #include "iscsi_target_core.h" /* struct iscsit_cmd */ 38dcf07beSBart Van Assche 48dcf07beSBart Van Assche struct sockaddr_storage; 53f993063SNicholas Bellinger 63f993063SNicholas Bellinger struct iscsit_transport { 73f993063SNicholas Bellinger #define ISCSIT_TRANSPORT_NAME 16 83f993063SNicholas Bellinger char name[ISCSIT_TRANSPORT_NAME]; 93f993063SNicholas Bellinger int transport_type; 10bd027d85SNicholas Bellinger bool rdma_shutdown; 11d703ce2fSNicholas Bellinger int priv_size; 123f993063SNicholas Bellinger struct module *owner; 133f993063SNicholas Bellinger struct list_head t_node; 1413a3cf08SAndy Grover int (*iscsit_setup_np)(struct iscsi_np *, struct sockaddr_storage *); 15*be36d683SMax Gurtovoy int (*iscsit_accept_np)(struct iscsi_np *, struct iscsit_conn *); 163f993063SNicholas Bellinger void (*iscsit_free_np)(struct iscsi_np *); 17*be36d683SMax Gurtovoy void (*iscsit_wait_conn)(struct iscsit_conn *); 18*be36d683SMax Gurtovoy void (*iscsit_free_conn)(struct iscsit_conn *); 19*be36d683SMax Gurtovoy int (*iscsit_get_login_rx)(struct iscsit_conn *, struct iscsi_login *); 20*be36d683SMax Gurtovoy int (*iscsit_put_login_tx)(struct iscsit_conn *, struct iscsi_login *, u32); 21*be36d683SMax Gurtovoy int (*iscsit_immediate_queue)(struct iscsit_conn *, struct iscsit_cmd *, int); 22*be36d683SMax Gurtovoy int (*iscsit_response_queue)(struct iscsit_conn *, struct iscsit_cmd *, int); 23*be36d683SMax Gurtovoy int (*iscsit_get_dataout)(struct iscsit_conn *, struct iscsit_cmd *, bool); 24*be36d683SMax Gurtovoy int (*iscsit_queue_data_in)(struct iscsit_conn *, struct iscsit_cmd *); 25*be36d683SMax Gurtovoy int (*iscsit_queue_status)(struct iscsit_conn *, struct iscsit_cmd *); 26*be36d683SMax Gurtovoy void (*iscsit_aborted_task)(struct iscsit_conn *, struct iscsit_cmd *); 27*be36d683SMax Gurtovoy int (*iscsit_xmit_pdu)(struct iscsit_conn *, struct iscsit_cmd *, 282854bb23SVarun Prakash struct iscsi_datain_req *, const void *, u32); 29*be36d683SMax Gurtovoy void (*iscsit_unmap_cmd)(struct iscsit_conn *, struct iscsit_cmd *); 30*be36d683SMax Gurtovoy void (*iscsit_get_rx_pdu)(struct iscsit_conn *); 31*be36d683SMax Gurtovoy int (*iscsit_validate_params)(struct iscsit_conn *); 32*be36d683SMax Gurtovoy void (*iscsit_get_r2t_ttt)(struct iscsit_conn *, struct iscsit_cmd *, 338567270dSVarun Prakash struct iscsi_r2t *); 34*be36d683SMax Gurtovoy enum target_prot_op (*iscsit_get_sup_prot_ops)(struct iscsit_conn *); 353f993063SNicholas Bellinger }; 363f993063SNicholas Bellinger 3766cd9d4eSMax Gurtovoy static inline void *iscsit_priv_cmd(struct iscsit_cmd *cmd) 38d703ce2fSNicholas Bellinger { 39d703ce2fSNicholas Bellinger return (void *)(cmd + 1); 40d703ce2fSNicholas Bellinger } 41d703ce2fSNicholas Bellinger 423f993063SNicholas Bellinger /* 433f993063SNicholas Bellinger * From iscsi_target_transport.c 443f993063SNicholas Bellinger */ 453f993063SNicholas Bellinger 46a8ac7835SMax Gurtovoy extern void iscsit_register_transport(struct iscsit_transport *); 473f993063SNicholas Bellinger extern void iscsit_unregister_transport(struct iscsit_transport *); 483f993063SNicholas Bellinger extern struct iscsit_transport *iscsit_get_transport(int); 493f993063SNicholas Bellinger extern void iscsit_put_transport(struct iscsit_transport *); 503f993063SNicholas Bellinger 513f993063SNicholas Bellinger /* 523f993063SNicholas Bellinger * From iscsi_target.c 533f993063SNicholas Bellinger */ 54*be36d683SMax Gurtovoy extern int iscsit_setup_scsi_cmd(struct iscsit_conn *, struct iscsit_cmd *, 553f993063SNicholas Bellinger unsigned char *); 5666cd9d4eSMax Gurtovoy extern void iscsit_set_unsolicited_dataout(struct iscsit_cmd *); 57*be36d683SMax Gurtovoy extern int iscsit_process_scsi_cmd(struct iscsit_conn *, struct iscsit_cmd *, 583f993063SNicholas Bellinger struct iscsi_scsi_req *); 599a584bf9SVarun Prakash extern int 60*be36d683SMax Gurtovoy __iscsit_check_dataout_hdr(struct iscsit_conn *, void *, 6166cd9d4eSMax Gurtovoy struct iscsit_cmd *, u32, bool *); 629a584bf9SVarun Prakash extern int 63*be36d683SMax Gurtovoy iscsit_check_dataout_hdr(struct iscsit_conn *conn, void *buf, 6466cd9d4eSMax Gurtovoy struct iscsit_cmd **out_cmd); 6566cd9d4eSMax Gurtovoy extern int iscsit_check_dataout_payload(struct iscsit_cmd *, struct iscsi_data *, 663f993063SNicholas Bellinger bool); 67*be36d683SMax Gurtovoy extern int iscsit_setup_nop_out(struct iscsit_conn *, struct iscsit_cmd *, 68778de368SNicholas Bellinger struct iscsi_nopout *); 69*be36d683SMax Gurtovoy extern int iscsit_process_nop_out(struct iscsit_conn *, struct iscsit_cmd *, 70778de368SNicholas Bellinger struct iscsi_nopout *); 71*be36d683SMax Gurtovoy extern int iscsit_handle_logout_cmd(struct iscsit_conn *, struct iscsit_cmd *, 723f993063SNicholas Bellinger unsigned char *); 73*be36d683SMax Gurtovoy extern int iscsit_handle_task_mgt_cmd(struct iscsit_conn *, struct iscsit_cmd *, 743f993063SNicholas Bellinger unsigned char *); 75*be36d683SMax Gurtovoy extern int iscsit_setup_text_cmd(struct iscsit_conn *, struct iscsit_cmd *, 7664534aa7SNicholas Bellinger struct iscsi_text *); 77*be36d683SMax Gurtovoy extern int iscsit_process_text_cmd(struct iscsit_conn *, struct iscsit_cmd *, 7864534aa7SNicholas Bellinger struct iscsi_text *); 79*be36d683SMax Gurtovoy extern void iscsit_build_rsp_pdu(struct iscsit_cmd *, struct iscsit_conn *, 803f993063SNicholas Bellinger bool, struct iscsi_scsi_rsp *); 81*be36d683SMax Gurtovoy extern void iscsit_build_nopin_rsp(struct iscsit_cmd *, struct iscsit_conn *, 823f993063SNicholas Bellinger struct iscsi_nopin *, bool); 83*be36d683SMax Gurtovoy extern void iscsit_build_task_mgt_rsp(struct iscsit_cmd *, struct iscsit_conn *, 843f993063SNicholas Bellinger struct iscsi_tm_rsp *); 85*be36d683SMax Gurtovoy extern int iscsit_build_text_rsp(struct iscsit_cmd *, struct iscsit_conn *, 8622c7aaa5SSagi Grimberg struct iscsi_text_rsp *, 8722c7aaa5SSagi Grimberg enum iscsit_transport_type); 88*be36d683SMax Gurtovoy extern void iscsit_build_reject(struct iscsit_cmd *, struct iscsit_conn *, 893f993063SNicholas Bellinger struct iscsi_reject *); 90*be36d683SMax Gurtovoy extern int iscsit_build_logout_rsp(struct iscsit_cmd *, struct iscsit_conn *, 913f993063SNicholas Bellinger struct iscsi_logout_rsp *); 92*be36d683SMax Gurtovoy extern int iscsit_logout_post_handler(struct iscsit_cmd *, struct iscsit_conn *); 93*be36d683SMax Gurtovoy extern int iscsit_queue_rsp(struct iscsit_conn *, struct iscsit_cmd *); 94*be36d683SMax Gurtovoy extern void iscsit_aborted_task(struct iscsit_conn *, struct iscsit_cmd *); 95*be36d683SMax Gurtovoy extern int iscsit_add_reject(struct iscsit_conn *, u8, unsigned char *); 9666cd9d4eSMax Gurtovoy extern int iscsit_reject_cmd(struct iscsit_cmd *, u8, unsigned char *); 97*be36d683SMax Gurtovoy extern int iscsit_handle_snack(struct iscsit_conn *, unsigned char *); 98*be36d683SMax Gurtovoy extern void iscsit_build_datain_pdu(struct iscsit_cmd *, struct iscsit_conn *, 99d2faaefbSVarun Prakash struct iscsi_datain *, 100d2faaefbSVarun Prakash struct iscsi_data_rsp *, bool); 101*be36d683SMax Gurtovoy extern int iscsit_build_r2ts_for_cmd(struct iscsit_conn *, struct iscsit_cmd *, 102d2faaefbSVarun Prakash bool); 103*be36d683SMax Gurtovoy extern int iscsit_immediate_queue(struct iscsit_conn *, struct iscsit_cmd *, int); 104*be36d683SMax Gurtovoy extern int iscsit_response_queue(struct iscsit_conn *, struct iscsit_cmd *, int); 1053f993063SNicholas Bellinger /* 1063f993063SNicholas Bellinger * From iscsi_target_device.c 1073f993063SNicholas Bellinger */ 10866cd9d4eSMax Gurtovoy extern void iscsit_increment_maxcmdsn(struct iscsit_cmd *, struct iscsi_session *); 1093f993063SNicholas Bellinger /* 110b2cb9649SNicholas Bellinger * From iscsi_target_erl0.c 111b2cb9649SNicholas Bellinger */ 112*be36d683SMax Gurtovoy extern void iscsit_cause_connection_reinstatement(struct iscsit_conn *, int); 113b2cb9649SNicholas Bellinger /* 1143f993063SNicholas Bellinger * From iscsi_target_erl1.c 1153f993063SNicholas Bellinger */ 11666cd9d4eSMax Gurtovoy extern void iscsit_stop_dataout_timer(struct iscsit_cmd *); 1173f993063SNicholas Bellinger 1183f993063SNicholas Bellinger /* 1193f993063SNicholas Bellinger * From iscsi_target_tmr.c 1203f993063SNicholas Bellinger */ 121*be36d683SMax Gurtovoy extern int iscsit_tmr_post_handler(struct iscsit_cmd *, struct iscsit_conn *); 1223f993063SNicholas Bellinger 1233f993063SNicholas Bellinger /* 1243f993063SNicholas Bellinger * From iscsi_target_util.c 1253f993063SNicholas Bellinger */ 126*be36d683SMax Gurtovoy extern struct iscsit_cmd *iscsit_allocate_cmd(struct iscsit_conn *, int); 127*be36d683SMax Gurtovoy extern int iscsit_sequence_cmd(struct iscsit_conn *, struct iscsit_cmd *, 128561bf158SNicholas Bellinger unsigned char *, __be32); 12966cd9d4eSMax Gurtovoy extern void iscsit_release_cmd(struct iscsit_cmd *); 13066cd9d4eSMax Gurtovoy extern void iscsit_free_cmd(struct iscsit_cmd *, bool); 13166cd9d4eSMax Gurtovoy extern void iscsit_add_cmd_to_immediate_queue(struct iscsit_cmd *, 132*be36d683SMax Gurtovoy struct iscsit_conn *, u8); 13366cd9d4eSMax Gurtovoy extern struct iscsit_cmd * 134*be36d683SMax Gurtovoy iscsit_find_cmd_from_itt_or_dump(struct iscsit_conn *conn, 1359a584bf9SVarun Prakash itt_t init_task_tag, u32 length); 136d2faaefbSVarun Prakash 137d2faaefbSVarun Prakash /* 138d2faaefbSVarun Prakash * From iscsi_target_nego.c 139d2faaefbSVarun Prakash */ 140*be36d683SMax Gurtovoy extern int iscsi_target_check_login_request(struct iscsit_conn *, 141d2faaefbSVarun Prakash struct iscsi_login *); 142d2faaefbSVarun Prakash 143d2faaefbSVarun Prakash /* 144d2faaefbSVarun Prakash * From iscsi_target_login.c 145d2faaefbSVarun Prakash */ 146d2faaefbSVarun Prakash extern __printf(2, 3) int iscsi_change_param_sprintf( 147*be36d683SMax Gurtovoy struct iscsit_conn *, const char *, ...); 148d2faaefbSVarun Prakash 149d2faaefbSVarun Prakash /* 150d2faaefbSVarun Prakash * From iscsi_target_parameters.c 151d2faaefbSVarun Prakash */ 152d2faaefbSVarun Prakash extern struct iscsi_param *iscsi_find_param_from_key( 153d2faaefbSVarun Prakash char *, struct iscsi_param_list *); 154