18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#include "iscsi_target_core.h" /* struct iscsi_cmd */ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_cistruct sockaddr_storage; 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_cistruct iscsit_transport { 78c2ecf20Sopenharmony_ci#define ISCSIT_TRANSPORT_NAME 16 88c2ecf20Sopenharmony_ci char name[ISCSIT_TRANSPORT_NAME]; 98c2ecf20Sopenharmony_ci int transport_type; 108c2ecf20Sopenharmony_ci bool rdma_shutdown; 118c2ecf20Sopenharmony_ci int priv_size; 128c2ecf20Sopenharmony_ci struct module *owner; 138c2ecf20Sopenharmony_ci struct list_head t_node; 148c2ecf20Sopenharmony_ci int (*iscsit_setup_np)(struct iscsi_np *, struct sockaddr_storage *); 158c2ecf20Sopenharmony_ci int (*iscsit_accept_np)(struct iscsi_np *, struct iscsi_conn *); 168c2ecf20Sopenharmony_ci void (*iscsit_free_np)(struct iscsi_np *); 178c2ecf20Sopenharmony_ci void (*iscsit_wait_conn)(struct iscsi_conn *); 188c2ecf20Sopenharmony_ci void (*iscsit_free_conn)(struct iscsi_conn *); 198c2ecf20Sopenharmony_ci int (*iscsit_get_login_rx)(struct iscsi_conn *, struct iscsi_login *); 208c2ecf20Sopenharmony_ci int (*iscsit_put_login_tx)(struct iscsi_conn *, struct iscsi_login *, u32); 218c2ecf20Sopenharmony_ci int (*iscsit_immediate_queue)(struct iscsi_conn *, struct iscsi_cmd *, int); 228c2ecf20Sopenharmony_ci int (*iscsit_response_queue)(struct iscsi_conn *, struct iscsi_cmd *, int); 238c2ecf20Sopenharmony_ci int (*iscsit_get_dataout)(struct iscsi_conn *, struct iscsi_cmd *, bool); 248c2ecf20Sopenharmony_ci int (*iscsit_queue_data_in)(struct iscsi_conn *, struct iscsi_cmd *); 258c2ecf20Sopenharmony_ci int (*iscsit_queue_status)(struct iscsi_conn *, struct iscsi_cmd *); 268c2ecf20Sopenharmony_ci void (*iscsit_aborted_task)(struct iscsi_conn *, struct iscsi_cmd *); 278c2ecf20Sopenharmony_ci int (*iscsit_xmit_pdu)(struct iscsi_conn *, struct iscsi_cmd *, 288c2ecf20Sopenharmony_ci struct iscsi_datain_req *, const void *, u32); 298c2ecf20Sopenharmony_ci void (*iscsit_unmap_cmd)(struct iscsi_conn *, struct iscsi_cmd *); 308c2ecf20Sopenharmony_ci void (*iscsit_get_rx_pdu)(struct iscsi_conn *); 318c2ecf20Sopenharmony_ci int (*iscsit_validate_params)(struct iscsi_conn *); 328c2ecf20Sopenharmony_ci void (*iscsit_get_r2t_ttt)(struct iscsi_conn *, struct iscsi_cmd *, 338c2ecf20Sopenharmony_ci struct iscsi_r2t *); 348c2ecf20Sopenharmony_ci enum target_prot_op (*iscsit_get_sup_prot_ops)(struct iscsi_conn *); 358c2ecf20Sopenharmony_ci}; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_cistatic inline void *iscsit_priv_cmd(struct iscsi_cmd *cmd) 388c2ecf20Sopenharmony_ci{ 398c2ecf20Sopenharmony_ci return (void *)(cmd + 1); 408c2ecf20Sopenharmony_ci} 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci/* 438c2ecf20Sopenharmony_ci * From iscsi_target_transport.c 448c2ecf20Sopenharmony_ci */ 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ciextern void iscsit_register_transport(struct iscsit_transport *); 478c2ecf20Sopenharmony_ciextern void iscsit_unregister_transport(struct iscsit_transport *); 488c2ecf20Sopenharmony_ciextern struct iscsit_transport *iscsit_get_transport(int); 498c2ecf20Sopenharmony_ciextern void iscsit_put_transport(struct iscsit_transport *); 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci/* 528c2ecf20Sopenharmony_ci * From iscsi_target.c 538c2ecf20Sopenharmony_ci */ 548c2ecf20Sopenharmony_ciextern int iscsit_setup_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *, 558c2ecf20Sopenharmony_ci unsigned char *); 568c2ecf20Sopenharmony_ciextern void iscsit_set_unsolicited_dataout(struct iscsi_cmd *); 578c2ecf20Sopenharmony_ciextern int iscsit_process_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *, 588c2ecf20Sopenharmony_ci struct iscsi_scsi_req *); 598c2ecf20Sopenharmony_ciextern int 608c2ecf20Sopenharmony_ci__iscsit_check_dataout_hdr(struct iscsi_conn *, void *, 618c2ecf20Sopenharmony_ci struct iscsi_cmd *, u32, bool *); 628c2ecf20Sopenharmony_ciextern int 638c2ecf20Sopenharmony_ciiscsit_check_dataout_hdr(struct iscsi_conn *conn, void *buf, 648c2ecf20Sopenharmony_ci struct iscsi_cmd **out_cmd); 658c2ecf20Sopenharmony_ciextern int iscsit_check_dataout_payload(struct iscsi_cmd *, struct iscsi_data *, 668c2ecf20Sopenharmony_ci bool); 678c2ecf20Sopenharmony_ciextern int iscsit_setup_nop_out(struct iscsi_conn *, struct iscsi_cmd *, 688c2ecf20Sopenharmony_ci struct iscsi_nopout *); 698c2ecf20Sopenharmony_ciextern int iscsit_process_nop_out(struct iscsi_conn *, struct iscsi_cmd *, 708c2ecf20Sopenharmony_ci struct iscsi_nopout *); 718c2ecf20Sopenharmony_ciextern int iscsit_handle_logout_cmd(struct iscsi_conn *, struct iscsi_cmd *, 728c2ecf20Sopenharmony_ci unsigned char *); 738c2ecf20Sopenharmony_ciextern int iscsit_handle_task_mgt_cmd(struct iscsi_conn *, struct iscsi_cmd *, 748c2ecf20Sopenharmony_ci unsigned char *); 758c2ecf20Sopenharmony_ciextern int iscsit_setup_text_cmd(struct iscsi_conn *, struct iscsi_cmd *, 768c2ecf20Sopenharmony_ci struct iscsi_text *); 778c2ecf20Sopenharmony_ciextern int iscsit_process_text_cmd(struct iscsi_conn *, struct iscsi_cmd *, 788c2ecf20Sopenharmony_ci struct iscsi_text *); 798c2ecf20Sopenharmony_ciextern void iscsit_build_rsp_pdu(struct iscsi_cmd *, struct iscsi_conn *, 808c2ecf20Sopenharmony_ci bool, struct iscsi_scsi_rsp *); 818c2ecf20Sopenharmony_ciextern void iscsit_build_nopin_rsp(struct iscsi_cmd *, struct iscsi_conn *, 828c2ecf20Sopenharmony_ci struct iscsi_nopin *, bool); 838c2ecf20Sopenharmony_ciextern void iscsit_build_task_mgt_rsp(struct iscsi_cmd *, struct iscsi_conn *, 848c2ecf20Sopenharmony_ci struct iscsi_tm_rsp *); 858c2ecf20Sopenharmony_ciextern int iscsit_build_text_rsp(struct iscsi_cmd *, struct iscsi_conn *, 868c2ecf20Sopenharmony_ci struct iscsi_text_rsp *, 878c2ecf20Sopenharmony_ci enum iscsit_transport_type); 888c2ecf20Sopenharmony_ciextern void iscsit_build_reject(struct iscsi_cmd *, struct iscsi_conn *, 898c2ecf20Sopenharmony_ci struct iscsi_reject *); 908c2ecf20Sopenharmony_ciextern int iscsit_build_logout_rsp(struct iscsi_cmd *, struct iscsi_conn *, 918c2ecf20Sopenharmony_ci struct iscsi_logout_rsp *); 928c2ecf20Sopenharmony_ciextern int iscsit_logout_post_handler(struct iscsi_cmd *, struct iscsi_conn *); 938c2ecf20Sopenharmony_ciextern int iscsit_queue_rsp(struct iscsi_conn *, struct iscsi_cmd *); 948c2ecf20Sopenharmony_ciextern void iscsit_aborted_task(struct iscsi_conn *, struct iscsi_cmd *); 958c2ecf20Sopenharmony_ciextern int iscsit_add_reject(struct iscsi_conn *, u8, unsigned char *); 968c2ecf20Sopenharmony_ciextern int iscsit_reject_cmd(struct iscsi_cmd *, u8, unsigned char *); 978c2ecf20Sopenharmony_ciextern int iscsit_handle_snack(struct iscsi_conn *, unsigned char *); 988c2ecf20Sopenharmony_ciextern void iscsit_build_datain_pdu(struct iscsi_cmd *, struct iscsi_conn *, 998c2ecf20Sopenharmony_ci struct iscsi_datain *, 1008c2ecf20Sopenharmony_ci struct iscsi_data_rsp *, bool); 1018c2ecf20Sopenharmony_ciextern int iscsit_build_r2ts_for_cmd(struct iscsi_conn *, struct iscsi_cmd *, 1028c2ecf20Sopenharmony_ci bool); 1038c2ecf20Sopenharmony_ciextern int iscsit_immediate_queue(struct iscsi_conn *, struct iscsi_cmd *, int); 1048c2ecf20Sopenharmony_ciextern int iscsit_response_queue(struct iscsi_conn *, struct iscsi_cmd *, int); 1058c2ecf20Sopenharmony_ci/* 1068c2ecf20Sopenharmony_ci * From iscsi_target_device.c 1078c2ecf20Sopenharmony_ci */ 1088c2ecf20Sopenharmony_ciextern void iscsit_increment_maxcmdsn(struct iscsi_cmd *, struct iscsi_session *); 1098c2ecf20Sopenharmony_ci/* 1108c2ecf20Sopenharmony_ci * From iscsi_target_erl0.c 1118c2ecf20Sopenharmony_ci */ 1128c2ecf20Sopenharmony_ciextern void iscsit_cause_connection_reinstatement(struct iscsi_conn *, int); 1138c2ecf20Sopenharmony_ci/* 1148c2ecf20Sopenharmony_ci * From iscsi_target_erl1.c 1158c2ecf20Sopenharmony_ci */ 1168c2ecf20Sopenharmony_ciextern void iscsit_stop_dataout_timer(struct iscsi_cmd *); 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ci/* 1198c2ecf20Sopenharmony_ci * From iscsi_target_tmr.c 1208c2ecf20Sopenharmony_ci */ 1218c2ecf20Sopenharmony_ciextern int iscsit_tmr_post_handler(struct iscsi_cmd *, struct iscsi_conn *); 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci/* 1248c2ecf20Sopenharmony_ci * From iscsi_target_util.c 1258c2ecf20Sopenharmony_ci */ 1268c2ecf20Sopenharmony_ciextern struct iscsi_cmd *iscsit_allocate_cmd(struct iscsi_conn *, int); 1278c2ecf20Sopenharmony_ciextern int iscsit_sequence_cmd(struct iscsi_conn *, struct iscsi_cmd *, 1288c2ecf20Sopenharmony_ci unsigned char *, __be32); 1298c2ecf20Sopenharmony_ciextern void iscsit_release_cmd(struct iscsi_cmd *); 1308c2ecf20Sopenharmony_ciextern void iscsit_free_cmd(struct iscsi_cmd *, bool); 1318c2ecf20Sopenharmony_ciextern void iscsit_add_cmd_to_immediate_queue(struct iscsi_cmd *, 1328c2ecf20Sopenharmony_ci struct iscsi_conn *, u8); 1338c2ecf20Sopenharmony_ciextern struct iscsi_cmd * 1348c2ecf20Sopenharmony_ciiscsit_find_cmd_from_itt_or_dump(struct iscsi_conn *conn, 1358c2ecf20Sopenharmony_ci itt_t init_task_tag, u32 length); 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ci/* 1388c2ecf20Sopenharmony_ci * From iscsi_target_nego.c 1398c2ecf20Sopenharmony_ci */ 1408c2ecf20Sopenharmony_ciextern int iscsi_target_check_login_request(struct iscsi_conn *, 1418c2ecf20Sopenharmony_ci struct iscsi_login *); 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci/* 1448c2ecf20Sopenharmony_ci * From iscsi_target_login.c 1458c2ecf20Sopenharmony_ci */ 1468c2ecf20Sopenharmony_ciextern __printf(2, 3) int iscsi_change_param_sprintf( 1478c2ecf20Sopenharmony_ci struct iscsi_conn *, const char *, ...); 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci/* 1508c2ecf20Sopenharmony_ci * From iscsi_target_parameters.c 1518c2ecf20Sopenharmony_ci */ 1528c2ecf20Sopenharmony_ciextern struct iscsi_param *iscsi_find_param_from_key( 1538c2ecf20Sopenharmony_ci char *, struct iscsi_param_list *); 154