11f4d4ed6SAlexander Lobakin /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2fc831825SYuval Mintz /* QLogic qed NIC Driver
3e8f1cb50SMintz, Yuval  * Copyright (c) 2015-2017  QLogic Corporation
4663eacd8SAlexander Lobakin  * Copyright (c) 2019-2020 Marvell International Ltd.
5fc831825SYuval Mintz  */
6fc831825SYuval Mintz 
7fc831825SYuval Mintz #ifndef _QED_ISCSI_H
8fc831825SYuval Mintz #define _QED_ISCSI_H
9fc831825SYuval Mintz #include <linux/types.h>
10fc831825SYuval Mintz #include <linux/list.h>
11fc831825SYuval Mintz #include <linux/slab.h>
12fc831825SYuval Mintz #include <linux/spinlock.h>
13fc831825SYuval Mintz #include <linux/qed/tcp_common.h>
14fc831825SYuval Mintz #include <linux/qed/qed_iscsi_if.h>
15fc831825SYuval Mintz #include <linux/qed/qed_chain.h>
16fc831825SYuval Mintz #include "qed.h"
17fc831825SYuval Mintz #include "qed_hsi.h"
18fc831825SYuval Mintz #include "qed_mcp.h"
19fc831825SYuval Mintz #include "qed_sp.h"
20fc831825SYuval Mintz 
21fc831825SYuval Mintz struct qed_iscsi_info {
22fc831825SYuval Mintz 	spinlock_t lock; /* Connection resources. */
23fc831825SYuval Mintz 	struct list_head free_list;
24fc831825SYuval Mintz 	u16 max_num_outstanding_tasks;
25fc831825SYuval Mintz 	void *event_context;
26fc831825SYuval Mintz 	iscsi_event_cb_t event_cb;
27fc831825SYuval Mintz };
28fc831825SYuval Mintz 
29fc831825SYuval Mintz #if IS_ENABLED(CONFIG_QED_ISCSI)
303587cb87STomer Tayar int qed_iscsi_alloc(struct qed_hwfn *p_hwfn);
31fc831825SYuval Mintz 
323587cb87STomer Tayar void qed_iscsi_setup(struct qed_hwfn *p_hwfn);
33fc831825SYuval Mintz 
343587cb87STomer Tayar void qed_iscsi_free(struct qed_hwfn *p_hwfn);
352f2b2614SMintz, Yuval 
362f2b2614SMintz, Yuval /**
3719198e4eSPrabhakar Kushwaha  * qed_get_protocol_stats_iscsi(): Fills provided statistics
3819198e4eSPrabhakar Kushwaha  *                                 struct with statistics.
392f2b2614SMintz, Yuval  *
4019198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
4119198e4eSPrabhakar Kushwaha  * @stats: Points to struct that will be filled with statistics.
42*e346e231SKonstantin Khorenko  * @is_atomic: Hint from the caller - if the func can sleep or not.
4319198e4eSPrabhakar Kushwaha  *
44*e346e231SKonstantin Khorenko  * Context: The function should not sleep in case is_atomic == true.
4519198e4eSPrabhakar Kushwaha  * Return: Void.
462f2b2614SMintz, Yuval  */
472f2b2614SMintz, Yuval void qed_get_protocol_stats_iscsi(struct qed_dev *cdev,
48*e346e231SKonstantin Khorenko 				  struct qed_mcp_iscsi_stats *stats,
49*e346e231SKonstantin Khorenko 				  bool is_atomic);
50fc831825SYuval Mintz #else /* IS_ENABLED(CONFIG_QED_ISCSI) */
qed_iscsi_alloc(struct qed_hwfn * p_hwfn)513587cb87STomer Tayar static inline int qed_iscsi_alloc(struct qed_hwfn *p_hwfn)
523587cb87STomer Tayar {
533587cb87STomer Tayar 	return -EINVAL;
543587cb87STomer Tayar }
553587cb87STomer Tayar 
qed_iscsi_setup(struct qed_hwfn * p_hwfn)563587cb87STomer Tayar static inline void qed_iscsi_setup(struct qed_hwfn *p_hwfn) {}
573587cb87STomer Tayar 
qed_iscsi_free(struct qed_hwfn * p_hwfn)583587cb87STomer Tayar static inline void qed_iscsi_free(struct qed_hwfn *p_hwfn) {}
593587cb87STomer Tayar 
602f2b2614SMintz, Yuval static inline void
qed_get_protocol_stats_iscsi(struct qed_dev * cdev,struct qed_mcp_iscsi_stats * stats,bool is_atomic)612f2b2614SMintz, Yuval qed_get_protocol_stats_iscsi(struct qed_dev *cdev,
62*e346e231SKonstantin Khorenko 			     struct qed_mcp_iscsi_stats *stats,
63*e346e231SKonstantin Khorenko 			     bool is_atomic) {}
64fc831825SYuval Mintz #endif /* IS_ENABLED(CONFIG_QED_ISCSI) */
65fc831825SYuval Mintz 
66fc831825SYuval Mintz #endif
67