dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / include / sys / idm / idm_transport.h
blob8c78b8495b3c86ac2745d04357b57fb40c728904
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
23 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _IDM_TRANSPORT_H_
28 #define _IDM_TRANSPORT_H_
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
34 #include <sys/nvpair.h>
35 #include <sys/sunldi.h>
37 #define IDM_TRANSPORT_PATHLEN 0x40
39 /* Note, this is tied to iSER currently */
40 #define IDM_TRANSPORT_HEADER_LENGTH 0x20
43 * idm_transport_type_t
44 * An enumerated list of the transports available to iSER.
45 * Note that new transports should be added to the enum prior to NUM_TYPES.
47 typedef enum {
48 IDM_TRANSPORT_TYPE_ISER = 0,
49 IDM_TRANSPORT_TYPE_SOCKETS,
50 IDM_TRANSPORT_NUM_TYPES,
51 IDM_TRANSPORT_TYPE_UNDEFINED
52 } idm_transport_type_t;
55 * idm_transport_caps_t
56 * Encodes a set of attributes describing an IDM transport's capabilities.
57 * JB - do we need this?
59 typedef struct idm_transport_caps_s {
60 uint32_t flags;
61 } idm_transport_caps_t;
64 * Transport routine definitions for idm_transport_ops_t below
67 /* Send_Control - transmit a Control-type PDU */
68 typedef void (transport_tx_op_t)(struct idm_conn_s *ic, struct idm_pdu_s *pdu);
71 * Target transport data primitives, caller (IDM) holds idt->idt_mutex,
72 * and the transport should release the mutex before returning.
74 typedef idm_status_t (transport_buf_tx_to_ini_op_t)(struct idm_task_s *idt,
75 struct idm_buf_s *idb);
76 typedef idm_status_t (transport_buf_rx_from_ini_op_t)(struct idm_task_s *idt,
77 struct idm_buf_s *idb);
79 /* Initiator transport data handlers */
80 typedef void (transport_rx_datain_op_t)(struct idm_conn_s *ic,
81 struct idm_pdu_s *pdu);
82 typedef void (transport_rx_rtt_op_t)(struct idm_conn_s *ic,
83 struct idm_pdu_s *pdu);
85 /* Target transport Data-out handler */
86 typedef void (transport_rx_dataout_op_t)(struct idm_conn_s *ic,
87 struct idm_pdu_s *pdu);
89 /* Transport-specific resource allocation and free */
90 typedef idm_status_t (transport_alloc_conn_rsrc_op_t)(struct idm_conn_s *ic);
91 typedef idm_status_t (transport_free_conn_rsrc_op_t)(struct idm_conn_s *ic);
93 /* Transport driver operations enable/disable */
94 typedef idm_status_t (transport_tgt_enable_datamover_op_t)(struct
95 idm_conn_s *ic);
96 typedef idm_status_t (transport_ini_enable_datamover_op_t)(struct
97 idm_conn_s *ic);
98 typedef idm_status_t (transport_conn_terminate_op_t)(struct idm_conn_s *ic);
100 /* Task resource cleanup */
101 typedef idm_status_t (transport_free_task_rsrcs_op_t)(struct idm_task_s *it);
103 /* Negotiate key value pairs */
104 typedef kv_status_t (transport_negotiate_key_values_op_t)(struct
105 idm_conn_s *ic, nvlist_t *request_nvl, nvlist_t *response_nvl,
106 nvlist_t *negotiated_nvl);
108 /* Activate the negotiated key value pairs */
109 typedef void (transport_notice_key_values_op_t)(struct idm_conn_s *ic,
110 nvlist_t *negotiated_nvl);
112 /* Declare the declarative key value pairs */
113 typedef kv_status_t (transport_declare_key_values_op_t)(struct idm_conn_s *ic,
114 nvlist_t *config_nvl, nvlist_t *outgoing_nvl);
116 /* Transport capability probe */
117 typedef boolean_t (transport_conn_is_capable_op_t)(idm_conn_req_t *ic,
118 struct idm_transport_caps_s *caps);
120 /* Transport buffer services */
121 typedef idm_status_t (transport_buf_alloc_op_t)(struct idm_buf_s *idb,
122 uint64_t buflen);
123 typedef idm_status_t (transport_buf_setup_op_t)(struct idm_buf_s *idb);
124 typedef void (transport_buf_teardown_op_t)(struct idm_buf_s *idb);
125 typedef void (transport_buf_free_op_t)(struct idm_buf_s *idb);
127 /* Transport target context and service management services */
128 typedef idm_status_t (transport_tgt_svc_create_op_t)(idm_svc_req_t *sr,
129 struct idm_svc_s *is);
130 typedef void (transport_tgt_svc_destroy_op_t)(struct idm_svc_s *is);
131 typedef idm_status_t (transport_tgt_svc_online_op_t)(struct idm_svc_s *is);
132 typedef void (transport_tgt_svc_offline_op_t)(struct idm_svc_s *is);
134 /* Transport target connection establishment */
135 typedef void (transport_tgt_conn_destroy_op_t)(struct idm_conn_s *ic);
136 typedef idm_status_t (transport_tgt_conn_connect_op_t)(struct idm_conn_s *ic);
137 typedef void (transport_tgt_conn_disconnect_op_t)(struct idm_conn_s *ic);
139 /* Transport initiator context and connection management services */
140 typedef idm_status_t (transport_ini_conn_create_op_t)(idm_conn_req_t *cr,
141 struct idm_conn_s *ic);
142 typedef void (transport_ini_conn_destroy_op_t)(struct idm_conn_s *ic);
143 typedef idm_status_t (transport_ini_conn_connect_op_t)(struct idm_conn_s *ic);
144 typedef void (transport_ini_conn_disconnect_op_t)(struct idm_conn_s *ic);
148 * idm_transport_ops_t
149 * Encodes a set of vectors into an IDM transport driver that implement the
150 * transport-specific Datamover operations for IDM usage. These routines are
151 * invoked by the IDM layer to execute the transport-specific implementations
152 * of the DataMover primitives and supporting routines.
154 typedef struct idm_transport_ops_s {
155 transport_tx_op_t *it_tx_pdu;
156 transport_buf_tx_to_ini_op_t *it_buf_tx_to_ini;
157 transport_buf_rx_from_ini_op_t *it_buf_rx_from_ini;
158 transport_rx_datain_op_t *it_rx_datain;
159 transport_rx_rtt_op_t *it_rx_rtt;
160 transport_rx_dataout_op_t *it_rx_dataout;
161 transport_alloc_conn_rsrc_op_t *it_alloc_conn_rsrc;
162 transport_free_conn_rsrc_op_t *it_free_conn_rsrc;
163 transport_tgt_enable_datamover_op_t *it_tgt_enable_datamover;
164 transport_ini_enable_datamover_op_t *it_ini_enable_datamover;
165 transport_conn_terminate_op_t *it_conn_terminate;
166 transport_free_task_rsrcs_op_t *it_free_task_rsrc;
167 transport_negotiate_key_values_op_t *it_negotiate_key_values;
168 transport_notice_key_values_op_t *it_notice_key_values;
169 transport_conn_is_capable_op_t *it_conn_is_capable;
170 transport_buf_alloc_op_t *it_buf_alloc;
171 transport_buf_free_op_t *it_buf_free;
172 transport_buf_setup_op_t *it_buf_setup;
173 transport_buf_teardown_op_t *it_buf_teardown;
174 transport_tgt_svc_create_op_t *it_tgt_svc_create;
175 transport_tgt_svc_destroy_op_t *it_tgt_svc_destroy;
176 transport_tgt_svc_online_op_t *it_tgt_svc_online;
177 transport_tgt_svc_offline_op_t *it_tgt_svc_offline;
178 transport_tgt_conn_destroy_op_t *it_tgt_conn_destroy;
179 transport_tgt_conn_connect_op_t *it_tgt_conn_connect;
180 transport_tgt_conn_disconnect_op_t *it_tgt_conn_disconnect;
181 transport_ini_conn_create_op_t *it_ini_conn_create;
182 transport_ini_conn_destroy_op_t *it_ini_conn_destroy;
183 transport_ini_conn_connect_op_t *it_ini_conn_connect;
184 transport_ini_conn_disconnect_op_t *it_ini_conn_disconnect;
185 transport_declare_key_values_op_t *it_declare_key_values;
186 } idm_transport_ops_t;
189 * idm_transport_t encodes all of the data related to an IDM transport
190 * type. In addition to type and capabilities, it also stores a pointer
191 * to the connection and transport operation implementations, and also
192 * it stores the LDI handle.
194 typedef struct idm_transport_s {
195 idm_transport_type_t it_type;
196 char *it_device_path;
197 ldi_handle_t it_ldi_hdl;
198 idm_transport_ops_t *it_ops;
199 idm_transport_caps_t *it_caps;
200 } idm_transport_t;
203 * idm_transport_attr_t encodes details of a transport driver seeking
204 * registration with the IDM kernel module.
206 typedef struct idm_transport_attr_s {
207 idm_transport_type_t type;
208 idm_transport_ops_t *it_ops;
209 idm_transport_caps_t *it_caps;
210 } idm_transport_attr_t;
212 /* IDM transport API */
213 idm_status_t
214 idm_transport_register(idm_transport_attr_t *attr);
216 idm_transport_t *
217 idm_transport_lookup(idm_conn_req_t *cr);
219 void
220 idm_transport_setup(ldi_ident_t li, boolean_t boot_conn);
222 void
223 idm_transport_teardown();
225 #ifdef __cplusplus
227 #endif
229 #endif /* _IDM_TRANSPORT_H_ */