xref: /freebsd/sys/dev/isp/isp_library.c (revision 2b743a9e9ddc6736208dc8ca1ce06ce64ad20a19)
1 /*-
2  * Copyright (c) 2006 by Matthew Jacob
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice immediately at the beginning of the file, without modification,
10  *    this list of conditions, and the following disclaimer.
11  * 2. The name of the author may not be used to endorse or promote products
12  *    derived from this software without specific prior written permission.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
18  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  */
27 /*
28  * Qlogic Host Adapter Internal Library Functions
29  */
30 #ifdef	__NetBSD__
31 #include <dev/ic/isp_netbsd.h>
32 #endif
33 #ifdef	__FreeBSD__
34 #include <sys/cdefs.h>
35 __FBSDID("$FreeBSD$");
36 #include <dev/isp/isp_freebsd.h>
37 #endif
38 #ifdef	__OpenBSD__
39 #include <dev/ic/isp_openbsd.h>
40 #endif
41 #ifdef	__linux__
42 #include "isp_linux.h"
43 #endif
44 #ifdef	__svr4__
45 #include "isp_solaris.h"
46 #endif
47 
48 int
49 isp_save_xs(ispsoftc_t *isp, XS_T *xs, uint32_t *handlep)
50 {
51 	uint16_t i, j;
52 
53 	for (j = isp->isp_lasthdls, i = 0; i < isp->isp_maxcmds; i++) {
54 		if (isp->isp_xflist[j] == NULL) {
55 			break;
56 		}
57 		if (++j == isp->isp_maxcmds) {
58 			j = 0;
59 		}
60 	}
61 	if (i == isp->isp_maxcmds) {
62 		return (-1);
63 	}
64 	isp->isp_xflist[j] = xs;
65 	*handlep = j+1;
66 	if (++j == isp->isp_maxcmds) {
67 		j = 0;
68 	}
69 	isp->isp_lasthdls = (uint32_t)j;
70 	return (0);
71 }
72 
73 XS_T *
74 isp_find_xs(ispsoftc_t *isp, uint32_t handle)
75 {
76 	if (handle < 1 || handle > (uint32_t) isp->isp_maxcmds) {
77 		return (NULL);
78 	} else {
79 		return (isp->isp_xflist[handle - 1]);
80 	}
81 }
82 
83 uint32_t
84 isp_find_handle(ispsoftc_t *isp, XS_T *xs)
85 {
86 	uint16_t i;
87 	if (xs != NULL) {
88 		for (i = 0; i < isp->isp_maxcmds; i++) {
89 			if (isp->isp_xflist[i] == xs) {
90 				return ((uint32_t) (i+1));
91 			}
92 		}
93 	}
94 	return (0);
95 }
96 
97 uint32_t
98 isp_handle_index(uint32_t handle)
99 {
100 	return (handle - 1);
101 }
102 
103 void
104 isp_destroy_handle(ispsoftc_t *isp, uint32_t handle)
105 {
106 	if (handle > 0 && handle <= (uint32_t) isp->isp_maxcmds) {
107 		isp->isp_xflist[handle - 1] = NULL;
108 	}
109 }
110 
111 int
112 isp_getrqentry(ispsoftc_t *isp, uint32_t *iptrp,
113     uint32_t *optrp, void **resultp)
114 {
115 	volatile uint32_t iptr, optr;
116 
117 	optr = isp->isp_reqodx = ISP_READ(isp, isp->isp_rqstoutrp);
118 	iptr = isp->isp_reqidx;
119 	*resultp = ISP_QUEUE_ENTRY(isp->isp_rquest, iptr);
120 	iptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN(isp));
121 	if (iptr == optr) {
122 		return (1);
123 	}
124 	if (optrp)
125 		*optrp = optr;
126 	if (iptrp)
127 		*iptrp = iptr;
128 	return (0);
129 }
130 
131 #define	TBA	(4 * (((QENTRY_LEN >> 2) * 3) + 1) + 1)
132 void
133 isp_print_qentry(ispsoftc_t *isp, char *msg, int idx, void *arg)
134 {
135 	char buf[TBA];
136 	int amt, i, j;
137 	uint8_t *ptr = arg;
138 
139 	isp_prt(isp, ISP_LOGALL, "%s index %d=>", msg, idx);
140 	for (buf[0] = 0, amt = i = 0; i < 4; i++) {
141 		buf[0] = 0;
142 		SNPRINTF(buf, TBA, "  ");
143 		for (j = 0; j < (QENTRY_LEN >> 2); j++) {
144 			SNPRINTF(buf, TBA, "%s %02x", buf, ptr[amt++] & 0xff);
145 		}
146 		isp_prt(isp, ISP_LOGALL, buf);
147 	}
148 }
149 
150 void
151 isp_print_bytes(ispsoftc_t *isp, char *msg, int amt, void *arg)
152 {
153 	char buf[128];
154 	uint8_t *ptr = arg;
155 	int off;
156 
157 	if (msg)
158 		isp_prt(isp, ISP_LOGALL, "%s:", msg);
159 	off = 0;
160 	buf[0] = 0;
161 	while (off < amt) {
162 		int j, to;
163 		to = off;
164 		for (j = 0; j < 16; j++) {
165 			SNPRINTF(buf, 128, "%s %02x", buf, ptr[off++] & 0xff);
166 			if (off == amt)
167 				break;
168 		}
169 		isp_prt(isp, ISP_LOGALL, "0x%08x:%s", to, buf);
170 		buf[0] = 0;
171 	}
172 }
173 
174 /*
175  * Do the common path to try and ensure that link is up, we've scanned
176  * the fabric (if we're on a fabric), and that we've synchronized this
177  * all with our own database and done the appropriate logins.
178  *
179  * We repeatedly check for firmware state and loop state after each
180  * action because things may have changed while we were doing this.
181  * Any failure or change of state causes us to return a nonzero value.
182  *
183  * We assume we enter here with any locks held.
184  */
185 
186 int
187 isp_fc_runstate(ispsoftc_t *isp, int tval)
188 {
189 	fcparam *fcp;
190 	int *tptr;
191 
192         if (isp->isp_role == ISP_ROLE_NONE) {
193 		return (0);
194 	}
195 	fcp = FCPARAM(isp);
196 	tptr = &tval;
197 	if (fcp->isp_fwstate < FW_READY ||
198 	    fcp->isp_loopstate < LOOP_PDB_RCVD) {
199 		if (isp_control(isp, ISPCTL_FCLINK_TEST, tptr) != 0) {
200 			isp_prt(isp, ISP_LOGSANCFG,
201 			    "isp_fc_runstate: linktest failed");
202 			return (-1);
203 		}
204 		if (fcp->isp_fwstate != FW_READY ||
205 		    fcp->isp_loopstate < LOOP_PDB_RCVD) {
206 			isp_prt(isp, ISP_LOGSANCFG,
207 				"isp_fc_runstate: f/w not ready");
208 			return (-1);
209 		}
210 	}
211 	if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
212 		return (0);
213 	}
214 	if (isp_control(isp, ISPCTL_SCAN_LOOP, NULL) != 0) {
215 		isp_prt(isp, ISP_LOGSANCFG,
216 		    "isp_fc_runstate: scan loop fails");
217 		return (LOOP_PDB_RCVD);
218 	}
219 	if (isp_control(isp, ISPCTL_SCAN_FABRIC, NULL) != 0) {
220 		isp_prt(isp, ISP_LOGSANCFG,
221 		    "isp_fc_runstate: scan fabric fails");
222 		return (LOOP_LSCAN_DONE);
223 	}
224 	if (isp_control(isp, ISPCTL_PDB_SYNC, NULL) != 0) {
225 		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: pdb_sync fails");
226 		return (LOOP_FSCAN_DONE);
227 	}
228 	if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) {
229 		isp_prt(isp, ISP_LOGSANCFG,
230 		    "isp_fc_runstate: f/w not ready again");
231 		return (-1);
232 	}
233 	return (0);
234 }
235 
236 /*
237  * Fibre Channel Support- get the port database for the id.
238  */
239 void
240 isp_dump_portdb(ispsoftc_t *isp)
241 {
242 	fcparam *fcp = (fcparam *) isp->isp_param;
243 	int i;
244 
245 	for (i = 0; i < MAX_FC_TARG; i++) {
246 		char mb[4];
247 		const char *dbs[8] = {
248 			"NIL ",
249 			"PROB",
250 			"DEAD",
251 			"CHGD",
252 			"NEW ",
253 			"PVLD",
254 			"ZOMB",
255 			"VLD "
256 		};
257 		const char *roles[4] = {
258 			" UNK", " TGT", " INI", "TINI"
259 		};
260 		fcportdb_t *lp = &fcp->portdb[i];
261 
262 		if (lp->state == FC_PORTDB_STATE_NIL) {
263 			continue;
264 		}
265 		if (lp->ini_map_idx) {
266 			SNPRINTF(mb, sizeof (mb), "%3d",
267 			    ((int) lp->ini_map_idx) - 1);
268 		} else {
269 			SNPRINTF(mb, sizeof (mb), "---");
270 		}
271 		isp_prt(isp, ISP_LOGALL, "%d: hdl 0x%x %s al%d tgt %s %s "
272 		    "0x%06x =>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x", i,
273 		    lp->handle, dbs[lp->state], lp->autologin, mb,
274 		    roles[lp->roles], lp->portid,
275 		    roles[lp->new_roles], lp->new_portid,
276 		    (uint32_t) (lp->node_wwn >> 32),
277 		    (uint32_t) (lp->node_wwn),
278 		    (uint32_t) (lp->port_wwn >> 32),
279 		    (uint32_t) (lp->port_wwn));
280 	}
281 }
282 
283 void
284 isp_shutdown(ispsoftc_t *isp)
285 {
286 	if (IS_FC(isp)) {
287 		if (IS_24XX(isp)) {
288 			ISP_WRITE(isp, BIU2400_ICR, 0);
289 			ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_PAUSE);
290 		} else {
291 			ISP_WRITE(isp, BIU_ICR, 0);
292 			ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
293 			ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
294 			ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
295 			ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
296 			ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
297 			ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
298 		}
299 	} else {
300 		ISP_WRITE(isp, BIU_ICR, 0);
301 		ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
302 	}
303 }
304 
305 /*
306  * Functions to move stuff to a form that the QLogic RISC engine understands
307  * and functions to move stuff back to a form the processor understands.
308  *
309  * Each platform is required to provide the 8, 16 and 32 bit
310  * swizzle and unswizzle macros (ISP_IOX{PUT|GET}_{8,16,32})
311  *
312  * The assumption is that swizzling and unswizzling is mostly done 'in place'
313  * (with a few exceptions for efficiency).
314  */
315 
316 #define	ISP_IS_SBUS(isp)	\
317 	(ISP_SBUS_SUPPORTED && (isp)->isp_bustype == ISP_BT_SBUS)
318 
319 #define	ASIZE(x)	(sizeof (x) / sizeof (x[0]))
320 /*
321  * Swizzle/Copy Functions
322  */
323 void
324 isp_put_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
325 {
326 	if (ISP_IS_SBUS(isp)) {
327 		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
328 		    &hpdst->rqs_entry_count);
329 		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
330 		    &hpdst->rqs_entry_type);
331 		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
332 		    &hpdst->rqs_flags);
333 		ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
334 		    &hpdst->rqs_seqno);
335 	} else {
336 		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
337 		    &hpdst->rqs_entry_type);
338 		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
339 		    &hpdst->rqs_entry_count);
340 		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
341 		    &hpdst->rqs_seqno);
342 		ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
343 		    &hpdst->rqs_flags);
344 	}
345 }
346 
347 void
348 isp_get_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
349 {
350 	if (ISP_IS_SBUS(isp)) {
351 		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
352 		    hpdst->rqs_entry_count);
353 		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
354 		    hpdst->rqs_entry_type);
355 		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
356 		    hpdst->rqs_flags);
357 		ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
358 		    hpdst->rqs_seqno);
359 	} else {
360 		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
361 		    hpdst->rqs_entry_type);
362 		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
363 		    hpdst->rqs_entry_count);
364 		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
365 		    hpdst->rqs_seqno);
366 		ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
367 		    hpdst->rqs_flags);
368 	}
369 }
370 
371 int
372 isp_get_response_type(ispsoftc_t *isp, isphdr_t *hp)
373 {
374 	uint8_t type;
375 	if (ISP_IS_SBUS(isp)) {
376 		ISP_IOXGET_8(isp, &hp->rqs_entry_count, type);
377 	} else {
378 		ISP_IOXGET_8(isp, &hp->rqs_entry_type, type);
379 	}
380 	return ((int)type);
381 }
382 
383 void
384 isp_put_request(ispsoftc_t *isp, ispreq_t *rqsrc, ispreq_t *rqdst)
385 {
386 	int i;
387 	isp_put_hdr(isp, &rqsrc->req_header, &rqdst->req_header);
388 	ISP_IOXPUT_32(isp, rqsrc->req_handle, &rqdst->req_handle);
389 	if (ISP_IS_SBUS(isp)) {
390 		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_target);
391 		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_lun_trn);
392 	} else {
393 		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_lun_trn);
394 		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_target);
395 	}
396 	ISP_IOXPUT_16(isp, rqsrc->req_cdblen, &rqdst->req_cdblen);
397 	ISP_IOXPUT_16(isp, rqsrc->req_flags, &rqdst->req_flags);
398 	ISP_IOXPUT_16(isp, rqsrc->req_time, &rqdst->req_time);
399 	ISP_IOXPUT_16(isp, rqsrc->req_seg_count, &rqdst->req_seg_count);
400 	for (i = 0; i < ASIZE(rqsrc->req_cdb); i++) {
401 		ISP_IOXPUT_8(isp, rqsrc->req_cdb[i], &rqdst->req_cdb[i]);
402 	}
403 	for (i = 0; i < ISP_RQDSEG; i++) {
404 		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_base,
405 		    &rqdst->req_dataseg[i].ds_base);
406 		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_count,
407 		    &rqdst->req_dataseg[i].ds_count);
408 	}
409 }
410 
411 void
412 isp_put_marker(ispsoftc_t *isp, isp_marker_t *src, isp_marker_t *dst)
413 {
414 	int i;
415 	isp_put_hdr(isp, &src->mrk_header, &dst->mrk_header);
416 	ISP_IOXPUT_32(isp, src->mrk_handle, &dst->mrk_handle);
417 	if (ISP_IS_SBUS(isp)) {
418 		ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_target);
419 		ISP_IOXPUT_8(isp, src->mrk_target, &dst->mrk_reserved0);
420 	} else {
421 		ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_reserved0);
422 		ISP_IOXPUT_8(isp, src->mrk_target, &dst->mrk_target);
423 	}
424 	ISP_IOXPUT_16(isp, src->mrk_modifier, &dst->mrk_modifier);
425 	ISP_IOXPUT_16(isp, src->mrk_flags, &dst->mrk_flags);
426 	ISP_IOXPUT_16(isp, src->mrk_lun, &dst->mrk_lun);
427 	for (i = 0; i < ASIZE(src->mrk_reserved1); i++) {
428 		ISP_IOXPUT_8(isp, src->mrk_reserved1[i],
429 		    &dst->mrk_reserved1[i]);
430 	}
431 }
432 
433 void
434 isp_put_marker_24xx(ispsoftc_t *isp,
435     isp_marker_24xx_t *src, isp_marker_24xx_t *dst)
436 {
437 	int i;
438 	isp_put_hdr(isp, &src->mrk_header, &dst->mrk_header);
439 	ISP_IOXPUT_32(isp, src->mrk_handle, &dst->mrk_handle);
440 	ISP_IOXPUT_16(isp, src->mrk_nphdl, &dst->mrk_nphdl);
441 	ISP_IOXPUT_8(isp, src->mrk_modifier, &dst->mrk_modifier);
442 	ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_reserved0);
443 	ISP_IOXPUT_8(isp, src->mrk_reserved1, &dst->mrk_reserved1);
444 	ISP_IOXPUT_8(isp, src->mrk_vphdl, &dst->mrk_vphdl);
445 	ISP_IOXPUT_8(isp, src->mrk_reserved2, &dst->mrk_reserved2);
446 	for (i = 0; i < ASIZE(src->mrk_lun); i++) {
447 		ISP_IOXPUT_8(isp, src->mrk_lun[i], &dst->mrk_lun[i]);
448 	}
449 	for (i = 0; i < ASIZE(src->mrk_reserved3); i++) {
450 		ISP_IOXPUT_8(isp, src->mrk_reserved3[i],
451 		    &dst->mrk_reserved3[i]);
452 	}
453 }
454 
455 void
456 isp_put_request_t2(ispsoftc_t *isp, ispreqt2_t *src, ispreqt2_t *dst)
457 {
458 	int i;
459 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
460 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
461 	ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
462 	ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
463 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
464 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
465 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
466 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
467 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
468 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
469 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
470 	}
471 	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
472 	for (i = 0; i < ISP_RQDSEG_T2; i++) {
473 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
474 		    &dst->req_dataseg[i].ds_base);
475 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
476 		    &dst->req_dataseg[i].ds_count);
477 	}
478 }
479 
480 void
481 isp_put_request_t2e(ispsoftc_t *isp, ispreqt2e_t *src, ispreqt2e_t *dst)
482 {
483 	int i;
484 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
485 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
486 	ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
487 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
488 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
489 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
490 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
491 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
492 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
493 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
494 	}
495 	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
496 	for (i = 0; i < ISP_RQDSEG_T2; i++) {
497 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
498 		    &dst->req_dataseg[i].ds_base);
499 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
500 		    &dst->req_dataseg[i].ds_count);
501 	}
502 }
503 
504 void
505 isp_put_request_t3(ispsoftc_t *isp, ispreqt3_t *src, ispreqt3_t *dst)
506 {
507 	int i;
508 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
509 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
510 	ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
511 	ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
512 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
513 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
514 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
515 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
516 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
517 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
518 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
519 	}
520 	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
521 	for (i = 0; i < ISP_RQDSEG_T3; i++) {
522 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
523 		    &dst->req_dataseg[i].ds_base);
524 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi,
525 		    &dst->req_dataseg[i].ds_basehi);
526 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
527 		    &dst->req_dataseg[i].ds_count);
528 	}
529 }
530 
531 void
532 isp_put_request_t3e(ispsoftc_t *isp, ispreqt3e_t *src, ispreqt3e_t *dst)
533 {
534 	int i;
535 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
536 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
537 	ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
538 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
539 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
540 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
541 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
542 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
543 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
544 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
545 	}
546 	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
547 	for (i = 0; i < ISP_RQDSEG_T3; i++) {
548 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
549 		    &dst->req_dataseg[i].ds_base);
550 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi,
551 		    &dst->req_dataseg[i].ds_basehi);
552 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
553 		    &dst->req_dataseg[i].ds_count);
554 	}
555 }
556 
557 void
558 isp_put_extended_request(ispsoftc_t *isp, ispextreq_t *src, ispextreq_t *dst)
559 {
560 	int i;
561 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
562 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
563 	if (ISP_IS_SBUS(isp)) {
564 		ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_target);
565 		ISP_IOXPUT_8(isp, src->req_target, &dst->req_lun_trn);
566 	} else {
567 		ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
568 		ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
569 	}
570 	ISP_IOXPUT_16(isp, src->req_cdblen, &dst->req_cdblen);
571 	ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags);
572 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
573 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
574 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
575 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
576 	}
577 }
578 
579 void
580 isp_put_request_t7(ispsoftc_t *isp, ispreqt7_t *src, ispreqt7_t *dst)
581 {
582 	int i;
583 	uint32_t *a, *b;
584 
585 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
586 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
587 	ISP_IOXPUT_16(isp, src->req_nphdl, &dst->req_nphdl);
588 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
589 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
590 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
591 	a = (uint32_t *) src->req_lun;
592 	b = (uint32_t *) dst->req_lun;
593 	for (i = 0; i < (ASIZE(src->req_lun) >> 2); i++ ) {
594 		ISP_IOZPUT_32(isp, *a++, b++);
595 	}
596 	ISP_IOXPUT_8(isp, src->req_alen_datadir, &dst->req_alen_datadir);
597 	ISP_IOXPUT_8(isp, src->req_task_management, &dst->req_task_management);
598 	ISP_IOXPUT_8(isp, src->req_task_attribute, &dst->req_task_attribute);
599 	ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
600 	a = (uint32_t *) src->req_cdb;
601 	b = (uint32_t *) dst->req_cdb;
602 	for (i = 0; i < (ASIZE(src->req_cdb) >> 2); i++ ) {
603 		ISP_IOZPUT_32(isp, *a++, b++);
604 	}
605 	ISP_IOXPUT_32(isp, src->req_dl, &dst->req_dl);
606 	ISP_IOXPUT_16(isp, src->req_tidlo, &dst->req_tidlo);
607 	ISP_IOXPUT_8(isp, src->req_tidhi, &dst->req_tidhi);
608 	ISP_IOXPUT_8(isp, src->req_vpidx, &dst->req_vpidx);
609 	ISP_IOXPUT_32(isp, src->req_dataseg.ds_base,
610 	    &dst->req_dataseg.ds_base);
611 	ISP_IOXPUT_32(isp, src->req_dataseg.ds_basehi,
612 	    &dst->req_dataseg.ds_basehi);
613 	ISP_IOXPUT_32(isp, src->req_dataseg.ds_count,
614 	    &dst->req_dataseg.ds_count);
615 }
616 
617 void
618 isp_put_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
619 {
620 	int i;
621 	isp_put_hdr(isp, &src->abrt_header, &dst->abrt_header);
622 	ISP_IOXPUT_32(isp, src->abrt_handle, &dst->abrt_handle);
623 	ISP_IOXPUT_16(isp, src->abrt_nphdl, &dst->abrt_nphdl);
624 	ISP_IOXPUT_16(isp, src->abrt_options, &dst->abrt_options);
625 	ISP_IOXPUT_32(isp, src->abrt_cmd_handle, &dst->abrt_cmd_handle);
626 	for (i = 0; i < ASIZE(src->abrt_reserved); i++) {
627 		ISP_IOXPUT_8(isp, src->abrt_reserved[i],
628 		    &dst->abrt_reserved[i]);
629 	}
630 	ISP_IOXPUT_16(isp, src->abrt_tidlo, &dst->abrt_tidlo);
631 	ISP_IOXPUT_8(isp, src->abrt_tidhi, &dst->abrt_tidhi);
632 	ISP_IOXPUT_8(isp, src->abrt_vpidx, &dst->abrt_vpidx);
633 	for (i = 0; i < ASIZE(src->abrt_reserved1); i++) {
634 		ISP_IOXPUT_8(isp, src->abrt_reserved1[i],
635 		    &dst->abrt_reserved1[i]);
636 	}
637 }
638 
639 void
640 isp_put_cont_req(ispsoftc_t *isp, ispcontreq_t *src, ispcontreq_t *dst)
641 {
642 	int i;
643 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
644 	for (i = 0; i < ISP_CDSEG; i++) {
645 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
646 		    &dst->req_dataseg[i].ds_base);
647 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
648 		    &dst->req_dataseg[i].ds_count);
649 	}
650 }
651 
652 void
653 isp_put_cont64_req(ispsoftc_t *isp, ispcontreq64_t *src, ispcontreq64_t *dst)
654 {
655 	int i;
656 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
657 	for (i = 0; i < ISP_CDSEG64; i++) {
658 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
659 		    &dst->req_dataseg[i].ds_base);
660 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi,
661 		    &dst->req_dataseg[i].ds_basehi);
662 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
663 		    &dst->req_dataseg[i].ds_count);
664 	}
665 }
666 
667 void
668 isp_get_response(ispsoftc_t *isp, ispstatusreq_t *src, ispstatusreq_t *dst)
669 {
670 	int i;
671 	isp_get_hdr(isp, &src->req_header, &dst->req_header);
672 	ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle);
673 	ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status);
674 	ISP_IOXGET_16(isp, &src->req_completion_status,
675 	    dst->req_completion_status);
676 	ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags);
677 	ISP_IOXGET_16(isp, &src->req_status_flags, dst->req_status_flags);
678 	ISP_IOXGET_16(isp, &src->req_time, dst->req_time);
679 	ISP_IOXGET_16(isp, &src->req_sense_len, dst->req_sense_len);
680 	ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
681 	for (i = 0; i < 8; i++) {
682 		ISP_IOXGET_8(isp, &src->req_response[i],
683 		    dst->req_response[i]);
684 	}
685 	for (i = 0; i < 32; i++) {
686 		ISP_IOXGET_8(isp, &src->req_sense_data[i],
687 		    dst->req_sense_data[i]);
688 	}
689 }
690 
691 void
692 isp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src,
693     isp24xx_statusreq_t *dst)
694 {
695 	int i;
696 	isp_get_hdr(isp, &src->req_header, &dst->req_header);
697 	ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle);
698 	ISP_IOXGET_16(isp, &src->req_completion_status,
699 	    dst->req_completion_status);
700 	ISP_IOXGET_16(isp, &src->req_oxid, dst->req_oxid);
701 	ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
702 	ISP_IOXGET_16(isp, &src->req_reserved0, dst->req_reserved0);
703 	ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags);
704 	ISP_IOXGET_16(isp, &src->req_reserved1, dst->req_reserved1);
705 	ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status);
706 	ISP_IOXGET_32(isp, &src->req_fcp_residual, dst->req_fcp_residual);
707 	ISP_IOXGET_32(isp, &src->req_sense_len, dst->req_sense_len);
708 	ISP_IOXGET_32(isp, &src->req_response_len, dst->req_response_len);
709 	for (i = 0; i < 28; i++) {
710 		ISP_IOXGET_8(isp, &src->req_rsp_sense[i],
711 		    dst->req_rsp_sense[i]);
712 	}
713 }
714 
715 void
716 isp_get_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
717 {
718 	int i;
719 	isp_get_hdr(isp, &src->abrt_header, &dst->abrt_header);
720 	ISP_IOXGET_32(isp, &src->abrt_handle, dst->abrt_handle);
721 	ISP_IOXGET_16(isp, &src->abrt_nphdl, dst->abrt_nphdl);
722 	ISP_IOXGET_16(isp, &src->abrt_options, dst->abrt_options);
723 	ISP_IOXGET_32(isp, &src->abrt_cmd_handle, dst->abrt_cmd_handle);
724 	for (i = 0; i < ASIZE(&src->abrt_reserved); i++) {
725 		ISP_IOXGET_8(isp, &src->abrt_reserved[i],
726 		    dst->abrt_reserved[i]);
727 	}
728 	ISP_IOXGET_16(isp, &src->abrt_tidlo, dst->abrt_tidlo);
729 	ISP_IOXGET_8(isp, &src->abrt_tidhi, dst->abrt_tidhi);
730 	ISP_IOXGET_8(isp, &src->abrt_vpidx, dst->abrt_vpidx);
731 	for (i = 0; i < ASIZE(&src->abrt_reserved1); i++) {
732 		ISP_IOXGET_8(isp, &src->abrt_reserved1[i],
733 		    dst->abrt_reserved1[i]);
734 	}
735 }
736 
737 
738 void
739 isp_get_rio2(ispsoftc_t *isp, isp_rio2_t *r2src, isp_rio2_t *r2dst)
740 {
741 	int i;
742 	isp_get_hdr(isp, &r2src->req_header, &r2dst->req_header);
743 	if (r2dst->req_header.rqs_seqno > 30) {
744 		r2dst->req_header.rqs_seqno = 30;
745 	}
746 	for (i = 0; i < r2dst->req_header.rqs_seqno; i++) {
747 		ISP_IOXGET_16(isp, &r2src->req_handles[i],
748 		    r2dst->req_handles[i]);
749 	}
750 	while (i < 30) {
751 		r2dst->req_handles[i++] = 0;
752 	}
753 }
754 
755 void
756 isp_put_icb(ispsoftc_t *isp, isp_icb_t *src, isp_icb_t *dst)
757 {
758 	int i;
759 	if (ISP_IS_SBUS(isp)) {
760 		ISP_IOXPUT_8(isp, src->icb_version, &dst->icb_reserved0);
761 		ISP_IOXPUT_8(isp, src->icb_reserved0, &dst->icb_version);
762 	} else {
763 		ISP_IOXPUT_8(isp, src->icb_version, &dst->icb_version);
764 		ISP_IOXPUT_8(isp, src->icb_reserved0, &dst->icb_reserved0);
765 	}
766 	ISP_IOXPUT_16(isp, src->icb_fwoptions, &dst->icb_fwoptions);
767 	ISP_IOXPUT_16(isp, src->icb_maxfrmlen, &dst->icb_maxfrmlen);
768 	ISP_IOXPUT_16(isp, src->icb_maxalloc, &dst->icb_maxalloc);
769 	ISP_IOXPUT_16(isp, src->icb_execthrottle, &dst->icb_execthrottle);
770 	if (ISP_IS_SBUS(isp)) {
771 		ISP_IOXPUT_8(isp, src->icb_retry_count, &dst->icb_retry_delay);
772 		ISP_IOXPUT_8(isp, src->icb_retry_delay, &dst->icb_retry_count);
773 	} else {
774 		ISP_IOXPUT_8(isp, src->icb_retry_count, &dst->icb_retry_count);
775 		ISP_IOXPUT_8(isp, src->icb_retry_delay, &dst->icb_retry_delay);
776 	}
777 	for (i = 0; i < 8; i++) {
778 		ISP_IOXPUT_8(isp, src->icb_portname[i], &dst->icb_portname[i]);
779 	}
780 	ISP_IOXPUT_16(isp, src->icb_hardaddr, &dst->icb_hardaddr);
781 	if (ISP_IS_SBUS(isp)) {
782 		ISP_IOXPUT_8(isp, src->icb_iqdevtype, &dst->icb_logintime);
783 		ISP_IOXPUT_8(isp, src->icb_logintime, &dst->icb_iqdevtype);
784 	} else {
785 		ISP_IOXPUT_8(isp, src->icb_iqdevtype, &dst->icb_iqdevtype);
786 		ISP_IOXPUT_8(isp, src->icb_logintime, &dst->icb_logintime);
787 	}
788 	for (i = 0; i < 8; i++) {
789 		ISP_IOXPUT_8(isp, src->icb_nodename[i], &dst->icb_nodename[i]);
790 	}
791 	ISP_IOXPUT_16(isp, src->icb_rqstout, &dst->icb_rqstout);
792 	ISP_IOXPUT_16(isp, src->icb_rspnsin, &dst->icb_rspnsin);
793 	ISP_IOXPUT_16(isp, src->icb_rqstqlen, &dst->icb_rqstqlen);
794 	ISP_IOXPUT_16(isp, src->icb_rsltqlen, &dst->icb_rsltqlen);
795 	for (i = 0; i < 4; i++) {
796 		ISP_IOXPUT_16(isp, src->icb_rqstaddr[i], &dst->icb_rqstaddr[i]);
797 	}
798 	for (i = 0; i < 4; i++) {
799 		ISP_IOXPUT_16(isp, src->icb_respaddr[i], &dst->icb_respaddr[i]);
800 	}
801 	ISP_IOXPUT_16(isp, src->icb_lunenables, &dst->icb_lunenables);
802 	if (ISP_IS_SBUS(isp)) {
803 		ISP_IOXPUT_8(isp, src->icb_ccnt, &dst->icb_icnt);
804 		ISP_IOXPUT_8(isp, src->icb_icnt, &dst->icb_ccnt);
805 	} else {
806 		ISP_IOXPUT_8(isp, src->icb_ccnt, &dst->icb_ccnt);
807 		ISP_IOXPUT_8(isp, src->icb_icnt, &dst->icb_icnt);
808 	}
809 	ISP_IOXPUT_16(isp, src->icb_lunetimeout, &dst->icb_lunetimeout);
810 	ISP_IOXPUT_16(isp, src->icb_reserved1, &dst->icb_reserved1);
811 	ISP_IOXPUT_16(isp, src->icb_xfwoptions, &dst->icb_xfwoptions);
812 	if (ISP_IS_SBUS(isp)) {
813 		ISP_IOXPUT_8(isp, src->icb_racctimer, &dst->icb_idelaytimer);
814 		ISP_IOXPUT_8(isp, src->icb_idelaytimer, &dst->icb_racctimer);
815 	} else {
816 		ISP_IOXPUT_8(isp, src->icb_racctimer, &dst->icb_racctimer);
817 		ISP_IOXPUT_8(isp, src->icb_idelaytimer, &dst->icb_idelaytimer);
818 	}
819 	ISP_IOXPUT_16(isp, src->icb_zfwoptions, &dst->icb_zfwoptions);
820 }
821 
822 void
823 isp_put_icb_2400(ispsoftc_t *isp, isp_icb_2400_t *src, isp_icb_2400_t *dst)
824 {
825 	int i;
826 	ISP_IOXPUT_16(isp, src->icb_version, &dst->icb_version);
827 	ISP_IOXPUT_16(isp, src->icb_reserved0, &dst->icb_reserved0);
828 	ISP_IOXPUT_16(isp, src->icb_maxfrmlen, &dst->icb_maxfrmlen);
829 	ISP_IOXPUT_16(isp, src->icb_execthrottle, &dst->icb_execthrottle);
830 	ISP_IOXPUT_16(isp, src->icb_xchgcnt, &dst->icb_xchgcnt);
831 	ISP_IOXPUT_16(isp, src->icb_hardaddr, &dst->icb_hardaddr);
832 	for (i = 0; i < 8; i++) {
833 		ISP_IOXPUT_8(isp, src->icb_portname[i], &dst->icb_portname[i]);
834 	}
835 	for (i = 0; i < 8; i++) {
836 		ISP_IOXPUT_8(isp, src->icb_nodename[i], &dst->icb_nodename[i]);
837 	}
838 	ISP_IOXPUT_16(isp, src->icb_rspnsin, &dst->icb_rspnsin);
839 	ISP_IOXPUT_16(isp, src->icb_rqstout, &dst->icb_rqstout);
840 	ISP_IOXPUT_16(isp, src->icb_retry_count, &dst->icb_retry_count);
841 	ISP_IOXPUT_16(isp, src->icb_priout, &dst->icb_priout);
842 	ISP_IOXPUT_16(isp, src->icb_rsltqlen, &dst->icb_rsltqlen);
843 	ISP_IOXPUT_16(isp, src->icb_rqstqlen, &dst->icb_rqstqlen);
844 	ISP_IOXPUT_16(isp, src->icb_ldn_nols, &dst->icb_ldn_nols);
845 	ISP_IOXPUT_16(isp, src->icb_prqstqlen, &dst->icb_prqstqlen);
846 	for (i = 0; i < 4; i++) {
847 		ISP_IOXPUT_16(isp, src->icb_rqstaddr[i], &dst->icb_rqstaddr[i]);
848 	}
849 	for (i = 0; i < 4; i++) {
850 		ISP_IOXPUT_16(isp, src->icb_respaddr[i], &dst->icb_respaddr[i]);
851 	}
852 	for (i = 0; i < 4; i++) {
853 		ISP_IOXPUT_16(isp, src->icb_priaddr[i], &dst->icb_priaddr[i]);
854 	}
855 	for (i = 0; i < 4; i++) {
856 		ISP_IOXPUT_16(isp, src->icb_reserved1[i],
857 		    &dst->icb_reserved1[i]);
858 	}
859 	ISP_IOXPUT_16(isp, src->icb_atio_in, &dst->icb_atio_in);
860 	ISP_IOXPUT_16(isp, src->icb_atioqlen, &dst->icb_atioqlen);
861 	for (i = 0; i < 4; i++) {
862 		ISP_IOXPUT_16(isp, src->icb_atioqaddr[i],
863 		    &dst->icb_atioqaddr[i]);
864 	}
865 	ISP_IOXPUT_16(isp, src->icb_idelaytimer, &dst->icb_idelaytimer);
866 	ISP_IOXPUT_16(isp, src->icb_logintime, &dst->icb_logintime);
867 	ISP_IOXPUT_32(isp, src->icb_fwoptions1, &dst->icb_fwoptions1);
868 	ISP_IOXPUT_32(isp, src->icb_fwoptions2, &dst->icb_fwoptions2);
869 	ISP_IOXPUT_32(isp, src->icb_fwoptions3, &dst->icb_fwoptions3);
870 	for (i = 0; i < 12; i++) {
871 		ISP_IOXPUT_16(isp, src->icb_reserved2[i],
872 		    &dst->icb_reserved2[i]);
873 	}
874 }
875 
876 void
877 isp_get_pdb_21xx(ispsoftc_t *isp, isp_pdb_21xx_t *src, isp_pdb_21xx_t *dst)
878 {
879 	int i;
880 	ISP_IOXGET_16(isp, &src->pdb_options, dst->pdb_options);
881         ISP_IOXGET_8(isp, &src->pdb_mstate, dst->pdb_mstate);
882         ISP_IOXGET_8(isp, &src->pdb_sstate, dst->pdb_sstate);
883 	for (i = 0; i < 4; i++) {
884 		ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i],
885 		    dst->pdb_hardaddr_bits[i]);
886 	}
887 	for (i = 0; i < 4; i++) {
888 		ISP_IOXGET_8(isp, &src->pdb_portid_bits[i],
889 		    dst->pdb_portid_bits[i]);
890 	}
891 	for (i = 0; i < 8; i++) {
892 		ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
893 	}
894 	for (i = 0; i < 8; i++) {
895 		ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
896 	}
897 	ISP_IOXGET_16(isp, &src->pdb_execthrottle, dst->pdb_execthrottle);
898 	ISP_IOXGET_16(isp, &src->pdb_exec_count, dst->pdb_exec_count);
899 	ISP_IOXGET_8(isp, &src->pdb_retry_count, dst->pdb_retry_count);
900 	ISP_IOXGET_8(isp, &src->pdb_retry_delay, dst->pdb_retry_delay);
901 	ISP_IOXGET_16(isp, &src->pdb_resalloc, dst->pdb_resalloc);
902 	ISP_IOXGET_16(isp, &src->pdb_curalloc, dst->pdb_curalloc);
903 	ISP_IOXGET_16(isp, &src->pdb_qhead, dst->pdb_qhead);
904 	ISP_IOXGET_16(isp, &src->pdb_qtail, dst->pdb_qtail);
905 	ISP_IOXGET_16(isp, &src->pdb_tl_next, dst->pdb_tl_next);
906 	ISP_IOXGET_16(isp, &src->pdb_tl_last, dst->pdb_tl_last);
907 	ISP_IOXGET_16(isp, &src->pdb_features, dst->pdb_features);
908 	ISP_IOXGET_16(isp, &src->pdb_pconcurrnt, dst->pdb_pconcurrnt);
909 	ISP_IOXGET_16(isp, &src->pdb_roi, dst->pdb_roi);
910 	ISP_IOXGET_8(isp, &src->pdb_target, dst->pdb_target);
911 	ISP_IOXGET_8(isp, &src->pdb_initiator, dst->pdb_initiator);
912 	ISP_IOXGET_16(isp, &src->pdb_rdsiz, dst->pdb_rdsiz);
913 	ISP_IOXGET_16(isp, &src->pdb_ncseq, dst->pdb_ncseq);
914 	ISP_IOXGET_16(isp, &src->pdb_noseq, dst->pdb_noseq);
915 	ISP_IOXGET_16(isp, &src->pdb_labrtflg, dst->pdb_labrtflg);
916 	ISP_IOXGET_16(isp, &src->pdb_lstopflg, dst->pdb_lstopflg);
917 	ISP_IOXGET_16(isp, &src->pdb_sqhead, dst->pdb_sqhead);
918 	ISP_IOXGET_16(isp, &src->pdb_sqtail, dst->pdb_sqtail);
919 	ISP_IOXGET_16(isp, &src->pdb_ptimer, dst->pdb_ptimer);
920 	ISP_IOXGET_16(isp, &src->pdb_nxt_seqid, dst->pdb_nxt_seqid);
921 	ISP_IOXGET_16(isp, &src->pdb_fcount, dst->pdb_fcount);
922 	ISP_IOXGET_16(isp, &src->pdb_prli_len, dst->pdb_prli_len);
923 	ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
924 	ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
925 	ISP_IOXGET_16(isp, &src->pdb_loopid, dst->pdb_loopid);
926 	ISP_IOXGET_16(isp, &src->pdb_il_ptr, dst->pdb_il_ptr);
927 	ISP_IOXGET_16(isp, &src->pdb_sl_ptr, dst->pdb_sl_ptr);
928 }
929 
930 void
931 isp_get_pdb_24xx(ispsoftc_t *isp, isp_pdb_24xx_t *src, isp_pdb_24xx_t *dst)
932 {
933 	int i;
934 	ISP_IOXGET_16(isp, &src->pdb_flags, dst->pdb_flags);
935         ISP_IOXGET_8(isp, &src->pdb_curstate, dst->pdb_curstate);
936         ISP_IOXGET_8(isp, &src->pdb_laststate, dst->pdb_laststate);
937 	for (i = 0; i < 4; i++) {
938 		ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i],
939 		    dst->pdb_hardaddr_bits[i]);
940 	}
941 	for (i = 0; i < 4; i++) {
942 		ISP_IOXGET_8(isp, &src->pdb_portid_bits[i],
943 		    dst->pdb_portid_bits[i]);
944 	}
945 	ISP_IOXGET_16(isp, &src->pdb_retry_timer, dst->pdb_retry_timer);
946 	ISP_IOXGET_16(isp, &src->pdb_handle, dst->pdb_handle);
947 	ISP_IOXGET_16(isp, &src->pdb_rcv_dsize, dst->pdb_rcv_dsize);
948 	ISP_IOXGET_16(isp, &src->pdb_reserved0, dst->pdb_reserved0);
949 	ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
950 	ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
951 	for (i = 0; i < 8; i++) {
952 		ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
953 	}
954 	for (i = 0; i < 8; i++) {
955 		ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
956 	}
957 	for (i = 0; i < 24; i++) {
958 		ISP_IOXGET_8(isp, &src->pdb_reserved1[i],
959 		    dst->pdb_reserved1[i]);
960 	}
961 }
962 
963 /*
964  * PLOGI/LOGO IOCB canonicalization
965  */
966 
967 void
968 isp_get_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst)
969 {
970 	int i;
971 	isp_get_hdr(isp, &src->plogx_header, &dst->plogx_header);
972 	ISP_IOXGET_32(isp, &src->plogx_handle, dst->plogx_handle);
973 	ISP_IOXGET_16(isp, &src->plogx_status, dst->plogx_status);
974 	ISP_IOXGET_16(isp, &src->plogx_nphdl, dst->plogx_nphdl);
975 	ISP_IOXGET_16(isp, &src->plogx_flags, dst->plogx_flags);
976 	ISP_IOXGET_16(isp, &src->plogx_vphdl, dst->plogx_vphdl);
977 	ISP_IOXGET_16(isp, &src->plogx_portlo, dst->plogx_portlo);
978 	ISP_IOXGET_16(isp, &src->plogx_rspsz_porthi, dst->plogx_rspsz_porthi);
979 	for (i = 0; i < 11; i++) {
980 		ISP_IOXGET_16(isp, &src->plogx_ioparm[i].lo16,
981 		    dst->plogx_ioparm[i].lo16);
982 		ISP_IOXGET_16(isp, &src->plogx_ioparm[i].hi16,
983 		    dst->plogx_ioparm[i].hi16);
984 	}
985 }
986 
987 void
988 isp_put_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst)
989 {
990 	int i;
991 	isp_put_hdr(isp, &src->plogx_header, &dst->plogx_header);
992 	ISP_IOXPUT_32(isp, src->plogx_handle, &dst->plogx_handle);
993 	ISP_IOXPUT_16(isp, src->plogx_status, &dst->plogx_status);
994 	ISP_IOXPUT_16(isp, src->plogx_nphdl, &dst->plogx_nphdl);
995 	ISP_IOXPUT_16(isp, src->plogx_flags, &dst->plogx_flags);
996 	ISP_IOXPUT_16(isp, src->plogx_vphdl, &dst->plogx_vphdl);
997 	ISP_IOXPUT_16(isp, src->plogx_portlo, &dst->plogx_portlo);
998 	ISP_IOXPUT_16(isp, src->plogx_rspsz_porthi, &dst->plogx_rspsz_porthi);
999 	for (i = 0; i < 11; i++) {
1000 		ISP_IOXPUT_16(isp, src->plogx_ioparm[i].lo16,
1001 		    &dst->plogx_ioparm[i].lo16);
1002 		ISP_IOXPUT_16(isp, src->plogx_ioparm[i].hi16,
1003 		    &dst->plogx_ioparm[i].hi16);
1004 	}
1005 }
1006 
1007 /*
1008  * CT Passthru canonicalization
1009  */
1010 void
1011 isp_get_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst)
1012 {
1013 	int i;
1014 
1015 	isp_get_hdr(isp, &src->ctp_header, &dst->ctp_header);
1016 	ISP_IOXGET_32(isp, &src->ctp_handle, dst->ctp_handle);
1017 	ISP_IOXGET_16(isp, &src->ctp_status, dst->ctp_status);
1018 	ISP_IOXGET_16(isp, &src->ctp_nphdl, dst->ctp_nphdl);
1019 	ISP_IOXGET_16(isp, &src->ctp_cmd_cnt, dst->ctp_cmd_cnt);
1020 	ISP_IOXGET_16(isp, &src->ctp_vpidx, dst->ctp_vpidx);
1021 	ISP_IOXGET_16(isp, &src->ctp_time, dst->ctp_time);
1022 	ISP_IOXGET_16(isp, &src->ctp_reserved0, dst->ctp_reserved0);
1023 	ISP_IOXGET_16(isp, &src->ctp_rsp_cnt, dst->ctp_rsp_cnt);
1024 	for (i = 0; i < 5; i++) {
1025 		ISP_IOXGET_16(isp, &src->ctp_reserved1[i],
1026 		    dst->ctp_reserved1[i]);
1027 	}
1028 	ISP_IOXGET_32(isp, &src->ctp_rsp_bcnt, dst->ctp_rsp_bcnt);
1029 	ISP_IOXGET_32(isp, &src->ctp_cmd_bcnt, dst->ctp_cmd_bcnt);
1030 	for (i = 0; i < 2; i++) {
1031 		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_base,
1032 		    dst->ctp_dataseg[i].ds_base);
1033 		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_basehi,
1034 		    dst->ctp_dataseg[i].ds_basehi);
1035 		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_count,
1036 		    dst->ctp_dataseg[i].ds_count);
1037 	}
1038 }
1039 
1040 void
1041 isp_get_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst)
1042 {
1043 	int i;
1044 
1045 	isp_get_hdr(isp, &src->ms_header, &dst->ms_header);
1046 	ISP_IOXGET_32(isp, &src->ms_handle, dst->ms_handle);
1047 	ISP_IOXGET_16(isp, &src->ms_nphdl, dst->ms_nphdl);
1048 	ISP_IOXGET_16(isp, &src->ms_status, dst->ms_status);
1049 	ISP_IOXGET_16(isp, &src->ms_flags, dst->ms_flags);
1050 	ISP_IOXGET_16(isp, &src->ms_reserved1, dst->ms_reserved1);
1051 	ISP_IOXGET_16(isp, &src->ms_time, dst->ms_time);
1052 	ISP_IOXGET_16(isp, &src->ms_cmd_cnt, dst->ms_cmd_cnt);
1053 	ISP_IOXGET_16(isp, &src->ms_tot_cnt, dst->ms_tot_cnt);
1054 	ISP_IOXGET_8(isp, &src->ms_type, dst->ms_type);
1055 	ISP_IOXGET_8(isp, &src->ms_r_ctl, dst->ms_r_ctl);
1056 	ISP_IOXGET_16(isp, &src->ms_rxid, dst->ms_rxid);
1057 	ISP_IOXGET_16(isp, &src->ms_reserved2, dst->ms_reserved2);
1058 	ISP_IOXGET_32(isp, &src->ms_rsp_bcnt, dst->ms_rsp_bcnt);
1059 	ISP_IOXGET_32(isp, &src->ms_cmd_bcnt, dst->ms_cmd_bcnt);
1060 	for (i = 0; i < 2; i++) {
1061 		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_base,
1062 		    dst->ms_dataseg[i].ds_base);
1063 		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_basehi,
1064 		    dst->ms_dataseg[i].ds_basehi);
1065 		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_count,
1066 		    dst->ms_dataseg[i].ds_count);
1067 	}
1068 }
1069 
1070 void
1071 isp_put_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst)
1072 {
1073 	int i;
1074 
1075 	isp_put_hdr(isp, &src->ctp_header, &dst->ctp_header);
1076 	ISP_IOXPUT_32(isp, src->ctp_handle, &dst->ctp_handle);
1077 	ISP_IOXPUT_16(isp, src->ctp_status, &dst->ctp_status);
1078 	ISP_IOXPUT_16(isp, src->ctp_nphdl, &dst->ctp_nphdl);
1079 	ISP_IOXPUT_16(isp, src->ctp_cmd_cnt, &dst->ctp_cmd_cnt);
1080 	ISP_IOXPUT_16(isp, src->ctp_vpidx, &dst->ctp_vpidx);
1081 	ISP_IOXPUT_16(isp, src->ctp_time, &dst->ctp_time);
1082 	ISP_IOXPUT_16(isp, src->ctp_reserved0, &dst->ctp_reserved0);
1083 	ISP_IOXPUT_16(isp, src->ctp_rsp_cnt, &dst->ctp_rsp_cnt);
1084 	for (i = 0; i < 5; i++) {
1085 		ISP_IOXPUT_16(isp, src->ctp_reserved1[i],
1086 		    &dst->ctp_reserved1[i]);
1087 	}
1088 	ISP_IOXPUT_32(isp, src->ctp_rsp_bcnt, &dst->ctp_rsp_bcnt);
1089 	ISP_IOXPUT_32(isp, src->ctp_cmd_bcnt, &dst->ctp_cmd_bcnt);
1090 	for (i = 0; i < 2; i++) {
1091 		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_base,
1092 		    &dst->ctp_dataseg[i].ds_base);
1093 		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_basehi,
1094 		    &dst->ctp_dataseg[i].ds_basehi);
1095 		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_count,
1096 		    &dst->ctp_dataseg[i].ds_count);
1097 	}
1098 }
1099 
1100 void
1101 isp_put_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst)
1102 {
1103 	int i;
1104 
1105 	isp_put_hdr(isp, &src->ms_header, &dst->ms_header);
1106 	ISP_IOXPUT_32(isp, src->ms_handle, &dst->ms_handle);
1107 	ISP_IOXPUT_16(isp, src->ms_nphdl, &dst->ms_nphdl);
1108 	ISP_IOXPUT_16(isp, src->ms_status, &dst->ms_status);
1109 	ISP_IOXPUT_16(isp, src->ms_flags, &dst->ms_flags);
1110 	ISP_IOXPUT_16(isp, src->ms_reserved1, &dst->ms_reserved1);
1111 	ISP_IOXPUT_16(isp, src->ms_time, &dst->ms_time);
1112 	ISP_IOXPUT_16(isp, src->ms_cmd_cnt, &dst->ms_cmd_cnt);
1113 	ISP_IOXPUT_16(isp, src->ms_tot_cnt, &dst->ms_tot_cnt);
1114 	ISP_IOXPUT_8(isp, src->ms_type, &dst->ms_type);
1115 	ISP_IOXPUT_8(isp, src->ms_r_ctl, &dst->ms_r_ctl);
1116 	ISP_IOXPUT_16(isp, src->ms_rxid, &dst->ms_rxid);
1117 	ISP_IOXPUT_16(isp, src->ms_reserved2, &dst->ms_reserved2);
1118 	ISP_IOXPUT_32(isp, src->ms_rsp_bcnt, &dst->ms_rsp_bcnt);
1119 	ISP_IOXPUT_32(isp, src->ms_cmd_bcnt, &dst->ms_cmd_bcnt);
1120 	for (i = 0; i < 2; i++) {
1121 		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_base,
1122 		    &dst->ms_dataseg[i].ds_base);
1123 		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_basehi,
1124 		    &dst->ms_dataseg[i].ds_basehi);
1125 		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_count,
1126 		    &dst->ms_dataseg[i].ds_count);
1127 	}
1128 }
1129 
1130 /*
1131  * Generic SNS request - not particularly useful since the per-command data
1132  * isn't always 16 bit words.
1133  */
1134 void
1135 isp_put_sns_request(ispsoftc_t *isp, sns_screq_t *src, sns_screq_t *dst)
1136 {
1137 	int i, nw = (int) src->snscb_sblen;
1138 	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1139 	for (i = 0; i < 4; i++) {
1140 		ISP_IOXPUT_16(isp, src->snscb_addr[i], &dst->snscb_addr[i]);
1141 	}
1142 	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1143 	for (i = 0; i < nw; i++) {
1144 		ISP_IOXPUT_16(isp, src->snscb_data[i], &dst->snscb_data[i]);
1145 	}
1146 
1147 }
1148 
1149 void
1150 isp_put_gid_ft_request(ispsoftc_t *isp, sns_gid_ft_req_t *src,
1151     sns_gid_ft_req_t *dst)
1152 {
1153 	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1154 	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
1155 	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
1156 	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
1157 	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
1158 	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
1159 	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1160 	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
1161 	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
1162 	ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2);
1163 	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
1164 	ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type);
1165 }
1166 
1167 void
1168 isp_put_gxn_id_request(ispsoftc_t *isp, sns_gxn_id_req_t *src,
1169     sns_gxn_id_req_t *dst)
1170 {
1171 	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1172 	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
1173 	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
1174 	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
1175 	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
1176 	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
1177 	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1178 	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
1179 	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
1180 	ISP_IOXPUT_16(isp, src->snscb_reserved2, &dst->snscb_reserved2);
1181 	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
1182 	ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid);
1183 }
1184 
1185 /*
1186  * Generic SNS response - not particularly useful since the per-command data
1187  * isn't always 16 bit words.
1188  */
1189 void
1190 isp_get_sns_response(ispsoftc_t *isp, sns_scrsp_t *src,
1191     sns_scrsp_t *dst, int nwords)
1192 {
1193 	int i;
1194 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1195 	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
1196 	for (i = 0; i < 3; i++) {
1197 		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
1198 		    dst->snscb_port_id[i]);
1199 	}
1200 	for (i = 0; i < 8; i++) {
1201 		ISP_IOXGET_8(isp, &src->snscb_portname[i],
1202 		    dst->snscb_portname[i]);
1203 	}
1204 	for (i = 0; i < nwords; i++) {
1205 		ISP_IOXGET_16(isp, &src->snscb_data[i], dst->snscb_data[i]);
1206 	}
1207 }
1208 
1209 void
1210 isp_get_gid_ft_response(ispsoftc_t *isp, sns_gid_ft_rsp_t *src,
1211     sns_gid_ft_rsp_t *dst, int nwords)
1212 {
1213 	int i;
1214 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1215 	for (i = 0; i < nwords; i++) {
1216 		int j;
1217 		ISP_IOXGET_8(isp,
1218 		    &src->snscb_ports[i].control,
1219 		    dst->snscb_ports[i].control);
1220 		for (j = 0; j < 3; j++) {
1221 			ISP_IOXGET_8(isp,
1222 			    &src->snscb_ports[i].portid[j],
1223 			    dst->snscb_ports[i].portid[j]);
1224 		}
1225 		if (dst->snscb_ports[i].control & 0x80) {
1226 			break;
1227 		}
1228 	}
1229 }
1230 
1231 void
1232 isp_get_gxn_id_response(ispsoftc_t *isp, sns_gxn_id_rsp_t *src,
1233     sns_gxn_id_rsp_t *dst)
1234 {
1235 	int i;
1236 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1237 	for (i = 0; i < 8; i++)
1238 		ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]);
1239 }
1240 
1241 void
1242 isp_get_gff_id_response(ispsoftc_t *isp, sns_gff_id_rsp_t *src,
1243     sns_gff_id_rsp_t *dst)
1244 {
1245 	int i;
1246 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1247 	for (i = 0; i < 32; i++) {
1248 		ISP_IOXGET_32(isp, &src->snscb_fc4_features[i],
1249 		    dst->snscb_fc4_features[i]);
1250 	}
1251 }
1252 
1253 void
1254 isp_get_ga_nxt_response(ispsoftc_t *isp, sns_ga_nxt_rsp_t *src,
1255     sns_ga_nxt_rsp_t *dst)
1256 {
1257 	int i;
1258 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1259 	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
1260 	for (i = 0; i < 3; i++) {
1261 		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
1262 		    dst->snscb_port_id[i]);
1263 	}
1264 	for (i = 0; i < 8; i++) {
1265 		ISP_IOXGET_8(isp, &src->snscb_portname[i],
1266 		    dst->snscb_portname[i]);
1267 	}
1268 	ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen);
1269 	for (i = 0; i < 255; i++) {
1270 		ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]);
1271 	}
1272 	for (i = 0; i < 8; i++) {
1273 		ISP_IOXGET_8(isp, &src->snscb_nodename[i],
1274 		    dst->snscb_nodename[i]);
1275 	}
1276 	ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen);
1277 	for (i = 0; i < 255; i++) {
1278 		ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]);
1279 	}
1280 	for (i = 0; i < 8; i++) {
1281 		ISP_IOXGET_8(isp, &src->snscb_ipassoc[i],
1282 		    dst->snscb_ipassoc[i]);
1283 	}
1284 	for (i = 0; i < 16; i++) {
1285 		ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]);
1286 	}
1287 	for (i = 0; i < 4; i++) {
1288 		ISP_IOXGET_8(isp, &src->snscb_svc_class[i],
1289 		    dst->snscb_svc_class[i]);
1290 	}
1291 	for (i = 0; i < 32; i++) {
1292 		ISP_IOXGET_8(isp, &src->snscb_fc4_types[i],
1293 		    dst->snscb_fc4_types[i]);
1294 	}
1295 	for (i = 0; i < 8; i++) {
1296 		ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]);
1297 	}
1298 	ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved);
1299 	for (i = 0; i < 3; i++) {
1300 		ISP_IOXGET_8(isp, &src->snscb_hardaddr[i],
1301 		    dst->snscb_hardaddr[i]);
1302 	}
1303 }
1304 
1305 void
1306 isp_get_els(ispsoftc_t *isp, els_t *src, els_t *dst)
1307 {
1308 	int i;
1309 
1310 	isp_get_hdr(isp, &src->els_hdr, &dst->els_hdr);
1311 	ISP_IOXGET_32(isp, &src->els_handle, dst->els_handle);
1312 	ISP_IOXGET_16(isp, &src->els_status, dst->els_status);
1313 	ISP_IOXGET_16(isp, &src->els_nphdl, dst->els_nphdl);
1314 	ISP_IOXGET_16(isp, &src->els_xmit_dsd_count, dst->els_xmit_dsd_count);
1315 	ISP_IOXGET_8(isp, &src->els_vphdl, dst->els_vphdl);
1316 	ISP_IOXGET_8(isp, &src->els_sof, dst->els_sof);
1317 	ISP_IOXGET_32(isp, &src->els_rxid, dst->els_rxid);
1318 	ISP_IOXGET_16(isp, &src->els_recv_dsd_count, dst->els_recv_dsd_count);
1319 	ISP_IOXGET_8(isp, &src->els_opcode, dst->els_opcode);
1320 	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved1);
1321 	ISP_IOXGET_8(isp, &src->els_did_lo, dst->els_did_lo);
1322 	ISP_IOXGET_8(isp, &src->els_did_mid, dst->els_did_mid);
1323 	ISP_IOXGET_8(isp, &src->els_did_hi, dst->els_did_hi);
1324 	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved2);
1325 	ISP_IOXGET_16(isp, &src->els_reserved3, dst->els_reserved3);
1326 	ISP_IOXGET_16(isp, &src->els_ctl_flags, dst->els_ctl_flags);
1327 	ISP_IOXGET_32(isp, &src->els_bytecnt, dst->els_bytecnt);
1328 	ISP_IOXGET_32(isp, &src->els_subcode1, dst->els_subcode1);
1329 	ISP_IOXGET_32(isp, &src->els_subcode2, dst->els_subcode2);
1330 	for (i = 0; i < 20; i++) {
1331 		ISP_IOXGET_8(isp, &src->els_reserved4[i],
1332 		    dst->els_reserved4[i]);
1333 	}
1334 }
1335 
1336 void
1337 isp_put_els(ispsoftc_t *isp, els_t *src, els_t *dst)
1338 {
1339 	isp_put_hdr(isp, &src->els_hdr, &dst->els_hdr);
1340 	ISP_IOXPUT_32(isp, src->els_handle, &dst->els_handle);
1341 	ISP_IOXPUT_16(isp, src->els_status, &dst->els_status);
1342 	ISP_IOXPUT_16(isp, src->els_nphdl, &dst->els_nphdl);
1343 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_count, &dst->els_xmit_dsd_count);
1344 	ISP_IOXPUT_8(isp, src->els_vphdl, &dst->els_vphdl);
1345 	ISP_IOXPUT_8(isp, src->els_sof, &dst->els_sof);
1346 	ISP_IOXPUT_32(isp, src->els_rxid, &dst->els_rxid);
1347 	ISP_IOXPUT_16(isp, src->els_recv_dsd_count, &dst->els_recv_dsd_count);
1348 	ISP_IOXPUT_8(isp, src->els_opcode, &dst->els_opcode);
1349 	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved1);
1350 	ISP_IOXPUT_8(isp, src->els_did_lo, &dst->els_did_lo);
1351 	ISP_IOXPUT_8(isp, src->els_did_mid, &dst->els_did_mid);
1352 	ISP_IOXPUT_8(isp, src->els_did_hi, &dst->els_did_hi);
1353 	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved2);
1354 	ISP_IOXPUT_16(isp, src->els_reserved3, &dst->els_reserved3);
1355 	ISP_IOXPUT_16(isp, src->els_ctl_flags, &dst->els_ctl_flags);
1356 	ISP_IOXPUT_32(isp, src->els_recv_bytecnt, &dst->els_recv_bytecnt);
1357 	ISP_IOXPUT_32(isp, src->els_xmit_bytecnt, &dst->els_xmit_bytecnt);
1358 	ISP_IOXPUT_32(isp, src->els_xmit_dsd_length, &dst->els_xmit_dsd_length);
1359 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a1500, &dst->els_xmit_dsd_a1500);
1360 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a3116, &dst->els_xmit_dsd_a3116);
1361 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a4732, &dst->els_xmit_dsd_a4732);
1362 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a6348, &dst->els_xmit_dsd_a6348);
1363 	ISP_IOXPUT_32(isp, src->els_recv_dsd_length, &dst->els_recv_dsd_length);
1364 	ISP_IOXPUT_16(isp, src->els_recv_dsd_a1500, &dst->els_recv_dsd_a1500);
1365 	ISP_IOXPUT_16(isp, src->els_recv_dsd_a3116, &dst->els_recv_dsd_a3116);
1366 	ISP_IOXPUT_16(isp, src->els_recv_dsd_a4732, &dst->els_recv_dsd_a4732);
1367 	ISP_IOXPUT_16(isp, src->els_recv_dsd_a6348, &dst->els_recv_dsd_a6348);
1368 }
1369 
1370 /*
1371  * FC Structure Canonicalization
1372  */
1373 
1374 void
1375 isp_get_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst)
1376 {
1377         ISP_IOZGET_8(isp, &src->r_ctl, dst->r_ctl);
1378         ISP_IOZGET_8(isp, &src->d_id[0], dst->d_id[0]);
1379         ISP_IOZGET_8(isp, &src->d_id[1], dst->d_id[1]);
1380         ISP_IOZGET_8(isp, &src->d_id[2], dst->d_id[2]);
1381         ISP_IOZGET_8(isp, &src->cs_ctl, dst->cs_ctl);
1382         ISP_IOZGET_8(isp, &src->s_id[0], dst->s_id[0]);
1383         ISP_IOZGET_8(isp, &src->s_id[1], dst->s_id[1]);
1384         ISP_IOZGET_8(isp, &src->s_id[2], dst->s_id[2]);
1385         ISP_IOZGET_8(isp, &src->type, dst->type);
1386         ISP_IOZGET_8(isp, &src->f_ctl, dst->f_ctl);
1387         ISP_IOZGET_8(isp, &src->seq_id, dst->seq_id);
1388         ISP_IOZGET_8(isp, &src->df_ctl, dst->df_ctl);
1389         ISP_IOZGET_16(isp, &src->seq_cnt, dst->seq_cnt);
1390 	/* XXX SOMETHING WAS AND STILL CONTINUES WRONG HERE XXX */
1391 #if	0
1392         ISP_IOZGET_16(isp, &src->ox_id, dst->ox_id);
1393         ISP_IOZGET_16(isp, &src->rx_id, dst->rx_id);
1394 #else
1395         ISP_IOZGET_32(isp, &src->ox_id, dst->parameter);
1396         dst->ox_id = dst->parameter;
1397         dst->rx_id = dst->parameter >> 16;
1398 #endif
1399         ISP_IOZGET_32(isp, &src->parameter, dst->parameter);
1400 }
1401 
1402 void
1403 isp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *dst)
1404 {
1405 	int i;
1406 
1407 	for (i = 0; i < 8; i++) {
1408 		ISP_IOZGET_8(isp, &src->fcp_cmnd_lun[i], dst->fcp_cmnd_lun[i]);
1409 	}
1410         ISP_IOZGET_8(isp, &src->fcp_cmnd_crn, dst->fcp_cmnd_crn);
1411         ISP_IOZGET_8(isp, &src->fcp_cmnd_task_attribute,
1412 	    dst->fcp_cmnd_task_attribute);
1413         ISP_IOZGET_8(isp, &src->fcp_cmnd_task_management,
1414 	    dst->fcp_cmnd_task_management);
1415         ISP_IOZGET_8(isp, &src->fcp_cmnd_alen_datadir,
1416 	    dst->fcp_cmnd_alen_datadir);
1417 	for (i = 0; i < 16; i++) {
1418 		ISP_IOZGET_8(isp, &src->cdb_dl.sf.fcp_cmnd_cdb[i],
1419 		    dst->cdb_dl.sf.fcp_cmnd_cdb[i]);
1420 	}
1421 	ISP_IOZGET_32(isp, &src->cdb_dl.sf.fcp_cmnd_dl,
1422 	    dst->cdb_dl.sf.fcp_cmnd_dl);
1423 }
1424 
1425 void
1426 isp_put_rft_id(ispsoftc_t *isp, rft_id_t *src, rft_id_t *dst)
1427 {
1428 	int i;
1429 	isp_put_ct_hdr(isp, &src->rftid_hdr, &dst->rftid_hdr);
1430 	ISP_IOZPUT_8(isp, src->rftid_reserved, &dst->rftid_reserved);
1431 	for (i = 0; i < 3; i++) {
1432 		ISP_IOZPUT_8(isp, src->rftid_portid[i], &dst->rftid_portid[i]);
1433 	}
1434 	for (i = 0; i < 8; i++) {
1435 		ISP_IOZPUT_32(isp, src->rftid_fc4types[i],
1436 		    &dst->rftid_fc4types[i]);
1437 	}
1438 }
1439 
1440 void
1441 isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
1442 {
1443 	ISP_IOZGET_8(isp, &src->ct_revision, dst->ct_revision);
1444 	ISP_IOZGET_8(isp, &src->ct_in_id[0], dst->ct_in_id[0]);
1445 	ISP_IOZGET_8(isp, &src->ct_in_id[1], dst->ct_in_id[1]);
1446 	ISP_IOZGET_8(isp, &src->ct_in_id[2], dst->ct_in_id[2]);
1447 	ISP_IOZGET_8(isp, &src->ct_fcs_type, dst->ct_fcs_type);
1448 	ISP_IOZGET_8(isp, &src->ct_fcs_subtype, dst->ct_fcs_subtype);
1449 	ISP_IOZGET_8(isp, &src->ct_options, dst->ct_options);
1450 	ISP_IOZGET_8(isp, &src->ct_reserved0, dst->ct_reserved0);
1451 	ISP_IOZGET_16(isp, &src->ct_cmd_resp, dst->ct_cmd_resp);
1452 	ISP_IOZGET_16(isp, &src->ct_bcnt_resid, dst->ct_bcnt_resid);
1453 	ISP_IOZGET_8(isp, &src->ct_reserved1, dst->ct_reserved1);
1454 	ISP_IOZGET_8(isp, &src->ct_reason, dst->ct_reason);
1455 	ISP_IOZGET_8(isp, &src->ct_explanation, dst->ct_explanation);
1456 	ISP_IOZGET_8(isp, &src->ct_vunique, dst->ct_vunique);
1457 }
1458 
1459 void
1460 isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
1461 {
1462 	ISP_IOZPUT_8(isp, src->ct_revision, &dst->ct_revision);
1463 	ISP_IOZPUT_8(isp, src->ct_in_id[0], &dst->ct_in_id[0]);
1464 	ISP_IOZPUT_8(isp, src->ct_in_id[1], &dst->ct_in_id[1]);
1465 	ISP_IOZPUT_8(isp, src->ct_in_id[2], &dst->ct_in_id[2]);
1466 	ISP_IOZPUT_8(isp, src->ct_fcs_type, &dst->ct_fcs_type);
1467 	ISP_IOZPUT_8(isp, src->ct_fcs_subtype, &dst->ct_fcs_subtype);
1468 	ISP_IOZPUT_8(isp, src->ct_options, &dst->ct_options);
1469 	ISP_IOZPUT_8(isp, src->ct_reserved0, &dst->ct_reserved0);
1470 	ISP_IOZPUT_16(isp, src->ct_cmd_resp, &dst->ct_cmd_resp);
1471 	ISP_IOZPUT_16(isp, src->ct_bcnt_resid, &dst->ct_bcnt_resid);
1472 	ISP_IOZPUT_8(isp, src->ct_reserved1, &dst->ct_reserved1);
1473 	ISP_IOZPUT_8(isp, src->ct_reason, &dst->ct_reason);
1474 	ISP_IOZPUT_8(isp, src->ct_explanation, &dst->ct_explanation);
1475 	ISP_IOZPUT_8(isp, src->ct_vunique, &dst->ct_vunique);
1476 }
1477 
1478 #ifdef	ISP_TARGET_MODE
1479 int
1480 isp_save_xs_tgt(ispsoftc_t *isp, void *xs, uint32_t *handlep)
1481 {
1482 	int i;
1483 
1484 	for (i = 0; i < (int) isp->isp_maxcmds; i++) {
1485 		if (isp->isp_tgtlist[i] == NULL) {
1486 			break;
1487 		}
1488 	}
1489 	if (i == isp->isp_maxcmds) {
1490 		return (-1);
1491 	}
1492 	isp->isp_tgtlist[i] = xs;
1493 	*handlep = (i+1) | 0x8000;
1494 	return (0);
1495 }
1496 
1497 void *
1498 isp_find_xs_tgt(ispsoftc_t *isp, uint32_t handle)
1499 {
1500 	if (handle == 0 || (handle & 0x8000) == 0 ||
1501 	    (handle & 0x7fff) > isp->isp_maxcmds) {
1502 		isp_prt(isp, ISP_LOGERR, "bad handle in isp_find_xs_tgt");
1503 		return (NULL);
1504 	} else {
1505 		return (isp->isp_tgtlist[(handle & 0x7fff) - 1]);
1506 	}
1507 }
1508 
1509 uint32_t
1510 isp_find_tgt_handle(ispsoftc_t *isp, void *xs)
1511 {
1512 	int i;
1513 	if (xs != NULL) {
1514 		for (i = 0; i < isp->isp_maxcmds; i++) {
1515 			if (isp->isp_tgtlist[i] == xs) {
1516 				return ((i+1) & 0x7fff);
1517 			}
1518 		}
1519 	}
1520 	return (0);
1521 }
1522 
1523 void
1524 isp_destroy_tgt_handle(ispsoftc_t *isp, uint32_t handle)
1525 {
1526 	if (handle == 0 || (handle & 0x8000) == 0 ||
1527 	    (handle & 0x7fff) > isp->isp_maxcmds) {
1528 		isp_prt(isp, ISP_LOGERR,
1529 		    "bad handle in isp_destroy_tgt_handle");
1530 	} else {
1531 		isp->isp_tgtlist[(handle & 0x7fff) - 1] = NULL;
1532 	}
1533 }
1534 
1535 void
1536 isp_put_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
1537 {
1538 	int i;
1539 	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1540 	ISP_IOXPUT_16(isp, src->at_reserved, &dst->at_reserved);
1541 	ISP_IOXPUT_16(isp, src->at_handle, &dst->at_handle);
1542 	if (ISP_IS_SBUS(isp)) {
1543 		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_iid);
1544 		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_lun);
1545 		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_tgt);
1546 		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_cdblen);
1547 		ISP_IOXPUT_8(isp, src->at_status, &dst->at_scsi_status);
1548 		ISP_IOXPUT_8(isp, src->at_scsi_status, &dst->at_status);
1549 		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_type);
1550 		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_val);
1551 	} else {
1552 		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
1553 		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
1554 		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_cdblen);
1555 		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_tgt);
1556 		ISP_IOXPUT_8(isp, src->at_status, &dst->at_status);
1557 		ISP_IOXPUT_8(isp, src->at_scsi_status,
1558 		    &dst->at_scsi_status);
1559 		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_val);
1560 		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_type);
1561 	}
1562 	ISP_IOXPUT_32(isp, src->at_flags, &dst->at_flags);
1563 	for (i = 0; i < ATIO_CDBLEN; i++) {
1564 		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1565 	}
1566 	for (i = 0; i < QLTM_SENSELEN; i++) {
1567 		ISP_IOXPUT_8(isp, src->at_sense[i], &dst->at_sense[i]);
1568 	}
1569 }
1570 
1571 void
1572 isp_get_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
1573 {
1574 	int i;
1575 	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1576 	ISP_IOXGET_16(isp, &src->at_reserved, dst->at_reserved);
1577 	ISP_IOXGET_16(isp, &src->at_handle, dst->at_handle);
1578 	if (ISP_IS_SBUS(isp)) {
1579 		ISP_IOXGET_8(isp, &src->at_lun, dst->at_iid);
1580 		ISP_IOXGET_8(isp, &src->at_iid, dst->at_lun);
1581 		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_tgt);
1582 		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_cdblen);
1583 		ISP_IOXGET_8(isp, &src->at_status, dst->at_scsi_status);
1584 		ISP_IOXGET_8(isp, &src->at_scsi_status, dst->at_status);
1585 		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_type);
1586 		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_val);
1587 	} else {
1588 		ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
1589 		ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
1590 		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_cdblen);
1591 		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_tgt);
1592 		ISP_IOXGET_8(isp, &src->at_status, dst->at_status);
1593 		ISP_IOXGET_8(isp, &src->at_scsi_status,
1594 		    dst->at_scsi_status);
1595 		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_val);
1596 		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_type);
1597 	}
1598 	ISP_IOXGET_32(isp, &src->at_flags, dst->at_flags);
1599 	for (i = 0; i < ATIO_CDBLEN; i++) {
1600 		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1601 	}
1602 	for (i = 0; i < QLTM_SENSELEN; i++) {
1603 		ISP_IOXGET_8(isp, &src->at_sense[i], dst->at_sense[i]);
1604 	}
1605 }
1606 
1607 void
1608 isp_put_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
1609 {
1610 	int i;
1611 	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1612 	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
1613 	ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
1614 	ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
1615 	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
1616 	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
1617 	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
1618 	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
1619 	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
1620 	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
1621 	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
1622 	for (i = 0; i < ATIO2_CDBLEN; i++) {
1623 		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1624 	}
1625 	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
1626 	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
1627 	for (i = 0; i < 4; i++) {
1628 		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
1629 	}
1630 	for (i = 0; i < 6; i++) {
1631 		ISP_IOXPUT_16(isp, src->at_reserved2[i],
1632 		    &dst->at_reserved2[i]);
1633 	}
1634 	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
1635 }
1636 
1637 void
1638 isp_put_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
1639 {
1640 	int i;
1641 	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1642 	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
1643 	ISP_IOXPUT_16(isp, src->at_iid, &dst->at_iid);
1644 	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
1645 	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
1646 	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
1647 	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
1648 	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
1649 	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
1650 	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
1651 	for (i = 0; i < ATIO2_CDBLEN; i++) {
1652 		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1653 	}
1654 	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
1655 	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
1656 	for (i = 0; i < 4; i++) {
1657 		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
1658 	}
1659 	for (i = 0; i < 6; i++) {
1660 		ISP_IOXPUT_16(isp, src->at_reserved2[i],
1661 		    &dst->at_reserved2[i]);
1662 	}
1663 	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
1664 }
1665 
1666 void
1667 isp_get_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
1668 {
1669 	int i;
1670 	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1671 	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
1672 	ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
1673 	ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
1674 	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
1675 	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
1676 	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
1677 	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
1678 	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
1679 	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
1680 	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
1681 	for (i = 0; i < ATIO2_CDBLEN; i++) {
1682 		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1683 	}
1684 	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
1685 	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
1686 	for (i = 0; i < 4; i++) {
1687 		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
1688 	}
1689 	for (i = 0; i < 6; i++) {
1690 		ISP_IOXGET_16(isp, &src->at_reserved2[i],
1691 		    dst->at_reserved2[i]);
1692 	}
1693 	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
1694 }
1695 
1696 void
1697 isp_get_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
1698 {
1699 	int i;
1700 	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1701 	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
1702 	ISP_IOXGET_16(isp, &src->at_iid, dst->at_iid);
1703 	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
1704 	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
1705 	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
1706 	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
1707 	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
1708 	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
1709 	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
1710 	for (i = 0; i < ATIO2_CDBLEN; i++) {
1711 		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1712 	}
1713 	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
1714 	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
1715 	for (i = 0; i < 4; i++) {
1716 		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
1717 	}
1718 	for (i = 0; i < 6; i++) {
1719 		ISP_IOXGET_16(isp, &src->at_reserved2[i],
1720 		    dst->at_reserved2[i]);
1721 	}
1722 	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
1723 }
1724 
1725 void
1726 isp_get_atio7(ispsoftc_t *isp, at7_entry_t *src, at7_entry_t *dst)
1727 {
1728 	ISP_IOXGET_8(isp, &src->at_type, dst->at_type);
1729 	ISP_IOXGET_8(isp, &src->at_count, dst->at_count);
1730 	ISP_IOXGET_16(isp, &src->at_ta_len, dst->at_ta_len);
1731 	ISP_IOXGET_32(isp, &src->at_rxid, dst->at_rxid);
1732 	isp_get_fc_hdr(isp, &src->at_hdr, &dst->at_hdr);
1733 	isp_get_fcp_cmnd_iu(isp, &src->at_cmnd, &dst->at_cmnd);
1734 }
1735 
1736 void
1737 isp_put_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
1738 {
1739 	int i;
1740 	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1741 	ISP_IOXPUT_16(isp, src->ct_syshandle, &dst->ct_syshandle);
1742 	ISP_IOXPUT_16(isp, src->ct_fwhandle, &dst->ct_fwhandle);
1743 	if (ISP_IS_SBUS(isp)) {
1744 		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_lun);
1745 		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_iid);
1746 		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_reserved2);
1747 		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_tgt);
1748 		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_scsi_status);
1749 		ISP_IOXPUT_8(isp, src->ct_scsi_status, &dst->ct_status);
1750 		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_val);
1751 		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_type);
1752 	} else {
1753 		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
1754 		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
1755 		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_tgt);
1756 		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_reserved2);
1757 		ISP_IOXPUT_8(isp, src->ct_scsi_status,
1758 		    &dst->ct_scsi_status);
1759 		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_status);
1760 		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_type);
1761 		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_val);
1762 	}
1763 	ISP_IOXPUT_32(isp, src->ct_flags, &dst->ct_flags);
1764 	ISP_IOXPUT_32(isp, src->ct_xfrlen, &dst->ct_xfrlen);
1765 	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1766 	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1767 	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1768 	for (i = 0; i < ISP_RQDSEG; i++) {
1769 		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_base,
1770 		    &dst->ct_dataseg[i].ds_base);
1771 		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_count,
1772 		    &dst->ct_dataseg[i].ds_count);
1773 	}
1774 }
1775 
1776 void
1777 isp_get_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
1778 {
1779 	int i;
1780 	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
1781 	ISP_IOXGET_16(isp, &src->ct_syshandle, dst->ct_syshandle);
1782 	ISP_IOXGET_16(isp, &src->ct_fwhandle, dst->ct_fwhandle);
1783 	if (ISP_IS_SBUS(isp)) {
1784 		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_iid);
1785 		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_lun);
1786 		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_tgt);
1787 		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_reserved2);
1788 		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_scsi_status);
1789 		ISP_IOXGET_8(isp, &src->ct_scsi_status, dst->ct_status);
1790 		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_type);
1791 		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_val);
1792 	} else {
1793 		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
1794 		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
1795 		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_reserved2);
1796 		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_tgt);
1797 		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_status);
1798 		ISP_IOXGET_8(isp, &src->ct_scsi_status,
1799 		    dst->ct_scsi_status);
1800 		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_val);
1801 		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_type);
1802 	}
1803 	ISP_IOXGET_32(isp, &src->ct_flags, dst->ct_flags);
1804 	ISP_IOXGET_32(isp, &src->ct_xfrlen, dst->ct_xfrlen);
1805 	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
1806 	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
1807 	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
1808 	for (i = 0; i < ISP_RQDSEG; i++) {
1809 		ISP_IOXGET_32(isp,
1810 		    &src->ct_dataseg[i].ds_base,
1811 		    dst->ct_dataseg[i].ds_base);
1812 		ISP_IOXGET_32(isp,
1813 		    &src->ct_dataseg[i].ds_count,
1814 		    dst->ct_dataseg[i].ds_count);
1815 	}
1816 }
1817 
1818 void
1819 isp_put_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
1820 {
1821 	int i;
1822 	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1823 	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1824 	ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
1825 	ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
1826 	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
1827 	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
1828 	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1829 	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1830 	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1831 	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
1832 	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1833 		ISP_IOXPUT_32(isp, src->rsp.m0._reserved,
1834 		    &dst->rsp.m0._reserved);
1835 		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2,
1836 		    &dst->rsp.m0._reserved2);
1837 		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status,
1838 		    &dst->rsp.m0.ct_scsi_status);
1839 		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
1840 		    &dst->rsp.m0.ct_xfrlen);
1841 		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1842 			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1843 				ISP_IOXPUT_32(isp,
1844 				    src->rsp.m0.u.ct_dataseg[i].ds_base,
1845 				    &dst->rsp.m0.u.ct_dataseg[i].ds_base);
1846 				ISP_IOXPUT_32(isp,
1847 				    src->rsp.m0.u.ct_dataseg[i].ds_count,
1848 				    &dst->rsp.m0.u.ct_dataseg[i].ds_count);
1849 			}
1850 		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1851 			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1852 				ISP_IOXPUT_32(isp,
1853 				    src->rsp.m0.u.ct_dataseg64[i].ds_base,
1854 				    &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
1855 				ISP_IOXPUT_32(isp,
1856 				    src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
1857 				    &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
1858 				ISP_IOXPUT_32(isp,
1859 				    src->rsp.m0.u.ct_dataseg64[i].ds_count,
1860 				    &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
1861 			}
1862 		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1863 			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type,
1864 			    &dst->rsp.m0.u.ct_dslist.ds_type);
1865 			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment,
1866 			    &dst->rsp.m0.u.ct_dslist.ds_segment);
1867 			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base,
1868 			    &dst->rsp.m0.u.ct_dslist.ds_base);
1869 		}
1870 	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1871 		ISP_IOXPUT_16(isp, src->rsp.m1._reserved,
1872 		    &dst->rsp.m1._reserved);
1873 		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2,
1874 		    &dst->rsp.m1._reserved2);
1875 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen,
1876 		    &dst->rsp.m1.ct_senselen);
1877 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status,
1878 		    &dst->rsp.m1.ct_scsi_status);
1879 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
1880 		    &dst->rsp.m1.ct_resplen);
1881 		for (i = 0; i < MAXRESPLEN; i++) {
1882 			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
1883 			    &dst->rsp.m1.ct_resp[i]);
1884 		}
1885 	} else {
1886 		ISP_IOXPUT_32(isp, src->rsp.m2._reserved,
1887 		    &dst->rsp.m2._reserved);
1888 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2,
1889 		    &dst->rsp.m2._reserved2);
1890 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3,
1891 		    &dst->rsp.m2._reserved3);
1892 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
1893 		    &dst->rsp.m2.ct_datalen);
1894 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1895 		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1896 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1897 		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1898 	}
1899 }
1900 
1901 void
1902 isp_put_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
1903 {
1904 	int i;
1905 	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1906 	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1907 	ISP_IOXPUT_16(isp, src->ct_iid, &dst->ct_iid);
1908 	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
1909 	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
1910 	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1911 	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1912 	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1913 	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
1914 	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1915 		ISP_IOXPUT_32(isp, src->rsp.m0._reserved,
1916 		    &dst->rsp.m0._reserved);
1917 		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2,
1918 		    &dst->rsp.m0._reserved2);
1919 		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status,
1920 		    &dst->rsp.m0.ct_scsi_status);
1921 		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
1922 		    &dst->rsp.m0.ct_xfrlen);
1923 		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1924 			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1925 				ISP_IOXPUT_32(isp,
1926 				    src->rsp.m0.u.ct_dataseg[i].ds_base,
1927 				    &dst->rsp.m0.u.ct_dataseg[i].ds_base);
1928 				ISP_IOXPUT_32(isp,
1929 				    src->rsp.m0.u.ct_dataseg[i].ds_count,
1930 				    &dst->rsp.m0.u.ct_dataseg[i].ds_count);
1931 			}
1932 		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1933 			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1934 				ISP_IOXPUT_32(isp,
1935 				    src->rsp.m0.u.ct_dataseg64[i].ds_base,
1936 				    &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
1937 				ISP_IOXPUT_32(isp,
1938 				    src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
1939 				    &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
1940 				ISP_IOXPUT_32(isp,
1941 				    src->rsp.m0.u.ct_dataseg64[i].ds_count,
1942 				    &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
1943 			}
1944 		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1945 			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type,
1946 			    &dst->rsp.m0.u.ct_dslist.ds_type);
1947 			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment,
1948 			    &dst->rsp.m0.u.ct_dslist.ds_segment);
1949 			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base,
1950 			    &dst->rsp.m0.u.ct_dslist.ds_base);
1951 		}
1952 	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1953 		ISP_IOXPUT_16(isp, src->rsp.m1._reserved,
1954 		    &dst->rsp.m1._reserved);
1955 		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2,
1956 		    &dst->rsp.m1._reserved2);
1957 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen,
1958 		    &dst->rsp.m1.ct_senselen);
1959 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status,
1960 		    &dst->rsp.m1.ct_scsi_status);
1961 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
1962 		    &dst->rsp.m1.ct_resplen);
1963 		for (i = 0; i < MAXRESPLEN; i++) {
1964 			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
1965 			    &dst->rsp.m1.ct_resp[i]);
1966 		}
1967 	} else {
1968 		ISP_IOXPUT_32(isp, src->rsp.m2._reserved,
1969 		    &dst->rsp.m2._reserved);
1970 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2,
1971 		    &dst->rsp.m2._reserved2);
1972 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3,
1973 		    &dst->rsp.m2._reserved3);
1974 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
1975 		    &dst->rsp.m2.ct_datalen);
1976 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1977 		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1978 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1979 		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1980 	}
1981 }
1982 
1983 void
1984 isp_put_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
1985 {
1986 	int i;
1987 
1988 	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1989 	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1990 	ISP_IOXPUT_16(isp, src->ct_nphdl, &dst->ct_nphdl);
1991 	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1992 	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1993 	ISP_IOXPUT_8(isp, src->ct_vpindex, &dst->ct_vpindex);
1994 	ISP_IOXPUT_8(isp, src->ct_xflags, &dst->ct_xflags);
1995 	ISP_IOXPUT_16(isp, src->ct_iid_lo, &dst->ct_iid_lo);
1996 	ISP_IOXPUT_8(isp, src->ct_iid_hi, &dst->ct_iid_hi);
1997 	ISP_IOXPUT_8(isp, src->ct_reserved, &dst->ct_reserved);
1998 	ISP_IOXPUT_32(isp, src->ct_rxid, &dst->ct_rxid);
1999 	ISP_IOXPUT_16(isp, src->ct_senselen, &dst->ct_senselen);
2000 	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
2001 	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
2002 	ISP_IOXPUT_16(isp, src->ct_oxid, &dst->ct_oxid);
2003 	ISP_IOXPUT_16(isp, src->ct_scsi_status, &dst->ct_scsi_status);
2004 	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
2005 		ISP_IOXPUT_32(isp, src->rsp.m0.reloff, &dst->rsp.m0.reloff);
2006 		ISP_IOXPUT_32(isp, src->rsp.m0.reserved0,
2007 		    &dst->rsp.m0.reserved0);
2008 		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
2009 		    &dst->rsp.m0.ct_xfrlen);
2010 		ISP_IOXPUT_32(isp, src->rsp.m0.reserved1,
2011 		    &dst->rsp.m0.reserved1);
2012 		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_base,
2013 		    &dst->rsp.m0.ds.ds_base);
2014 		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_basehi,
2015 		    &dst->rsp.m0.ds.ds_basehi);
2016 		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_count,
2017 		    &dst->rsp.m0.ds.ds_count);
2018 	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
2019 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
2020 		    &dst->rsp.m1.ct_resplen);
2021 		ISP_IOXPUT_16(isp, src->rsp.m1.reserved, &dst->rsp.m1.reserved);
2022 		for (i = 0; i < MAXRESPLEN_24XX; i++) {
2023 			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
2024 			    &dst->rsp.m1.ct_resp[i]);
2025 		}
2026 	} else {
2027 		ISP_IOXPUT_32(isp, src->rsp.m2.reserved0,
2028 		    &dst->rsp.m2.reserved0);
2029 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
2030 		    &dst->rsp.m2.ct_datalen);
2031 		ISP_IOXPUT_32(isp, src->rsp.m2.reserved1,
2032 		    &dst->rsp.m2.reserved1);
2033 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2034 		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2035 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi,
2036 		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
2037 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2038 		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2039 	}
2040 }
2041 
2042 
2043 void
2044 isp_get_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
2045 {
2046 	int i;
2047 
2048 	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2049 	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2050 	ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
2051 	ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
2052 	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
2053 	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2054 	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
2055 	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2056 	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2057 	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
2058 	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2059 	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
2060 		ISP_IOXGET_32(isp, &src->rsp.m0._reserved,
2061 		    dst->rsp.m0._reserved);
2062 		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2,
2063 		    dst->rsp.m0._reserved2);
2064 		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status,
2065 		    dst->rsp.m0.ct_scsi_status);
2066 		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2067 		    dst->rsp.m0.ct_xfrlen);
2068 		if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
2069 			for (i = 0; i < ISP_RQDSEG_T2; i++) {
2070 				ISP_IOXGET_32(isp,
2071 				    &src->rsp.m0.u.ct_dataseg[i].ds_base,
2072 				    dst->rsp.m0.u.ct_dataseg[i].ds_base);
2073 				ISP_IOXGET_32(isp,
2074 				    &src->rsp.m0.u.ct_dataseg[i].ds_count,
2075 				    dst->rsp.m0.u.ct_dataseg[i].ds_count);
2076 			}
2077 		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
2078 			for (i = 0; i < ISP_RQDSEG_T3; i++) {
2079 				ISP_IOXGET_32(isp,
2080 				    &src->rsp.m0.u.ct_dataseg64[i].ds_base,
2081 				    dst->rsp.m0.u.ct_dataseg64[i].ds_base);
2082 				ISP_IOXGET_32(isp,
2083 				    &src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
2084 				    dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
2085 				ISP_IOXGET_32(isp,
2086 				    &src->rsp.m0.u.ct_dataseg64[i].ds_count,
2087 				    dst->rsp.m0.u.ct_dataseg64[i].ds_count);
2088 			}
2089 		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
2090 			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type,
2091 			    dst->rsp.m0.u.ct_dslist.ds_type);
2092 			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment,
2093 			    dst->rsp.m0.u.ct_dslist.ds_segment);
2094 			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base,
2095 			    dst->rsp.m0.u.ct_dslist.ds_base);
2096 		}
2097 	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
2098 		ISP_IOXGET_16(isp, &src->rsp.m1._reserved,
2099 		    dst->rsp.m1._reserved);
2100 		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2,
2101 		    dst->rsp.m1._reserved2);
2102 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen,
2103 		    dst->rsp.m1.ct_senselen);
2104 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status,
2105 		    dst->rsp.m1.ct_scsi_status);
2106 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2107 		    dst->rsp.m1.ct_resplen);
2108 		for (i = 0; i < MAXRESPLEN; i++) {
2109 			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2110 			    dst->rsp.m1.ct_resp[i]);
2111 		}
2112 	} else {
2113 		ISP_IOXGET_32(isp, &src->rsp.m2._reserved,
2114 		    dst->rsp.m2._reserved);
2115 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2,
2116 		    dst->rsp.m2._reserved2);
2117 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3,
2118 		    dst->rsp.m2._reserved3);
2119 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2120 		    dst->rsp.m2.ct_datalen);
2121 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2122 		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2123 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2124 		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2125 	}
2126 }
2127 
2128 void
2129 isp_get_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
2130 {
2131 	int i;
2132 
2133 	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2134 	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2135 	ISP_IOXGET_16(isp, &src->ct_iid, dst->ct_iid);
2136 	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
2137 	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2138 	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
2139 	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2140 	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2141 	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
2142 	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2143 	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
2144 		ISP_IOXGET_32(isp, &src->rsp.m0._reserved,
2145 		    dst->rsp.m0._reserved);
2146 		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2,
2147 		    dst->rsp.m0._reserved2);
2148 		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status,
2149 		    dst->rsp.m0.ct_scsi_status);
2150 		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2151 		    dst->rsp.m0.ct_xfrlen);
2152 		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
2153 			for (i = 0; i < ISP_RQDSEG_T2; i++) {
2154 				ISP_IOXGET_32(isp,
2155 				    &src->rsp.m0.u.ct_dataseg[i].ds_base,
2156 				    dst->rsp.m0.u.ct_dataseg[i].ds_base);
2157 				ISP_IOXGET_32(isp,
2158 				    &src->rsp.m0.u.ct_dataseg[i].ds_count,
2159 				    dst->rsp.m0.u.ct_dataseg[i].ds_count);
2160 			}
2161 		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
2162 			for (i = 0; i < ISP_RQDSEG_T3; i++) {
2163 				ISP_IOXGET_32(isp,
2164 				    &src->rsp.m0.u.ct_dataseg64[i].ds_base,
2165 				    dst->rsp.m0.u.ct_dataseg64[i].ds_base);
2166 				ISP_IOXGET_32(isp,
2167 				    &src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
2168 				    dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
2169 				ISP_IOXGET_32(isp,
2170 				    &src->rsp.m0.u.ct_dataseg64[i].ds_count,
2171 				    dst->rsp.m0.u.ct_dataseg64[i].ds_count);
2172 			}
2173 		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
2174 			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type,
2175 			    dst->rsp.m0.u.ct_dslist.ds_type);
2176 			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment,
2177 			    dst->rsp.m0.u.ct_dslist.ds_segment);
2178 			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base,
2179 			    dst->rsp.m0.u.ct_dslist.ds_base);
2180 		}
2181 	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
2182 		ISP_IOXGET_16(isp, &src->rsp.m1._reserved,
2183 		    dst->rsp.m1._reserved);
2184 		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2,
2185 		    dst->rsp.m1._reserved2);
2186 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen,
2187 		    dst->rsp.m1.ct_senselen);
2188 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status,
2189 		    dst->rsp.m1.ct_scsi_status);
2190 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2191 		    dst->rsp.m1.ct_resplen);
2192 		for (i = 0; i < MAXRESPLEN; i++) {
2193 			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2194 			    dst->rsp.m1.ct_resp[i]);
2195 		}
2196 	} else {
2197 		ISP_IOXGET_32(isp, &src->rsp.m2._reserved,
2198 		    dst->rsp.m2._reserved);
2199 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2,
2200 		    dst->rsp.m2._reserved2);
2201 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3,
2202 		    dst->rsp.m2._reserved3);
2203 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2204 		    dst->rsp.m2.ct_datalen);
2205 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2206 		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2207 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2208 		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2209 	}
2210 }
2211 
2212 void
2213 isp_get_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
2214 {
2215 	int i;
2216 
2217 	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2218 	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2219 	ISP_IOXGET_16(isp, &src->ct_nphdl, dst->ct_nphdl);
2220 	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2221 	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2222 	ISP_IOXGET_8(isp, &src->ct_vpindex, dst->ct_vpindex);
2223 	ISP_IOXGET_8(isp, &src->ct_xflags, dst->ct_xflags);
2224 	ISP_IOXGET_16(isp, &src->ct_iid_lo, dst->ct_iid_lo);
2225 	ISP_IOXGET_8(isp, &src->ct_iid_hi, dst->ct_iid_hi);
2226 	ISP_IOXGET_8(isp, &src->ct_reserved, dst->ct_reserved);
2227 	ISP_IOXGET_32(isp, &src->ct_rxid, dst->ct_rxid);
2228 	ISP_IOXGET_16(isp, &src->ct_senselen, dst->ct_senselen);
2229 	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2230 	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2231 	ISP_IOXGET_16(isp, &src->ct_oxid, dst->ct_oxid);
2232 	ISP_IOXGET_16(isp, &src->ct_scsi_status, dst->ct_scsi_status);
2233 	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
2234 		ISP_IOXGET_32(isp, &src->rsp.m0.reloff, dst->rsp.m0.reloff);
2235 		ISP_IOXGET_32(isp, &src->rsp.m0.reserved0,
2236 		    dst->rsp.m0.reserved0);
2237 		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2238 		    dst->rsp.m0.ct_xfrlen);
2239 		ISP_IOXGET_32(isp, &src->rsp.m0.reserved1,
2240 		    dst->rsp.m0.reserved1);
2241 		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_base,
2242 		    dst->rsp.m0.ds.ds_base);
2243 		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_basehi,
2244 		    dst->rsp.m0.ds.ds_basehi);
2245 		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_count,
2246 		    dst->rsp.m0.ds.ds_count);
2247 	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
2248 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2249 		    dst->rsp.m1.ct_resplen);
2250 		ISP_IOXGET_16(isp, &src->rsp.m1.reserved, dst->rsp.m1.reserved);
2251 		for (i = 0; i < MAXRESPLEN_24XX; i++) {
2252 			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2253 			    dst->rsp.m1.ct_resp[i]);
2254 		}
2255 	} else {
2256 		ISP_IOXGET_32(isp, &src->rsp.m2.reserved0,
2257 		    dst->rsp.m2.reserved0);
2258 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2259 		    dst->rsp.m2.ct_datalen);
2260 		ISP_IOXGET_32(isp, &src->rsp.m2.reserved1,
2261 		    dst->rsp.m2.reserved1);
2262 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2263 		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2264 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi,
2265 		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
2266 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2267 		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2268 	}
2269 }
2270 
2271 void
2272 isp_put_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
2273 {
2274 	int i;
2275 	isp_put_hdr(isp, &lesrc->le_header, &ledst->le_header);
2276 	ISP_IOXPUT_32(isp, lesrc->le_reserved, &ledst->le_reserved);
2277 	if (ISP_IS_SBUS(isp)) {
2278 		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_rsvd);
2279 		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_lun);
2280 		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_tgt);
2281 		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_ops);
2282 		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_reserved2);
2283 		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_status);
2284 		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_in_count);
2285 		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_cmd_count);
2286 		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb7len);
2287 		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb6len);
2288 	} else {
2289 		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_lun);
2290 		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_rsvd);
2291 		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_ops);
2292 		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_tgt);
2293 		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_status);
2294 		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_reserved2);
2295 		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_cmd_count);
2296 		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_in_count);
2297 		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb6len);
2298 		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb7len);
2299 	}
2300 	ISP_IOXPUT_32(isp, lesrc->le_flags, &ledst->le_flags);
2301 	ISP_IOXPUT_16(isp, lesrc->le_timeout, &ledst->le_timeout);
2302 	for (i = 0; i < 20; i++) {
2303 		ISP_IOXPUT_8(isp, lesrc->le_reserved3[i],
2304 		    &ledst->le_reserved3[i]);
2305 	}
2306 }
2307 
2308 void
2309 isp_get_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
2310 {
2311 	int i;
2312 	isp_get_hdr(isp, &lesrc->le_header, &ledst->le_header);
2313 	ISP_IOXGET_32(isp, &lesrc->le_reserved, ledst->le_reserved);
2314 	if (ISP_IS_SBUS(isp)) {
2315 		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_rsvd);
2316 		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_lun);
2317 		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_tgt);
2318 		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_ops);
2319 		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_reserved2);
2320 		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_status);
2321 		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_in_count);
2322 		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_cmd_count);
2323 		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb7len);
2324 		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb6len);
2325 	} else {
2326 		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_lun);
2327 		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_rsvd);
2328 		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_ops);
2329 		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_tgt);
2330 		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_status);
2331 		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_reserved2);
2332 		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_cmd_count);
2333 		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_in_count);
2334 		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb6len);
2335 		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb7len);
2336 	}
2337 	ISP_IOXGET_32(isp, &lesrc->le_flags, ledst->le_flags);
2338 	ISP_IOXGET_16(isp, &lesrc->le_timeout, ledst->le_timeout);
2339 	for (i = 0; i < 20; i++) {
2340 		ISP_IOXGET_8(isp, &lesrc->le_reserved3[i],
2341 		    ledst->le_reserved3[i]);
2342 	}
2343 }
2344 
2345 void
2346 isp_put_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
2347 {
2348 	int i;
2349 	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2350 	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2351 	if (ISP_IS_SBUS(isp)) {
2352 		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_iid);
2353 		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_lun);
2354 		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_tgt);
2355 		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_reserved2);
2356 		ISP_IOXPUT_8(isp, src->in_status, &dst->in_rsvd2);
2357 		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_status);
2358 		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_type);
2359 		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_val);
2360 	} else {
2361 		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
2362 		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
2363 		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_reserved2);
2364 		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_tgt);
2365 		ISP_IOXPUT_8(isp, src->in_status, &dst->in_status);
2366 		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_rsvd2);
2367 		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_val);
2368 		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_type);
2369 	}
2370 	ISP_IOXPUT_32(isp, src->in_flags, &dst->in_flags);
2371 	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2372 	for (i = 0; i < IN_MSGLEN; i++) {
2373 		ISP_IOXPUT_8(isp, src->in_msg[i], &dst->in_msg[i]);
2374 	}
2375 	for (i = 0; i < IN_RSVDLEN; i++) {
2376 		ISP_IOXPUT_8(isp, src->in_reserved3[i],
2377 		    &dst->in_reserved3[i]);
2378 	}
2379 	for (i = 0; i < QLTM_SENSELEN; i++) {
2380 		ISP_IOXPUT_8(isp, src->in_sense[i],
2381 		    &dst->in_sense[i]);
2382 	}
2383 }
2384 
2385 void
2386 isp_get_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
2387 {
2388 	int i;
2389 	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2390 	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2391 	if (ISP_IS_SBUS(isp)) {
2392 		ISP_IOXGET_8(isp, &src->in_lun, dst->in_iid);
2393 		ISP_IOXGET_8(isp, &src->in_iid, dst->in_lun);
2394 		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_tgt);
2395 		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_reserved2);
2396 		ISP_IOXGET_8(isp, &src->in_status, dst->in_rsvd2);
2397 		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_status);
2398 		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_type);
2399 		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_val);
2400 	} else {
2401 		ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
2402 		ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
2403 		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_reserved2);
2404 		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_tgt);
2405 		ISP_IOXGET_8(isp, &src->in_status, dst->in_status);
2406 		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_rsvd2);
2407 		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_val);
2408 		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_type);
2409 	}
2410 	ISP_IOXGET_32(isp, &src->in_flags, dst->in_flags);
2411 	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2412 	for (i = 0; i < IN_MSGLEN; i++) {
2413 		ISP_IOXGET_8(isp, &src->in_msg[i], dst->in_msg[i]);
2414 	}
2415 	for (i = 0; i < IN_RSVDLEN; i++) {
2416 		ISP_IOXGET_8(isp, &src->in_reserved3[i],
2417 		    dst->in_reserved3[i]);
2418 	}
2419 	for (i = 0; i < QLTM_SENSELEN; i++) {
2420 		ISP_IOXGET_8(isp, &src->in_sense[i],
2421 		    dst->in_sense[i]);
2422 	}
2423 }
2424 
2425 void
2426 isp_put_notify_fc(ispsoftc_t *isp, in_fcentry_t *src,
2427     in_fcentry_t *dst)
2428 {
2429 	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2430 	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2431 	ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
2432 	ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
2433 	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
2434 	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
2435 	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2436 	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
2437 	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2438 }
2439 
2440 void
2441 isp_put_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src,
2442     in_fcentry_e_t *dst)
2443 {
2444 	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2445 	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2446 	ISP_IOXPUT_16(isp, src->in_iid, &dst->in_iid);
2447 	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
2448 	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
2449 	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2450 	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
2451 	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2452 }
2453 
2454 void
2455 isp_put_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src,
2456     in_fcentry_24xx_t *dst)
2457 {
2458 	int i;
2459 
2460 	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2461 	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2462 	ISP_IOXPUT_16(isp, src->in_nphdl, &dst->in_nphdl);
2463 	ISP_IOXPUT_16(isp, src->in_reserved1, &dst->in_reserved1);
2464 	ISP_IOXPUT_16(isp, src->in_flags, &dst->in_flags);
2465 	ISP_IOXPUT_16(isp, src->in_srr_rxid, &dst->in_srr_rxid);
2466 	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2467 	ISP_IOXPUT_8(isp, src->in_status_subcode, &dst->in_status_subcode);
2468 	ISP_IOXPUT_16(isp, src->in_reserved2, &dst->in_reserved2);
2469 	ISP_IOXPUT_32(isp, src->in_rxid, &dst->in_rxid);
2470 	ISP_IOXPUT_16(isp, src->in_srr_reloff_hi, &dst->in_srr_reloff_hi);
2471 	ISP_IOXPUT_16(isp, src->in_srr_reloff_lo, &dst->in_srr_reloff_lo);
2472 	ISP_IOXPUT_16(isp, src->in_srr_iu, &dst->in_srr_iu);
2473 	ISP_IOXPUT_16(isp, src->in_srr_oxid, &dst->in_srr_oxid);
2474 	for (i = 0; i < 18; i++) {
2475 		ISP_IOXPUT_8(isp, src->in_reserved3[i], &dst->in_reserved3[i]);
2476 	}
2477 	ISP_IOXPUT_8(isp, src->in_reserved4, &dst->in_reserved4);
2478 	ISP_IOXPUT_8(isp, src->in_vpindex, &dst->in_vpindex);
2479 	ISP_IOXPUT_32(isp, src->in_reserved5, &dst->in_reserved5);
2480 	ISP_IOXPUT_16(isp, src->in_portid_lo, &dst->in_portid_lo);
2481 	ISP_IOXPUT_8(isp, src->in_portid_hi, &dst->in_portid_hi);
2482 	ISP_IOXPUT_8(isp, src->in_reserved6, &dst->in_reserved6);
2483 	ISP_IOXPUT_16(isp, src->in_reserved7, &dst->in_reserved7);
2484 	ISP_IOXPUT_16(isp, src->in_oxid, &dst->in_oxid);
2485 }
2486 
2487 void
2488 isp_get_notify_fc(ispsoftc_t *isp, in_fcentry_t *src,
2489     in_fcentry_t *dst)
2490 {
2491 	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2492 	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2493 	ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
2494 	ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
2495 	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
2496 	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
2497 	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2498 	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
2499 	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2500 }
2501 
2502 void
2503 isp_get_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src,
2504     in_fcentry_e_t *dst)
2505 {
2506 	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2507 	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2508 	ISP_IOXGET_16(isp, &src->in_iid, dst->in_iid);
2509 	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
2510 	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
2511 	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2512 	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
2513 	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2514 }
2515 
2516 void
2517 isp_get_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src,
2518     in_fcentry_24xx_t *dst)
2519 {
2520 	int i;
2521 
2522 	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2523 	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2524 	ISP_IOXGET_16(isp, &src->in_nphdl, dst->in_nphdl);
2525 	ISP_IOXGET_16(isp, &src->in_reserved1, dst->in_reserved1);
2526 	ISP_IOXGET_16(isp, &src->in_flags, dst->in_flags);
2527 	ISP_IOXGET_16(isp, &src->in_srr_rxid, dst->in_srr_rxid);
2528 	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2529 	ISP_IOXGET_8(isp, &src->in_status_subcode, dst->in_status_subcode);
2530 	ISP_IOXGET_16(isp, &src->in_reserved2, dst->in_reserved2);
2531 	ISP_IOXGET_32(isp, &src->in_rxid, dst->in_rxid);
2532 	ISP_IOXGET_16(isp, &src->in_srr_reloff_hi, dst->in_srr_reloff_hi);
2533 	ISP_IOXGET_16(isp, &src->in_srr_reloff_lo, dst->in_srr_reloff_lo);
2534 	ISP_IOXGET_16(isp, &src->in_srr_iu, dst->in_srr_iu);
2535 	ISP_IOXGET_16(isp, &src->in_srr_oxid, dst->in_srr_oxid);
2536 	for (i = 0; i < 18; i++) {
2537 		ISP_IOXGET_8(isp, &src->in_reserved3[i], dst->in_reserved3[i]);
2538 	}
2539 	ISP_IOXGET_8(isp, &src->in_reserved4, dst->in_reserved4);
2540 	ISP_IOXGET_8(isp, &src->in_vpindex, dst->in_vpindex);
2541 	ISP_IOXGET_32(isp, &src->in_reserved5, dst->in_reserved5);
2542 	ISP_IOXGET_16(isp, &src->in_portid_lo, dst->in_portid_lo);
2543 	ISP_IOXGET_8(isp, &src->in_portid_hi, dst->in_portid_hi);
2544 	ISP_IOXGET_8(isp, &src->in_reserved6, dst->in_reserved6);
2545 	ISP_IOXGET_16(isp, &src->in_reserved7, dst->in_reserved7);
2546 	ISP_IOXGET_16(isp, &src->in_oxid, dst->in_oxid);
2547 }
2548 
2549 void
2550 isp_put_notify_ack(ispsoftc_t *isp, na_entry_t *src,  na_entry_t *dst)
2551 {
2552 	int i;
2553 	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2554 	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2555 	if (ISP_IS_SBUS(isp)) {
2556 		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_iid);
2557 		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_lun);
2558 		ISP_IOXPUT_8(isp, src->na_status, &dst->na_event);
2559 		ISP_IOXPUT_8(isp, src->na_event, &dst->na_status);
2560 	} else {
2561 		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_lun);
2562 		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
2563 		ISP_IOXPUT_8(isp, src->na_status, &dst->na_status);
2564 		ISP_IOXPUT_8(isp, src->na_event, &dst->na_event);
2565 	}
2566 	ISP_IOXPUT_32(isp, src->na_flags, &dst->na_flags);
2567 	for (i = 0; i < NA_RSVDLEN; i++) {
2568 		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2569 		    &dst->na_reserved3[i]);
2570 	}
2571 }
2572 
2573 void
2574 isp_get_notify_ack(ispsoftc_t *isp, na_entry_t *src, na_entry_t *dst)
2575 {
2576 	int i;
2577 	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2578 	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2579 	if (ISP_IS_SBUS(isp)) {
2580 		ISP_IOXGET_8(isp, &src->na_lun, dst->na_iid);
2581 		ISP_IOXGET_8(isp, &src->na_iid, dst->na_lun);
2582 		ISP_IOXGET_8(isp, &src->na_status, dst->na_event);
2583 		ISP_IOXGET_8(isp, &src->na_event, dst->na_status);
2584 	} else {
2585 		ISP_IOXGET_8(isp, &src->na_lun, dst->na_lun);
2586 		ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
2587 		ISP_IOXGET_8(isp, &src->na_status, dst->na_status);
2588 		ISP_IOXGET_8(isp, &src->na_event, dst->na_event);
2589 	}
2590 	ISP_IOXGET_32(isp, &src->na_flags, dst->na_flags);
2591 	for (i = 0; i < NA_RSVDLEN; i++) {
2592 		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2593 		    dst->na_reserved3[i]);
2594 	}
2595 }
2596 
2597 void
2598 isp_put_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src,
2599     na_fcentry_t *dst)
2600 {
2601 	int i;
2602 	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2603 	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2604 	ISP_IOXPUT_8(isp, src->na_reserved1, &dst->na_reserved1);
2605 	ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
2606 	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
2607 	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2608 	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2609 	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2610 	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
2611 	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
2612 	for (i = 0; i < NA2_RSVDLEN; i++) {
2613 		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2614 		    &dst->na_reserved3[i]);
2615 	}
2616 }
2617 
2618 void
2619 isp_put_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src,
2620     na_fcentry_e_t *dst)
2621 {
2622 	int i;
2623 	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2624 	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2625 	ISP_IOXPUT_16(isp, src->na_iid, &dst->na_iid);
2626 	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
2627 	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2628 	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2629 	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2630 	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
2631 	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
2632 	for (i = 0; i < NA2_RSVDLEN; i++) {
2633 		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2634 		    &dst->na_reserved3[i]);
2635 	}
2636 }
2637 
2638 void
2639 isp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src,
2640     na_fcentry_24xx_t *dst)
2641 {
2642 	int i;
2643 
2644 	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2645 	ISP_IOXPUT_32(isp, src->na_handle, &dst->na_handle);
2646 	ISP_IOXPUT_16(isp, src->na_nphdl, &dst->na_nphdl);
2647 	ISP_IOXPUT_16(isp, src->na_reserved1, &dst->na_reserved1);
2648 	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2649 	ISP_IOXPUT_16(isp, src->na_srr_rxid, &dst->na_srr_rxid);
2650 	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2651 	ISP_IOXPUT_8(isp, src->na_status_subcode, &dst->na_status_subcode);
2652 	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2653 	ISP_IOXPUT_32(isp, src->na_rxid, &dst->na_rxid);
2654 	ISP_IOXPUT_16(isp, src->na_srr_reloff_hi, &dst->na_srr_reloff_hi);
2655 	ISP_IOXPUT_16(isp, src->na_srr_reloff_lo, &dst->na_srr_reloff_lo);
2656 	ISP_IOXPUT_16(isp, src->na_srr_iu, &dst->na_srr_iu);
2657 	ISP_IOXPUT_16(isp, src->na_srr_flags, &dst->na_srr_flags);
2658 	for (i = 0; i < 18; i++) {
2659 		ISP_IOXPUT_8(isp, src->na_reserved3[i], &dst->na_reserved3[i]);
2660 	}
2661 	ISP_IOXPUT_8(isp, src->na_reserved4, &dst->na_reserved4);
2662 	ISP_IOXPUT_8(isp, src->na_vpindex, &dst->na_vpindex);
2663 	ISP_IOXPUT_8(isp, src->na_srr_reject_vunique,
2664 	    &dst->na_srr_reject_vunique);
2665 	ISP_IOXPUT_8(isp, src->na_srr_reject_explanation,
2666 	    &dst->na_srr_reject_explanation);
2667 	ISP_IOXPUT_8(isp, src->na_srr_reject_code, &dst->na_srr_reject_code);
2668 	ISP_IOXPUT_8(isp, src->na_reserved5, &dst->na_reserved5);
2669 	for (i = 0; i < 6; i++) {
2670 		ISP_IOXPUT_8(isp, src->na_reserved6[i], &dst->na_reserved6[i]);
2671 	}
2672 	ISP_IOXPUT_16(isp, src->na_oxid, &dst->na_oxid);
2673 }
2674 
2675 void
2676 isp_get_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src,
2677     na_fcentry_t *dst)
2678 {
2679 	int i;
2680 	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2681 	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2682 	ISP_IOXGET_8(isp, &src->na_reserved1, dst->na_reserved1);
2683 	ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
2684 	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
2685 	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2686 	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2687 	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2688 	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
2689 	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
2690 	for (i = 0; i < NA2_RSVDLEN; i++) {
2691 		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2692 		    dst->na_reserved3[i]);
2693 	}
2694 }
2695 
2696 void
2697 isp_get_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src,
2698     na_fcentry_e_t *dst)
2699 {
2700 	int i;
2701 	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2702 	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2703 	ISP_IOXGET_16(isp, &src->na_iid, dst->na_iid);
2704 	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
2705 	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2706 	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2707 	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2708 	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
2709 	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
2710 	for (i = 0; i < NA2_RSVDLEN; i++) {
2711 		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2712 		    dst->na_reserved3[i]);
2713 	}
2714 }
2715 
2716 void
2717 isp_get_notify_ack_24xx(ispsoftc_t *isp, na_fcentry_24xx_t *src,
2718     na_fcentry_24xx_t *dst)
2719 {
2720 	int i;
2721 
2722 	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2723 	ISP_IOXGET_32(isp, &src->na_handle, dst->na_handle);
2724 	ISP_IOXGET_16(isp, &src->na_nphdl, dst->na_nphdl);
2725 	ISP_IOXGET_16(isp, &src->na_reserved1, dst->na_reserved1);
2726 	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2727 	ISP_IOXGET_16(isp, &src->na_srr_rxid, dst->na_srr_rxid);
2728 	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2729 	ISP_IOXGET_8(isp, &src->na_status_subcode, dst->na_status_subcode);
2730 	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2731 	ISP_IOXGET_32(isp, &src->na_rxid, dst->na_rxid);
2732 	ISP_IOXGET_16(isp, &src->na_srr_reloff_hi, dst->na_srr_reloff_hi);
2733 	ISP_IOXGET_16(isp, &src->na_srr_reloff_lo, dst->na_srr_reloff_lo);
2734 	ISP_IOXGET_16(isp, &src->na_srr_iu, dst->na_srr_iu);
2735 	ISP_IOXGET_16(isp, &src->na_srr_flags, dst->na_srr_flags);
2736 	for (i = 0; i < 18; i++) {
2737 		ISP_IOXGET_8(isp, &src->na_reserved3[i], dst->na_reserved3[i]);
2738 	}
2739 	ISP_IOXGET_8(isp, &src->na_reserved4, dst->na_reserved4);
2740 	ISP_IOXGET_8(isp, &src->na_vpindex, dst->na_vpindex);
2741 	ISP_IOXGET_8(isp, &src->na_srr_reject_vunique,
2742 	    dst->na_srr_reject_vunique);
2743 	ISP_IOXGET_8(isp, &src->na_srr_reject_explanation,
2744 	    dst->na_srr_reject_explanation);
2745 	ISP_IOXGET_8(isp, &src->na_srr_reject_code, dst->na_srr_reject_code);
2746 	ISP_IOXGET_8(isp, &src->na_reserved5, dst->na_reserved5);
2747 	for (i = 0; i < 6; i++) {
2748 		ISP_IOXGET_8(isp, &src->na_reserved6[i], dst->na_reserved6[i]);
2749 	}
2750 	ISP_IOXGET_16(isp, &src->na_oxid, dst->na_oxid);
2751 }
2752 
2753 void
2754 isp_get_abts(ispsoftc_t *isp, abts_t *src, abts_t *dst)
2755 {
2756 	int i;
2757 
2758 	isp_get_hdr(isp, &src->abts_header, &dst->abts_header);
2759 	for (i = 0; i < 6; i++) {
2760 		ISP_IOXGET_8(isp, &src->abts_reserved0[i],
2761 		    dst->abts_reserved0[i]);
2762 	}
2763 	ISP_IOXGET_16(isp, &src->abts_nphdl, dst->abts_nphdl);
2764 	ISP_IOXGET_16(isp, &src->abts_reserved1, dst->abts_reserved1);
2765 	ISP_IOXGET_16(isp, &src->abts_sof, dst->abts_sof);
2766 	ISP_IOXGET_32(isp, &src->abts_rxid_abts, dst->abts_rxid_abts);
2767 	ISP_IOXGET_16(isp, &src->abts_did_lo, dst->abts_did_lo);
2768 	ISP_IOXGET_8(isp, &src->abts_did_hi, dst->abts_did_hi);
2769 	ISP_IOXGET_8(isp, &src->abts_r_ctl, dst->abts_r_ctl);
2770 	ISP_IOXGET_16(isp, &src->abts_sid_lo, dst->abts_sid_lo);
2771 	ISP_IOXGET_8(isp, &src->abts_sid_hi, dst->abts_sid_hi);
2772 	ISP_IOXGET_8(isp, &src->abts_cs_ctl, dst->abts_cs_ctl);
2773 	ISP_IOXGET_16(isp, &src->abts_fs_ctl, dst->abts_fs_ctl);
2774 	ISP_IOXGET_8(isp, &src->abts_f_ctl, dst->abts_f_ctl);
2775 	ISP_IOXGET_8(isp, &src->abts_type, dst->abts_type);
2776 	ISP_IOXGET_16(isp, &src->abts_seq_cnt, dst->abts_seq_cnt);
2777 	ISP_IOXGET_8(isp, &src->abts_df_ctl, dst->abts_df_ctl);
2778 	ISP_IOXGET_8(isp, &src->abts_seq_id, dst->abts_seq_id);
2779 	ISP_IOXGET_16(isp, &src->abts_rx_id, dst->abts_rx_id);
2780 	ISP_IOXGET_16(isp, &src->abts_ox_id, dst->abts_ox_id);
2781 	ISP_IOXGET_32(isp, &src->abts_param, dst->abts_param);
2782 	for (i = 0; i < 16; i++) {
2783 	ISP_IOXGET_8(isp, &src->abts_reserved2[i],
2784 		    dst->abts_reserved2[i]);
2785 	}
2786 	ISP_IOXGET_32(isp, &src->abts_rxid_task, dst->abts_rxid_task);
2787 }
2788 
2789 void
2790 isp_put_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
2791 {
2792 	int i;
2793 
2794 	isp_put_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
2795 	ISP_IOXPUT_32(isp, src->abts_rsp_handle, &dst->abts_rsp_handle);
2796 	ISP_IOXPUT_16(isp, src->abts_rsp_status, &dst->abts_rsp_status);
2797 	ISP_IOXPUT_16(isp, src->abts_rsp_nphdl, &dst->abts_rsp_nphdl);
2798 	ISP_IOXPUT_16(isp, src->abts_rsp_ctl_flags, &dst->abts_rsp_ctl_flags);
2799 	ISP_IOXPUT_16(isp, src->abts_rsp_sof, &dst->abts_rsp_sof);
2800 	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_abts, &dst->abts_rsp_rxid_abts);
2801 	ISP_IOXPUT_16(isp, src->abts_rsp_did_lo, &dst->abts_rsp_did_lo);
2802 	ISP_IOXPUT_8(isp, src->abts_rsp_did_hi, &dst->abts_rsp_did_hi);
2803 	ISP_IOXPUT_8(isp, src->abts_rsp_r_ctl, &dst->abts_rsp_r_ctl);
2804 	ISP_IOXPUT_16(isp, src->abts_rsp_sid_lo, &dst->abts_rsp_sid_lo);
2805 	ISP_IOXPUT_8(isp, src->abts_rsp_sid_hi, &dst->abts_rsp_sid_hi);
2806 	ISP_IOXPUT_8(isp, src->abts_rsp_cs_ctl, &dst->abts_rsp_cs_ctl);
2807 	ISP_IOXPUT_16(isp, src->abts_rsp_f_ctl_lo, &dst->abts_rsp_f_ctl_lo);
2808 	ISP_IOXPUT_8(isp, src->abts_rsp_f_ctl_hi, &dst->abts_rsp_f_ctl_hi);
2809 	ISP_IOXPUT_8(isp, src->abts_rsp_type, &dst->abts_rsp_type);
2810 	ISP_IOXPUT_16(isp, src->abts_rsp_seq_cnt, &dst->abts_rsp_seq_cnt);
2811 	ISP_IOXPUT_8(isp, src->abts_rsp_df_ctl, &dst->abts_rsp_df_ctl);
2812 	ISP_IOXPUT_8(isp, src->abts_rsp_seq_id, &dst->abts_rsp_seq_id);
2813 	ISP_IOXPUT_16(isp, src->abts_rsp_rx_id, &dst->abts_rsp_rx_id);
2814 	ISP_IOXPUT_16(isp, src->abts_rsp_ox_id, &dst->abts_rsp_ox_id);
2815 	ISP_IOXPUT_32(isp, src->abts_rsp_param, &dst->abts_rsp_param);
2816 	if (src->abts_rsp_r_ctl == BA_ACC) {
2817 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.reserved,
2818 		    &dst->abts_rsp_payload.ba_acc.reserved);
2819 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.last_seq_id,
2820 		    &dst->abts_rsp_payload.ba_acc.last_seq_id);
2821 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.seq_id_valid,
2822 		    &dst->abts_rsp_payload.ba_acc.seq_id_valid);
2823 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_rx_id,
2824 		    &dst->abts_rsp_payload.ba_acc.aborted_rx_id);
2825 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_ox_id,
2826 		    &dst->abts_rsp_payload.ba_acc.aborted_ox_id);
2827 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.high_seq_cnt,
2828 		    &dst->abts_rsp_payload.ba_acc.high_seq_cnt);
2829 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.low_seq_cnt,
2830 		    &dst->abts_rsp_payload.ba_acc.low_seq_cnt);
2831 		for (i = 0; i < 4; i++) {
2832 			ISP_IOXPUT_16(isp,
2833 			    src->abts_rsp_payload.ba_acc.reserved2[i],
2834 			    &dst->abts_rsp_payload.ba_acc.reserved2[i]);
2835 		}
2836 	} else if (src->abts_rsp_r_ctl == BA_RJT) {
2837 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.vendor_unique,
2838 		    &dst->abts_rsp_payload.ba_rjt.vendor_unique);
2839 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.explanation,
2840 		    &dst->abts_rsp_payload.ba_rjt.explanation);
2841 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reason,
2842 		    &dst->abts_rsp_payload.ba_rjt.reason);
2843 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reserved,
2844 		    &dst->abts_rsp_payload.ba_rjt.reserved);
2845 		for (i = 0; i < 12; i++) {
2846 			ISP_IOXPUT_16(isp,
2847 			    src->abts_rsp_payload.ba_rjt.reserved2[i],
2848 			    &dst->abts_rsp_payload.ba_rjt.reserved2[i]);
2849 		}
2850 	} else {
2851 		for (i = 0; i < 16; i++) {
2852 			ISP_IOXPUT_8(isp, src->abts_rsp_payload.reserved[i],
2853 			    &dst->abts_rsp_payload.reserved[i]);
2854 		}
2855 	}
2856 	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_task, &dst->abts_rsp_rxid_task);
2857 }
2858 
2859 void
2860 isp_get_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
2861 {
2862 	int i;
2863 
2864 	isp_get_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
2865 	ISP_IOXGET_32(isp, &src->abts_rsp_handle, dst->abts_rsp_handle);
2866 	ISP_IOXGET_16(isp, &src->abts_rsp_status, dst->abts_rsp_status);
2867 	ISP_IOXGET_16(isp, &src->abts_rsp_nphdl, dst->abts_rsp_nphdl);
2868 	ISP_IOXGET_16(isp, &src->abts_rsp_ctl_flags, dst->abts_rsp_ctl_flags);
2869 	ISP_IOXGET_16(isp, &src->abts_rsp_sof, dst->abts_rsp_sof);
2870 	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_abts, dst->abts_rsp_rxid_abts);
2871 	ISP_IOXGET_16(isp, &src->abts_rsp_did_lo, dst->abts_rsp_did_lo);
2872 	ISP_IOXGET_8(isp, &src->abts_rsp_did_hi, dst->abts_rsp_did_hi);
2873 	ISP_IOXGET_8(isp, &src->abts_rsp_r_ctl, dst->abts_rsp_r_ctl);
2874 	ISP_IOXGET_16(isp, &src->abts_rsp_sid_lo, dst->abts_rsp_sid_lo);
2875 	ISP_IOXGET_8(isp, &src->abts_rsp_sid_hi, dst->abts_rsp_sid_hi);
2876 	ISP_IOXGET_8(isp, &src->abts_rsp_cs_ctl, dst->abts_rsp_cs_ctl);
2877 	ISP_IOXGET_16(isp, &src->abts_rsp_f_ctl_lo, dst->abts_rsp_f_ctl_lo);
2878 	ISP_IOXGET_8(isp, &src->abts_rsp_f_ctl_hi, dst->abts_rsp_f_ctl_hi);
2879 	ISP_IOXGET_8(isp, &src->abts_rsp_type, dst->abts_rsp_type);
2880 	ISP_IOXGET_16(isp, &src->abts_rsp_seq_cnt, dst->abts_rsp_seq_cnt);
2881 	ISP_IOXGET_8(isp, &src->abts_rsp_df_ctl, dst->abts_rsp_df_ctl);
2882 	ISP_IOXGET_8(isp, &src->abts_rsp_seq_id, dst->abts_rsp_seq_id);
2883 	ISP_IOXGET_16(isp, &src->abts_rsp_rx_id, dst->abts_rsp_rx_id);
2884 	ISP_IOXGET_16(isp, &src->abts_rsp_ox_id, dst->abts_rsp_ox_id);
2885 	ISP_IOXGET_32(isp, &src->abts_rsp_param, dst->abts_rsp_param);
2886 	for (i = 0; i < 8; i++) {
2887 		ISP_IOXGET_8(isp, &src->abts_rsp_payload.rsp.reserved[i],
2888 		    dst->abts_rsp_payload.rsp.reserved[i]);
2889 	}
2890 	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode1,
2891 	    dst->abts_rsp_payload.rsp.subcode1);
2892 	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode2,
2893 	    dst->abts_rsp_payload.rsp.subcode2);
2894 	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_task, dst->abts_rsp_rxid_task);
2895 }
2896 #endif	/* ISP_TARGET_MODE */
2897 /*
2898  * vim:ts=8:sw=8
2899  */
2900