162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * iSCSI Initiator TCP Transport
462306a36Sopenharmony_ci * Copyright (C) 2004 Dmitry Yusupov
562306a36Sopenharmony_ci * Copyright (C) 2004 Alex Aizman
662306a36Sopenharmony_ci * Copyright (C) 2005 - 2006 Mike Christie
762306a36Sopenharmony_ci * Copyright (C) 2006 Red Hat, Inc.  All rights reserved.
862306a36Sopenharmony_ci * maintained by open-iscsi@googlegroups.com
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci * See the file COPYING included with this distribution for more details.
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#ifndef ISCSI_SW_TCP_H
1462306a36Sopenharmony_ci#define ISCSI_SW_TCP_H
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include <scsi/libiscsi.h>
1762306a36Sopenharmony_ci#include <scsi/libiscsi_tcp.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistruct socket;
2062306a36Sopenharmony_cistruct iscsi_tcp_conn;
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/* Socket connection send helper */
2362306a36Sopenharmony_cistruct iscsi_sw_tcp_send {
2462306a36Sopenharmony_ci	struct iscsi_hdr	*hdr;
2562306a36Sopenharmony_ci	struct iscsi_segment	segment;
2662306a36Sopenharmony_ci	struct iscsi_segment	data_segment;
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct iscsi_sw_tcp_conn {
3062306a36Sopenharmony_ci	struct socket		*sock;
3162306a36Sopenharmony_ci	/* Taken when accessing the sock from the netlink/sysfs interface */
3262306a36Sopenharmony_ci	struct mutex		sock_lock;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci	struct work_struct	recvwork;
3562306a36Sopenharmony_ci	bool			queue_recv;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	struct iscsi_sw_tcp_send out;
3862306a36Sopenharmony_ci	/* old values for socket callbacks */
3962306a36Sopenharmony_ci	void			(*old_data_ready)(struct sock *);
4062306a36Sopenharmony_ci	void			(*old_state_change)(struct sock *);
4162306a36Sopenharmony_ci	void			(*old_write_space)(struct sock *);
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	/* data and header digests */
4462306a36Sopenharmony_ci	struct ahash_request	*tx_hash;	/* CRC32C (Tx) */
4562306a36Sopenharmony_ci	struct ahash_request	*rx_hash;	/* CRC32C (Rx) */
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci	/* MIB custom statistics */
4862306a36Sopenharmony_ci	uint32_t		sendpage_failures_cnt;
4962306a36Sopenharmony_ci	uint32_t		discontiguous_hdr_cnt;
5062306a36Sopenharmony_ci};
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistruct iscsi_sw_tcp_host {
5362306a36Sopenharmony_ci	struct iscsi_session	*session;
5462306a36Sopenharmony_ci};
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cistruct iscsi_sw_tcp_hdrbuf {
5762306a36Sopenharmony_ci	struct iscsi_hdr	hdrbuf;
5862306a36Sopenharmony_ci	char			hdrextbuf[ISCSI_MAX_AHS_SIZE +
5962306a36Sopenharmony_ci		                                  ISCSI_DIGEST_SIZE];
6062306a36Sopenharmony_ci};
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci#endif /* ISCSI_SW_TCP_H */
63