xref: /freebsd/sys/dev/iscsi/icl_conn_if.m (revision e17f5b1d)
1#-
2# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3#
4# Copyright (c) 2014 The FreeBSD Foundation
5# All rights reserved.
6#
7# This software was developed by Edward Tomasz Napierala under sponsorship
8# from the FreeBSD Foundation.
9#
10# Redistribution and use in source and binary forms, with or without
11# modification, are permitted provided that the following conditions
12# are met:
13# 1. Redistributions of source code must retain the above copyright
14#    notice, this list of conditions and the following disclaimer.
15# 2. Redistributions in binary form must reproduce the above copyright
16#    notice, this list of conditions and the following disclaimer in the
17#    documentation and/or other materials provided with the distribution.
18#
19# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29# SUCH DAMAGE.
30#
31# $FreeBSD$
32#
33
34#include <sys/socket.h>
35#include <dev/iscsi/icl.h>
36
37INTERFACE icl_conn;
38
39CODE {
40	static void null_pdu_queue_cb(struct icl_conn *ic,
41	    struct icl_pdu *ip, icl_pdu_cb cb)
42	{
43		ICL_CONN_PDU_QUEUE(ic, ip);
44		if (cb)
45			cb(ip, 0);
46	}
47};
48
49METHOD size_t pdu_data_segment_length {
50	struct icl_conn *_ic;
51	const struct icl_pdu *_ip;
52};
53
54METHOD int pdu_append_data {
55	struct icl_conn *_ic;
56	struct icl_pdu *_ip;
57	const void *_addr;
58	size_t _len;
59	int _flags;
60};
61
62METHOD void pdu_get_data {
63	struct icl_conn *_ic;
64	struct icl_pdu *_ip;
65	size_t _off;
66	void *_addr;
67	size_t _len;
68};
69
70METHOD void pdu_queue {
71	struct icl_conn *_ic;
72	struct icl_pdu *_ip;
73};
74
75METHOD void pdu_queue_cb {
76	struct icl_conn *_ic;
77	struct icl_pdu *_ip;
78	icl_pdu_cb cb;
79} DEFAULT null_pdu_queue_cb;
80
81METHOD void pdu_free {
82	struct icl_conn *_ic;
83	struct icl_pdu *_ip;
84};
85
86METHOD struct icl_pdu * new_pdu {
87	struct icl_conn *_ic;
88	int _flags;
89};
90
91METHOD void free {
92	struct icl_conn *_ic;
93};
94
95METHOD int handoff {
96	struct icl_conn *_ic;
97	int _fd;
98};
99
100METHOD void close {
101	struct icl_conn *_ic;
102};
103
104METHOD int task_setup {
105	struct icl_conn *_ic;
106	struct icl_pdu *_ip;
107	struct ccb_scsiio *_csio;
108	uint32_t *_task_tag;
109	void **_prvp;
110};
111
112METHOD void task_done {
113	struct icl_conn *_ic;
114	void *_prv;
115};
116
117METHOD int transfer_setup {
118	struct icl_conn *_ic;
119	union ctl_io *_io;
120	uint32_t *_transfer_tag;
121	void **_prvp;
122};
123
124METHOD void transfer_done {
125	struct icl_conn *_ic;
126	void *_prv;
127};
128
129#
130# The function below is only used with ICL_KERNEL_PROXY.
131#
132METHOD int connect {
133	struct icl_conn *_ic;
134	int _domain;
135	int _socktype;
136	int _protocol;
137	struct sockaddr *_from_sa;
138	struct sockaddr *_to_sa;
139};
140