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