isp_library.c revision 164272
1/*-
2 * Copyright (c) 1999-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: head/sys/dev/isp/isp_library.c 164272 2006-11-14 08:45:48Z mjacob $");
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
48int
49isp_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
73XS_T *
74isp_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
83uint32_t
84isp_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
97uint32_t
98isp_handle_index(uint32_t handle)
99{
100	return (handle - 1);
101}
102
103void
104isp_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
111int
112isp_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)
132void
133isp_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
150void
151isp_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
186int
187isp_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 */
239void
240isp_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: %s al%d tgt %s %s 0x%06x =>%s"
272		    " 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x", i,
273		    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
283void
284isp_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 */
323void
324isp_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
347void
348isp_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
371int
372isp_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
383void
384isp_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
411void
412isp_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
433void
434isp_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
455void
456isp_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
480void
481isp_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
504void
505isp_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
531void
532isp_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
557void
558isp_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
579void
580isp_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
617void
618isp_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
639void
640isp_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
652void
653isp_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
667void
668isp_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
691void
692isp_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
715void
716isp_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
738void
739isp_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
755void
756isp_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
822void
823isp_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
876void
877isp_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
930void
931isp_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
967void
968isp_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
987void
988isp_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 */
1010void
1011isp_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
1040void
1041isp_put_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst)
1042{
1043	int i;
1044
1045	isp_put_hdr(isp, &src->ctp_header, &dst->ctp_header);
1046	ISP_IOXPUT_32(isp, src->ctp_handle, &dst->ctp_handle);
1047	ISP_IOXPUT_16(isp, src->ctp_status, &dst->ctp_status);
1048	ISP_IOXPUT_16(isp, src->ctp_nphdl, &dst->ctp_nphdl);
1049	ISP_IOXPUT_16(isp, src->ctp_cmd_cnt, &dst->ctp_cmd_cnt);
1050	ISP_IOXPUT_16(isp, src->ctp_vpidx, &dst->ctp_vpidx);
1051	ISP_IOXPUT_16(isp, src->ctp_time, &dst->ctp_time);
1052	ISP_IOXPUT_16(isp, src->ctp_reserved0, &dst->ctp_reserved0);
1053	ISP_IOXPUT_16(isp, src->ctp_rsp_cnt, &dst->ctp_rsp_cnt);
1054	for (i = 0; i < 5; i++) {
1055		ISP_IOXPUT_16(isp, src->ctp_reserved1[i],
1056		    &dst->ctp_reserved1[i]);
1057	}
1058	ISP_IOXPUT_32(isp, src->ctp_rsp_bcnt, &dst->ctp_rsp_bcnt);
1059	ISP_IOXPUT_32(isp, src->ctp_cmd_bcnt, &dst->ctp_cmd_bcnt);
1060	for (i = 0; i < 2; i++) {
1061		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_base,
1062		    &dst->ctp_dataseg[i].ds_base);
1063		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_basehi,
1064		    &dst->ctp_dataseg[i].ds_basehi);
1065		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_count,
1066		    &dst->ctp_dataseg[i].ds_count);
1067	}
1068}
1069
1070/*
1071 * Generic SNS request - not particularly useful since the per-command data
1072 * isn't always 16 bit words.
1073 */
1074void
1075isp_put_sns_request(ispsoftc_t *isp, sns_screq_t *src, sns_screq_t *dst)
1076{
1077	int i, nw = (int) src->snscb_sblen;
1078	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1079	for (i = 0; i < 4; i++) {
1080		ISP_IOXPUT_16(isp, src->snscb_addr[i], &dst->snscb_addr[i]);
1081	}
1082	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1083	for (i = 0; i < nw; i++) {
1084		ISP_IOXPUT_16(isp, src->snscb_data[i], &dst->snscb_data[i]);
1085	}
1086
1087}
1088
1089void
1090isp_put_gid_ft_request(ispsoftc_t *isp, sns_gid_ft_req_t *src,
1091    sns_gid_ft_req_t *dst)
1092{
1093	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1094	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
1095	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
1096	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
1097	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
1098	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
1099	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1100	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
1101	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
1102	ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2);
1103	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
1104	ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type);
1105}
1106
1107void
1108isp_put_gxn_id_request(ispsoftc_t *isp, sns_gxn_id_req_t *src,
1109    sns_gxn_id_req_t *dst)
1110{
1111	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1112	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
1113	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
1114	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
1115	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
1116	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
1117	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1118	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
1119	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
1120	ISP_IOXPUT_16(isp, src->snscb_reserved2, &dst->snscb_reserved2);
1121	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
1122	ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid);
1123}
1124
1125/*
1126 * Generic SNS response - not particularly useful since the per-command data
1127 * isn't always 16 bit words.
1128 */
1129void
1130isp_get_sns_response(ispsoftc_t *isp, sns_scrsp_t *src,
1131    sns_scrsp_t *dst, int nwords)
1132{
1133	int i;
1134	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1135	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
1136	for (i = 0; i < 3; i++) {
1137		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
1138		    dst->snscb_port_id[i]);
1139	}
1140	for (i = 0; i < 8; i++) {
1141		ISP_IOXGET_8(isp, &src->snscb_portname[i],
1142		    dst->snscb_portname[i]);
1143	}
1144	for (i = 0; i < nwords; i++) {
1145		ISP_IOXGET_16(isp, &src->snscb_data[i], dst->snscb_data[i]);
1146	}
1147}
1148
1149void
1150isp_get_gid_ft_response(ispsoftc_t *isp, sns_gid_ft_rsp_t *src,
1151    sns_gid_ft_rsp_t *dst, int nwords)
1152{
1153	int i;
1154	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1155	for (i = 0; i < nwords; i++) {
1156		int j;
1157		ISP_IOXGET_8(isp,
1158		    &src->snscb_ports[i].control,
1159		    dst->snscb_ports[i].control);
1160		for (j = 0; j < 3; j++) {
1161			ISP_IOXGET_8(isp,
1162			    &src->snscb_ports[i].portid[j],
1163			    dst->snscb_ports[i].portid[j]);
1164		}
1165		if (dst->snscb_ports[i].control & 0x80) {
1166			break;
1167		}
1168	}
1169}
1170
1171void
1172isp_get_gxn_id_response(ispsoftc_t *isp, sns_gxn_id_rsp_t *src,
1173    sns_gxn_id_rsp_t *dst)
1174{
1175	int i;
1176	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1177	for (i = 0; i < 8; i++)
1178		ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]);
1179}
1180
1181void
1182isp_get_gff_id_response(ispsoftc_t *isp, sns_gff_id_rsp_t *src,
1183    sns_gff_id_rsp_t *dst)
1184{
1185	int i;
1186	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1187	for (i = 0; i < 32; i++) {
1188		ISP_IOXGET_32(isp, &src->snscb_fc4_features[i],
1189		    dst->snscb_fc4_features[i]);
1190	}
1191}
1192
1193void
1194isp_get_ga_nxt_response(ispsoftc_t *isp, sns_ga_nxt_rsp_t *src,
1195    sns_ga_nxt_rsp_t *dst)
1196{
1197	int i;
1198	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1199	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
1200	for (i = 0; i < 3; i++) {
1201		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
1202		    dst->snscb_port_id[i]);
1203	}
1204	for (i = 0; i < 8; i++) {
1205		ISP_IOXGET_8(isp, &src->snscb_portname[i],
1206		    dst->snscb_portname[i]);
1207	}
1208	ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen);
1209	for (i = 0; i < 255; i++) {
1210		ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]);
1211	}
1212	for (i = 0; i < 8; i++) {
1213		ISP_IOXGET_8(isp, &src->snscb_nodename[i],
1214		    dst->snscb_nodename[i]);
1215	}
1216	ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen);
1217	for (i = 0; i < 255; i++) {
1218		ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]);
1219	}
1220	for (i = 0; i < 8; i++) {
1221		ISP_IOXGET_8(isp, &src->snscb_ipassoc[i],
1222		    dst->snscb_ipassoc[i]);
1223	}
1224	for (i = 0; i < 16; i++) {
1225		ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]);
1226	}
1227	for (i = 0; i < 4; i++) {
1228		ISP_IOXGET_8(isp, &src->snscb_svc_class[i],
1229		    dst->snscb_svc_class[i]);
1230	}
1231	for (i = 0; i < 32; i++) {
1232		ISP_IOXGET_8(isp, &src->snscb_fc4_types[i],
1233		    dst->snscb_fc4_types[i]);
1234	}
1235	for (i = 0; i < 8; i++) {
1236		ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]);
1237	}
1238	ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved);
1239	for (i = 0; i < 3; i++) {
1240		ISP_IOXGET_8(isp, &src->snscb_hardaddr[i],
1241		    dst->snscb_hardaddr[i]);
1242	}
1243}
1244
1245void
1246isp_get_els(ispsoftc_t *isp, els_t *src, els_t *dst)
1247{
1248	int i;
1249
1250	isp_get_hdr(isp, &src->els_hdr, &dst->els_hdr);
1251	ISP_IOXGET_32(isp, &src->els_handle, dst->els_handle);
1252	ISP_IOXGET_16(isp, &src->els_status, dst->els_status);
1253	ISP_IOXGET_16(isp, &src->els_nphdl, dst->els_nphdl);
1254	ISP_IOXGET_16(isp, &src->els_xmit_dsd_count, dst->els_xmit_dsd_count);
1255	ISP_IOXGET_8(isp, &src->els_vphdl, dst->els_vphdl);
1256	ISP_IOXGET_8(isp, &src->els_sof, dst->els_sof);
1257	ISP_IOXGET_32(isp, &src->els_rxid, dst->els_rxid);
1258	ISP_IOXGET_16(isp, &src->els_recv_dsd_count, dst->els_recv_dsd_count);
1259	ISP_IOXGET_8(isp, &src->els_opcode, dst->els_opcode);
1260	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved1);
1261	ISP_IOXGET_8(isp, &src->els_did_lo, dst->els_did_lo);
1262	ISP_IOXGET_8(isp, &src->els_did_mid, dst->els_did_mid);
1263	ISP_IOXGET_8(isp, &src->els_did_hi, dst->els_did_hi);
1264	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved2);
1265	ISP_IOXGET_16(isp, &src->els_reserved3, dst->els_reserved3);
1266	ISP_IOXGET_16(isp, &src->els_ctl_flags, dst->els_ctl_flags);
1267	ISP_IOXGET_32(isp, &src->els_bytecnt, dst->els_bytecnt);
1268	ISP_IOXGET_32(isp, &src->els_subcode1, dst->els_subcode1);
1269	ISP_IOXGET_32(isp, &src->els_subcode2, dst->els_subcode2);
1270	for (i = 0; i < 20; i++) {
1271		ISP_IOXGET_8(isp, &src->els_reserved4[i],
1272		    dst->els_reserved4[i]);
1273	}
1274}
1275
1276void
1277isp_put_els(ispsoftc_t *isp, els_t *src, els_t *dst)
1278{
1279	isp_put_hdr(isp, &src->els_hdr, &dst->els_hdr);
1280	ISP_IOXPUT_32(isp, src->els_handle, &dst->els_handle);
1281	ISP_IOXPUT_16(isp, src->els_status, &dst->els_status);
1282	ISP_IOXPUT_16(isp, src->els_nphdl, &dst->els_nphdl);
1283	ISP_IOXPUT_16(isp, src->els_xmit_dsd_count, &dst->els_xmit_dsd_count);
1284	ISP_IOXPUT_8(isp, src->els_vphdl, &dst->els_vphdl);
1285	ISP_IOXPUT_8(isp, src->els_sof, &dst->els_sof);
1286	ISP_IOXPUT_32(isp, src->els_rxid, &dst->els_rxid);
1287	ISP_IOXPUT_16(isp, src->els_recv_dsd_count, &dst->els_recv_dsd_count);
1288	ISP_IOXPUT_8(isp, src->els_opcode, &dst->els_opcode);
1289	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved1);
1290	ISP_IOXPUT_8(isp, src->els_did_lo, &dst->els_did_lo);
1291	ISP_IOXPUT_8(isp, src->els_did_mid, &dst->els_did_mid);
1292	ISP_IOXPUT_8(isp, src->els_did_hi, &dst->els_did_hi);
1293	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved2);
1294	ISP_IOXPUT_16(isp, src->els_reserved3, &dst->els_reserved3);
1295	ISP_IOXPUT_16(isp, src->els_ctl_flags, &dst->els_ctl_flags);
1296	ISP_IOXPUT_32(isp, src->els_recv_bytecnt, &dst->els_recv_bytecnt);
1297	ISP_IOXPUT_32(isp, src->els_xmit_bytecnt, &dst->els_xmit_bytecnt);
1298	ISP_IOXPUT_32(isp, src->els_xmit_dsd_length, &dst->els_xmit_dsd_length);
1299	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a1500, &dst->els_xmit_dsd_a1500);
1300	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a3116, &dst->els_xmit_dsd_a3116);
1301	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a4732, &dst->els_xmit_dsd_a4732);
1302	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a6348, &dst->els_xmit_dsd_a6348);
1303	ISP_IOXPUT_32(isp, src->els_recv_dsd_length, &dst->els_recv_dsd_length);
1304	ISP_IOXPUT_16(isp, src->els_recv_dsd_a1500, &dst->els_recv_dsd_a1500);
1305	ISP_IOXPUT_16(isp, src->els_recv_dsd_a3116, &dst->els_recv_dsd_a3116);
1306	ISP_IOXPUT_16(isp, src->els_recv_dsd_a4732, &dst->els_recv_dsd_a4732);
1307	ISP_IOXPUT_16(isp, src->els_recv_dsd_a6348, &dst->els_recv_dsd_a6348);
1308}
1309
1310/*
1311 * FC Structure Canonicalization
1312 */
1313
1314void
1315isp_get_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst)
1316{
1317        ISP_IOZGET_8(isp, &src->r_ctl, dst->r_ctl);
1318        ISP_IOZGET_8(isp, &src->d_id[0], dst->d_id[0]);
1319        ISP_IOZGET_8(isp, &src->d_id[1], dst->d_id[1]);
1320        ISP_IOZGET_8(isp, &src->d_id[2], dst->d_id[2]);
1321        ISP_IOZGET_8(isp, &src->cs_ctl, dst->cs_ctl);
1322        ISP_IOZGET_8(isp, &src->s_id[0], dst->s_id[0]);
1323        ISP_IOZGET_8(isp, &src->s_id[1], dst->s_id[1]);
1324        ISP_IOZGET_8(isp, &src->s_id[2], dst->s_id[2]);
1325        ISP_IOZGET_8(isp, &src->type, dst->type);
1326        ISP_IOZGET_8(isp, &src->f_ctl, dst->f_ctl);
1327        ISP_IOZGET_8(isp, &src->seq_id, dst->seq_id);
1328        ISP_IOZGET_8(isp, &src->df_ctl, dst->df_ctl);
1329        ISP_IOZGET_16(isp, &src->seq_cnt, dst->seq_cnt);
1330	/* XXX SOMETHING WAS AND STILL CONTINUES WRONG HERE XXX */
1331#if	0
1332        ISP_IOZGET_16(isp, &src->ox_id, dst->ox_id);
1333        ISP_IOZGET_16(isp, &src->rx_id, dst->rx_id);
1334#else
1335        ISP_IOZGET_32(isp, &src->ox_id, dst->parameter);
1336        dst->ox_id = dst->parameter;
1337        dst->rx_id = dst->parameter >> 16;
1338#endif
1339        ISP_IOZGET_32(isp, &src->parameter, dst->parameter);
1340}
1341
1342void
1343isp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *dst)
1344{
1345	int i;
1346
1347	for (i = 0; i < 8; i++) {
1348		ISP_IOZGET_8(isp, &src->fcp_cmnd_lun[i], dst->fcp_cmnd_lun[i]);
1349	}
1350        ISP_IOZGET_8(isp, &src->fcp_cmnd_crn, dst->fcp_cmnd_crn);
1351        ISP_IOZGET_8(isp, &src->fcp_cmnd_task_attribute,
1352	    dst->fcp_cmnd_task_attribute);
1353        ISP_IOZGET_8(isp, &src->fcp_cmnd_task_management,
1354	    dst->fcp_cmnd_task_management);
1355        ISP_IOZGET_8(isp, &src->fcp_cmnd_alen_datadir,
1356	    dst->fcp_cmnd_alen_datadir);
1357	for (i = 0; i < 16; i++) {
1358		ISP_IOZGET_8(isp, &src->cdb_dl.sf.fcp_cmnd_cdb[i],
1359		    dst->cdb_dl.sf.fcp_cmnd_cdb[i]);
1360	}
1361	ISP_IOZGET_32(isp, &src->cdb_dl.sf.fcp_cmnd_dl,
1362	    dst->cdb_dl.sf.fcp_cmnd_dl);
1363}
1364
1365void
1366isp_put_rft_id(ispsoftc_t *isp, rft_id_t *src, rft_id_t *dst)
1367{
1368	int i;
1369	isp_put_ct_hdr(isp, &src->rftid_hdr, &dst->rftid_hdr);
1370	ISP_IOZPUT_8(isp, src->rftid_reserved, &dst->rftid_reserved);
1371	for (i = 0; i < 3; i++) {
1372		ISP_IOZPUT_8(isp, src->rftid_portid[i], &dst->rftid_portid[i]);
1373	}
1374	for (i = 0; i < 8; i++) {
1375		ISP_IOZPUT_32(isp, src->rftid_fc4types[i],
1376		    &dst->rftid_fc4types[i]);
1377	}
1378}
1379
1380void
1381isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
1382{
1383	ISP_IOZGET_8(isp, &src->ct_revision, dst->ct_revision);
1384	ISP_IOZGET_8(isp, &src->ct_in_id[0], dst->ct_in_id[0]);
1385	ISP_IOZGET_8(isp, &src->ct_in_id[1], dst->ct_in_id[1]);
1386	ISP_IOZGET_8(isp, &src->ct_in_id[2], dst->ct_in_id[2]);
1387	ISP_IOZGET_8(isp, &src->ct_fcs_type, dst->ct_fcs_type);
1388	ISP_IOZGET_8(isp, &src->ct_fcs_subtype, dst->ct_fcs_subtype);
1389	ISP_IOZGET_8(isp, &src->ct_options, dst->ct_options);
1390	ISP_IOZGET_8(isp, &src->ct_reserved0, dst->ct_reserved0);
1391	ISP_IOZGET_16(isp, &src->ct_cmd_resp, dst->ct_cmd_resp);
1392	ISP_IOZGET_16(isp, &src->ct_bcnt_resid, dst->ct_bcnt_resid);
1393	ISP_IOZGET_8(isp, &src->ct_reserved1, dst->ct_reserved1);
1394	ISP_IOZGET_8(isp, &src->ct_reason, dst->ct_reason);
1395	ISP_IOZGET_8(isp, &src->ct_explanation, dst->ct_explanation);
1396	ISP_IOZGET_8(isp, &src->ct_vunique, dst->ct_vunique);
1397}
1398
1399void
1400isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
1401{
1402	ISP_IOZPUT_8(isp, src->ct_revision, &dst->ct_revision);
1403	ISP_IOZPUT_8(isp, src->ct_in_id[0], &dst->ct_in_id[0]);
1404	ISP_IOZPUT_8(isp, src->ct_in_id[1], &dst->ct_in_id[1]);
1405	ISP_IOZPUT_8(isp, src->ct_in_id[2], &dst->ct_in_id[2]);
1406	ISP_IOZPUT_8(isp, src->ct_fcs_type, &dst->ct_fcs_type);
1407	ISP_IOZPUT_8(isp, src->ct_fcs_subtype, &dst->ct_fcs_subtype);
1408	ISP_IOZPUT_8(isp, src->ct_options, &dst->ct_options);
1409	ISP_IOZPUT_8(isp, src->ct_reserved0, &dst->ct_reserved0);
1410	ISP_IOZPUT_16(isp, src->ct_cmd_resp, &dst->ct_cmd_resp);
1411	ISP_IOZPUT_16(isp, src->ct_bcnt_resid, &dst->ct_bcnt_resid);
1412	ISP_IOZPUT_8(isp, src->ct_reserved1, &dst->ct_reserved1);
1413	ISP_IOZPUT_8(isp, src->ct_reason, &dst->ct_reason);
1414	ISP_IOZPUT_8(isp, src->ct_explanation, &dst->ct_explanation);
1415	ISP_IOZPUT_8(isp, src->ct_vunique, &dst->ct_vunique);
1416}
1417
1418#ifdef	ISP_TARGET_MODE
1419int
1420isp_save_xs_tgt(ispsoftc_t *isp, void *xs, uint32_t *handlep)
1421{
1422	int i;
1423
1424	for (i = 0; i < (int) isp->isp_maxcmds; i++) {
1425		if (isp->isp_tgtlist[i] == NULL) {
1426			break;
1427		}
1428	}
1429	if (i == isp->isp_maxcmds) {
1430		return (-1);
1431	}
1432	isp->isp_tgtlist[i] = xs;
1433	*handlep = (i+1) | 0x8000;
1434	return (0);
1435}
1436
1437void *
1438isp_find_xs_tgt(ispsoftc_t *isp, uint32_t handle)
1439{
1440	if (handle == 0 || (handle & 0x8000) == 0 ||
1441	    (handle & 0x7fff) > isp->isp_maxcmds) {
1442		isp_prt(isp, ISP_LOGERR, "bad handle in isp_find_xs_tgt");
1443		return (NULL);
1444	} else {
1445		return (isp->isp_tgtlist[(handle & 0x7fff) - 1]);
1446	}
1447}
1448
1449uint32_t
1450isp_find_tgt_handle(ispsoftc_t *isp, void *xs)
1451{
1452	int i;
1453	if (xs != NULL) {
1454		for (i = 0; i < isp->isp_maxcmds; i++) {
1455			if (isp->isp_tgtlist[i] == xs) {
1456				return ((i+1) & 0x7fff);
1457			}
1458		}
1459	}
1460	return (0);
1461}
1462
1463void
1464isp_destroy_tgt_handle(ispsoftc_t *isp, uint32_t handle)
1465{
1466	if (handle == 0 || (handle & 0x8000) == 0 ||
1467	    (handle & 0x7fff) > isp->isp_maxcmds) {
1468		isp_prt(isp, ISP_LOGERR,
1469		    "bad handle in isp_destroy_tgt_handle");
1470	} else {
1471		isp->isp_tgtlist[(handle & 0x7fff) - 1] = NULL;
1472	}
1473}
1474
1475void
1476isp_put_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
1477{
1478	int i;
1479	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1480	ISP_IOXPUT_16(isp, src->at_reserved, &dst->at_reserved);
1481	ISP_IOXPUT_16(isp, src->at_handle, &dst->at_handle);
1482	if (ISP_IS_SBUS(isp)) {
1483		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_iid);
1484		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_lun);
1485		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_tgt);
1486		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_cdblen);
1487		ISP_IOXPUT_8(isp, src->at_status, &dst->at_scsi_status);
1488		ISP_IOXPUT_8(isp, src->at_scsi_status, &dst->at_status);
1489		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_type);
1490		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_val);
1491	} else {
1492		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
1493		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
1494		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_cdblen);
1495		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_tgt);
1496		ISP_IOXPUT_8(isp, src->at_status, &dst->at_status);
1497		ISP_IOXPUT_8(isp, src->at_scsi_status,
1498		    &dst->at_scsi_status);
1499		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_val);
1500		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_type);
1501	}
1502	ISP_IOXPUT_32(isp, src->at_flags, &dst->at_flags);
1503	for (i = 0; i < ATIO_CDBLEN; i++) {
1504		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1505	}
1506	for (i = 0; i < QLTM_SENSELEN; i++) {
1507		ISP_IOXPUT_8(isp, src->at_sense[i], &dst->at_sense[i]);
1508	}
1509}
1510
1511void
1512isp_get_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
1513{
1514	int i;
1515	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1516	ISP_IOXGET_16(isp, &src->at_reserved, dst->at_reserved);
1517	ISP_IOXGET_16(isp, &src->at_handle, dst->at_handle);
1518	if (ISP_IS_SBUS(isp)) {
1519		ISP_IOXGET_8(isp, &src->at_lun, dst->at_iid);
1520		ISP_IOXGET_8(isp, &src->at_iid, dst->at_lun);
1521		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_tgt);
1522		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_cdblen);
1523		ISP_IOXGET_8(isp, &src->at_status, dst->at_scsi_status);
1524		ISP_IOXGET_8(isp, &src->at_scsi_status, dst->at_status);
1525		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_type);
1526		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_val);
1527	} else {
1528		ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
1529		ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
1530		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_cdblen);
1531		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_tgt);
1532		ISP_IOXGET_8(isp, &src->at_status, dst->at_status);
1533		ISP_IOXGET_8(isp, &src->at_scsi_status,
1534		    dst->at_scsi_status);
1535		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_val);
1536		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_type);
1537	}
1538	ISP_IOXGET_32(isp, &src->at_flags, dst->at_flags);
1539	for (i = 0; i < ATIO_CDBLEN; i++) {
1540		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1541	}
1542	for (i = 0; i < QLTM_SENSELEN; i++) {
1543		ISP_IOXGET_8(isp, &src->at_sense[i], dst->at_sense[i]);
1544	}
1545}
1546
1547void
1548isp_put_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
1549{
1550	int i;
1551	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1552	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
1553	ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
1554	ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
1555	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
1556	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
1557	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
1558	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
1559	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
1560	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
1561	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
1562	for (i = 0; i < ATIO2_CDBLEN; i++) {
1563		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1564	}
1565	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
1566	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
1567	for (i = 0; i < 4; i++) {
1568		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
1569	}
1570	for (i = 0; i < 6; i++) {
1571		ISP_IOXPUT_16(isp, src->at_reserved2[i],
1572		    &dst->at_reserved2[i]);
1573	}
1574	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
1575}
1576
1577void
1578isp_put_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
1579{
1580	int i;
1581	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1582	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
1583	ISP_IOXPUT_16(isp, src->at_iid, &dst->at_iid);
1584	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
1585	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
1586	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
1587	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
1588	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
1589	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
1590	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
1591	for (i = 0; i < ATIO2_CDBLEN; i++) {
1592		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1593	}
1594	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
1595	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
1596	for (i = 0; i < 4; i++) {
1597		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
1598	}
1599	for (i = 0; i < 6; i++) {
1600		ISP_IOXPUT_16(isp, src->at_reserved2[i],
1601		    &dst->at_reserved2[i]);
1602	}
1603	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
1604}
1605
1606void
1607isp_get_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
1608{
1609	int i;
1610	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1611	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
1612	ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
1613	ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
1614	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
1615	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
1616	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
1617	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
1618	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
1619	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
1620	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
1621	for (i = 0; i < ATIO2_CDBLEN; i++) {
1622		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1623	}
1624	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
1625	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
1626	for (i = 0; i < 4; i++) {
1627		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
1628	}
1629	for (i = 0; i < 6; i++) {
1630		ISP_IOXGET_16(isp, &src->at_reserved2[i],
1631		    dst->at_reserved2[i]);
1632	}
1633	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
1634}
1635
1636void
1637isp_get_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
1638{
1639	int i;
1640	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1641	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
1642	ISP_IOXGET_16(isp, &src->at_iid, dst->at_iid);
1643	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
1644	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
1645	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
1646	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
1647	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
1648	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
1649	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
1650	for (i = 0; i < ATIO2_CDBLEN; i++) {
1651		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1652	}
1653	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
1654	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
1655	for (i = 0; i < 4; i++) {
1656		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
1657	}
1658	for (i = 0; i < 6; i++) {
1659		ISP_IOXGET_16(isp, &src->at_reserved2[i],
1660		    dst->at_reserved2[i]);
1661	}
1662	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
1663}
1664
1665void
1666isp_get_atio7(ispsoftc_t *isp, at7_entry_t *src, at7_entry_t *dst)
1667{
1668	ISP_IOXGET_8(isp, &src->at_type, dst->at_type);
1669	ISP_IOXGET_8(isp, &src->at_count, dst->at_count);
1670	ISP_IOXGET_16(isp, &src->at_ta_len, dst->at_ta_len);
1671	ISP_IOXGET_32(isp, &src->at_rxid, dst->at_rxid);
1672	isp_get_fc_hdr(isp, &src->at_hdr, &dst->at_hdr);
1673	isp_get_fcp_cmnd_iu(isp, &src->at_cmnd, &dst->at_cmnd);
1674}
1675
1676void
1677isp_put_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
1678{
1679	int i;
1680	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1681	ISP_IOXPUT_16(isp, src->ct_syshandle, &dst->ct_syshandle);
1682	ISP_IOXPUT_16(isp, src->ct_fwhandle, &dst->ct_fwhandle);
1683	if (ISP_IS_SBUS(isp)) {
1684		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_lun);
1685		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_iid);
1686		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_reserved2);
1687		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_tgt);
1688		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_scsi_status);
1689		ISP_IOXPUT_8(isp, src->ct_scsi_status, &dst->ct_status);
1690		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_val);
1691		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_type);
1692	} else {
1693		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
1694		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
1695		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_tgt);
1696		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_reserved2);
1697		ISP_IOXPUT_8(isp, src->ct_scsi_status,
1698		    &dst->ct_scsi_status);
1699		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_status);
1700		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_type);
1701		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_val);
1702	}
1703	ISP_IOXPUT_32(isp, src->ct_flags, &dst->ct_flags);
1704	ISP_IOXPUT_32(isp, src->ct_xfrlen, &dst->ct_xfrlen);
1705	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1706	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1707	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1708	for (i = 0; i < ISP_RQDSEG; i++) {
1709		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_base,
1710		    &dst->ct_dataseg[i].ds_base);
1711		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_count,
1712		    &dst->ct_dataseg[i].ds_count);
1713	}
1714}
1715
1716void
1717isp_get_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
1718{
1719	int i;
1720	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
1721	ISP_IOXGET_16(isp, &src->ct_syshandle, dst->ct_syshandle);
1722	ISP_IOXGET_16(isp, &src->ct_fwhandle, dst->ct_fwhandle);
1723	if (ISP_IS_SBUS(isp)) {
1724		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_iid);
1725		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_lun);
1726		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_tgt);
1727		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_reserved2);
1728		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_scsi_status);
1729		ISP_IOXGET_8(isp, &src->ct_scsi_status, dst->ct_status);
1730		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_type);
1731		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_val);
1732	} else {
1733		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
1734		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
1735		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_reserved2);
1736		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_tgt);
1737		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_status);
1738		ISP_IOXGET_8(isp, &src->ct_scsi_status,
1739		    dst->ct_scsi_status);
1740		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_val);
1741		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_type);
1742	}
1743	ISP_IOXGET_32(isp, &src->ct_flags, dst->ct_flags);
1744	ISP_IOXGET_32(isp, &src->ct_xfrlen, dst->ct_xfrlen);
1745	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
1746	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
1747	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
1748	for (i = 0; i < ISP_RQDSEG; i++) {
1749		ISP_IOXGET_32(isp,
1750		    &src->ct_dataseg[i].ds_base,
1751		    dst->ct_dataseg[i].ds_base);
1752		ISP_IOXGET_32(isp,
1753		    &src->ct_dataseg[i].ds_count,
1754		    dst->ct_dataseg[i].ds_count);
1755	}
1756}
1757
1758void
1759isp_put_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
1760{
1761	int i;
1762	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1763	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1764	ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
1765	ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
1766	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
1767	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
1768	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1769	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1770	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1771	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
1772	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1773		ISP_IOXPUT_32(isp, src->rsp.m0._reserved,
1774		    &dst->rsp.m0._reserved);
1775		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2,
1776		    &dst->rsp.m0._reserved2);
1777		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status,
1778		    &dst->rsp.m0.ct_scsi_status);
1779		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
1780		    &dst->rsp.m0.ct_xfrlen);
1781		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1782			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1783				ISP_IOXPUT_32(isp,
1784				    src->rsp.m0.u.ct_dataseg[i].ds_base,
1785				    &dst->rsp.m0.u.ct_dataseg[i].ds_base);
1786				ISP_IOXPUT_32(isp,
1787				    src->rsp.m0.u.ct_dataseg[i].ds_count,
1788				    &dst->rsp.m0.u.ct_dataseg[i].ds_count);
1789			}
1790		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1791			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1792				ISP_IOXPUT_32(isp,
1793				    src->rsp.m0.u.ct_dataseg64[i].ds_base,
1794				    &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
1795				ISP_IOXPUT_32(isp,
1796				    src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
1797				    &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
1798				ISP_IOXPUT_32(isp,
1799				    src->rsp.m0.u.ct_dataseg64[i].ds_count,
1800				    &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
1801			}
1802		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1803			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type,
1804			    &dst->rsp.m0.u.ct_dslist.ds_type);
1805			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment,
1806			    &dst->rsp.m0.u.ct_dslist.ds_segment);
1807			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base,
1808			    &dst->rsp.m0.u.ct_dslist.ds_base);
1809		}
1810	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1811		ISP_IOXPUT_16(isp, src->rsp.m1._reserved,
1812		    &dst->rsp.m1._reserved);
1813		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2,
1814		    &dst->rsp.m1._reserved2);
1815		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen,
1816		    &dst->rsp.m1.ct_senselen);
1817		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status,
1818		    &dst->rsp.m1.ct_scsi_status);
1819		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
1820		    &dst->rsp.m1.ct_resplen);
1821		for (i = 0; i < MAXRESPLEN; i++) {
1822			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
1823			    &dst->rsp.m1.ct_resp[i]);
1824		}
1825	} else {
1826		ISP_IOXPUT_32(isp, src->rsp.m2._reserved,
1827		    &dst->rsp.m2._reserved);
1828		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2,
1829		    &dst->rsp.m2._reserved2);
1830		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3,
1831		    &dst->rsp.m2._reserved3);
1832		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
1833		    &dst->rsp.m2.ct_datalen);
1834		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1835		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1836		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1837		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1838	}
1839}
1840
1841void
1842isp_put_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
1843{
1844	int i;
1845	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1846	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1847	ISP_IOXPUT_16(isp, src->ct_iid, &dst->ct_iid);
1848	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
1849	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
1850	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1851	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1852	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1853	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
1854	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1855		ISP_IOXPUT_32(isp, src->rsp.m0._reserved,
1856		    &dst->rsp.m0._reserved);
1857		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2,
1858		    &dst->rsp.m0._reserved2);
1859		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status,
1860		    &dst->rsp.m0.ct_scsi_status);
1861		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
1862		    &dst->rsp.m0.ct_xfrlen);
1863		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1864			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1865				ISP_IOXPUT_32(isp,
1866				    src->rsp.m0.u.ct_dataseg[i].ds_base,
1867				    &dst->rsp.m0.u.ct_dataseg[i].ds_base);
1868				ISP_IOXPUT_32(isp,
1869				    src->rsp.m0.u.ct_dataseg[i].ds_count,
1870				    &dst->rsp.m0.u.ct_dataseg[i].ds_count);
1871			}
1872		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1873			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1874				ISP_IOXPUT_32(isp,
1875				    src->rsp.m0.u.ct_dataseg64[i].ds_base,
1876				    &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
1877				ISP_IOXPUT_32(isp,
1878				    src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
1879				    &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
1880				ISP_IOXPUT_32(isp,
1881				    src->rsp.m0.u.ct_dataseg64[i].ds_count,
1882				    &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
1883			}
1884		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1885			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type,
1886			    &dst->rsp.m0.u.ct_dslist.ds_type);
1887			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment,
1888			    &dst->rsp.m0.u.ct_dslist.ds_segment);
1889			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base,
1890			    &dst->rsp.m0.u.ct_dslist.ds_base);
1891		}
1892	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1893		ISP_IOXPUT_16(isp, src->rsp.m1._reserved,
1894		    &dst->rsp.m1._reserved);
1895		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2,
1896		    &dst->rsp.m1._reserved2);
1897		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen,
1898		    &dst->rsp.m1.ct_senselen);
1899		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status,
1900		    &dst->rsp.m1.ct_scsi_status);
1901		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
1902		    &dst->rsp.m1.ct_resplen);
1903		for (i = 0; i < MAXRESPLEN; i++) {
1904			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
1905			    &dst->rsp.m1.ct_resp[i]);
1906		}
1907	} else {
1908		ISP_IOXPUT_32(isp, src->rsp.m2._reserved,
1909		    &dst->rsp.m2._reserved);
1910		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2,
1911		    &dst->rsp.m2._reserved2);
1912		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3,
1913		    &dst->rsp.m2._reserved3);
1914		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
1915		    &dst->rsp.m2.ct_datalen);
1916		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1917		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1918		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1919		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1920	}
1921}
1922
1923void
1924isp_put_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
1925{
1926	int i;
1927
1928	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1929	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1930	ISP_IOXPUT_16(isp, src->ct_nphdl, &dst->ct_nphdl);
1931	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1932	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1933	ISP_IOXPUT_8(isp, src->ct_vpindex, &dst->ct_vpindex);
1934	ISP_IOXPUT_8(isp, src->ct_xflags, &dst->ct_xflags);
1935	ISP_IOXPUT_16(isp, src->ct_iid_lo, &dst->ct_iid_lo);
1936	ISP_IOXPUT_8(isp, src->ct_iid_hi, &dst->ct_iid_hi);
1937	ISP_IOXPUT_8(isp, src->ct_reserved, &dst->ct_reserved);
1938	ISP_IOXPUT_32(isp, src->ct_rxid, &dst->ct_rxid);
1939	ISP_IOXPUT_16(isp, src->ct_senselen, &dst->ct_senselen);
1940	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
1941	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1942	ISP_IOXPUT_16(isp, src->ct_oxid, &dst->ct_oxid);
1943	ISP_IOXPUT_16(isp, src->ct_scsi_status, &dst->ct_scsi_status);
1944	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
1945		ISP_IOXPUT_32(isp, src->rsp.m0.reloff, &dst->rsp.m0.reloff);
1946		ISP_IOXPUT_32(isp, src->rsp.m0.reserved0,
1947		    &dst->rsp.m0.reserved0);
1948		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
1949		    &dst->rsp.m0.ct_xfrlen);
1950		ISP_IOXPUT_32(isp, src->rsp.m0.reserved1,
1951		    &dst->rsp.m0.reserved1);
1952		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_base,
1953		    &dst->rsp.m0.ds.ds_base);
1954		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_basehi,
1955		    &dst->rsp.m0.ds.ds_basehi);
1956		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_count,
1957		    &dst->rsp.m0.ds.ds_count);
1958	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
1959		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
1960		    &dst->rsp.m1.ct_resplen);
1961		ISP_IOXPUT_16(isp, src->rsp.m1.reserved, &dst->rsp.m1.reserved);
1962		for (i = 0; i < MAXRESPLEN_24XX; i++) {
1963			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
1964			    &dst->rsp.m1.ct_resp[i]);
1965		}
1966	} else {
1967		ISP_IOXPUT_32(isp, src->rsp.m2.reserved0,
1968		    &dst->rsp.m2.reserved0);
1969		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
1970		    &dst->rsp.m2.ct_datalen);
1971		ISP_IOXPUT_32(isp, src->rsp.m2.reserved1,
1972		    &dst->rsp.m2.reserved1);
1973		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1974		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1975		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi,
1976		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
1977		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1978		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1979	}
1980}
1981
1982
1983void
1984isp_get_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
1985{
1986	int i;
1987
1988	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
1989	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
1990	ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
1991	ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
1992	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
1993	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
1994	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
1995	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
1996	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
1997	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
1998	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
1999	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
2000		ISP_IOXGET_32(isp, &src->rsp.m0._reserved,
2001		    dst->rsp.m0._reserved);
2002		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2,
2003		    dst->rsp.m0._reserved2);
2004		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status,
2005		    dst->rsp.m0.ct_scsi_status);
2006		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2007		    dst->rsp.m0.ct_xfrlen);
2008		if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
2009			for (i = 0; i < ISP_RQDSEG_T2; i++) {
2010				ISP_IOXGET_32(isp,
2011				    &src->rsp.m0.u.ct_dataseg[i].ds_base,
2012				    dst->rsp.m0.u.ct_dataseg[i].ds_base);
2013				ISP_IOXGET_32(isp,
2014				    &src->rsp.m0.u.ct_dataseg[i].ds_count,
2015				    dst->rsp.m0.u.ct_dataseg[i].ds_count);
2016			}
2017		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
2018			for (i = 0; i < ISP_RQDSEG_T3; i++) {
2019				ISP_IOXGET_32(isp,
2020				    &src->rsp.m0.u.ct_dataseg64[i].ds_base,
2021				    dst->rsp.m0.u.ct_dataseg64[i].ds_base);
2022				ISP_IOXGET_32(isp,
2023				    &src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
2024				    dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
2025				ISP_IOXGET_32(isp,
2026				    &src->rsp.m0.u.ct_dataseg64[i].ds_count,
2027				    dst->rsp.m0.u.ct_dataseg64[i].ds_count);
2028			}
2029		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
2030			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type,
2031			    dst->rsp.m0.u.ct_dslist.ds_type);
2032			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment,
2033			    dst->rsp.m0.u.ct_dslist.ds_segment);
2034			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base,
2035			    dst->rsp.m0.u.ct_dslist.ds_base);
2036		}
2037	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
2038		ISP_IOXGET_16(isp, &src->rsp.m1._reserved,
2039		    dst->rsp.m1._reserved);
2040		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2,
2041		    dst->rsp.m1._reserved2);
2042		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen,
2043		    dst->rsp.m1.ct_senselen);
2044		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status,
2045		    dst->rsp.m1.ct_scsi_status);
2046		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2047		    dst->rsp.m1.ct_resplen);
2048		for (i = 0; i < MAXRESPLEN; i++) {
2049			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2050			    dst->rsp.m1.ct_resp[i]);
2051		}
2052	} else {
2053		ISP_IOXGET_32(isp, &src->rsp.m2._reserved,
2054		    dst->rsp.m2._reserved);
2055		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2,
2056		    dst->rsp.m2._reserved2);
2057		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3,
2058		    dst->rsp.m2._reserved3);
2059		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2060		    dst->rsp.m2.ct_datalen);
2061		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2062		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2063		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2064		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2065	}
2066}
2067
2068void
2069isp_get_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
2070{
2071	int i;
2072
2073	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2074	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2075	ISP_IOXGET_16(isp, &src->ct_iid, dst->ct_iid);
2076	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
2077	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2078	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
2079	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2080	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2081	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
2082	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2083	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
2084		ISP_IOXGET_32(isp, &src->rsp.m0._reserved,
2085		    dst->rsp.m0._reserved);
2086		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2,
2087		    dst->rsp.m0._reserved2);
2088		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status,
2089		    dst->rsp.m0.ct_scsi_status);
2090		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2091		    dst->rsp.m0.ct_xfrlen);
2092		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
2093			for (i = 0; i < ISP_RQDSEG_T2; i++) {
2094				ISP_IOXGET_32(isp,
2095				    &src->rsp.m0.u.ct_dataseg[i].ds_base,
2096				    dst->rsp.m0.u.ct_dataseg[i].ds_base);
2097				ISP_IOXGET_32(isp,
2098				    &src->rsp.m0.u.ct_dataseg[i].ds_count,
2099				    dst->rsp.m0.u.ct_dataseg[i].ds_count);
2100			}
2101		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
2102			for (i = 0; i < ISP_RQDSEG_T3; i++) {
2103				ISP_IOXGET_32(isp,
2104				    &src->rsp.m0.u.ct_dataseg64[i].ds_base,
2105				    dst->rsp.m0.u.ct_dataseg64[i].ds_base);
2106				ISP_IOXGET_32(isp,
2107				    &src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
2108				    dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
2109				ISP_IOXGET_32(isp,
2110				    &src->rsp.m0.u.ct_dataseg64[i].ds_count,
2111				    dst->rsp.m0.u.ct_dataseg64[i].ds_count);
2112			}
2113		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
2114			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type,
2115			    dst->rsp.m0.u.ct_dslist.ds_type);
2116			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment,
2117			    dst->rsp.m0.u.ct_dslist.ds_segment);
2118			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base,
2119			    dst->rsp.m0.u.ct_dslist.ds_base);
2120		}
2121	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
2122		ISP_IOXGET_16(isp, &src->rsp.m1._reserved,
2123		    dst->rsp.m1._reserved);
2124		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2,
2125		    dst->rsp.m1._reserved2);
2126		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen,
2127		    dst->rsp.m1.ct_senselen);
2128		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status,
2129		    dst->rsp.m1.ct_scsi_status);
2130		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2131		    dst->rsp.m1.ct_resplen);
2132		for (i = 0; i < MAXRESPLEN; i++) {
2133			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2134			    dst->rsp.m1.ct_resp[i]);
2135		}
2136	} else {
2137		ISP_IOXGET_32(isp, &src->rsp.m2._reserved,
2138		    dst->rsp.m2._reserved);
2139		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2,
2140		    dst->rsp.m2._reserved2);
2141		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3,
2142		    dst->rsp.m2._reserved3);
2143		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2144		    dst->rsp.m2.ct_datalen);
2145		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2146		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2147		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2148		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2149	}
2150}
2151
2152void
2153isp_get_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
2154{
2155	int i;
2156
2157	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2158	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2159	ISP_IOXGET_16(isp, &src->ct_nphdl, dst->ct_nphdl);
2160	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2161	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2162	ISP_IOXGET_8(isp, &src->ct_vpindex, dst->ct_vpindex);
2163	ISP_IOXGET_8(isp, &src->ct_xflags, dst->ct_xflags);
2164	ISP_IOXGET_16(isp, &src->ct_iid_lo, dst->ct_iid_lo);
2165	ISP_IOXGET_8(isp, &src->ct_iid_hi, dst->ct_iid_hi);
2166	ISP_IOXGET_8(isp, &src->ct_reserved, dst->ct_reserved);
2167	ISP_IOXGET_32(isp, &src->ct_rxid, dst->ct_rxid);
2168	ISP_IOXGET_16(isp, &src->ct_senselen, dst->ct_senselen);
2169	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2170	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2171	ISP_IOXGET_16(isp, &src->ct_oxid, dst->ct_oxid);
2172	ISP_IOXGET_16(isp, &src->ct_scsi_status, dst->ct_scsi_status);
2173	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
2174		ISP_IOXGET_32(isp, &src->rsp.m0.reloff, dst->rsp.m0.reloff);
2175		ISP_IOXGET_32(isp, &src->rsp.m0.reserved0,
2176		    dst->rsp.m0.reserved0);
2177		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2178		    dst->rsp.m0.ct_xfrlen);
2179		ISP_IOXGET_32(isp, &src->rsp.m0.reserved1,
2180		    dst->rsp.m0.reserved1);
2181		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_base,
2182		    dst->rsp.m0.ds.ds_base);
2183		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_basehi,
2184		    dst->rsp.m0.ds.ds_basehi);
2185		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_count,
2186		    dst->rsp.m0.ds.ds_count);
2187	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
2188		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2189		    dst->rsp.m1.ct_resplen);
2190		ISP_IOXGET_16(isp, &src->rsp.m1.reserved, dst->rsp.m1.reserved);
2191		for (i = 0; i < MAXRESPLEN_24XX; i++) {
2192			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2193			    dst->rsp.m1.ct_resp[i]);
2194		}
2195	} else {
2196		ISP_IOXGET_32(isp, &src->rsp.m2.reserved0,
2197		    dst->rsp.m2.reserved0);
2198		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2199		    dst->rsp.m2.ct_datalen);
2200		ISP_IOXGET_32(isp, &src->rsp.m2.reserved1,
2201		    dst->rsp.m2.reserved1);
2202		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2203		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2204		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi,
2205		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
2206		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2207		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2208	}
2209}
2210
2211void
2212isp_put_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
2213{
2214	int i;
2215	isp_put_hdr(isp, &lesrc->le_header, &ledst->le_header);
2216	ISP_IOXPUT_32(isp, lesrc->le_reserved, &ledst->le_reserved);
2217	if (ISP_IS_SBUS(isp)) {
2218		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_rsvd);
2219		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_lun);
2220		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_tgt);
2221		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_ops);
2222		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_reserved2);
2223		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_status);
2224		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_in_count);
2225		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_cmd_count);
2226		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb7len);
2227		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb6len);
2228	} else {
2229		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_lun);
2230		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_rsvd);
2231		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_ops);
2232		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_tgt);
2233		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_status);
2234		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_reserved2);
2235		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_cmd_count);
2236		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_in_count);
2237		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb6len);
2238		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb7len);
2239	}
2240	ISP_IOXPUT_32(isp, lesrc->le_flags, &ledst->le_flags);
2241	ISP_IOXPUT_16(isp, lesrc->le_timeout, &ledst->le_timeout);
2242	for (i = 0; i < 20; i++) {
2243		ISP_IOXPUT_8(isp, lesrc->le_reserved3[i],
2244		    &ledst->le_reserved3[i]);
2245	}
2246}
2247
2248void
2249isp_get_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
2250{
2251	int i;
2252	isp_get_hdr(isp, &lesrc->le_header, &ledst->le_header);
2253	ISP_IOXGET_32(isp, &lesrc->le_reserved, ledst->le_reserved);
2254	if (ISP_IS_SBUS(isp)) {
2255		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_rsvd);
2256		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_lun);
2257		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_tgt);
2258		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_ops);
2259		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_reserved2);
2260		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_status);
2261		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_in_count);
2262		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_cmd_count);
2263		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb7len);
2264		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb6len);
2265	} else {
2266		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_lun);
2267		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_rsvd);
2268		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_ops);
2269		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_tgt);
2270		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_status);
2271		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_reserved2);
2272		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_cmd_count);
2273		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_in_count);
2274		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb6len);
2275		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb7len);
2276	}
2277	ISP_IOXGET_32(isp, &lesrc->le_flags, ledst->le_flags);
2278	ISP_IOXGET_16(isp, &lesrc->le_timeout, ledst->le_timeout);
2279	for (i = 0; i < 20; i++) {
2280		ISP_IOXGET_8(isp, &lesrc->le_reserved3[i],
2281		    ledst->le_reserved3[i]);
2282	}
2283}
2284
2285void
2286isp_put_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
2287{
2288	int i;
2289	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2290	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2291	if (ISP_IS_SBUS(isp)) {
2292		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_iid);
2293		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_lun);
2294		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_tgt);
2295		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_reserved2);
2296		ISP_IOXPUT_8(isp, src->in_status, &dst->in_rsvd2);
2297		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_status);
2298		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_type);
2299		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_val);
2300	} else {
2301		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
2302		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
2303		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_reserved2);
2304		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_tgt);
2305		ISP_IOXPUT_8(isp, src->in_status, &dst->in_status);
2306		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_rsvd2);
2307		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_val);
2308		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_type);
2309	}
2310	ISP_IOXPUT_32(isp, src->in_flags, &dst->in_flags);
2311	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2312	for (i = 0; i < IN_MSGLEN; i++) {
2313		ISP_IOXPUT_8(isp, src->in_msg[i], &dst->in_msg[i]);
2314	}
2315	for (i = 0; i < IN_RSVDLEN; i++) {
2316		ISP_IOXPUT_8(isp, src->in_reserved3[i],
2317		    &dst->in_reserved3[i]);
2318	}
2319	for (i = 0; i < QLTM_SENSELEN; i++) {
2320		ISP_IOXPUT_8(isp, src->in_sense[i],
2321		    &dst->in_sense[i]);
2322	}
2323}
2324
2325void
2326isp_get_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
2327{
2328	int i;
2329	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2330	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2331	if (ISP_IS_SBUS(isp)) {
2332		ISP_IOXGET_8(isp, &src->in_lun, dst->in_iid);
2333		ISP_IOXGET_8(isp, &src->in_iid, dst->in_lun);
2334		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_tgt);
2335		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_reserved2);
2336		ISP_IOXGET_8(isp, &src->in_status, dst->in_rsvd2);
2337		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_status);
2338		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_type);
2339		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_val);
2340	} else {
2341		ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
2342		ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
2343		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_reserved2);
2344		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_tgt);
2345		ISP_IOXGET_8(isp, &src->in_status, dst->in_status);
2346		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_rsvd2);
2347		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_val);
2348		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_type);
2349	}
2350	ISP_IOXGET_32(isp, &src->in_flags, dst->in_flags);
2351	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2352	for (i = 0; i < IN_MSGLEN; i++) {
2353		ISP_IOXGET_8(isp, &src->in_msg[i], dst->in_msg[i]);
2354	}
2355	for (i = 0; i < IN_RSVDLEN; i++) {
2356		ISP_IOXGET_8(isp, &src->in_reserved3[i],
2357		    dst->in_reserved3[i]);
2358	}
2359	for (i = 0; i < QLTM_SENSELEN; i++) {
2360		ISP_IOXGET_8(isp, &src->in_sense[i],
2361		    dst->in_sense[i]);
2362	}
2363}
2364
2365void
2366isp_put_notify_fc(ispsoftc_t *isp, in_fcentry_t *src,
2367    in_fcentry_t *dst)
2368{
2369	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2370	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2371	ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
2372	ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
2373	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
2374	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
2375	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2376	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
2377	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2378}
2379
2380void
2381isp_put_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src,
2382    in_fcentry_e_t *dst)
2383{
2384	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2385	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2386	ISP_IOXPUT_16(isp, src->in_iid, &dst->in_iid);
2387	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
2388	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
2389	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2390	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
2391	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2392}
2393
2394void
2395isp_put_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src,
2396    in_fcentry_24xx_t *dst)
2397{
2398	int i;
2399
2400	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2401	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2402	ISP_IOXPUT_16(isp, src->in_nphdl, &dst->in_nphdl);
2403	ISP_IOXPUT_16(isp, src->in_reserved1, &dst->in_reserved1);
2404	ISP_IOXPUT_16(isp, src->in_flags, &dst->in_flags);
2405	ISP_IOXPUT_16(isp, src->in_srr_rxid, &dst->in_srr_rxid);
2406	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2407	ISP_IOXPUT_8(isp, src->in_status_subcode, &dst->in_status_subcode);
2408	ISP_IOXPUT_16(isp, src->in_reserved2, &dst->in_reserved2);
2409	ISP_IOXPUT_32(isp, src->in_rxid, &dst->in_rxid);
2410	ISP_IOXPUT_16(isp, src->in_srr_reloff_hi, &dst->in_srr_reloff_hi);
2411	ISP_IOXPUT_16(isp, src->in_srr_reloff_lo, &dst->in_srr_reloff_lo);
2412	ISP_IOXPUT_16(isp, src->in_srr_iu, &dst->in_srr_iu);
2413	ISP_IOXPUT_16(isp, src->in_srr_oxid, &dst->in_srr_oxid);
2414	for (i = 0; i < 18; i++) {
2415		ISP_IOXPUT_8(isp, src->in_reserved3[i], &dst->in_reserved3[i]);
2416	}
2417	ISP_IOXPUT_8(isp, src->in_reserved4, &dst->in_reserved4);
2418	ISP_IOXPUT_8(isp, src->in_vpindex, &dst->in_vpindex);
2419	ISP_IOXPUT_32(isp, src->in_reserved5, &dst->in_reserved5);
2420	ISP_IOXPUT_16(isp, src->in_portid_lo, &dst->in_portid_lo);
2421	ISP_IOXPUT_8(isp, src->in_portid_hi, &dst->in_portid_hi);
2422	ISP_IOXPUT_8(isp, src->in_reserved6, &dst->in_reserved6);
2423	ISP_IOXPUT_16(isp, src->in_reserved7, &dst->in_reserved7);
2424	ISP_IOXPUT_16(isp, src->in_oxid, &dst->in_oxid);
2425}
2426
2427void
2428isp_get_notify_fc(ispsoftc_t *isp, in_fcentry_t *src,
2429    in_fcentry_t *dst)
2430{
2431	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2432	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2433	ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
2434	ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
2435	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
2436	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
2437	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2438	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
2439	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2440}
2441
2442void
2443isp_get_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src,
2444    in_fcentry_e_t *dst)
2445{
2446	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2447	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2448	ISP_IOXGET_16(isp, &src->in_iid, dst->in_iid);
2449	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
2450	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
2451	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2452	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
2453	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2454}
2455
2456void
2457isp_get_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src,
2458    in_fcentry_24xx_t *dst)
2459{
2460	int i;
2461
2462	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2463	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2464	ISP_IOXGET_16(isp, &src->in_nphdl, dst->in_nphdl);
2465	ISP_IOXGET_16(isp, &src->in_reserved1, dst->in_reserved1);
2466	ISP_IOXGET_16(isp, &src->in_flags, dst->in_flags);
2467	ISP_IOXGET_16(isp, &src->in_srr_rxid, dst->in_srr_rxid);
2468	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2469	ISP_IOXGET_8(isp, &src->in_status_subcode, dst->in_status_subcode);
2470	ISP_IOXGET_16(isp, &src->in_reserved2, dst->in_reserved2);
2471	ISP_IOXGET_32(isp, &src->in_rxid, dst->in_rxid);
2472	ISP_IOXGET_16(isp, &src->in_srr_reloff_hi, dst->in_srr_reloff_hi);
2473	ISP_IOXGET_16(isp, &src->in_srr_reloff_lo, dst->in_srr_reloff_lo);
2474	ISP_IOXGET_16(isp, &src->in_srr_iu, dst->in_srr_iu);
2475	ISP_IOXGET_16(isp, &src->in_srr_oxid, dst->in_srr_oxid);
2476	for (i = 0; i < 18; i++) {
2477		ISP_IOXGET_8(isp, &src->in_reserved3[i], dst->in_reserved3[i]);
2478	}
2479	ISP_IOXGET_8(isp, &src->in_reserved4, dst->in_reserved4);
2480	ISP_IOXGET_8(isp, &src->in_vpindex, dst->in_vpindex);
2481	ISP_IOXGET_32(isp, &src->in_reserved5, dst->in_reserved5);
2482	ISP_IOXGET_16(isp, &src->in_portid_lo, dst->in_portid_lo);
2483	ISP_IOXGET_8(isp, &src->in_portid_hi, dst->in_portid_hi);
2484	ISP_IOXGET_8(isp, &src->in_reserved6, dst->in_reserved6);
2485	ISP_IOXGET_16(isp, &src->in_reserved7, dst->in_reserved7);
2486	ISP_IOXGET_16(isp, &src->in_oxid, dst->in_oxid);
2487}
2488
2489void
2490isp_put_notify_ack(ispsoftc_t *isp, na_entry_t *src,  na_entry_t *dst)
2491{
2492	int i;
2493	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2494	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2495	if (ISP_IS_SBUS(isp)) {
2496		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_iid);
2497		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_lun);
2498		ISP_IOXPUT_8(isp, src->na_status, &dst->na_event);
2499		ISP_IOXPUT_8(isp, src->na_event, &dst->na_status);
2500	} else {
2501		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_lun);
2502		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
2503		ISP_IOXPUT_8(isp, src->na_status, &dst->na_status);
2504		ISP_IOXPUT_8(isp, src->na_event, &dst->na_event);
2505	}
2506	ISP_IOXPUT_32(isp, src->na_flags, &dst->na_flags);
2507	for (i = 0; i < NA_RSVDLEN; i++) {
2508		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2509		    &dst->na_reserved3[i]);
2510	}
2511}
2512
2513void
2514isp_get_notify_ack(ispsoftc_t *isp, na_entry_t *src, na_entry_t *dst)
2515{
2516	int i;
2517	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2518	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2519	if (ISP_IS_SBUS(isp)) {
2520		ISP_IOXGET_8(isp, &src->na_lun, dst->na_iid);
2521		ISP_IOXGET_8(isp, &src->na_iid, dst->na_lun);
2522		ISP_IOXGET_8(isp, &src->na_status, dst->na_event);
2523		ISP_IOXGET_8(isp, &src->na_event, dst->na_status);
2524	} else {
2525		ISP_IOXGET_8(isp, &src->na_lun, dst->na_lun);
2526		ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
2527		ISP_IOXGET_8(isp, &src->na_status, dst->na_status);
2528		ISP_IOXGET_8(isp, &src->na_event, dst->na_event);
2529	}
2530	ISP_IOXGET_32(isp, &src->na_flags, dst->na_flags);
2531	for (i = 0; i < NA_RSVDLEN; i++) {
2532		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2533		    dst->na_reserved3[i]);
2534	}
2535}
2536
2537void
2538isp_put_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src,
2539    na_fcentry_t *dst)
2540{
2541	int i;
2542	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2543	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2544	ISP_IOXPUT_8(isp, src->na_reserved1, &dst->na_reserved1);
2545	ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
2546	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
2547	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2548	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2549	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2550	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
2551	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
2552	for (i = 0; i < NA2_RSVDLEN; i++) {
2553		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2554		    &dst->na_reserved3[i]);
2555	}
2556}
2557
2558void
2559isp_put_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src,
2560    na_fcentry_e_t *dst)
2561{
2562	int i;
2563	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2564	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2565	ISP_IOXPUT_16(isp, src->na_iid, &dst->na_iid);
2566	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
2567	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2568	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2569	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2570	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
2571	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
2572	for (i = 0; i < NA2_RSVDLEN; i++) {
2573		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2574		    &dst->na_reserved3[i]);
2575	}
2576}
2577
2578void
2579isp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src,
2580    na_fcentry_24xx_t *dst)
2581{
2582	int i;
2583
2584	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2585	ISP_IOXPUT_32(isp, src->na_handle, &dst->na_handle);
2586	ISP_IOXPUT_16(isp, src->na_nphdl, &dst->na_nphdl);
2587	ISP_IOXPUT_16(isp, src->na_reserved1, &dst->na_reserved1);
2588	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2589	ISP_IOXPUT_16(isp, src->na_srr_rxid, &dst->na_srr_rxid);
2590	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2591	ISP_IOXPUT_8(isp, src->na_status_subcode, &dst->na_status_subcode);
2592	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2593	ISP_IOXPUT_32(isp, src->na_rxid, &dst->na_rxid);
2594	ISP_IOXPUT_16(isp, src->na_srr_reloff_hi, &dst->na_srr_reloff_hi);
2595	ISP_IOXPUT_16(isp, src->na_srr_reloff_lo, &dst->na_srr_reloff_lo);
2596	ISP_IOXPUT_16(isp, src->na_srr_iu, &dst->na_srr_iu);
2597	ISP_IOXPUT_16(isp, src->na_srr_flags, &dst->na_srr_flags);
2598	for (i = 0; i < 18; i++) {
2599		ISP_IOXPUT_8(isp, src->na_reserved3[i], &dst->na_reserved3[i]);
2600	}
2601	ISP_IOXPUT_8(isp, src->na_reserved4, &dst->na_reserved4);
2602	ISP_IOXPUT_8(isp, src->na_vpindex, &dst->na_vpindex);
2603	ISP_IOXPUT_8(isp, src->na_srr_reject_vunique,
2604	    &dst->na_srr_reject_vunique);
2605	ISP_IOXPUT_8(isp, src->na_srr_reject_explanation,
2606	    &dst->na_srr_reject_explanation);
2607	ISP_IOXPUT_8(isp, src->na_srr_reject_code, &dst->na_srr_reject_code);
2608	ISP_IOXPUT_8(isp, src->na_reserved5, &dst->na_reserved5);
2609	for (i = 0; i < 6; i++) {
2610		ISP_IOXPUT_8(isp, src->na_reserved6[i], &dst->na_reserved6[i]);
2611	}
2612	ISP_IOXPUT_16(isp, src->na_oxid, &dst->na_oxid);
2613}
2614
2615void
2616isp_get_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src,
2617    na_fcentry_t *dst)
2618{
2619	int i;
2620	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2621	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2622	ISP_IOXGET_8(isp, &src->na_reserved1, dst->na_reserved1);
2623	ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
2624	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
2625	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2626	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2627	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2628	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
2629	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
2630	for (i = 0; i < NA2_RSVDLEN; i++) {
2631		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2632		    dst->na_reserved3[i]);
2633	}
2634}
2635
2636void
2637isp_get_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src,
2638    na_fcentry_e_t *dst)
2639{
2640	int i;
2641	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2642	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2643	ISP_IOXGET_16(isp, &src->na_iid, dst->na_iid);
2644	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
2645	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2646	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2647	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2648	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
2649	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
2650	for (i = 0; i < NA2_RSVDLEN; i++) {
2651		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2652		    dst->na_reserved3[i]);
2653	}
2654}
2655
2656void
2657isp_get_notify_ack_24xx(ispsoftc_t *isp, na_fcentry_24xx_t *src,
2658    na_fcentry_24xx_t *dst)
2659{
2660	int i;
2661
2662	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2663	ISP_IOXGET_32(isp, &src->na_handle, dst->na_handle);
2664	ISP_IOXGET_16(isp, &src->na_nphdl, dst->na_nphdl);
2665	ISP_IOXGET_16(isp, &src->na_reserved1, dst->na_reserved1);
2666	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2667	ISP_IOXGET_16(isp, &src->na_srr_rxid, dst->na_srr_rxid);
2668	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2669	ISP_IOXGET_8(isp, &src->na_status_subcode, dst->na_status_subcode);
2670	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2671	ISP_IOXGET_32(isp, &src->na_rxid, dst->na_rxid);
2672	ISP_IOXGET_16(isp, &src->na_srr_reloff_hi, dst->na_srr_reloff_hi);
2673	ISP_IOXGET_16(isp, &src->na_srr_reloff_lo, dst->na_srr_reloff_lo);
2674	ISP_IOXGET_16(isp, &src->na_srr_iu, dst->na_srr_iu);
2675	ISP_IOXGET_16(isp, &src->na_srr_flags, dst->na_srr_flags);
2676	for (i = 0; i < 18; i++) {
2677		ISP_IOXGET_8(isp, &src->na_reserved3[i], dst->na_reserved3[i]);
2678	}
2679	ISP_IOXGET_8(isp, &src->na_reserved4, dst->na_reserved4);
2680	ISP_IOXGET_8(isp, &src->na_vpindex, dst->na_vpindex);
2681	ISP_IOXGET_8(isp, &src->na_srr_reject_vunique,
2682	    dst->na_srr_reject_vunique);
2683	ISP_IOXGET_8(isp, &src->na_srr_reject_explanation,
2684	    dst->na_srr_reject_explanation);
2685	ISP_IOXGET_8(isp, &src->na_srr_reject_code, dst->na_srr_reject_code);
2686	ISP_IOXGET_8(isp, &src->na_reserved5, dst->na_reserved5);
2687	for (i = 0; i < 6; i++) {
2688		ISP_IOXGET_8(isp, &src->na_reserved6[i], dst->na_reserved6[i]);
2689	}
2690	ISP_IOXGET_16(isp, &src->na_oxid, dst->na_oxid);
2691}
2692
2693void
2694isp_get_abts(ispsoftc_t *isp, abts_t *src, abts_t *dst)
2695{
2696	int i;
2697
2698	isp_get_hdr(isp, &src->abts_header, &dst->abts_header);
2699	for (i = 0; i < 6; i++) {
2700		ISP_IOXGET_8(isp, &src->abts_reserved0[i],
2701		    dst->abts_reserved0[i]);
2702	}
2703	ISP_IOXGET_16(isp, &src->abts_nphdl, dst->abts_nphdl);
2704	ISP_IOXGET_16(isp, &src->abts_reserved1, dst->abts_reserved1);
2705	ISP_IOXGET_16(isp, &src->abts_sof, dst->abts_sof);
2706	ISP_IOXGET_32(isp, &src->abts_rxid_abts, dst->abts_rxid_abts);
2707	ISP_IOXGET_16(isp, &src->abts_did_lo, dst->abts_did_lo);
2708	ISP_IOXGET_8(isp, &src->abts_did_hi, dst->abts_did_hi);
2709	ISP_IOXGET_8(isp, &src->abts_r_ctl, dst->abts_r_ctl);
2710	ISP_IOXGET_16(isp, &src->abts_sid_lo, dst->abts_sid_lo);
2711	ISP_IOXGET_8(isp, &src->abts_sid_hi, dst->abts_sid_hi);
2712	ISP_IOXGET_8(isp, &src->abts_cs_ctl, dst->abts_cs_ctl);
2713	ISP_IOXGET_16(isp, &src->abts_fs_ctl, dst->abts_fs_ctl);
2714	ISP_IOXGET_8(isp, &src->abts_f_ctl, dst->abts_f_ctl);
2715	ISP_IOXGET_8(isp, &src->abts_type, dst->abts_type);
2716	ISP_IOXGET_16(isp, &src->abts_seq_cnt, dst->abts_seq_cnt);
2717	ISP_IOXGET_8(isp, &src->abts_df_ctl, dst->abts_df_ctl);
2718	ISP_IOXGET_8(isp, &src->abts_seq_id, dst->abts_seq_id);
2719	ISP_IOXGET_16(isp, &src->abts_rx_id, dst->abts_rx_id);
2720	ISP_IOXGET_16(isp, &src->abts_ox_id, dst->abts_ox_id);
2721	ISP_IOXGET_32(isp, &src->abts_param, dst->abts_param);
2722	for (i = 0; i < 16; i++) {
2723	ISP_IOXGET_8(isp, &src->abts_reserved2[i],
2724		    dst->abts_reserved2[i]);
2725	}
2726	ISP_IOXGET_32(isp, &src->abts_rxid_task, dst->abts_rxid_task);
2727}
2728
2729void
2730isp_put_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
2731{
2732	int i;
2733
2734	isp_put_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
2735	ISP_IOXPUT_32(isp, src->abts_rsp_handle, &dst->abts_rsp_handle);
2736	ISP_IOXPUT_16(isp, src->abts_rsp_status, &dst->abts_rsp_status);
2737	ISP_IOXPUT_16(isp, src->abts_rsp_nphdl, &dst->abts_rsp_nphdl);
2738	ISP_IOXPUT_16(isp, src->abts_rsp_ctl_flags, &dst->abts_rsp_ctl_flags);
2739	ISP_IOXPUT_16(isp, src->abts_rsp_sof, &dst->abts_rsp_sof);
2740	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_abts, &dst->abts_rsp_rxid_abts);
2741	ISP_IOXPUT_16(isp, src->abts_rsp_did_lo, &dst->abts_rsp_did_lo);
2742	ISP_IOXPUT_8(isp, src->abts_rsp_did_hi, &dst->abts_rsp_did_hi);
2743	ISP_IOXPUT_8(isp, src->abts_rsp_r_ctl, &dst->abts_rsp_r_ctl);
2744	ISP_IOXPUT_16(isp, src->abts_rsp_sid_lo, &dst->abts_rsp_sid_lo);
2745	ISP_IOXPUT_8(isp, src->abts_rsp_sid_hi, &dst->abts_rsp_sid_hi);
2746	ISP_IOXPUT_8(isp, src->abts_rsp_cs_ctl, &dst->abts_rsp_cs_ctl);
2747	ISP_IOXPUT_16(isp, src->abts_rsp_f_ctl_lo, &dst->abts_rsp_f_ctl_lo);
2748	ISP_IOXPUT_8(isp, src->abts_rsp_f_ctl_hi, &dst->abts_rsp_f_ctl_hi);
2749	ISP_IOXPUT_8(isp, src->abts_rsp_type, &dst->abts_rsp_type);
2750	ISP_IOXPUT_16(isp, src->abts_rsp_seq_cnt, &dst->abts_rsp_seq_cnt);
2751	ISP_IOXPUT_8(isp, src->abts_rsp_df_ctl, &dst->abts_rsp_df_ctl);
2752	ISP_IOXPUT_8(isp, src->abts_rsp_seq_id, &dst->abts_rsp_seq_id);
2753	ISP_IOXPUT_16(isp, src->abts_rsp_rx_id, &dst->abts_rsp_rx_id);
2754	ISP_IOXPUT_16(isp, src->abts_rsp_ox_id, &dst->abts_rsp_ox_id);
2755	ISP_IOXPUT_32(isp, src->abts_rsp_param, &dst->abts_rsp_param);
2756	if (src->abts_rsp_r_ctl == BA_ACC) {
2757		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.reserved,
2758		    &dst->abts_rsp_payload.ba_acc.reserved);
2759		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.last_seq_id,
2760		    &dst->abts_rsp_payload.ba_acc.last_seq_id);
2761		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.seq_id_valid,
2762		    &dst->abts_rsp_payload.ba_acc.seq_id_valid);
2763		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_rx_id,
2764		    &dst->abts_rsp_payload.ba_acc.aborted_rx_id);
2765		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_ox_id,
2766		    &dst->abts_rsp_payload.ba_acc.aborted_ox_id);
2767		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.high_seq_cnt,
2768		    &dst->abts_rsp_payload.ba_acc.high_seq_cnt);
2769		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.low_seq_cnt,
2770		    &dst->abts_rsp_payload.ba_acc.low_seq_cnt);
2771		for (i = 0; i < 4; i++) {
2772			ISP_IOXPUT_16(isp,
2773			    src->abts_rsp_payload.ba_acc.reserved2[i],
2774			    &dst->abts_rsp_payload.ba_acc.reserved2[i]);
2775		}
2776	} else if (src->abts_rsp_r_ctl == BA_RJT) {
2777		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.vendor_unique,
2778		    &dst->abts_rsp_payload.ba_rjt.vendor_unique);
2779		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.explanation,
2780		    &dst->abts_rsp_payload.ba_rjt.explanation);
2781		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reason,
2782		    &dst->abts_rsp_payload.ba_rjt.reason);
2783		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reserved,
2784		    &dst->abts_rsp_payload.ba_rjt.reserved);
2785		for (i = 0; i < 12; i++) {
2786			ISP_IOXPUT_16(isp,
2787			    src->abts_rsp_payload.ba_rjt.reserved2[i],
2788			    &dst->abts_rsp_payload.ba_rjt.reserved2[i]);
2789		}
2790	} else {
2791		for (i = 0; i < 16; i++) {
2792			ISP_IOXPUT_8(isp, src->abts_rsp_payload.reserved[i],
2793			    &dst->abts_rsp_payload.reserved[i]);
2794		}
2795	}
2796	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_task, &dst->abts_rsp_rxid_task);
2797}
2798
2799void
2800isp_get_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
2801{
2802	int i;
2803
2804	isp_get_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
2805	ISP_IOXGET_32(isp, &src->abts_rsp_handle, dst->abts_rsp_handle);
2806	ISP_IOXGET_16(isp, &src->abts_rsp_status, dst->abts_rsp_status);
2807	ISP_IOXGET_16(isp, &src->abts_rsp_nphdl, dst->abts_rsp_nphdl);
2808	ISP_IOXGET_16(isp, &src->abts_rsp_ctl_flags, dst->abts_rsp_ctl_flags);
2809	ISP_IOXGET_16(isp, &src->abts_rsp_sof, dst->abts_rsp_sof);
2810	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_abts, dst->abts_rsp_rxid_abts);
2811	ISP_IOXGET_16(isp, &src->abts_rsp_did_lo, dst->abts_rsp_did_lo);
2812	ISP_IOXGET_8(isp, &src->abts_rsp_did_hi, dst->abts_rsp_did_hi);
2813	ISP_IOXGET_8(isp, &src->abts_rsp_r_ctl, dst->abts_rsp_r_ctl);
2814	ISP_IOXGET_16(isp, &src->abts_rsp_sid_lo, dst->abts_rsp_sid_lo);
2815	ISP_IOXGET_8(isp, &src->abts_rsp_sid_hi, dst->abts_rsp_sid_hi);
2816	ISP_IOXGET_8(isp, &src->abts_rsp_cs_ctl, dst->abts_rsp_cs_ctl);
2817	ISP_IOXGET_16(isp, &src->abts_rsp_f_ctl_lo, dst->abts_rsp_f_ctl_lo);
2818	ISP_IOXGET_8(isp, &src->abts_rsp_f_ctl_hi, dst->abts_rsp_f_ctl_hi);
2819	ISP_IOXGET_8(isp, &src->abts_rsp_type, dst->abts_rsp_type);
2820	ISP_IOXGET_16(isp, &src->abts_rsp_seq_cnt, dst->abts_rsp_seq_cnt);
2821	ISP_IOXGET_8(isp, &src->abts_rsp_df_ctl, dst->abts_rsp_df_ctl);
2822	ISP_IOXGET_8(isp, &src->abts_rsp_seq_id, dst->abts_rsp_seq_id);
2823	ISP_IOXGET_16(isp, &src->abts_rsp_rx_id, dst->abts_rsp_rx_id);
2824	ISP_IOXGET_16(isp, &src->abts_rsp_ox_id, dst->abts_rsp_ox_id);
2825	ISP_IOXGET_32(isp, &src->abts_rsp_param, dst->abts_rsp_param);
2826	for (i = 0; i < 8; i++) {
2827		ISP_IOXGET_8(isp, &src->abts_rsp_payload.rsp.reserved[i],
2828		    dst->abts_rsp_payload.rsp.reserved[i]);
2829	}
2830	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode1,
2831	    dst->abts_rsp_payload.rsp.subcode1);
2832	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode2,
2833	    dst->abts_rsp_payload.rsp.subcode2);
2834	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_task, dst->abts_rsp_rxid_task);
2835}
2836#endif	/* ISP_TARGET_MODE */
2837/*
2838 * vim:ts=8:sw=8
2839 */
2840