1*0Sstevel@tonic-gate /*
2*0Sstevel@tonic-gate * CDDL HEADER START
3*0Sstevel@tonic-gate *
4*0Sstevel@tonic-gate * The contents of this file are subject to the terms of the
5*0Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only
6*0Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance
7*0Sstevel@tonic-gate * with the License.
8*0Sstevel@tonic-gate *
9*0Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*0Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing.
11*0Sstevel@tonic-gate * See the License for the specific language governing permissions
12*0Sstevel@tonic-gate * and limitations under the License.
13*0Sstevel@tonic-gate *
14*0Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each
15*0Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*0Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the
17*0Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying
18*0Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner]
19*0Sstevel@tonic-gate *
20*0Sstevel@tonic-gate * CDDL HEADER END
21*0Sstevel@tonic-gate */
22*0Sstevel@tonic-gate /*
23*0Sstevel@tonic-gate * Copyright (c) 1998-2001 by Sun Microsystems, Inc.
24*0Sstevel@tonic-gate * All rights reserved.
25*0Sstevel@tonic-gate */
26*0Sstevel@tonic-gate
27*0Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI"
28*0Sstevel@tonic-gate
29*0Sstevel@tonic-gate #include <stdio.h>
30*0Sstevel@tonic-gate #include <sys/types.h>
31*0Sstevel@tonic-gate #include <sys/stat.h>
32*0Sstevel@tonic-gate #include <sys/mman.h>
33*0Sstevel@tonic-gate #include <sys/uio.h>
34*0Sstevel@tonic-gate #include <sys/sysmacros.h>
35*0Sstevel@tonic-gate #include <unistd.h>
36*0Sstevel@tonic-gate #include <fcntl.h>
37*0Sstevel@tonic-gate #include <dlfcn.h>
38*0Sstevel@tonic-gate #include <sched.h>
39*0Sstevel@tonic-gate #include <errno.h>
40*0Sstevel@tonic-gate #include <strings.h>
41*0Sstevel@tonic-gate
42*0Sstevel@tonic-gate #include <rsmapi.h>
43*0Sstevel@tonic-gate #include <sys/rsm/rsmndi.h>
44*0Sstevel@tonic-gate #include <rsmlib_in.h>
45*0Sstevel@tonic-gate #include <sys/rsm/rsm.h>
46*0Sstevel@tonic-gate
47*0Sstevel@tonic-gate extern int _rsm_memseg_import_map(rsm_memseg_import_handle_t,
48*0Sstevel@tonic-gate void **,
49*0Sstevel@tonic-gate rsm_attribute_t,
50*0Sstevel@tonic-gate rsm_permission_t,
51*0Sstevel@tonic-gate off_t, size_t);
52*0Sstevel@tonic-gate
53*0Sstevel@tonic-gate extern int _rsm_memseg_import_unmap(rsm_memseg_import_handle_t);
54*0Sstevel@tonic-gate
55*0Sstevel@tonic-gate static rsm_ndlib_attr_t _rsm_loopback_attr = {
56*0Sstevel@tonic-gate B_TRUE, /* mapping needed for put/get */
57*0Sstevel@tonic-gate B_TRUE /* mapping needed for putv/getv */
58*0Sstevel@tonic-gate };
59*0Sstevel@tonic-gate
60*0Sstevel@tonic-gate static int
loopback_get8(rsm_memseg_import_handle_t im_memseg,off_t off,uint8_t * datap,ulong_t rep_cnt,boolean_t swap)61*0Sstevel@tonic-gate loopback_get8(rsm_memseg_import_handle_t im_memseg, off_t off,
62*0Sstevel@tonic-gate uint8_t *datap,
63*0Sstevel@tonic-gate ulong_t rep_cnt,
64*0Sstevel@tonic-gate boolean_t swap)
65*0Sstevel@tonic-gate {
66*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
67*0Sstevel@tonic-gate uint8_t *data_addr =
68*0Sstevel@tonic-gate (uint8_t *)&seg->rsmseg_vaddr[off - seg->rsmseg_mapoffset];
69*0Sstevel@tonic-gate uint_t i = 0;
70*0Sstevel@tonic-gate int e;
71*0Sstevel@tonic-gate
72*0Sstevel@tonic-gate swap = swap;
73*0Sstevel@tonic-gate
74*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
75*0Sstevel@tonic-gate "loopback_get8: enter\n"));
76*0Sstevel@tonic-gate
77*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
78*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
79*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
80*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
81*0Sstevel@tonic-gate return (e);
82*0Sstevel@tonic-gate }
83*0Sstevel@tonic-gate }
84*0Sstevel@tonic-gate
85*0Sstevel@tonic-gate for (i = 0; i < rep_cnt; i++) {
86*0Sstevel@tonic-gate datap[i] = data_addr[i];
87*0Sstevel@tonic-gate }
88*0Sstevel@tonic-gate
89*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
90*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
91*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
92*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
93*0Sstevel@tonic-gate return (e);
94*0Sstevel@tonic-gate }
95*0Sstevel@tonic-gate }
96*0Sstevel@tonic-gate
97*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
98*0Sstevel@tonic-gate "loopback_get8: exit\n"));
99*0Sstevel@tonic-gate
100*0Sstevel@tonic-gate return (RSM_SUCCESS);
101*0Sstevel@tonic-gate }
102*0Sstevel@tonic-gate
103*0Sstevel@tonic-gate static int
loopback_get16(rsm_memseg_import_handle_t im_memseg,off_t off,uint16_t * datap,ulong_t rep_cnt,boolean_t swap)104*0Sstevel@tonic-gate loopback_get16(rsm_memseg_import_handle_t im_memseg, off_t off,
105*0Sstevel@tonic-gate uint16_t *datap,
106*0Sstevel@tonic-gate ulong_t rep_cnt,
107*0Sstevel@tonic-gate boolean_t swap)
108*0Sstevel@tonic-gate {
109*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
110*0Sstevel@tonic-gate uint16_t *data_addr =
111*0Sstevel@tonic-gate /* LINTED */
112*0Sstevel@tonic-gate (uint16_t *)&seg->rsmseg_vaddr[off - seg->rsmseg_mapoffset];
113*0Sstevel@tonic-gate uint_t i = 0;
114*0Sstevel@tonic-gate int e;
115*0Sstevel@tonic-gate
116*0Sstevel@tonic-gate swap = swap;
117*0Sstevel@tonic-gate
118*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
119*0Sstevel@tonic-gate "loopback_get16: enter\n"));
120*0Sstevel@tonic-gate
121*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
122*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
123*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
124*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
125*0Sstevel@tonic-gate return (e);
126*0Sstevel@tonic-gate }
127*0Sstevel@tonic-gate }
128*0Sstevel@tonic-gate
129*0Sstevel@tonic-gate for (i = 0; i < rep_cnt; i++) {
130*0Sstevel@tonic-gate datap[i] = data_addr[i];
131*0Sstevel@tonic-gate }
132*0Sstevel@tonic-gate
133*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
134*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
135*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
136*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
137*0Sstevel@tonic-gate return (e);
138*0Sstevel@tonic-gate }
139*0Sstevel@tonic-gate }
140*0Sstevel@tonic-gate
141*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
142*0Sstevel@tonic-gate "loopback_get16: exit\n"));
143*0Sstevel@tonic-gate
144*0Sstevel@tonic-gate return (RSM_SUCCESS);
145*0Sstevel@tonic-gate }
146*0Sstevel@tonic-gate
147*0Sstevel@tonic-gate static int
loopback_get32(rsm_memseg_import_handle_t im_memseg,off_t off,uint32_t * datap,ulong_t rep_cnt,boolean_t swap)148*0Sstevel@tonic-gate loopback_get32(rsm_memseg_import_handle_t im_memseg, off_t off,
149*0Sstevel@tonic-gate uint32_t *datap,
150*0Sstevel@tonic-gate ulong_t rep_cnt,
151*0Sstevel@tonic-gate boolean_t swap)
152*0Sstevel@tonic-gate {
153*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
154*0Sstevel@tonic-gate uint32_t *data_addr =
155*0Sstevel@tonic-gate /* LINTED */
156*0Sstevel@tonic-gate (uint32_t *)&seg->rsmseg_vaddr[off - seg->rsmseg_mapoffset];
157*0Sstevel@tonic-gate uint_t i = 0;
158*0Sstevel@tonic-gate int e;
159*0Sstevel@tonic-gate
160*0Sstevel@tonic-gate swap = swap;
161*0Sstevel@tonic-gate
162*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
163*0Sstevel@tonic-gate "loopback_get32: enter\n"));
164*0Sstevel@tonic-gate
165*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
166*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
167*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
168*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
169*0Sstevel@tonic-gate return (e);
170*0Sstevel@tonic-gate }
171*0Sstevel@tonic-gate }
172*0Sstevel@tonic-gate
173*0Sstevel@tonic-gate for (i = 0; i < rep_cnt; i++) {
174*0Sstevel@tonic-gate datap[i] = data_addr[i];
175*0Sstevel@tonic-gate }
176*0Sstevel@tonic-gate
177*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
178*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
179*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
180*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
181*0Sstevel@tonic-gate return (e);
182*0Sstevel@tonic-gate }
183*0Sstevel@tonic-gate }
184*0Sstevel@tonic-gate
185*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
186*0Sstevel@tonic-gate "loopback_get32: exit\n"));
187*0Sstevel@tonic-gate
188*0Sstevel@tonic-gate return (RSM_SUCCESS);
189*0Sstevel@tonic-gate }
190*0Sstevel@tonic-gate
191*0Sstevel@tonic-gate static int
loopback_get64(rsm_memseg_import_handle_t im_memseg,off_t off,uint64_t * datap,ulong_t rep_cnt,boolean_t swap)192*0Sstevel@tonic-gate loopback_get64(rsm_memseg_import_handle_t im_memseg, off_t off,
193*0Sstevel@tonic-gate uint64_t *datap,
194*0Sstevel@tonic-gate ulong_t rep_cnt,
195*0Sstevel@tonic-gate boolean_t swap)
196*0Sstevel@tonic-gate {
197*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
198*0Sstevel@tonic-gate uint64_t *data_addr =
199*0Sstevel@tonic-gate /* LINTED */
200*0Sstevel@tonic-gate (uint64_t *)&seg->rsmseg_vaddr[off - seg->rsmseg_mapoffset];
201*0Sstevel@tonic-gate uint_t i = 0;
202*0Sstevel@tonic-gate int e;
203*0Sstevel@tonic-gate
204*0Sstevel@tonic-gate swap = swap;
205*0Sstevel@tonic-gate
206*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
207*0Sstevel@tonic-gate "loopback_get64: enter\n"));
208*0Sstevel@tonic-gate
209*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
210*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
211*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
212*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
213*0Sstevel@tonic-gate return (e);
214*0Sstevel@tonic-gate }
215*0Sstevel@tonic-gate }
216*0Sstevel@tonic-gate
217*0Sstevel@tonic-gate for (i = 0; i < rep_cnt; i++) {
218*0Sstevel@tonic-gate datap[i] = data_addr[i];
219*0Sstevel@tonic-gate }
220*0Sstevel@tonic-gate
221*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
222*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
223*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
224*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
225*0Sstevel@tonic-gate return (e);
226*0Sstevel@tonic-gate }
227*0Sstevel@tonic-gate }
228*0Sstevel@tonic-gate
229*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
230*0Sstevel@tonic-gate "loopback_get64: exit\n"));
231*0Sstevel@tonic-gate
232*0Sstevel@tonic-gate return (RSM_SUCCESS);
233*0Sstevel@tonic-gate }
234*0Sstevel@tonic-gate
235*0Sstevel@tonic-gate static int
loopback_put8(rsm_memseg_import_handle_t im_memseg,off_t off,uint8_t * datap,ulong_t rep_cnt,boolean_t swap)236*0Sstevel@tonic-gate loopback_put8(rsm_memseg_import_handle_t im_memseg, off_t off,
237*0Sstevel@tonic-gate uint8_t *datap,
238*0Sstevel@tonic-gate ulong_t rep_cnt,
239*0Sstevel@tonic-gate boolean_t swap)
240*0Sstevel@tonic-gate {
241*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
242*0Sstevel@tonic-gate uint8_t *data_addr =
243*0Sstevel@tonic-gate (uint8_t *)&seg->rsmseg_vaddr[off - seg->rsmseg_mapoffset];
244*0Sstevel@tonic-gate uint_t i = 0;
245*0Sstevel@tonic-gate int e;
246*0Sstevel@tonic-gate
247*0Sstevel@tonic-gate swap = swap;
248*0Sstevel@tonic-gate
249*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
250*0Sstevel@tonic-gate "loopback_put8: enter\n"));
251*0Sstevel@tonic-gate
252*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
253*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
254*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
255*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
256*0Sstevel@tonic-gate return (e);
257*0Sstevel@tonic-gate }
258*0Sstevel@tonic-gate }
259*0Sstevel@tonic-gate
260*0Sstevel@tonic-gate for (i = 0; i < rep_cnt; i++) {
261*0Sstevel@tonic-gate data_addr[i] = datap[i];
262*0Sstevel@tonic-gate }
263*0Sstevel@tonic-gate
264*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
265*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
266*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
267*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
268*0Sstevel@tonic-gate return (e);
269*0Sstevel@tonic-gate }
270*0Sstevel@tonic-gate }
271*0Sstevel@tonic-gate
272*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
273*0Sstevel@tonic-gate "loopback_put8: exit\n"));
274*0Sstevel@tonic-gate
275*0Sstevel@tonic-gate return (RSM_SUCCESS);
276*0Sstevel@tonic-gate }
277*0Sstevel@tonic-gate
278*0Sstevel@tonic-gate static int
loopback_put16(rsm_memseg_import_handle_t im_memseg,off_t off,uint16_t * datap,ulong_t rep_cnt,boolean_t swap)279*0Sstevel@tonic-gate loopback_put16(rsm_memseg_import_handle_t im_memseg, off_t off,
280*0Sstevel@tonic-gate uint16_t *datap,
281*0Sstevel@tonic-gate ulong_t rep_cnt,
282*0Sstevel@tonic-gate boolean_t swap)
283*0Sstevel@tonic-gate {
284*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
285*0Sstevel@tonic-gate uint16_t *data_addr =
286*0Sstevel@tonic-gate /* LINTED */
287*0Sstevel@tonic-gate (uint16_t *)&seg->rsmseg_vaddr[off - seg->rsmseg_mapoffset];
288*0Sstevel@tonic-gate uint_t i = 0;
289*0Sstevel@tonic-gate int e;
290*0Sstevel@tonic-gate
291*0Sstevel@tonic-gate swap = swap;
292*0Sstevel@tonic-gate
293*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
294*0Sstevel@tonic-gate "loopback_put16: enter\n"));
295*0Sstevel@tonic-gate
296*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
297*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
298*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
299*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
300*0Sstevel@tonic-gate return (e);
301*0Sstevel@tonic-gate }
302*0Sstevel@tonic-gate }
303*0Sstevel@tonic-gate
304*0Sstevel@tonic-gate for (i = 0; i < rep_cnt; i++) {
305*0Sstevel@tonic-gate data_addr[i] = datap[i];
306*0Sstevel@tonic-gate }
307*0Sstevel@tonic-gate
308*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
309*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
310*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
311*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
312*0Sstevel@tonic-gate return (e);
313*0Sstevel@tonic-gate }
314*0Sstevel@tonic-gate }
315*0Sstevel@tonic-gate
316*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
317*0Sstevel@tonic-gate "loopback_put16: exit\n"));
318*0Sstevel@tonic-gate
319*0Sstevel@tonic-gate return (RSM_SUCCESS);
320*0Sstevel@tonic-gate }
321*0Sstevel@tonic-gate
322*0Sstevel@tonic-gate static int
loopback_put32(rsm_memseg_import_handle_t im_memseg,off_t off,uint32_t * datap,ulong_t rep_cnt,boolean_t swap)323*0Sstevel@tonic-gate loopback_put32(rsm_memseg_import_handle_t im_memseg, off_t off,
324*0Sstevel@tonic-gate uint32_t *datap,
325*0Sstevel@tonic-gate ulong_t rep_cnt,
326*0Sstevel@tonic-gate boolean_t swap)
327*0Sstevel@tonic-gate {
328*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
329*0Sstevel@tonic-gate uint32_t *data_addr =
330*0Sstevel@tonic-gate /* LINTED */
331*0Sstevel@tonic-gate (uint32_t *)&seg->rsmseg_vaddr[off - seg->rsmseg_mapoffset];
332*0Sstevel@tonic-gate uint_t i = 0;
333*0Sstevel@tonic-gate int e;
334*0Sstevel@tonic-gate
335*0Sstevel@tonic-gate swap = swap;
336*0Sstevel@tonic-gate
337*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
338*0Sstevel@tonic-gate "loopback_put32: enter\n"));
339*0Sstevel@tonic-gate
340*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
341*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
342*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
343*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
344*0Sstevel@tonic-gate return (e);
345*0Sstevel@tonic-gate }
346*0Sstevel@tonic-gate }
347*0Sstevel@tonic-gate
348*0Sstevel@tonic-gate for (i = 0; i < rep_cnt; i++) {
349*0Sstevel@tonic-gate data_addr[i] = datap[i];
350*0Sstevel@tonic-gate }
351*0Sstevel@tonic-gate
352*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
353*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
354*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
355*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
356*0Sstevel@tonic-gate return (e);
357*0Sstevel@tonic-gate }
358*0Sstevel@tonic-gate }
359*0Sstevel@tonic-gate
360*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
361*0Sstevel@tonic-gate "loopback_put32: exit\n"));
362*0Sstevel@tonic-gate
363*0Sstevel@tonic-gate return (RSM_SUCCESS);
364*0Sstevel@tonic-gate }
365*0Sstevel@tonic-gate
366*0Sstevel@tonic-gate static int
loopback_put64(rsm_memseg_import_handle_t im_memseg,off_t off,uint64_t * datap,ulong_t rep_cnt,boolean_t swap)367*0Sstevel@tonic-gate loopback_put64(rsm_memseg_import_handle_t im_memseg, off_t off,
368*0Sstevel@tonic-gate uint64_t *datap,
369*0Sstevel@tonic-gate ulong_t rep_cnt,
370*0Sstevel@tonic-gate boolean_t swap)
371*0Sstevel@tonic-gate {
372*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
373*0Sstevel@tonic-gate uint64_t *data_addr =
374*0Sstevel@tonic-gate /* LINTED */
375*0Sstevel@tonic-gate (uint64_t *)&seg->rsmseg_vaddr[off - seg->rsmseg_mapoffset];
376*0Sstevel@tonic-gate uint_t i = 0;
377*0Sstevel@tonic-gate int e;
378*0Sstevel@tonic-gate
379*0Sstevel@tonic-gate swap = swap;
380*0Sstevel@tonic-gate
381*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
382*0Sstevel@tonic-gate "loopback_put64: enter\n"));
383*0Sstevel@tonic-gate
384*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
385*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
386*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
387*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
388*0Sstevel@tonic-gate return (e);
389*0Sstevel@tonic-gate }
390*0Sstevel@tonic-gate }
391*0Sstevel@tonic-gate
392*0Sstevel@tonic-gate for (i = 0; i < rep_cnt; i++) {
393*0Sstevel@tonic-gate data_addr[i] = datap[i];
394*0Sstevel@tonic-gate }
395*0Sstevel@tonic-gate
396*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
397*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
398*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
399*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
400*0Sstevel@tonic-gate return (e);
401*0Sstevel@tonic-gate }
402*0Sstevel@tonic-gate }
403*0Sstevel@tonic-gate
404*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
405*0Sstevel@tonic-gate "loopback_put64: exit\n"));
406*0Sstevel@tonic-gate
407*0Sstevel@tonic-gate return (RSM_SUCCESS);
408*0Sstevel@tonic-gate }
409*0Sstevel@tonic-gate
410*0Sstevel@tonic-gate static int
loopback_get(rsm_memseg_import_handle_t im_memseg,off_t offset,void * dst_addr,size_t length)411*0Sstevel@tonic-gate loopback_get(rsm_memseg_import_handle_t im_memseg, off_t offset, void *dst_addr,
412*0Sstevel@tonic-gate size_t length)
413*0Sstevel@tonic-gate {
414*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
415*0Sstevel@tonic-gate int e;
416*0Sstevel@tonic-gate
417*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
418*0Sstevel@tonic-gate "loopback_get: enter\n"));
419*0Sstevel@tonic-gate
420*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
421*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
422*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
423*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
424*0Sstevel@tonic-gate return (e);
425*0Sstevel@tonic-gate }
426*0Sstevel@tonic-gate }
427*0Sstevel@tonic-gate
428*0Sstevel@tonic-gate bcopy(seg->rsmseg_vaddr + offset - seg->rsmseg_mapoffset, dst_addr,
429*0Sstevel@tonic-gate length);
430*0Sstevel@tonic-gate
431*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
432*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
433*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
434*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
435*0Sstevel@tonic-gate return (e);
436*0Sstevel@tonic-gate }
437*0Sstevel@tonic-gate }
438*0Sstevel@tonic-gate
439*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
440*0Sstevel@tonic-gate "loopback_get: exit\n"));
441*0Sstevel@tonic-gate
442*0Sstevel@tonic-gate return (RSM_SUCCESS);
443*0Sstevel@tonic-gate }
444*0Sstevel@tonic-gate
445*0Sstevel@tonic-gate
446*0Sstevel@tonic-gate /*
447*0Sstevel@tonic-gate * Move data to each component of the io vector from the remote segment
448*0Sstevel@tonic-gate */
449*0Sstevel@tonic-gate int
loopback_getv(rsm_scat_gath_t * sg_io)450*0Sstevel@tonic-gate loopback_getv(rsm_scat_gath_t *sg_io)
451*0Sstevel@tonic-gate {
452*0Sstevel@tonic-gate rsm_iovec_t *iovec = sg_io->iovec;
453*0Sstevel@tonic-gate rsmseg_handle_t *im_seg = (rsmseg_handle_t *)sg_io->remote_handle;
454*0Sstevel@tonic-gate int i;
455*0Sstevel@tonic-gate
456*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
457*0Sstevel@tonic-gate "loopback_getv: enter\n"));
458*0Sstevel@tonic-gate
459*0Sstevel@tonic-gate /* do the vector data transfer */
460*0Sstevel@tonic-gate for (i = 0; i < sg_io->io_request_count; i++) {
461*0Sstevel@tonic-gate (void) bcopy(im_seg->rsmseg_vaddr + iovec->remote_offset,
462*0Sstevel@tonic-gate iovec->local.vaddr + iovec->local_offset,
463*0Sstevel@tonic-gate iovec->transfer_length);
464*0Sstevel@tonic-gate iovec++;
465*0Sstevel@tonic-gate }
466*0Sstevel@tonic-gate
467*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
468*0Sstevel@tonic-gate "loopback_getv: exit\n"));
469*0Sstevel@tonic-gate
470*0Sstevel@tonic-gate sg_io->io_residual_count = 0;
471*0Sstevel@tonic-gate
472*0Sstevel@tonic-gate return (RSM_SUCCESS);
473*0Sstevel@tonic-gate }
474*0Sstevel@tonic-gate
475*0Sstevel@tonic-gate static int
loopback_put(rsm_memseg_import_handle_t im_memseg,off_t offset,void * src_addr,size_t length)476*0Sstevel@tonic-gate loopback_put(rsm_memseg_import_handle_t im_memseg, off_t offset, void *src_addr,
477*0Sstevel@tonic-gate size_t length)
478*0Sstevel@tonic-gate {
479*0Sstevel@tonic-gate rsmseg_handle_t *seg = (rsmseg_handle_t *)im_memseg;
480*0Sstevel@tonic-gate int e;
481*0Sstevel@tonic-gate
482*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
483*0Sstevel@tonic-gate "loopback_put: enter\n"));
484*0Sstevel@tonic-gate
485*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
486*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_open_barrier(
487*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
488*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
489*0Sstevel@tonic-gate return (e);
490*0Sstevel@tonic-gate }
491*0Sstevel@tonic-gate }
492*0Sstevel@tonic-gate
493*0Sstevel@tonic-gate bcopy(src_addr, seg->rsmseg_vaddr + offset - seg->rsmseg_mapoffset,
494*0Sstevel@tonic-gate length);
495*0Sstevel@tonic-gate
496*0Sstevel@tonic-gate if (seg->rsmseg_barmode == RSM_BARRIER_MODE_IMPLICIT) {
497*0Sstevel@tonic-gate e = seg->rsmseg_ops->rsm_memseg_import_close_barrier(
498*0Sstevel@tonic-gate (rsm_barrier_handle_t)seg->rsmseg_barrier);
499*0Sstevel@tonic-gate if (e != RSM_SUCCESS) {
500*0Sstevel@tonic-gate return (e);
501*0Sstevel@tonic-gate }
502*0Sstevel@tonic-gate }
503*0Sstevel@tonic-gate
504*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
505*0Sstevel@tonic-gate "loopback_put: exit\n"));
506*0Sstevel@tonic-gate
507*0Sstevel@tonic-gate return (RSM_SUCCESS);
508*0Sstevel@tonic-gate }
509*0Sstevel@tonic-gate
510*0Sstevel@tonic-gate
511*0Sstevel@tonic-gate /*
512*0Sstevel@tonic-gate * Move data from each component of the io vector to the remote segment
513*0Sstevel@tonic-gate */
514*0Sstevel@tonic-gate int
loopback_putv(rsm_scat_gath_t * sg_io)515*0Sstevel@tonic-gate loopback_putv(rsm_scat_gath_t *sg_io)
516*0Sstevel@tonic-gate {
517*0Sstevel@tonic-gate rsm_iovec_t *iovec = sg_io->iovec;
518*0Sstevel@tonic-gate rsmseg_handle_t *im_seg = (rsmseg_handle_t *)sg_io->remote_handle;
519*0Sstevel@tonic-gate int i;
520*0Sstevel@tonic-gate
521*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
522*0Sstevel@tonic-gate "loopback_putv: enter\n"));
523*0Sstevel@tonic-gate
524*0Sstevel@tonic-gate /* do the vector data transfer */
525*0Sstevel@tonic-gate for (i = 0; i < sg_io->io_request_count; i++) {
526*0Sstevel@tonic-gate (void) bcopy(iovec->local.vaddr + iovec->local_offset,
527*0Sstevel@tonic-gate im_seg->rsmseg_vaddr + iovec->remote_offset,
528*0Sstevel@tonic-gate iovec->transfer_length);
529*0Sstevel@tonic-gate iovec++;
530*0Sstevel@tonic-gate }
531*0Sstevel@tonic-gate
532*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
533*0Sstevel@tonic-gate "loopback_putv: exit\n"));
534*0Sstevel@tonic-gate
535*0Sstevel@tonic-gate sg_io->io_residual_count = 0;
536*0Sstevel@tonic-gate
537*0Sstevel@tonic-gate return (RSM_SUCCESS);
538*0Sstevel@tonic-gate }
539*0Sstevel@tonic-gate
540*0Sstevel@tonic-gate static int
loopback_create_handle(rsmapi_controller_handle_t controller,rsm_localmemory_handle_t * local_handle,caddr_t vaddr,size_t len)541*0Sstevel@tonic-gate loopback_create_handle(rsmapi_controller_handle_t controller,
542*0Sstevel@tonic-gate rsm_localmemory_handle_t *local_handle,
543*0Sstevel@tonic-gate caddr_t vaddr, size_t len)
544*0Sstevel@tonic-gate {
545*0Sstevel@tonic-gate
546*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
547*0Sstevel@tonic-gate "loopback_create_handle: enter\n"));
548*0Sstevel@tonic-gate
549*0Sstevel@tonic-gate controller = controller;
550*0Sstevel@tonic-gate len = len;
551*0Sstevel@tonic-gate
552*0Sstevel@tonic-gate *local_handle = (rsm_localmemory_handle_t)vaddr;
553*0Sstevel@tonic-gate
554*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
555*0Sstevel@tonic-gate "loopback_create_handle: exit\n"));
556*0Sstevel@tonic-gate
557*0Sstevel@tonic-gate return (RSM_SUCCESS);
558*0Sstevel@tonic-gate }
559*0Sstevel@tonic-gate
560*0Sstevel@tonic-gate static int
loopback_free_handle(rsm_localmemory_handle_t handle)561*0Sstevel@tonic-gate loopback_free_handle(rsm_localmemory_handle_t handle)
562*0Sstevel@tonic-gate {
563*0Sstevel@tonic-gate
564*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
565*0Sstevel@tonic-gate "loopback_free_handle: enter\n"));
566*0Sstevel@tonic-gate
567*0Sstevel@tonic-gate handle = handle;
568*0Sstevel@tonic-gate
569*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
570*0Sstevel@tonic-gate "loopback_free_handle: exit\n"));
571*0Sstevel@tonic-gate
572*0Sstevel@tonic-gate return (RSM_SUCCESS);
573*0Sstevel@tonic-gate }
574*0Sstevel@tonic-gate
575*0Sstevel@tonic-gate
576*0Sstevel@tonic-gate /*
577*0Sstevel@tonic-gate * import side memory segment operations (barriers):
578*0Sstevel@tonic-gate */
579*0Sstevel@tonic-gate static int
loopback_init_barrier(rsm_memseg_import_handle_t im_memseg,rsm_barrier_type_t type,rsm_barrier_handle_t barrier)580*0Sstevel@tonic-gate loopback_init_barrier(rsm_memseg_import_handle_t im_memseg,
581*0Sstevel@tonic-gate rsm_barrier_type_t type,
582*0Sstevel@tonic-gate rsm_barrier_handle_t barrier)
583*0Sstevel@tonic-gate {
584*0Sstevel@tonic-gate
585*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
586*0Sstevel@tonic-gate "loopback_init_barrier: enter\n"));
587*0Sstevel@tonic-gate
588*0Sstevel@tonic-gate type = type; im_memseg = im_memseg; barrier = barrier;
589*0Sstevel@tonic-gate
590*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
591*0Sstevel@tonic-gate "loopback_init_barrier: exit\n"));
592*0Sstevel@tonic-gate
593*0Sstevel@tonic-gate return (RSM_SUCCESS);
594*0Sstevel@tonic-gate }
595*0Sstevel@tonic-gate
596*0Sstevel@tonic-gate static int
loopback_open_barrier(rsm_barrier_handle_t barrier)597*0Sstevel@tonic-gate loopback_open_barrier(rsm_barrier_handle_t barrier)
598*0Sstevel@tonic-gate {
599*0Sstevel@tonic-gate
600*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
601*0Sstevel@tonic-gate "loopback_open_barrier: enter\n"));
602*0Sstevel@tonic-gate
603*0Sstevel@tonic-gate barrier = barrier;
604*0Sstevel@tonic-gate
605*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
606*0Sstevel@tonic-gate "loopback_open_barrier: exit\n"));
607*0Sstevel@tonic-gate
608*0Sstevel@tonic-gate return (RSM_SUCCESS);
609*0Sstevel@tonic-gate }
610*0Sstevel@tonic-gate
611*0Sstevel@tonic-gate static int
loopback_order_barrier(rsm_barrier_handle_t barrier)612*0Sstevel@tonic-gate loopback_order_barrier(rsm_barrier_handle_t barrier)
613*0Sstevel@tonic-gate {
614*0Sstevel@tonic-gate
615*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
616*0Sstevel@tonic-gate "loopback_order_barrier: enter\n"));
617*0Sstevel@tonic-gate
618*0Sstevel@tonic-gate barrier = barrier;
619*0Sstevel@tonic-gate
620*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
621*0Sstevel@tonic-gate "loopback_order_barrier: exit\n"));
622*0Sstevel@tonic-gate
623*0Sstevel@tonic-gate return (RSM_SUCCESS);
624*0Sstevel@tonic-gate }
625*0Sstevel@tonic-gate
626*0Sstevel@tonic-gate static int
loopback_close_barrier(rsm_barrier_handle_t barrier)627*0Sstevel@tonic-gate loopback_close_barrier(rsm_barrier_handle_t barrier)
628*0Sstevel@tonic-gate {
629*0Sstevel@tonic-gate
630*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
631*0Sstevel@tonic-gate "loopback_close_barrier: enter\n"));
632*0Sstevel@tonic-gate
633*0Sstevel@tonic-gate barrier = barrier;
634*0Sstevel@tonic-gate
635*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
636*0Sstevel@tonic-gate "loopback_close_barrier: exit\n"));
637*0Sstevel@tonic-gate
638*0Sstevel@tonic-gate return (RSM_SUCCESS);
639*0Sstevel@tonic-gate }
640*0Sstevel@tonic-gate
641*0Sstevel@tonic-gate static int
loopback_destroy_barrier(rsm_barrier_handle_t barrier)642*0Sstevel@tonic-gate loopback_destroy_barrier(rsm_barrier_handle_t barrier)
643*0Sstevel@tonic-gate {
644*0Sstevel@tonic-gate
645*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
646*0Sstevel@tonic-gate "loopback_destroy_barrier: enter\n"));
647*0Sstevel@tonic-gate
648*0Sstevel@tonic-gate barrier = barrier;
649*0Sstevel@tonic-gate
650*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
651*0Sstevel@tonic-gate "loopback_destroy_barrier: exit\n"));
652*0Sstevel@tonic-gate
653*0Sstevel@tonic-gate return (RSM_SUCCESS);
654*0Sstevel@tonic-gate }
655*0Sstevel@tonic-gate
656*0Sstevel@tonic-gate static int
loopback_get_lib_attr(rsm_ndlib_attr_t ** libattrp)657*0Sstevel@tonic-gate loopback_get_lib_attr(rsm_ndlib_attr_t **libattrp)
658*0Sstevel@tonic-gate {
659*0Sstevel@tonic-gate
660*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
661*0Sstevel@tonic-gate "loopback_get_lib_attr: enter\n"));
662*0Sstevel@tonic-gate
663*0Sstevel@tonic-gate *libattrp = &_rsm_loopback_attr;
664*0Sstevel@tonic-gate
665*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
666*0Sstevel@tonic-gate "loopback_get_lib_attr: exit\n"));
667*0Sstevel@tonic-gate
668*0Sstevel@tonic-gate return (RSM_SUCCESS);
669*0Sstevel@tonic-gate }
670*0Sstevel@tonic-gate /*
671*0Sstevel@tonic-gate * If an entry is NULL, the parent will fill it out with its entry point.
672*0Sstevel@tonic-gate */
673*0Sstevel@tonic-gate void
__rsmloopback_init_ops(rsm_segops_t * segops)674*0Sstevel@tonic-gate __rsmloopback_init_ops(rsm_segops_t *segops)
675*0Sstevel@tonic-gate {
676*0Sstevel@tonic-gate
677*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
678*0Sstevel@tonic-gate "__rsmloopback_init_ops: enter\n"));
679*0Sstevel@tonic-gate
680*0Sstevel@tonic-gate segops->rsm_memseg_import_get8 = loopback_get8;
681*0Sstevel@tonic-gate segops->rsm_memseg_import_get16 = loopback_get16;
682*0Sstevel@tonic-gate segops->rsm_memseg_import_get32 = loopback_get32;
683*0Sstevel@tonic-gate segops->rsm_memseg_import_get64 = loopback_get64;
684*0Sstevel@tonic-gate
685*0Sstevel@tonic-gate segops->rsm_memseg_import_put8 = loopback_put8;
686*0Sstevel@tonic-gate segops->rsm_memseg_import_put16 = loopback_put16;
687*0Sstevel@tonic-gate segops->rsm_memseg_import_put32 = loopback_put32;
688*0Sstevel@tonic-gate segops->rsm_memseg_import_put64 = loopback_put64;
689*0Sstevel@tonic-gate
690*0Sstevel@tonic-gate segops->rsm_memseg_import_put = loopback_put;
691*0Sstevel@tonic-gate segops->rsm_memseg_import_get = loopback_get;
692*0Sstevel@tonic-gate
693*0Sstevel@tonic-gate segops->rsm_memseg_import_putv = loopback_putv;
694*0Sstevel@tonic-gate segops->rsm_memseg_import_getv = loopback_getv;
695*0Sstevel@tonic-gate
696*0Sstevel@tonic-gate segops->rsm_create_localmemory_handle = loopback_create_handle;
697*0Sstevel@tonic-gate segops->rsm_free_localmemory_handle = loopback_free_handle;
698*0Sstevel@tonic-gate
699*0Sstevel@tonic-gate segops->rsm_memseg_import_init_barrier = loopback_init_barrier;
700*0Sstevel@tonic-gate segops->rsm_memseg_import_open_barrier = loopback_open_barrier;
701*0Sstevel@tonic-gate segops->rsm_memseg_import_order_barrier = loopback_order_barrier;
702*0Sstevel@tonic-gate segops->rsm_memseg_import_close_barrier = loopback_close_barrier;
703*0Sstevel@tonic-gate segops->rsm_memseg_import_destroy_barrier = loopback_destroy_barrier;
704*0Sstevel@tonic-gate
705*0Sstevel@tonic-gate segops->rsm_get_lib_attr = loopback_get_lib_attr;
706*0Sstevel@tonic-gate
707*0Sstevel@tonic-gate DBPRINTF((RSM_LIBRARY|RSM_LOOPBACK, RSM_DEBUG_VERBOSE,
708*0Sstevel@tonic-gate "__rsmloopback_init_ops: exit\n"));
709*0Sstevel@tonic-gate
710*0Sstevel@tonic-gate }
711