18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef ISCSI_TARGET_UTIL_H
38c2ecf20Sopenharmony_ci#define ISCSI_TARGET_UTIL_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <linux/types.h>
68c2ecf20Sopenharmony_ci#include <scsi/iscsi_proto.h>        /* itt_t */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#define MARKER_SIZE	8
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cistruct iscsi_cmd;
118c2ecf20Sopenharmony_cistruct iscsi_conn;
128c2ecf20Sopenharmony_cistruct iscsi_conn_recovery;
138c2ecf20Sopenharmony_cistruct iscsi_session;
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ciextern int iscsit_add_r2t_to_list(struct iscsi_cmd *, u32, u32, int, u32);
168c2ecf20Sopenharmony_ciextern struct iscsi_r2t *iscsit_get_r2t_for_eos(struct iscsi_cmd *, u32, u32);
178c2ecf20Sopenharmony_ciextern struct iscsi_r2t *iscsit_get_r2t_from_list(struct iscsi_cmd *);
188c2ecf20Sopenharmony_ciextern void iscsit_free_r2t(struct iscsi_r2t *, struct iscsi_cmd *);
198c2ecf20Sopenharmony_ciextern void iscsit_free_r2ts_from_list(struct iscsi_cmd *);
208c2ecf20Sopenharmony_ciextern struct iscsi_cmd *iscsit_alloc_cmd(struct iscsi_conn *, gfp_t);
218c2ecf20Sopenharmony_ciextern struct iscsi_cmd *iscsit_allocate_cmd(struct iscsi_conn *, int);
228c2ecf20Sopenharmony_ciextern struct iscsi_seq *iscsit_get_seq_holder_for_datain(struct iscsi_cmd *, u32);
238c2ecf20Sopenharmony_ciextern struct iscsi_seq *iscsit_get_seq_holder_for_r2t(struct iscsi_cmd *);
248c2ecf20Sopenharmony_ciextern struct iscsi_r2t *iscsit_get_holder_for_r2tsn(struct iscsi_cmd *, u32);
258c2ecf20Sopenharmony_ciextern int iscsit_sequence_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
268c2ecf20Sopenharmony_ci			       unsigned char * ,__be32 cmdsn);
278c2ecf20Sopenharmony_ciextern int iscsit_check_unsolicited_dataout(struct iscsi_cmd *, unsigned char *);
288c2ecf20Sopenharmony_ciextern struct iscsi_cmd *iscsit_find_cmd_from_itt_or_dump(struct iscsi_conn *,
298c2ecf20Sopenharmony_ci			itt_t, u32);
308c2ecf20Sopenharmony_ciextern struct iscsi_cmd *iscsit_find_cmd_from_ttt(struct iscsi_conn *, u32);
318c2ecf20Sopenharmony_ciextern int iscsit_find_cmd_for_recovery(struct iscsi_session *, struct iscsi_cmd **,
328c2ecf20Sopenharmony_ci			struct iscsi_conn_recovery **, itt_t);
338c2ecf20Sopenharmony_ciextern void iscsit_add_cmd_to_immediate_queue(struct iscsi_cmd *, struct iscsi_conn *, u8);
348c2ecf20Sopenharmony_ciextern struct iscsi_queue_req *iscsit_get_cmd_from_immediate_queue(struct iscsi_conn *);
358c2ecf20Sopenharmony_ciextern int iscsit_add_cmd_to_response_queue(struct iscsi_cmd *, struct iscsi_conn *, u8);
368c2ecf20Sopenharmony_ciextern struct iscsi_queue_req *iscsit_get_cmd_from_response_queue(struct iscsi_conn *);
378c2ecf20Sopenharmony_ciextern void iscsit_remove_cmd_from_tx_queues(struct iscsi_cmd *, struct iscsi_conn *);
388c2ecf20Sopenharmony_ciextern bool iscsit_conn_all_queues_empty(struct iscsi_conn *);
398c2ecf20Sopenharmony_ciextern void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *);
408c2ecf20Sopenharmony_ciextern void iscsit_release_cmd(struct iscsi_cmd *);
418c2ecf20Sopenharmony_ciextern void __iscsit_free_cmd(struct iscsi_cmd *, bool);
428c2ecf20Sopenharmony_ciextern void iscsit_free_cmd(struct iscsi_cmd *, bool);
438c2ecf20Sopenharmony_ciextern int iscsit_check_session_usage_count(struct iscsi_session *);
448c2ecf20Sopenharmony_ciextern void iscsit_dec_session_usage_count(struct iscsi_session *);
458c2ecf20Sopenharmony_ciextern void iscsit_inc_session_usage_count(struct iscsi_session *);
468c2ecf20Sopenharmony_ciextern struct iscsi_conn *iscsit_get_conn_from_cid(struct iscsi_session *, u16);
478c2ecf20Sopenharmony_ciextern struct iscsi_conn *iscsit_get_conn_from_cid_rcfr(struct iscsi_session *, u16);
488c2ecf20Sopenharmony_ciextern void iscsit_check_conn_usage_count(struct iscsi_conn *);
498c2ecf20Sopenharmony_ciextern void iscsit_dec_conn_usage_count(struct iscsi_conn *);
508c2ecf20Sopenharmony_ciextern void iscsit_inc_conn_usage_count(struct iscsi_conn *);
518c2ecf20Sopenharmony_ciextern void iscsit_handle_nopin_response_timeout(struct timer_list *t);
528c2ecf20Sopenharmony_ciextern void iscsit_mod_nopin_response_timer(struct iscsi_conn *);
538c2ecf20Sopenharmony_ciextern void iscsit_start_nopin_response_timer(struct iscsi_conn *);
548c2ecf20Sopenharmony_ciextern void iscsit_stop_nopin_response_timer(struct iscsi_conn *);
558c2ecf20Sopenharmony_ciextern void iscsit_handle_nopin_timeout(struct timer_list *t);
568c2ecf20Sopenharmony_ciextern void __iscsit_start_nopin_timer(struct iscsi_conn *);
578c2ecf20Sopenharmony_ciextern void iscsit_start_nopin_timer(struct iscsi_conn *);
588c2ecf20Sopenharmony_ciextern void iscsit_stop_nopin_timer(struct iscsi_conn *);
598c2ecf20Sopenharmony_ciextern int iscsit_send_tx_data(struct iscsi_cmd *, struct iscsi_conn *, int);
608c2ecf20Sopenharmony_ciextern int iscsit_fe_sendpage_sg(struct iscsi_cmd *, struct iscsi_conn *);
618c2ecf20Sopenharmony_ciextern int iscsit_tx_login_rsp(struct iscsi_conn *, u8, u8);
628c2ecf20Sopenharmony_ciextern void iscsit_print_session_params(struct iscsi_session *);
638c2ecf20Sopenharmony_ciextern int iscsit_print_dev_to_proc(char *, char **, off_t, int);
648c2ecf20Sopenharmony_ciextern int iscsit_print_sessions_to_proc(char *, char **, off_t, int);
658c2ecf20Sopenharmony_ciextern int iscsit_print_tpg_to_proc(char *, char **, off_t, int);
668c2ecf20Sopenharmony_ciextern int rx_data(struct iscsi_conn *, struct kvec *, int, int);
678c2ecf20Sopenharmony_ciextern int tx_data(struct iscsi_conn *, struct kvec *, int, int);
688c2ecf20Sopenharmony_ciextern void iscsit_collect_login_stats(struct iscsi_conn *, u8, u8);
698c2ecf20Sopenharmony_ciextern struct iscsi_tiqn *iscsit_snmp_get_tiqn(struct iscsi_conn *);
708c2ecf20Sopenharmony_ciextern void iscsit_fill_cxn_timeout_err_stats(struct iscsi_session *);
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci#endif /*** ISCSI_TARGET_UTIL_H ***/
73