162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#include "iscsi_target_core.h" /* struct iscsit_cmd */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_cistruct sockaddr_storage; 562306a36Sopenharmony_ci 662306a36Sopenharmony_cistruct iscsit_transport { 762306a36Sopenharmony_ci#define ISCSIT_TRANSPORT_NAME 16 862306a36Sopenharmony_ci char name[ISCSIT_TRANSPORT_NAME]; 962306a36Sopenharmony_ci int transport_type; 1062306a36Sopenharmony_ci bool rdma_shutdown; 1162306a36Sopenharmony_ci int priv_size; 1262306a36Sopenharmony_ci struct module *owner; 1362306a36Sopenharmony_ci struct list_head t_node; 1462306a36Sopenharmony_ci int (*iscsit_setup_np)(struct iscsi_np *, struct sockaddr_storage *); 1562306a36Sopenharmony_ci int (*iscsit_accept_np)(struct iscsi_np *, struct iscsit_conn *); 1662306a36Sopenharmony_ci void (*iscsit_free_np)(struct iscsi_np *); 1762306a36Sopenharmony_ci void (*iscsit_wait_conn)(struct iscsit_conn *); 1862306a36Sopenharmony_ci void (*iscsit_free_conn)(struct iscsit_conn *); 1962306a36Sopenharmony_ci int (*iscsit_get_login_rx)(struct iscsit_conn *, struct iscsi_login *); 2062306a36Sopenharmony_ci int (*iscsit_put_login_tx)(struct iscsit_conn *, struct iscsi_login *, u32); 2162306a36Sopenharmony_ci int (*iscsit_immediate_queue)(struct iscsit_conn *, struct iscsit_cmd *, int); 2262306a36Sopenharmony_ci int (*iscsit_response_queue)(struct iscsit_conn *, struct iscsit_cmd *, int); 2362306a36Sopenharmony_ci int (*iscsit_get_dataout)(struct iscsit_conn *, struct iscsit_cmd *, bool); 2462306a36Sopenharmony_ci int (*iscsit_queue_data_in)(struct iscsit_conn *, struct iscsit_cmd *); 2562306a36Sopenharmony_ci int (*iscsit_queue_status)(struct iscsit_conn *, struct iscsit_cmd *); 2662306a36Sopenharmony_ci void (*iscsit_aborted_task)(struct iscsit_conn *, struct iscsit_cmd *); 2762306a36Sopenharmony_ci int (*iscsit_xmit_pdu)(struct iscsit_conn *, struct iscsit_cmd *, 2862306a36Sopenharmony_ci struct iscsi_datain_req *, const void *, u32); 2962306a36Sopenharmony_ci void (*iscsit_unmap_cmd)(struct iscsit_conn *, struct iscsit_cmd *); 3062306a36Sopenharmony_ci void (*iscsit_get_rx_pdu)(struct iscsit_conn *); 3162306a36Sopenharmony_ci int (*iscsit_validate_params)(struct iscsit_conn *); 3262306a36Sopenharmony_ci void (*iscsit_get_r2t_ttt)(struct iscsit_conn *, struct iscsit_cmd *, 3362306a36Sopenharmony_ci struct iscsi_r2t *); 3462306a36Sopenharmony_ci enum target_prot_op (*iscsit_get_sup_prot_ops)(struct iscsit_conn *); 3562306a36Sopenharmony_ci}; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cistatic inline void *iscsit_priv_cmd(struct iscsit_cmd *cmd) 3862306a36Sopenharmony_ci{ 3962306a36Sopenharmony_ci return (void *)(cmd + 1); 4062306a36Sopenharmony_ci} 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci/* 4362306a36Sopenharmony_ci * From iscsi_target_transport.c 4462306a36Sopenharmony_ci */ 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciextern void iscsit_register_transport(struct iscsit_transport *); 4762306a36Sopenharmony_ciextern void iscsit_unregister_transport(struct iscsit_transport *); 4862306a36Sopenharmony_ciextern struct iscsit_transport *iscsit_get_transport(int); 4962306a36Sopenharmony_ciextern void iscsit_put_transport(struct iscsit_transport *); 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci/* 5262306a36Sopenharmony_ci * From iscsi_target.c 5362306a36Sopenharmony_ci */ 5462306a36Sopenharmony_ciextern int iscsit_setup_scsi_cmd(struct iscsit_conn *, struct iscsit_cmd *, 5562306a36Sopenharmony_ci unsigned char *); 5662306a36Sopenharmony_ciextern void iscsit_set_unsolicited_dataout(struct iscsit_cmd *); 5762306a36Sopenharmony_ciextern int iscsit_process_scsi_cmd(struct iscsit_conn *, struct iscsit_cmd *, 5862306a36Sopenharmony_ci struct iscsi_scsi_req *); 5962306a36Sopenharmony_ciextern int 6062306a36Sopenharmony_ci__iscsit_check_dataout_hdr(struct iscsit_conn *, void *, 6162306a36Sopenharmony_ci struct iscsit_cmd *, u32, bool *); 6262306a36Sopenharmony_ciextern int 6362306a36Sopenharmony_ciiscsit_check_dataout_hdr(struct iscsit_conn *conn, void *buf, 6462306a36Sopenharmony_ci struct iscsit_cmd **out_cmd); 6562306a36Sopenharmony_ciextern int iscsit_check_dataout_payload(struct iscsit_cmd *, struct iscsi_data *, 6662306a36Sopenharmony_ci bool); 6762306a36Sopenharmony_ciextern int iscsit_setup_nop_out(struct iscsit_conn *, struct iscsit_cmd *, 6862306a36Sopenharmony_ci struct iscsi_nopout *); 6962306a36Sopenharmony_ciextern int iscsit_process_nop_out(struct iscsit_conn *, struct iscsit_cmd *, 7062306a36Sopenharmony_ci struct iscsi_nopout *); 7162306a36Sopenharmony_ciextern int iscsit_handle_logout_cmd(struct iscsit_conn *, struct iscsit_cmd *, 7262306a36Sopenharmony_ci unsigned char *); 7362306a36Sopenharmony_ciextern int iscsit_handle_task_mgt_cmd(struct iscsit_conn *, struct iscsit_cmd *, 7462306a36Sopenharmony_ci unsigned char *); 7562306a36Sopenharmony_ciextern int iscsit_setup_text_cmd(struct iscsit_conn *, struct iscsit_cmd *, 7662306a36Sopenharmony_ci struct iscsi_text *); 7762306a36Sopenharmony_ciextern int iscsit_process_text_cmd(struct iscsit_conn *, struct iscsit_cmd *, 7862306a36Sopenharmony_ci struct iscsi_text *); 7962306a36Sopenharmony_ciextern void iscsit_build_rsp_pdu(struct iscsit_cmd *, struct iscsit_conn *, 8062306a36Sopenharmony_ci bool, struct iscsi_scsi_rsp *); 8162306a36Sopenharmony_ciextern void iscsit_build_nopin_rsp(struct iscsit_cmd *, struct iscsit_conn *, 8262306a36Sopenharmony_ci struct iscsi_nopin *, bool); 8362306a36Sopenharmony_ciextern void iscsit_build_task_mgt_rsp(struct iscsit_cmd *, struct iscsit_conn *, 8462306a36Sopenharmony_ci struct iscsi_tm_rsp *); 8562306a36Sopenharmony_ciextern int iscsit_build_text_rsp(struct iscsit_cmd *, struct iscsit_conn *, 8662306a36Sopenharmony_ci struct iscsi_text_rsp *, 8762306a36Sopenharmony_ci enum iscsit_transport_type); 8862306a36Sopenharmony_ciextern void iscsit_build_reject(struct iscsit_cmd *, struct iscsit_conn *, 8962306a36Sopenharmony_ci struct iscsi_reject *); 9062306a36Sopenharmony_ciextern int iscsit_build_logout_rsp(struct iscsit_cmd *, struct iscsit_conn *, 9162306a36Sopenharmony_ci struct iscsi_logout_rsp *); 9262306a36Sopenharmony_ciextern int iscsit_logout_post_handler(struct iscsit_cmd *, struct iscsit_conn *); 9362306a36Sopenharmony_ciextern int iscsit_queue_rsp(struct iscsit_conn *, struct iscsit_cmd *); 9462306a36Sopenharmony_ciextern void iscsit_aborted_task(struct iscsit_conn *, struct iscsit_cmd *); 9562306a36Sopenharmony_ciextern int iscsit_add_reject(struct iscsit_conn *, u8, unsigned char *); 9662306a36Sopenharmony_ciextern int iscsit_reject_cmd(struct iscsit_cmd *, u8, unsigned char *); 9762306a36Sopenharmony_ciextern int iscsit_handle_snack(struct iscsit_conn *, unsigned char *); 9862306a36Sopenharmony_ciextern void iscsit_build_datain_pdu(struct iscsit_cmd *, struct iscsit_conn *, 9962306a36Sopenharmony_ci struct iscsi_datain *, 10062306a36Sopenharmony_ci struct iscsi_data_rsp *, bool); 10162306a36Sopenharmony_ciextern int iscsit_build_r2ts_for_cmd(struct iscsit_conn *, struct iscsit_cmd *, 10262306a36Sopenharmony_ci bool); 10362306a36Sopenharmony_ciextern int iscsit_immediate_queue(struct iscsit_conn *, struct iscsit_cmd *, int); 10462306a36Sopenharmony_ciextern int iscsit_response_queue(struct iscsit_conn *, struct iscsit_cmd *, int); 10562306a36Sopenharmony_ci/* 10662306a36Sopenharmony_ci * From iscsi_target_device.c 10762306a36Sopenharmony_ci */ 10862306a36Sopenharmony_ciextern void iscsit_increment_maxcmdsn(struct iscsit_cmd *, struct iscsit_session *); 10962306a36Sopenharmony_ci/* 11062306a36Sopenharmony_ci * From iscsi_target_erl0.c 11162306a36Sopenharmony_ci */ 11262306a36Sopenharmony_ciextern void iscsit_cause_connection_reinstatement(struct iscsit_conn *, int); 11362306a36Sopenharmony_ci/* 11462306a36Sopenharmony_ci * From iscsi_target_erl1.c 11562306a36Sopenharmony_ci */ 11662306a36Sopenharmony_ciextern void iscsit_stop_dataout_timer(struct iscsit_cmd *); 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci/* 11962306a36Sopenharmony_ci * From iscsi_target_tmr.c 12062306a36Sopenharmony_ci */ 12162306a36Sopenharmony_ciextern int iscsit_tmr_post_handler(struct iscsit_cmd *, struct iscsit_conn *); 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci/* 12462306a36Sopenharmony_ci * From iscsi_target_util.c 12562306a36Sopenharmony_ci */ 12662306a36Sopenharmony_ciextern struct iscsit_cmd *iscsit_allocate_cmd(struct iscsit_conn *, int); 12762306a36Sopenharmony_ciextern int iscsit_sequence_cmd(struct iscsit_conn *, struct iscsit_cmd *, 12862306a36Sopenharmony_ci unsigned char *, __be32); 12962306a36Sopenharmony_ciextern void iscsit_release_cmd(struct iscsit_cmd *); 13062306a36Sopenharmony_ciextern void iscsit_free_cmd(struct iscsit_cmd *, bool); 13162306a36Sopenharmony_ciextern void iscsit_add_cmd_to_immediate_queue(struct iscsit_cmd *, 13262306a36Sopenharmony_ci struct iscsit_conn *, u8); 13362306a36Sopenharmony_ciextern struct iscsit_cmd * 13462306a36Sopenharmony_ciiscsit_find_cmd_from_itt_or_dump(struct iscsit_conn *conn, 13562306a36Sopenharmony_ci itt_t init_task_tag, u32 length); 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci/* 13862306a36Sopenharmony_ci * From iscsi_target_nego.c 13962306a36Sopenharmony_ci */ 14062306a36Sopenharmony_ciextern int iscsi_target_check_login_request(struct iscsit_conn *, 14162306a36Sopenharmony_ci struct iscsi_login *); 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci/* 14462306a36Sopenharmony_ci * From iscsi_target_login.c 14562306a36Sopenharmony_ci */ 14662306a36Sopenharmony_ciextern __printf(2, 3) int iscsi_change_param_sprintf( 14762306a36Sopenharmony_ci struct iscsit_conn *, const char *, ...); 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci/* 15062306a36Sopenharmony_ci * From iscsi_target_parameters.c 15162306a36Sopenharmony_ci */ 15262306a36Sopenharmony_ciextern struct iscsi_param *iscsi_find_param_from_key( 15362306a36Sopenharmony_ci char *, struct iscsi_param_list *); 154