isp_library.c revision 164370
1155228Smjacob/*-
2164317Smjacob * Copyright (c) 2006 by Matthew Jacob
3155228Smjacob * All rights reserved.
4155228Smjacob *
5155228Smjacob * Redistribution and use in source and binary forms, with or without
6155228Smjacob * modification, are permitted provided that the following conditions
7155228Smjacob * are met:
8155228Smjacob * 1. Redistributions of source code must retain the above copyright
9155228Smjacob *    notice immediately at the beginning of the file, without modification,
10155228Smjacob *    this list of conditions, and the following disclaimer.
11155228Smjacob * 2. The name of the author may not be used to endorse or promote products
12155228Smjacob *    derived from this software without specific prior written permission.
13155228Smjacob *
14155228Smjacob * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15155228Smjacob * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16155228Smjacob * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17155228Smjacob * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
18155228Smjacob * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19155228Smjacob * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20155228Smjacob * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21155228Smjacob * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22155228Smjacob * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23155228Smjacob * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24155228Smjacob * SUCH DAMAGE.
25155228Smjacob *
26155228Smjacob */
27160410Smjacob/*
28160410Smjacob * Qlogic Host Adapter Internal Library Functions
29160410Smjacob */
30155704Smjacob#ifdef	__NetBSD__
31155704Smjacob#include <dev/ic/isp_netbsd.h>
32155704Smjacob#endif
33155704Smjacob#ifdef	__FreeBSD__
34160410Smjacob#include <sys/cdefs.h>
35160410Smjacob__FBSDID("$FreeBSD: head/sys/dev/isp/isp_library.c 164370 2006-11-18 03:53:16Z mjacob $");
36155228Smjacob#include <dev/isp/isp_freebsd.h>
37155704Smjacob#endif
38155704Smjacob#ifdef	__OpenBSD__
39155704Smjacob#include <dev/ic/isp_openbsd.h>
40155704Smjacob#endif
41155704Smjacob#ifdef	__linux__
42155704Smjacob#include "isp_linux.h"
43155704Smjacob#endif
44155704Smjacob#ifdef	__svr4__
45155704Smjacob#include "isp_solaris.h"
46155704Smjacob#endif
47155228Smjacob
48155228Smjacobint
49163899Smjacobisp_save_xs(ispsoftc_t *isp, XS_T *xs, uint32_t *handlep)
50155228Smjacob{
51163899Smjacob	uint16_t i, j;
52155228Smjacob
53163899Smjacob	for (j = isp->isp_lasthdls, i = 0; i < isp->isp_maxcmds; i++) {
54155228Smjacob		if (isp->isp_xflist[j] == NULL) {
55155228Smjacob			break;
56155228Smjacob		}
57155228Smjacob		if (++j == isp->isp_maxcmds) {
58155228Smjacob			j = 0;
59155228Smjacob		}
60155228Smjacob	}
61155228Smjacob	if (i == isp->isp_maxcmds) {
62155228Smjacob		return (-1);
63155228Smjacob	}
64155228Smjacob	isp->isp_xflist[j] = xs;
65155228Smjacob	*handlep = j+1;
66163899Smjacob	if (++j == isp->isp_maxcmds) {
67155228Smjacob		j = 0;
68163899Smjacob	}
69163899Smjacob	isp->isp_lasthdls = (uint32_t)j;
70155228Smjacob	return (0);
71155228Smjacob}
72155228Smjacob
73155228SmjacobXS_T *
74163899Smjacobisp_find_xs(ispsoftc_t *isp, uint32_t handle)
75155228Smjacob{
76163899Smjacob	if (handle < 1 || handle > (uint32_t) isp->isp_maxcmds) {
77155228Smjacob		return (NULL);
78155228Smjacob	} else {
79155228Smjacob		return (isp->isp_xflist[handle - 1]);
80155228Smjacob	}
81155228Smjacob}
82155228Smjacob
83163899Smjacobuint32_t
84155704Smjacobisp_find_handle(ispsoftc_t *isp, XS_T *xs)
85155228Smjacob{
86163899Smjacob	uint16_t i;
87155228Smjacob	if (xs != NULL) {
88155228Smjacob		for (i = 0; i < isp->isp_maxcmds; i++) {
89155228Smjacob			if (isp->isp_xflist[i] == xs) {
90163899Smjacob				return ((uint32_t) (i+1));
91155228Smjacob			}
92155228Smjacob		}
93155228Smjacob	}
94155228Smjacob	return (0);
95155228Smjacob}
96155228Smjacob
97163899Smjacobuint32_t
98163899Smjacobisp_handle_index(uint32_t handle)
99155228Smjacob{
100163899Smjacob	return (handle - 1);
101155228Smjacob}
102155228Smjacob
103155228Smjacobvoid
104163899Smjacobisp_destroy_handle(ispsoftc_t *isp, uint32_t handle)
105155228Smjacob{
106163899Smjacob	if (handle > 0 && handle <= (uint32_t) isp->isp_maxcmds) {
107155228Smjacob		isp->isp_xflist[handle - 1] = NULL;
108155228Smjacob	}
109155228Smjacob}
110155228Smjacob
111155228Smjacobint
112163899Smjacobisp_getrqentry(ispsoftc_t *isp, uint32_t *iptrp,
113163899Smjacob    uint32_t *optrp, void **resultp)
114155228Smjacob{
115163899Smjacob	volatile uint32_t iptr, optr;
116155228Smjacob
117163899Smjacob	optr = isp->isp_reqodx = ISP_READ(isp, isp->isp_rqstoutrp);
118155228Smjacob	iptr = isp->isp_reqidx;
119155228Smjacob	*resultp = ISP_QUEUE_ENTRY(isp->isp_rquest, iptr);
120155228Smjacob	iptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN(isp));
121155228Smjacob	if (iptr == optr) {
122155228Smjacob		return (1);
123155228Smjacob	}
124155228Smjacob	if (optrp)
125155228Smjacob		*optrp = optr;
126155228Smjacob	if (iptrp)
127155228Smjacob		*iptrp = iptr;
128155228Smjacob	return (0);
129155228Smjacob}
130155228Smjacob
131155228Smjacob#define	TBA	(4 * (((QENTRY_LEN >> 2) * 3) + 1) + 1)
132155228Smjacobvoid
133155704Smjacobisp_print_qentry(ispsoftc_t *isp, char *msg, int idx, void *arg)
134155228Smjacob{
135155228Smjacob	char buf[TBA];
136155228Smjacob	int amt, i, j;
137155704Smjacob	uint8_t *ptr = arg;
138155228Smjacob
139155228Smjacob	isp_prt(isp, ISP_LOGALL, "%s index %d=>", msg, idx);
140155228Smjacob	for (buf[0] = 0, amt = i = 0; i < 4; i++) {
141155228Smjacob		buf[0] = 0;
142155228Smjacob		SNPRINTF(buf, TBA, "  ");
143155228Smjacob		for (j = 0; j < (QENTRY_LEN >> 2); j++) {
144155228Smjacob			SNPRINTF(buf, TBA, "%s %02x", buf, ptr[amt++] & 0xff);
145155228Smjacob		}
146155228Smjacob		isp_prt(isp, ISP_LOGALL, buf);
147155228Smjacob	}
148155228Smjacob}
149155228Smjacob
150155228Smjacobvoid
151155704Smjacobisp_print_bytes(ispsoftc_t *isp, char *msg, int amt, void *arg)
152155228Smjacob{
153155228Smjacob	char buf[128];
154155704Smjacob	uint8_t *ptr = arg;
155155228Smjacob	int off;
156155228Smjacob
157155228Smjacob	if (msg)
158155228Smjacob		isp_prt(isp, ISP_LOGALL, "%s:", msg);
159155228Smjacob	off = 0;
160155228Smjacob	buf[0] = 0;
161155228Smjacob	while (off < amt) {
162155228Smjacob		int j, to;
163155228Smjacob		to = off;
164155228Smjacob		for (j = 0; j < 16; j++) {
165155228Smjacob			SNPRINTF(buf, 128, "%s %02x", buf, ptr[off++] & 0xff);
166155228Smjacob			if (off == amt)
167155228Smjacob				break;
168155228Smjacob		}
169155228Smjacob		isp_prt(isp, ISP_LOGALL, "0x%08x:%s", to, buf);
170155228Smjacob		buf[0] = 0;
171155228Smjacob	}
172155228Smjacob}
173155228Smjacob
174155228Smjacob/*
175155228Smjacob * Do the common path to try and ensure that link is up, we've scanned
176155228Smjacob * the fabric (if we're on a fabric), and that we've synchronized this
177155228Smjacob * all with our own database and done the appropriate logins.
178155228Smjacob *
179155228Smjacob * We repeatedly check for firmware state and loop state after each
180155228Smjacob * action because things may have changed while we were doing this.
181155228Smjacob * Any failure or change of state causes us to return a nonzero value.
182155228Smjacob *
183155228Smjacob * We assume we enter here with any locks held.
184155228Smjacob */
185155228Smjacob
186155228Smjacobint
187155704Smjacobisp_fc_runstate(ispsoftc_t *isp, int tval)
188155228Smjacob{
189155228Smjacob	fcparam *fcp;
190155228Smjacob	int *tptr;
191155228Smjacob
192163899Smjacob        if (isp->isp_role == ISP_ROLE_NONE) {
193155228Smjacob		return (0);
194155228Smjacob	}
195155228Smjacob	fcp = FCPARAM(isp);
196163899Smjacob	tptr = &tval;
197163899Smjacob	if (fcp->isp_fwstate < FW_READY ||
198163899Smjacob	    fcp->isp_loopstate < LOOP_PDB_RCVD) {
199163899Smjacob		if (isp_control(isp, ISPCTL_FCLINK_TEST, tptr) != 0) {
200164272Smjacob			isp_prt(isp, ISP_LOGSANCFG,
201163899Smjacob			    "isp_fc_runstate: linktest failed");
202163899Smjacob			return (-1);
203163899Smjacob		}
204163899Smjacob		if (fcp->isp_fwstate != FW_READY ||
205163899Smjacob		    fcp->isp_loopstate < LOOP_PDB_RCVD) {
206164272Smjacob			isp_prt(isp, ISP_LOGSANCFG,
207163899Smjacob				"isp_fc_runstate: f/w not ready");
208163899Smjacob			return (-1);
209163899Smjacob		}
210155228Smjacob	}
211155228Smjacob	if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
212155228Smjacob		return (0);
213155228Smjacob	}
214163899Smjacob	if (isp_control(isp, ISPCTL_SCAN_LOOP, NULL) != 0) {
215164272Smjacob		isp_prt(isp, ISP_LOGSANCFG,
216163899Smjacob		    "isp_fc_runstate: scan loop fails");
217163899Smjacob		return (LOOP_PDB_RCVD);
218163899Smjacob	}
219163899Smjacob	if (isp_control(isp, ISPCTL_SCAN_FABRIC, NULL) != 0) {
220164272Smjacob		isp_prt(isp, ISP_LOGSANCFG,
221163899Smjacob		    "isp_fc_runstate: scan fabric fails");
222163899Smjacob		return (LOOP_LSCAN_DONE);
223163899Smjacob	}
224155228Smjacob	if (isp_control(isp, ISPCTL_PDB_SYNC, NULL) != 0) {
225164272Smjacob		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: pdb_sync fails");
226163899Smjacob		return (LOOP_FSCAN_DONE);
227155228Smjacob	}
228155228Smjacob	if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) {
229164272Smjacob		isp_prt(isp, ISP_LOGSANCFG,
230163899Smjacob		    "isp_fc_runstate: f/w not ready again");
231155228Smjacob		return (-1);
232155228Smjacob	}
233155228Smjacob	return (0);
234155228Smjacob}
235155228Smjacob
236164272Smjacob/*
237164272Smjacob * Fibre Channel Support- get the port database for the id.
238164272Smjacob */
239163899Smjacobvoid
240164272Smjacobisp_dump_portdb(ispsoftc_t *isp)
241164272Smjacob{
242164272Smjacob	fcparam *fcp = (fcparam *) isp->isp_param;
243164272Smjacob	int i;
244164272Smjacob
245164272Smjacob	for (i = 0; i < MAX_FC_TARG; i++) {
246164272Smjacob		char mb[4];
247164272Smjacob		const char *dbs[8] = {
248164272Smjacob			"NIL ",
249164272Smjacob			"PROB",
250164272Smjacob			"DEAD",
251164272Smjacob			"CHGD",
252164272Smjacob			"NEW ",
253164272Smjacob			"PVLD",
254164272Smjacob			"ZOMB",
255164272Smjacob			"VLD "
256164272Smjacob		};
257164272Smjacob		const char *roles[4] = {
258164272Smjacob			" UNK", " TGT", " INI", "TINI"
259164272Smjacob		};
260164272Smjacob		fcportdb_t *lp = &fcp->portdb[i];
261164272Smjacob
262164272Smjacob		if (lp->state == FC_PORTDB_STATE_NIL) {
263164272Smjacob			continue;
264164272Smjacob		}
265164272Smjacob		if (lp->ini_map_idx) {
266164272Smjacob			SNPRINTF(mb, sizeof (mb), "%3d",
267164272Smjacob			    ((int) lp->ini_map_idx) - 1);
268164272Smjacob		} else {
269164272Smjacob			SNPRINTF(mb, sizeof (mb), "---");
270164272Smjacob		}
271164318Smjacob		isp_prt(isp, ISP_LOGALL, "%d: hdl 0x%x %s al%d tgt %s %s "
272164318Smjacob		    "0x%06x =>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x", i,
273164318Smjacob		    lp->handle, dbs[lp->state], lp->autologin, mb,
274164272Smjacob		    roles[lp->roles], lp->portid,
275164272Smjacob		    roles[lp->new_roles], lp->new_portid,
276164272Smjacob		    (uint32_t) (lp->node_wwn >> 32),
277164272Smjacob		    (uint32_t) (lp->node_wwn),
278164272Smjacob		    (uint32_t) (lp->port_wwn >> 32),
279164272Smjacob		    (uint32_t) (lp->port_wwn));
280164272Smjacob	}
281164272Smjacob}
282164272Smjacob
283164272Smjacobvoid
284163899Smjacobisp_shutdown(ispsoftc_t *isp)
285163899Smjacob{
286163899Smjacob	if (IS_FC(isp)) {
287163899Smjacob		if (IS_24XX(isp)) {
288163899Smjacob			ISP_WRITE(isp, BIU2400_ICR, 0);
289163899Smjacob			ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_PAUSE);
290163899Smjacob		} else {
291163899Smjacob			ISP_WRITE(isp, BIU_ICR, 0);
292163899Smjacob			ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
293163899Smjacob			ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
294163899Smjacob			ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
295163899Smjacob			ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
296163899Smjacob			ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
297163899Smjacob			ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
298163899Smjacob		}
299163899Smjacob	} else {
300163899Smjacob		ISP_WRITE(isp, BIU_ICR, 0);
301163899Smjacob		ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
302163899Smjacob	}
303163899Smjacob}
304163899Smjacob
305155228Smjacob/*
306155228Smjacob * Functions to move stuff to a form that the QLogic RISC engine understands
307155228Smjacob * and functions to move stuff back to a form the processor understands.
308155228Smjacob *
309155228Smjacob * Each platform is required to provide the 8, 16 and 32 bit
310155228Smjacob * swizzle and unswizzle macros (ISP_IOX{PUT|GET}_{8,16,32})
311155228Smjacob *
312155228Smjacob * The assumption is that swizzling and unswizzling is mostly done 'in place'
313155228Smjacob * (with a few exceptions for efficiency).
314155228Smjacob */
315155228Smjacob
316155228Smjacob#define	ISP_IS_SBUS(isp)	\
317155228Smjacob	(ISP_SBUS_SUPPORTED && (isp)->isp_bustype == ISP_BT_SBUS)
318155228Smjacob
319163899Smjacob#define	ASIZE(x)	(sizeof (x) / sizeof (x[0]))
320155228Smjacob/*
321155228Smjacob * Swizzle/Copy Functions
322155228Smjacob */
323155228Smjacobvoid
324163899Smjacobisp_put_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
325155228Smjacob{
326155228Smjacob	if (ISP_IS_SBUS(isp)) {
327155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
328155228Smjacob		    &hpdst->rqs_entry_count);
329155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
330155228Smjacob		    &hpdst->rqs_entry_type);
331155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
332155228Smjacob		    &hpdst->rqs_flags);
333155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
334155228Smjacob		    &hpdst->rqs_seqno);
335155228Smjacob	} else {
336155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
337155228Smjacob		    &hpdst->rqs_entry_type);
338155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
339155228Smjacob		    &hpdst->rqs_entry_count);
340155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
341155228Smjacob		    &hpdst->rqs_seqno);
342155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
343155228Smjacob		    &hpdst->rqs_flags);
344155228Smjacob	}
345155228Smjacob}
346155228Smjacob
347155228Smjacobvoid
348163899Smjacobisp_get_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
349155228Smjacob{
350155228Smjacob	if (ISP_IS_SBUS(isp)) {
351155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
352155228Smjacob		    hpdst->rqs_entry_count);
353155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
354155228Smjacob		    hpdst->rqs_entry_type);
355155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
356155228Smjacob		    hpdst->rqs_flags);
357155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
358155228Smjacob		    hpdst->rqs_seqno);
359155228Smjacob	} else {
360155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
361155228Smjacob		    hpdst->rqs_entry_type);
362155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
363155228Smjacob		    hpdst->rqs_entry_count);
364155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
365155228Smjacob		    hpdst->rqs_seqno);
366155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
367155228Smjacob		    hpdst->rqs_flags);
368155228Smjacob	}
369155228Smjacob}
370155228Smjacob
371155228Smjacobint
372155704Smjacobisp_get_response_type(ispsoftc_t *isp, isphdr_t *hp)
373155228Smjacob{
374155704Smjacob	uint8_t type;
375155228Smjacob	if (ISP_IS_SBUS(isp)) {
376155228Smjacob		ISP_IOXGET_8(isp, &hp->rqs_entry_count, type);
377155228Smjacob	} else {
378155228Smjacob		ISP_IOXGET_8(isp, &hp->rqs_entry_type, type);
379155228Smjacob	}
380155228Smjacob	return ((int)type);
381155228Smjacob}
382155228Smjacob
383155228Smjacobvoid
384155704Smjacobisp_put_request(ispsoftc_t *isp, ispreq_t *rqsrc, ispreq_t *rqdst)
385155228Smjacob{
386155228Smjacob	int i;
387163899Smjacob	isp_put_hdr(isp, &rqsrc->req_header, &rqdst->req_header);
388155228Smjacob	ISP_IOXPUT_32(isp, rqsrc->req_handle, &rqdst->req_handle);
389155228Smjacob	if (ISP_IS_SBUS(isp)) {
390155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_target);
391155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_lun_trn);
392155228Smjacob	} else {
393155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_lun_trn);
394155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_target);
395155228Smjacob	}
396155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_cdblen, &rqdst->req_cdblen);
397155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_flags, &rqdst->req_flags);
398155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_time, &rqdst->req_time);
399155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_seg_count, &rqdst->req_seg_count);
400163899Smjacob	for (i = 0; i < ASIZE(rqsrc->req_cdb); i++) {
401155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_cdb[i], &rqdst->req_cdb[i]);
402155228Smjacob	}
403155228Smjacob	for (i = 0; i < ISP_RQDSEG; i++) {
404155228Smjacob		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_base,
405155228Smjacob		    &rqdst->req_dataseg[i].ds_base);
406155228Smjacob		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_count,
407155228Smjacob		    &rqdst->req_dataseg[i].ds_count);
408155228Smjacob	}
409155228Smjacob}
410155228Smjacob
411155228Smjacobvoid
412163899Smjacobisp_put_marker(ispsoftc_t *isp, isp_marker_t *src, isp_marker_t *dst)
413155228Smjacob{
414155228Smjacob	int i;
415163899Smjacob	isp_put_hdr(isp, &src->mrk_header, &dst->mrk_header);
416163899Smjacob	ISP_IOXPUT_32(isp, src->mrk_handle, &dst->mrk_handle);
417163899Smjacob	if (ISP_IS_SBUS(isp)) {
418163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_target);
419163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_target, &dst->mrk_reserved0);
420163899Smjacob	} else {
421163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_reserved0);
422163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_target, &dst->mrk_target);
423155228Smjacob	}
424163899Smjacob	ISP_IOXPUT_16(isp, src->mrk_modifier, &dst->mrk_modifier);
425163899Smjacob	ISP_IOXPUT_16(isp, src->mrk_flags, &dst->mrk_flags);
426163899Smjacob	ISP_IOXPUT_16(isp, src->mrk_lun, &dst->mrk_lun);
427163899Smjacob	for (i = 0; i < ASIZE(src->mrk_reserved1); i++) {
428163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_reserved1[i],
429163899Smjacob		    &dst->mrk_reserved1[i]);
430163899Smjacob	}
431163899Smjacob}
432163899Smjacob
433163899Smjacobvoid
434163899Smjacobisp_put_marker_24xx(ispsoftc_t *isp,
435163899Smjacob    isp_marker_24xx_t *src, isp_marker_24xx_t *dst)
436163899Smjacob{
437163899Smjacob	int i;
438163899Smjacob	isp_put_hdr(isp, &src->mrk_header, &dst->mrk_header);
439163899Smjacob	ISP_IOXPUT_32(isp, src->mrk_handle, &dst->mrk_handle);
440163899Smjacob	ISP_IOXPUT_16(isp, src->mrk_nphdl, &dst->mrk_nphdl);
441163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_modifier, &dst->mrk_modifier);
442163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_reserved0);
443163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_reserved1, &dst->mrk_reserved1);
444163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_vphdl, &dst->mrk_vphdl);
445163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_reserved2, &dst->mrk_reserved2);
446163899Smjacob	for (i = 0; i < ASIZE(src->mrk_lun); i++) {
447163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_lun[i], &dst->mrk_lun[i]);
448163899Smjacob	}
449163899Smjacob	for (i = 0; i < ASIZE(src->mrk_reserved3); i++) {
450163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_reserved3[i],
451163899Smjacob		    &dst->mrk_reserved3[i]);
452163899Smjacob	}
453163899Smjacob}
454163899Smjacob
455163899Smjacobvoid
456163899Smjacobisp_put_request_t2(ispsoftc_t *isp, ispreqt2_t *src, ispreqt2_t *dst)
457163899Smjacob{
458163899Smjacob	int i;
459163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
460163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
461163899Smjacob	ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
462163899Smjacob	ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
463163899Smjacob	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
464163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
465163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
466163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
467163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
468163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
469163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
470163899Smjacob	}
471163899Smjacob	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
472155228Smjacob	for (i = 0; i < ISP_RQDSEG_T2; i++) {
473163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
474163899Smjacob		    &dst->req_dataseg[i].ds_base);
475163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
476163899Smjacob		    &dst->req_dataseg[i].ds_count);
477155228Smjacob	}
478155228Smjacob}
479155228Smjacob
480155228Smjacobvoid
481163899Smjacobisp_put_request_t2e(ispsoftc_t *isp, ispreqt2e_t *src, ispreqt2e_t *dst)
482155228Smjacob{
483155228Smjacob	int i;
484163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
485163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
486163899Smjacob	ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
487163899Smjacob	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
488163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
489163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
490163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
491163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
492163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
493163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
494155228Smjacob	}
495163899Smjacob	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
496155228Smjacob	for (i = 0; i < ISP_RQDSEG_T2; i++) {
497163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
498163899Smjacob		    &dst->req_dataseg[i].ds_base);
499163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
500163899Smjacob		    &dst->req_dataseg[i].ds_count);
501155228Smjacob	}
502155228Smjacob}
503155228Smjacob
504155228Smjacobvoid
505163899Smjacobisp_put_request_t3(ispsoftc_t *isp, ispreqt3_t *src, ispreqt3_t *dst)
506155228Smjacob{
507155228Smjacob	int i;
508163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
509163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
510163899Smjacob	ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
511163899Smjacob	ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
512163899Smjacob	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
513163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
514163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
515163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
516163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
517163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
518163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
519155228Smjacob	}
520163899Smjacob	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
521155228Smjacob	for (i = 0; i < ISP_RQDSEG_T3; i++) {
522163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
523163899Smjacob		    &dst->req_dataseg[i].ds_base);
524163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi,
525163899Smjacob		    &dst->req_dataseg[i].ds_basehi);
526163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
527163899Smjacob		    &dst->req_dataseg[i].ds_count);
528155228Smjacob	}
529155228Smjacob}
530155228Smjacob
531155228Smjacobvoid
532163899Smjacobisp_put_request_t3e(ispsoftc_t *isp, ispreqt3e_t *src, ispreqt3e_t *dst)
533155228Smjacob{
534155228Smjacob	int i;
535163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
536163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
537163899Smjacob	ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
538163899Smjacob	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
539163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
540163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
541163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
542163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
543163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
544163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
545155228Smjacob	}
546163899Smjacob	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
547155228Smjacob	for (i = 0; i < ISP_RQDSEG_T3; i++) {
548163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
549163899Smjacob		    &dst->req_dataseg[i].ds_base);
550163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi,
551163899Smjacob		    &dst->req_dataseg[i].ds_basehi);
552163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
553163899Smjacob		    &dst->req_dataseg[i].ds_count);
554155228Smjacob	}
555155228Smjacob}
556155228Smjacob
557155228Smjacobvoid
558163899Smjacobisp_put_extended_request(ispsoftc_t *isp, ispextreq_t *src, ispextreq_t *dst)
559155228Smjacob{
560155228Smjacob	int i;
561163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
562163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
563155228Smjacob	if (ISP_IS_SBUS(isp)) {
564163899Smjacob		ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_target);
565163899Smjacob		ISP_IOXPUT_8(isp, src->req_target, &dst->req_lun_trn);
566155228Smjacob	} else {
567163899Smjacob		ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
568163899Smjacob		ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
569155228Smjacob	}
570163899Smjacob	ISP_IOXPUT_16(isp, src->req_cdblen, &dst->req_cdblen);
571163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags);
572163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
573163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
574163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
575163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
576155228Smjacob	}
577155228Smjacob}
578155228Smjacob
579155228Smjacobvoid
580163899Smjacobisp_put_request_t7(ispsoftc_t *isp, ispreqt7_t *src, ispreqt7_t *dst)
581155228Smjacob{
582155228Smjacob	int i;
583163899Smjacob	uint32_t *a, *b;
584163899Smjacob
585163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
586163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
587163899Smjacob	ISP_IOXPUT_16(isp, src->req_nphdl, &dst->req_nphdl);
588163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
589163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
590163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
591163899Smjacob	a = (uint32_t *) src->req_lun;
592163899Smjacob	b = (uint32_t *) dst->req_lun;
593163899Smjacob	for (i = 0; i < (ASIZE(src->req_lun) >> 2); i++ ) {
594163899Smjacob		ISP_IOZPUT_32(isp, *a++, b++);
595163899Smjacob	}
596163899Smjacob	ISP_IOXPUT_8(isp, src->req_alen_datadir, &dst->req_alen_datadir);
597163899Smjacob	ISP_IOXPUT_8(isp, src->req_task_management, &dst->req_task_management);
598163899Smjacob	ISP_IOXPUT_8(isp, src->req_task_attribute, &dst->req_task_attribute);
599163899Smjacob	ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
600163899Smjacob	a = (uint32_t *) src->req_cdb;
601163899Smjacob	b = (uint32_t *) dst->req_cdb;
602163899Smjacob	for (i = 0; i < (ASIZE(src->req_cdb) >> 2); i++ ) {
603163899Smjacob		ISP_IOZPUT_32(isp, *a++, b++);
604163899Smjacob	}
605163899Smjacob	ISP_IOXPUT_32(isp, src->req_dl, &dst->req_dl);
606163899Smjacob	ISP_IOXPUT_16(isp, src->req_tidlo, &dst->req_tidlo);
607163899Smjacob	ISP_IOXPUT_8(isp, src->req_tidhi, &dst->req_tidhi);
608163899Smjacob	ISP_IOXPUT_8(isp, src->req_vpidx, &dst->req_vpidx);
609163899Smjacob	ISP_IOXPUT_32(isp, src->req_dataseg.ds_base,
610163899Smjacob	    &dst->req_dataseg.ds_base);
611163899Smjacob	ISP_IOXPUT_32(isp, src->req_dataseg.ds_basehi,
612163899Smjacob	    &dst->req_dataseg.ds_basehi);
613163899Smjacob	ISP_IOXPUT_32(isp, src->req_dataseg.ds_count,
614163899Smjacob	    &dst->req_dataseg.ds_count);
615163899Smjacob}
616163899Smjacob
617163899Smjacobvoid
618163899Smjacobisp_put_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
619163899Smjacob{
620163899Smjacob	int i;
621163899Smjacob	isp_put_hdr(isp, &src->abrt_header, &dst->abrt_header);
622163899Smjacob	ISP_IOXPUT_32(isp, src->abrt_handle, &dst->abrt_handle);
623163899Smjacob	ISP_IOXPUT_16(isp, src->abrt_nphdl, &dst->abrt_nphdl);
624163899Smjacob	ISP_IOXPUT_16(isp, src->abrt_options, &dst->abrt_options);
625163899Smjacob	ISP_IOXPUT_32(isp, src->abrt_cmd_handle, &dst->abrt_cmd_handle);
626163899Smjacob	for (i = 0; i < ASIZE(src->abrt_reserved); i++) {
627163899Smjacob		ISP_IOXPUT_8(isp, src->abrt_reserved[i],
628163899Smjacob		    &dst->abrt_reserved[i]);
629163899Smjacob	}
630163899Smjacob	ISP_IOXPUT_16(isp, src->abrt_tidlo, &dst->abrt_tidlo);
631163899Smjacob	ISP_IOXPUT_8(isp, src->abrt_tidhi, &dst->abrt_tidhi);
632163899Smjacob	ISP_IOXPUT_8(isp, src->abrt_vpidx, &dst->abrt_vpidx);
633163899Smjacob	for (i = 0; i < ASIZE(src->abrt_reserved1); i++) {
634163899Smjacob		ISP_IOXPUT_8(isp, src->abrt_reserved1[i],
635163899Smjacob		    &dst->abrt_reserved1[i]);
636163899Smjacob	}
637163899Smjacob}
638163899Smjacob
639163899Smjacobvoid
640163899Smjacobisp_put_cont_req(ispsoftc_t *isp, ispcontreq_t *src, ispcontreq_t *dst)
641163899Smjacob{
642163899Smjacob	int i;
643163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
644155228Smjacob	for (i = 0; i < ISP_CDSEG; i++) {
645163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
646163899Smjacob		    &dst->req_dataseg[i].ds_base);
647163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
648163899Smjacob		    &dst->req_dataseg[i].ds_count);
649155228Smjacob	}
650155228Smjacob}
651155228Smjacob
652155228Smjacobvoid
653163899Smjacobisp_put_cont64_req(ispsoftc_t *isp, ispcontreq64_t *src, ispcontreq64_t *dst)
654155228Smjacob{
655155228Smjacob	int i;
656163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
657155228Smjacob	for (i = 0; i < ISP_CDSEG64; i++) {
658163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
659163899Smjacob		    &dst->req_dataseg[i].ds_base);
660163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi,
661163899Smjacob		    &dst->req_dataseg[i].ds_basehi);
662163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
663163899Smjacob		    &dst->req_dataseg[i].ds_count);
664155228Smjacob	}
665155228Smjacob}
666155228Smjacob
667155228Smjacobvoid
668163899Smjacobisp_get_response(ispsoftc_t *isp, ispstatusreq_t *src, ispstatusreq_t *dst)
669155228Smjacob{
670155228Smjacob	int i;
671163899Smjacob	isp_get_hdr(isp, &src->req_header, &dst->req_header);
672163899Smjacob	ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle);
673163899Smjacob	ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status);
674163899Smjacob	ISP_IOXGET_16(isp, &src->req_completion_status,
675163899Smjacob	    dst->req_completion_status);
676163899Smjacob	ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags);
677163899Smjacob	ISP_IOXGET_16(isp, &src->req_status_flags, dst->req_status_flags);
678163899Smjacob	ISP_IOXGET_16(isp, &src->req_time, dst->req_time);
679163899Smjacob	ISP_IOXGET_16(isp, &src->req_sense_len, dst->req_sense_len);
680163899Smjacob	ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
681155228Smjacob	for (i = 0; i < 8; i++) {
682163899Smjacob		ISP_IOXGET_8(isp, &src->req_response[i],
683163899Smjacob		    dst->req_response[i]);
684155228Smjacob	}
685155228Smjacob	for (i = 0; i < 32; i++) {
686163899Smjacob		ISP_IOXGET_8(isp, &src->req_sense_data[i],
687163899Smjacob		    dst->req_sense_data[i]);
688155228Smjacob	}
689155228Smjacob}
690155228Smjacob
691155228Smjacobvoid
692163899Smjacobisp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src,
693163899Smjacob    isp24xx_statusreq_t *dst)
694155228Smjacob{
695155228Smjacob	int i;
696163899Smjacob	isp_get_hdr(isp, &src->req_header, &dst->req_header);
697163899Smjacob	ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle);
698163899Smjacob	ISP_IOXGET_16(isp, &src->req_completion_status,
699163899Smjacob	    dst->req_completion_status);
700163899Smjacob	ISP_IOXGET_16(isp, &src->req_oxid, dst->req_oxid);
701163899Smjacob	ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
702163899Smjacob	ISP_IOXGET_16(isp, &src->req_reserved0, dst->req_reserved0);
703163899Smjacob	ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags);
704163899Smjacob	ISP_IOXGET_16(isp, &src->req_reserved1, dst->req_reserved1);
705163899Smjacob	ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status);
706163899Smjacob	ISP_IOXGET_32(isp, &src->req_fcp_residual, dst->req_fcp_residual);
707163899Smjacob	ISP_IOXGET_32(isp, &src->req_sense_len, dst->req_sense_len);
708163899Smjacob	ISP_IOXGET_32(isp, &src->req_response_len, dst->req_response_len);
709163899Smjacob	for (i = 0; i < 28; i++) {
710163899Smjacob		ISP_IOXGET_8(isp, &src->req_rsp_sense[i],
711163899Smjacob		    dst->req_rsp_sense[i]);
712155228Smjacob	}
713155228Smjacob}
714155228Smjacob
715155228Smjacobvoid
716163899Smjacobisp_get_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
717163899Smjacob{
718163899Smjacob	int i;
719163899Smjacob	isp_get_hdr(isp, &src->abrt_header, &dst->abrt_header);
720163899Smjacob	ISP_IOXGET_32(isp, &src->abrt_handle, dst->abrt_handle);
721163899Smjacob	ISP_IOXGET_16(isp, &src->abrt_nphdl, dst->abrt_nphdl);
722163899Smjacob	ISP_IOXGET_16(isp, &src->abrt_options, dst->abrt_options);
723163899Smjacob	ISP_IOXGET_32(isp, &src->abrt_cmd_handle, dst->abrt_cmd_handle);
724163899Smjacob	for (i = 0; i < ASIZE(&src->abrt_reserved); i++) {
725163899Smjacob		ISP_IOXGET_8(isp, &src->abrt_reserved[i],
726163899Smjacob		    dst->abrt_reserved[i]);
727163899Smjacob	}
728163899Smjacob	ISP_IOXGET_16(isp, &src->abrt_tidlo, dst->abrt_tidlo);
729163899Smjacob	ISP_IOXGET_8(isp, &src->abrt_tidhi, dst->abrt_tidhi);
730163899Smjacob	ISP_IOXGET_8(isp, &src->abrt_vpidx, dst->abrt_vpidx);
731163899Smjacob	for (i = 0; i < ASIZE(&src->abrt_reserved1); i++) {
732163899Smjacob		ISP_IOXGET_8(isp, &src->abrt_reserved1[i],
733163899Smjacob		    dst->abrt_reserved1[i]);
734163899Smjacob	}
735163899Smjacob}
736163899Smjacob
737163899Smjacob
738163899Smjacobvoid
739155704Smjacobisp_get_rio2(ispsoftc_t *isp, isp_rio2_t *r2src, isp_rio2_t *r2dst)
740155228Smjacob{
741155228Smjacob	int i;
742163899Smjacob	isp_get_hdr(isp, &r2src->req_header, &r2dst->req_header);
743163899Smjacob	if (r2dst->req_header.rqs_seqno > 30) {
744155228Smjacob		r2dst->req_header.rqs_seqno = 30;
745163899Smjacob	}
746155228Smjacob	for (i = 0; i < r2dst->req_header.rqs_seqno; i++) {
747155228Smjacob		ISP_IOXGET_16(isp, &r2src->req_handles[i],
748155228Smjacob		    r2dst->req_handles[i]);
749155228Smjacob	}
750155228Smjacob	while (i < 30) {
751155228Smjacob		r2dst->req_handles[i++] = 0;
752155228Smjacob	}
753155228Smjacob}
754155228Smjacob
755155228Smjacobvoid
756163899Smjacobisp_put_icb(ispsoftc_t *isp, isp_icb_t *src, isp_icb_t *dst)
757155228Smjacob{
758155228Smjacob	int i;
759155228Smjacob	if (ISP_IS_SBUS(isp)) {
760163899Smjacob		ISP_IOXPUT_8(isp, src->icb_version, &dst->icb_reserved0);
761163899Smjacob		ISP_IOXPUT_8(isp, src->icb_reserved0, &dst->icb_version);
762155228Smjacob	} else {
763163899Smjacob		ISP_IOXPUT_8(isp, src->icb_version, &dst->icb_version);
764163899Smjacob		ISP_IOXPUT_8(isp, src->icb_reserved0, &dst->icb_reserved0);
765155228Smjacob	}
766163899Smjacob	ISP_IOXPUT_16(isp, src->icb_fwoptions, &dst->icb_fwoptions);
767163899Smjacob	ISP_IOXPUT_16(isp, src->icb_maxfrmlen, &dst->icb_maxfrmlen);
768163899Smjacob	ISP_IOXPUT_16(isp, src->icb_maxalloc, &dst->icb_maxalloc);
769163899Smjacob	ISP_IOXPUT_16(isp, src->icb_execthrottle, &dst->icb_execthrottle);
770155228Smjacob	if (ISP_IS_SBUS(isp)) {
771163899Smjacob		ISP_IOXPUT_8(isp, src->icb_retry_count, &dst->icb_retry_delay);
772163899Smjacob		ISP_IOXPUT_8(isp, src->icb_retry_delay, &dst->icb_retry_count);
773155228Smjacob	} else {
774163899Smjacob		ISP_IOXPUT_8(isp, src->icb_retry_count, &dst->icb_retry_count);
775163899Smjacob		ISP_IOXPUT_8(isp, src->icb_retry_delay, &dst->icb_retry_delay);
776155228Smjacob	}
777155228Smjacob	for (i = 0; i < 8; i++) {
778163899Smjacob		ISP_IOXPUT_8(isp, src->icb_portname[i], &dst->icb_portname[i]);
779155228Smjacob	}
780163899Smjacob	ISP_IOXPUT_16(isp, src->icb_hardaddr, &dst->icb_hardaddr);
781155228Smjacob	if (ISP_IS_SBUS(isp)) {
782163899Smjacob		ISP_IOXPUT_8(isp, src->icb_iqdevtype, &dst->icb_logintime);
783163899Smjacob		ISP_IOXPUT_8(isp, src->icb_logintime, &dst->icb_iqdevtype);
784155228Smjacob	} else {
785163899Smjacob		ISP_IOXPUT_8(isp, src->icb_iqdevtype, &dst->icb_iqdevtype);
786163899Smjacob		ISP_IOXPUT_8(isp, src->icb_logintime, &dst->icb_logintime);
787155228Smjacob	}
788155228Smjacob	for (i = 0; i < 8; i++) {
789163899Smjacob		ISP_IOXPUT_8(isp, src->icb_nodename[i], &dst->icb_nodename[i]);
790155228Smjacob	}
791163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rqstout, &dst->icb_rqstout);
792163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rspnsin, &dst->icb_rspnsin);
793163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rqstqlen, &dst->icb_rqstqlen);
794163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rsltqlen, &dst->icb_rsltqlen);
795155228Smjacob	for (i = 0; i < 4; i++) {
796163899Smjacob		ISP_IOXPUT_16(isp, src->icb_rqstaddr[i], &dst->icb_rqstaddr[i]);
797155228Smjacob	}
798155228Smjacob	for (i = 0; i < 4; i++) {
799163899Smjacob		ISP_IOXPUT_16(isp, src->icb_respaddr[i], &dst->icb_respaddr[i]);
800155228Smjacob	}
801163899Smjacob	ISP_IOXPUT_16(isp, src->icb_lunenables, &dst->icb_lunenables);
802155228Smjacob	if (ISP_IS_SBUS(isp)) {
803163899Smjacob		ISP_IOXPUT_8(isp, src->icb_ccnt, &dst->icb_icnt);
804163899Smjacob		ISP_IOXPUT_8(isp, src->icb_icnt, &dst->icb_ccnt);
805155228Smjacob	} else {
806163899Smjacob		ISP_IOXPUT_8(isp, src->icb_ccnt, &dst->icb_ccnt);
807163899Smjacob		ISP_IOXPUT_8(isp, src->icb_icnt, &dst->icb_icnt);
808155228Smjacob	}
809163899Smjacob	ISP_IOXPUT_16(isp, src->icb_lunetimeout, &dst->icb_lunetimeout);
810163899Smjacob	ISP_IOXPUT_16(isp, src->icb_reserved1, &dst->icb_reserved1);
811163899Smjacob	ISP_IOXPUT_16(isp, src->icb_xfwoptions, &dst->icb_xfwoptions);
812155228Smjacob	if (ISP_IS_SBUS(isp)) {
813163899Smjacob		ISP_IOXPUT_8(isp, src->icb_racctimer, &dst->icb_idelaytimer);
814163899Smjacob		ISP_IOXPUT_8(isp, src->icb_idelaytimer, &dst->icb_racctimer);
815155228Smjacob	} else {
816163899Smjacob		ISP_IOXPUT_8(isp, src->icb_racctimer, &dst->icb_racctimer);
817163899Smjacob		ISP_IOXPUT_8(isp, src->icb_idelaytimer, &dst->icb_idelaytimer);
818155228Smjacob	}
819163899Smjacob	ISP_IOXPUT_16(isp, src->icb_zfwoptions, &dst->icb_zfwoptions);
820155228Smjacob}
821155228Smjacob
822155228Smjacobvoid
823163899Smjacobisp_put_icb_2400(ispsoftc_t *isp, isp_icb_2400_t *src, isp_icb_2400_t *dst)
824155228Smjacob{
825155228Smjacob	int i;
826163899Smjacob	ISP_IOXPUT_16(isp, src->icb_version, &dst->icb_version);
827163899Smjacob	ISP_IOXPUT_16(isp, src->icb_reserved0, &dst->icb_reserved0);
828163899Smjacob	ISP_IOXPUT_16(isp, src->icb_maxfrmlen, &dst->icb_maxfrmlen);
829163899Smjacob	ISP_IOXPUT_16(isp, src->icb_execthrottle, &dst->icb_execthrottle);
830163899Smjacob	ISP_IOXPUT_16(isp, src->icb_xchgcnt, &dst->icb_xchgcnt);
831163899Smjacob	ISP_IOXPUT_16(isp, src->icb_hardaddr, &dst->icb_hardaddr);
832163899Smjacob	for (i = 0; i < 8; i++) {
833163899Smjacob		ISP_IOXPUT_8(isp, src->icb_portname[i], &dst->icb_portname[i]);
834163899Smjacob	}
835163899Smjacob	for (i = 0; i < 8; i++) {
836163899Smjacob		ISP_IOXPUT_8(isp, src->icb_nodename[i], &dst->icb_nodename[i]);
837163899Smjacob	}
838163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rspnsin, &dst->icb_rspnsin);
839163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rqstout, &dst->icb_rqstout);
840163899Smjacob	ISP_IOXPUT_16(isp, src->icb_retry_count, &dst->icb_retry_count);
841163899Smjacob	ISP_IOXPUT_16(isp, src->icb_priout, &dst->icb_priout);
842163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rsltqlen, &dst->icb_rsltqlen);
843163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rqstqlen, &dst->icb_rqstqlen);
844163899Smjacob	ISP_IOXPUT_16(isp, src->icb_ldn_nols, &dst->icb_ldn_nols);
845163899Smjacob	ISP_IOXPUT_16(isp, src->icb_prqstqlen, &dst->icb_prqstqlen);
846163899Smjacob	for (i = 0; i < 4; i++) {
847163899Smjacob		ISP_IOXPUT_16(isp, src->icb_rqstaddr[i], &dst->icb_rqstaddr[i]);
848163899Smjacob	}
849163899Smjacob	for (i = 0; i < 4; i++) {
850163899Smjacob		ISP_IOXPUT_16(isp, src->icb_respaddr[i], &dst->icb_respaddr[i]);
851163899Smjacob	}
852163899Smjacob	for (i = 0; i < 4; i++) {
853163899Smjacob		ISP_IOXPUT_16(isp, src->icb_priaddr[i], &dst->icb_priaddr[i]);
854163899Smjacob	}
855163899Smjacob	for (i = 0; i < 4; i++) {
856163899Smjacob		ISP_IOXPUT_16(isp, src->icb_reserved1[i],
857163899Smjacob		    &dst->icb_reserved1[i]);
858163899Smjacob	}
859163899Smjacob	ISP_IOXPUT_16(isp, src->icb_atio_in, &dst->icb_atio_in);
860163899Smjacob	ISP_IOXPUT_16(isp, src->icb_atioqlen, &dst->icb_atioqlen);
861163899Smjacob	for (i = 0; i < 4; i++) {
862163899Smjacob		ISP_IOXPUT_16(isp, src->icb_atioqaddr[i],
863163899Smjacob		    &dst->icb_atioqaddr[i]);
864163899Smjacob	}
865163899Smjacob	ISP_IOXPUT_16(isp, src->icb_idelaytimer, &dst->icb_idelaytimer);
866163899Smjacob	ISP_IOXPUT_16(isp, src->icb_logintime, &dst->icb_logintime);
867163899Smjacob	ISP_IOXPUT_32(isp, src->icb_fwoptions1, &dst->icb_fwoptions1);
868163899Smjacob	ISP_IOXPUT_32(isp, src->icb_fwoptions2, &dst->icb_fwoptions2);
869163899Smjacob	ISP_IOXPUT_32(isp, src->icb_fwoptions3, &dst->icb_fwoptions3);
870163899Smjacob	for (i = 0; i < 12; i++) {
871163899Smjacob		ISP_IOXPUT_16(isp, src->icb_reserved2[i],
872163899Smjacob		    &dst->icb_reserved2[i]);
873163899Smjacob	}
874163899Smjacob}
875163899Smjacob
876163899Smjacobvoid
877163899Smjacobisp_get_pdb_21xx(ispsoftc_t *isp, isp_pdb_21xx_t *src, isp_pdb_21xx_t *dst)
878163899Smjacob{
879163899Smjacob	int i;
880155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_options, dst->pdb_options);
881155228Smjacob        ISP_IOXGET_8(isp, &src->pdb_mstate, dst->pdb_mstate);
882155228Smjacob        ISP_IOXGET_8(isp, &src->pdb_sstate, dst->pdb_sstate);
883155228Smjacob	for (i = 0; i < 4; i++) {
884155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i],
885155228Smjacob		    dst->pdb_hardaddr_bits[i]);
886155228Smjacob	}
887155228Smjacob	for (i = 0; i < 4; i++) {
888155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_portid_bits[i],
889155228Smjacob		    dst->pdb_portid_bits[i]);
890155228Smjacob	}
891155228Smjacob	for (i = 0; i < 8; i++) {
892155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
893155228Smjacob	}
894155228Smjacob	for (i = 0; i < 8; i++) {
895155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
896155228Smjacob	}
897155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_execthrottle, dst->pdb_execthrottle);
898155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_exec_count, dst->pdb_exec_count);
899155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_retry_count, dst->pdb_retry_count);
900155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_retry_delay, dst->pdb_retry_delay);
901155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_resalloc, dst->pdb_resalloc);
902155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_curalloc, dst->pdb_curalloc);
903155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_qhead, dst->pdb_qhead);
904155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_qtail, dst->pdb_qtail);
905155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_tl_next, dst->pdb_tl_next);
906155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_tl_last, dst->pdb_tl_last);
907155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_features, dst->pdb_features);
908155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_pconcurrnt, dst->pdb_pconcurrnt);
909155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_roi, dst->pdb_roi);
910155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_target, dst->pdb_target);
911155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_initiator, dst->pdb_initiator);
912155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_rdsiz, dst->pdb_rdsiz);
913155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_ncseq, dst->pdb_ncseq);
914155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_noseq, dst->pdb_noseq);
915155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_labrtflg, dst->pdb_labrtflg);
916155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_lstopflg, dst->pdb_lstopflg);
917155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_sqhead, dst->pdb_sqhead);
918155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_sqtail, dst->pdb_sqtail);
919155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_ptimer, dst->pdb_ptimer);
920155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_nxt_seqid, dst->pdb_nxt_seqid);
921155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_fcount, dst->pdb_fcount);
922155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_len, dst->pdb_prli_len);
923155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
924155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
925155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_loopid, dst->pdb_loopid);
926155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_il_ptr, dst->pdb_il_ptr);
927155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_sl_ptr, dst->pdb_sl_ptr);
928155228Smjacob}
929155228Smjacob
930163899Smjacobvoid
931163899Smjacobisp_get_pdb_24xx(ispsoftc_t *isp, isp_pdb_24xx_t *src, isp_pdb_24xx_t *dst)
932163899Smjacob{
933163899Smjacob	int i;
934163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_flags, dst->pdb_flags);
935163899Smjacob        ISP_IOXGET_8(isp, &src->pdb_curstate, dst->pdb_curstate);
936163899Smjacob        ISP_IOXGET_8(isp, &src->pdb_laststate, dst->pdb_laststate);
937163899Smjacob	for (i = 0; i < 4; i++) {
938163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i],
939163899Smjacob		    dst->pdb_hardaddr_bits[i]);
940163899Smjacob	}
941163899Smjacob	for (i = 0; i < 4; i++) {
942163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_portid_bits[i],
943163899Smjacob		    dst->pdb_portid_bits[i]);
944163899Smjacob	}
945163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_retry_timer, dst->pdb_retry_timer);
946163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_handle, dst->pdb_handle);
947163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_rcv_dsize, dst->pdb_rcv_dsize);
948163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_reserved0, dst->pdb_reserved0);
949163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
950163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
951163899Smjacob	for (i = 0; i < 8; i++) {
952163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
953163899Smjacob	}
954163899Smjacob	for (i = 0; i < 8; i++) {
955163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
956163899Smjacob	}
957163899Smjacob	for (i = 0; i < 24; i++) {
958163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_reserved1[i],
959163899Smjacob		    dst->pdb_reserved1[i]);
960163899Smjacob	}
961163899Smjacob}
962155228Smjacob
963155228Smjacob/*
964163899Smjacob * PLOGI/LOGO IOCB canonicalization
965155228Smjacob */
966163899Smjacob
967155228Smjacobvoid
968163899Smjacobisp_get_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst)
969155228Smjacob{
970163899Smjacob	int i;
971163899Smjacob	isp_get_hdr(isp, &src->plogx_header, &dst->plogx_header);
972163899Smjacob	ISP_IOXGET_32(isp, &src->plogx_handle, dst->plogx_handle);
973163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_status, dst->plogx_status);
974163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_nphdl, dst->plogx_nphdl);
975163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_flags, dst->plogx_flags);
976163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_vphdl, dst->plogx_vphdl);
977163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_portlo, dst->plogx_portlo);
978163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_rspsz_porthi, dst->plogx_rspsz_porthi);
979163899Smjacob	for (i = 0; i < 11; i++) {
980163899Smjacob		ISP_IOXGET_16(isp, &src->plogx_ioparm[i].lo16,
981163899Smjacob		    dst->plogx_ioparm[i].lo16);
982163899Smjacob		ISP_IOXGET_16(isp, &src->plogx_ioparm[i].hi16,
983163899Smjacob		    dst->plogx_ioparm[i].hi16);
984163899Smjacob	}
985155228Smjacob}
986155228Smjacob
987163899Smjacobvoid
988163899Smjacobisp_put_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst)
989163899Smjacob{
990163899Smjacob	int i;
991163899Smjacob	isp_put_hdr(isp, &src->plogx_header, &dst->plogx_header);
992163899Smjacob	ISP_IOXPUT_32(isp, src->plogx_handle, &dst->plogx_handle);
993163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_status, &dst->plogx_status);
994163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_nphdl, &dst->plogx_nphdl);
995163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_flags, &dst->plogx_flags);
996163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_vphdl, &dst->plogx_vphdl);
997163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_portlo, &dst->plogx_portlo);
998163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_rspsz_porthi, &dst->plogx_rspsz_porthi);
999163899Smjacob	for (i = 0; i < 11; i++) {
1000163899Smjacob		ISP_IOXPUT_16(isp, src->plogx_ioparm[i].lo16,
1001163899Smjacob		    &dst->plogx_ioparm[i].lo16);
1002163899Smjacob		ISP_IOXPUT_16(isp, src->plogx_ioparm[i].hi16,
1003163899Smjacob		    &dst->plogx_ioparm[i].hi16);
1004163899Smjacob	}
1005163899Smjacob}
1006163899Smjacob
1007155228Smjacob/*
1008163899Smjacob * CT Passthru canonicalization
1009163899Smjacob */
1010163899Smjacobvoid
1011163899Smjacobisp_get_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst)
1012163899Smjacob{
1013163899Smjacob	int i;
1014163899Smjacob
1015163899Smjacob	isp_get_hdr(isp, &src->ctp_header, &dst->ctp_header);
1016163899Smjacob	ISP_IOXGET_32(isp, &src->ctp_handle, dst->ctp_handle);
1017163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_status, dst->ctp_status);
1018163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_nphdl, dst->ctp_nphdl);
1019163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_cmd_cnt, dst->ctp_cmd_cnt);
1020163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_vpidx, dst->ctp_vpidx);
1021163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_time, dst->ctp_time);
1022163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_reserved0, dst->ctp_reserved0);
1023163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_rsp_cnt, dst->ctp_rsp_cnt);
1024163899Smjacob	for (i = 0; i < 5; i++) {
1025163899Smjacob		ISP_IOXGET_16(isp, &src->ctp_reserved1[i],
1026163899Smjacob		    dst->ctp_reserved1[i]);
1027163899Smjacob	}
1028163899Smjacob	ISP_IOXGET_32(isp, &src->ctp_rsp_bcnt, dst->ctp_rsp_bcnt);
1029163899Smjacob	ISP_IOXGET_32(isp, &src->ctp_cmd_bcnt, dst->ctp_cmd_bcnt);
1030163899Smjacob	for (i = 0; i < 2; i++) {
1031163899Smjacob		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_base,
1032163899Smjacob		    dst->ctp_dataseg[i].ds_base);
1033163899Smjacob		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_basehi,
1034163899Smjacob		    dst->ctp_dataseg[i].ds_basehi);
1035163899Smjacob		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_count,
1036163899Smjacob		    dst->ctp_dataseg[i].ds_count);
1037163899Smjacob	}
1038163899Smjacob}
1039163899Smjacob
1040163899Smjacobvoid
1041164370Smjacobisp_get_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst)
1042164370Smjacob{
1043164370Smjacob	int i;
1044164370Smjacob
1045164370Smjacob	isp_get_hdr(isp, &src->ms_header, &dst->ms_header);
1046164370Smjacob	ISP_IOXGET_32(isp, &src->ms_handle, dst->ms_handle);
1047164370Smjacob	ISP_IOXGET_16(isp, &src->ms_nphdl, dst->ms_nphdl);
1048164370Smjacob	ISP_IOXGET_16(isp, &src->ms_status, dst->ms_status);
1049164370Smjacob	ISP_IOXGET_16(isp, &src->ms_flags, dst->ms_flags);
1050164370Smjacob	ISP_IOXGET_16(isp, &src->ms_reserved1, dst->ms_reserved1);
1051164370Smjacob	ISP_IOXGET_16(isp, &src->ms_time, dst->ms_time);
1052164370Smjacob	ISP_IOXGET_16(isp, &src->ms_cmd_cnt, dst->ms_cmd_cnt);
1053164370Smjacob	ISP_IOXGET_16(isp, &src->ms_tot_cnt, dst->ms_tot_cnt);
1054164370Smjacob	ISP_IOXGET_8(isp, &src->ms_type, dst->ms_type);
1055164370Smjacob	ISP_IOXGET_8(isp, &src->ms_r_ctl, dst->ms_r_ctl);
1056164370Smjacob	ISP_IOXGET_16(isp, &src->ms_rxid, dst->ms_rxid);
1057164370Smjacob	ISP_IOXGET_16(isp, &src->ms_reserved2, dst->ms_reserved2);
1058164370Smjacob	ISP_IOXGET_32(isp, &src->ms_rsp_bcnt, dst->ms_rsp_bcnt);
1059164370Smjacob	ISP_IOXGET_32(isp, &src->ms_cmd_bcnt, dst->ms_cmd_bcnt);
1060164370Smjacob	for (i = 0; i < 2; i++) {
1061164370Smjacob		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_base,
1062164370Smjacob		    dst->ms_dataseg[i].ds_base);
1063164370Smjacob		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_basehi,
1064164370Smjacob		    dst->ms_dataseg[i].ds_basehi);
1065164370Smjacob		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_count,
1066164370Smjacob		    dst->ms_dataseg[i].ds_count);
1067164370Smjacob	}
1068164370Smjacob}
1069164370Smjacob
1070164370Smjacobvoid
1071163899Smjacobisp_put_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst)
1072163899Smjacob{
1073163899Smjacob	int i;
1074163899Smjacob
1075163899Smjacob	isp_put_hdr(isp, &src->ctp_header, &dst->ctp_header);
1076163899Smjacob	ISP_IOXPUT_32(isp, src->ctp_handle, &dst->ctp_handle);
1077163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_status, &dst->ctp_status);
1078163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_nphdl, &dst->ctp_nphdl);
1079163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_cmd_cnt, &dst->ctp_cmd_cnt);
1080163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_vpidx, &dst->ctp_vpidx);
1081163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_time, &dst->ctp_time);
1082163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_reserved0, &dst->ctp_reserved0);
1083163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_rsp_cnt, &dst->ctp_rsp_cnt);
1084163899Smjacob	for (i = 0; i < 5; i++) {
1085163899Smjacob		ISP_IOXPUT_16(isp, src->ctp_reserved1[i],
1086163899Smjacob		    &dst->ctp_reserved1[i]);
1087163899Smjacob	}
1088163899Smjacob	ISP_IOXPUT_32(isp, src->ctp_rsp_bcnt, &dst->ctp_rsp_bcnt);
1089163899Smjacob	ISP_IOXPUT_32(isp, src->ctp_cmd_bcnt, &dst->ctp_cmd_bcnt);
1090163899Smjacob	for (i = 0; i < 2; i++) {
1091163899Smjacob		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_base,
1092163899Smjacob		    &dst->ctp_dataseg[i].ds_base);
1093163899Smjacob		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_basehi,
1094163899Smjacob		    &dst->ctp_dataseg[i].ds_basehi);
1095163899Smjacob		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_count,
1096163899Smjacob		    &dst->ctp_dataseg[i].ds_count);
1097163899Smjacob	}
1098163899Smjacob}
1099163899Smjacob
1100164370Smjacobvoid
1101164370Smjacobisp_put_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst)
1102164370Smjacob{
1103164370Smjacob	int i;
1104164370Smjacob
1105164370Smjacob	isp_put_hdr(isp, &src->ms_header, &dst->ms_header);
1106164370Smjacob	ISP_IOXPUT_32(isp, src->ms_handle, &dst->ms_handle);
1107164370Smjacob	ISP_IOXPUT_16(isp, src->ms_nphdl, &dst->ms_nphdl);
1108164370Smjacob	ISP_IOXPUT_16(isp, src->ms_status, &dst->ms_status);
1109164370Smjacob	ISP_IOXPUT_16(isp, src->ms_flags, &dst->ms_flags);
1110164370Smjacob	ISP_IOXPUT_16(isp, src->ms_reserved1, &dst->ms_reserved1);
1111164370Smjacob	ISP_IOXPUT_16(isp, src->ms_time, &dst->ms_time);
1112164370Smjacob	ISP_IOXPUT_16(isp, src->ms_cmd_cnt, &dst->ms_cmd_cnt);
1113164370Smjacob	ISP_IOXPUT_16(isp, src->ms_tot_cnt, &dst->ms_tot_cnt);
1114164370Smjacob	ISP_IOXPUT_8(isp, src->ms_type, &dst->ms_type);
1115164370Smjacob	ISP_IOXPUT_8(isp, src->ms_r_ctl, &dst->ms_r_ctl);
1116164370Smjacob	ISP_IOXPUT_16(isp, src->ms_rxid, &dst->ms_rxid);
1117164370Smjacob	ISP_IOXPUT_16(isp, src->ms_reserved2, &dst->ms_reserved2);
1118164370Smjacob	ISP_IOXPUT_32(isp, src->ms_rsp_bcnt, &dst->ms_rsp_bcnt);
1119164370Smjacob	ISP_IOXPUT_32(isp, src->ms_cmd_bcnt, &dst->ms_cmd_bcnt);
1120164370Smjacob	for (i = 0; i < 2; i++) {
1121164370Smjacob		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_base,
1122164370Smjacob		    &dst->ms_dataseg[i].ds_base);
1123164370Smjacob		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_basehi,
1124164370Smjacob		    &dst->ms_dataseg[i].ds_basehi);
1125164370Smjacob		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_count,
1126164370Smjacob		    &dst->ms_dataseg[i].ds_count);
1127164370Smjacob	}
1128164370Smjacob}
1129164370Smjacob
1130163899Smjacob/*
1131155228Smjacob * Generic SNS request - not particularly useful since the per-command data
1132155228Smjacob * isn't always 16 bit words.
1133155228Smjacob */
1134155228Smjacobvoid
1135155704Smjacobisp_put_sns_request(ispsoftc_t *isp, sns_screq_t *src, sns_screq_t *dst)
1136155228Smjacob{
1137155228Smjacob	int i, nw = (int) src->snscb_sblen;
1138155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1139155228Smjacob	for (i = 0; i < 4; i++) {
1140155228Smjacob		ISP_IOXPUT_16(isp, src->snscb_addr[i], &dst->snscb_addr[i]);
1141155228Smjacob	}
1142155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1143155228Smjacob	for (i = 0; i < nw; i++) {
1144155228Smjacob		ISP_IOXPUT_16(isp, src->snscb_data[i], &dst->snscb_data[i]);
1145155228Smjacob	}
1146155228Smjacob
1147155228Smjacob}
1148155228Smjacob
1149155228Smjacobvoid
1150155704Smjacobisp_put_gid_ft_request(ispsoftc_t *isp, sns_gid_ft_req_t *src,
1151155228Smjacob    sns_gid_ft_req_t *dst)
1152155228Smjacob{
1153155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1154163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
1155155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
1156155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
1157155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
1158155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
1159155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1160163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
1161155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
1162155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2);
1163163899Smjacob	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
1164155228Smjacob	ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type);
1165155228Smjacob}
1166155228Smjacob
1167155228Smjacobvoid
1168155704Smjacobisp_put_gxn_id_request(ispsoftc_t *isp, sns_gxn_id_req_t *src,
1169155228Smjacob    sns_gxn_id_req_t *dst)
1170155228Smjacob{
1171155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1172163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
1173155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
1174155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
1175155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
1176155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
1177155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1178163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
1179155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
1180163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved2, &dst->snscb_reserved2);
1181163899Smjacob	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
1182155228Smjacob	ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid);
1183155228Smjacob}
1184155228Smjacob
1185155228Smjacob/*
1186155228Smjacob * Generic SNS response - not particularly useful since the per-command data
1187155228Smjacob * isn't always 16 bit words.
1188155228Smjacob */
1189155228Smjacobvoid
1190155704Smjacobisp_get_sns_response(ispsoftc_t *isp, sns_scrsp_t *src,
1191155228Smjacob    sns_scrsp_t *dst, int nwords)
1192155228Smjacob{
1193155228Smjacob	int i;
1194155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1195155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
1196155228Smjacob	for (i = 0; i < 3; i++) {
1197155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
1198155228Smjacob		    dst->snscb_port_id[i]);
1199155228Smjacob	}
1200155228Smjacob	for (i = 0; i < 8; i++) {
1201155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_portname[i],
1202155228Smjacob		    dst->snscb_portname[i]);
1203155228Smjacob	}
1204155228Smjacob	for (i = 0; i < nwords; i++) {
1205155228Smjacob		ISP_IOXGET_16(isp, &src->snscb_data[i], dst->snscb_data[i]);
1206155228Smjacob	}
1207155228Smjacob}
1208155228Smjacob
1209155228Smjacobvoid
1210155704Smjacobisp_get_gid_ft_response(ispsoftc_t *isp, sns_gid_ft_rsp_t *src,
1211155228Smjacob    sns_gid_ft_rsp_t *dst, int nwords)
1212155228Smjacob{
1213155228Smjacob	int i;
1214155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1215155228Smjacob	for (i = 0; i < nwords; i++) {
1216155228Smjacob		int j;
1217155228Smjacob		ISP_IOXGET_8(isp,
1218155228Smjacob		    &src->snscb_ports[i].control,
1219155228Smjacob		    dst->snscb_ports[i].control);
1220155228Smjacob		for (j = 0; j < 3; j++) {
1221155228Smjacob			ISP_IOXGET_8(isp,
1222155228Smjacob			    &src->snscb_ports[i].portid[j],
1223155228Smjacob			    dst->snscb_ports[i].portid[j]);
1224155228Smjacob		}
1225155228Smjacob		if (dst->snscb_ports[i].control & 0x80) {
1226155228Smjacob			break;
1227155228Smjacob		}
1228155228Smjacob	}
1229155228Smjacob}
1230155228Smjacob
1231155228Smjacobvoid
1232155704Smjacobisp_get_gxn_id_response(ispsoftc_t *isp, sns_gxn_id_rsp_t *src,
1233155228Smjacob    sns_gxn_id_rsp_t *dst)
1234155228Smjacob{
1235155228Smjacob	int i;
1236155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1237155228Smjacob	for (i = 0; i < 8; i++)
1238155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]);
1239155228Smjacob}
1240155228Smjacob
1241155228Smjacobvoid
1242155704Smjacobisp_get_gff_id_response(ispsoftc_t *isp, sns_gff_id_rsp_t *src,
1243155228Smjacob    sns_gff_id_rsp_t *dst)
1244155228Smjacob{
1245155228Smjacob	int i;
1246155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1247155228Smjacob	for (i = 0; i < 32; i++) {
1248155228Smjacob		ISP_IOXGET_32(isp, &src->snscb_fc4_features[i],
1249155228Smjacob		    dst->snscb_fc4_features[i]);
1250155228Smjacob	}
1251155228Smjacob}
1252155228Smjacob
1253155228Smjacobvoid
1254155704Smjacobisp_get_ga_nxt_response(ispsoftc_t *isp, sns_ga_nxt_rsp_t *src,
1255155228Smjacob    sns_ga_nxt_rsp_t *dst)
1256155228Smjacob{
1257155228Smjacob	int i;
1258155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1259155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
1260155228Smjacob	for (i = 0; i < 3; i++) {
1261155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
1262155228Smjacob		    dst->snscb_port_id[i]);
1263155228Smjacob	}
1264155228Smjacob	for (i = 0; i < 8; i++) {
1265155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_portname[i],
1266155228Smjacob		    dst->snscb_portname[i]);
1267155228Smjacob	}
1268155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen);
1269155228Smjacob	for (i = 0; i < 255; i++) {
1270155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]);
1271155228Smjacob	}
1272155228Smjacob	for (i = 0; i < 8; i++) {
1273155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_nodename[i],
1274155228Smjacob		    dst->snscb_nodename[i]);
1275155228Smjacob	}
1276155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen);
1277155228Smjacob	for (i = 0; i < 255; i++) {
1278155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]);
1279155228Smjacob	}
1280155228Smjacob	for (i = 0; i < 8; i++) {
1281155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_ipassoc[i],
1282155228Smjacob		    dst->snscb_ipassoc[i]);
1283155228Smjacob	}
1284155228Smjacob	for (i = 0; i < 16; i++) {
1285155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]);
1286155228Smjacob	}
1287155228Smjacob	for (i = 0; i < 4; i++) {
1288155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_svc_class[i],
1289155228Smjacob		    dst->snscb_svc_class[i]);
1290155228Smjacob	}
1291155228Smjacob	for (i = 0; i < 32; i++) {
1292155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_fc4_types[i],
1293155228Smjacob		    dst->snscb_fc4_types[i]);
1294155228Smjacob	}
1295155228Smjacob	for (i = 0; i < 8; i++) {
1296155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]);
1297155228Smjacob	}
1298155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved);
1299155228Smjacob	for (i = 0; i < 3; i++) {
1300155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_hardaddr[i],
1301155228Smjacob		    dst->snscb_hardaddr[i]);
1302155228Smjacob	}
1303155228Smjacob}
1304155228Smjacob
1305163899Smjacobvoid
1306163899Smjacobisp_get_els(ispsoftc_t *isp, els_t *src, els_t *dst)
1307163899Smjacob{
1308163899Smjacob	int i;
1309163899Smjacob
1310163899Smjacob	isp_get_hdr(isp, &src->els_hdr, &dst->els_hdr);
1311163899Smjacob	ISP_IOXGET_32(isp, &src->els_handle, dst->els_handle);
1312163899Smjacob	ISP_IOXGET_16(isp, &src->els_status, dst->els_status);
1313163899Smjacob	ISP_IOXGET_16(isp, &src->els_nphdl, dst->els_nphdl);
1314163899Smjacob	ISP_IOXGET_16(isp, &src->els_xmit_dsd_count, dst->els_xmit_dsd_count);
1315163899Smjacob	ISP_IOXGET_8(isp, &src->els_vphdl, dst->els_vphdl);
1316163899Smjacob	ISP_IOXGET_8(isp, &src->els_sof, dst->els_sof);
1317163899Smjacob	ISP_IOXGET_32(isp, &src->els_rxid, dst->els_rxid);
1318163899Smjacob	ISP_IOXGET_16(isp, &src->els_recv_dsd_count, dst->els_recv_dsd_count);
1319163899Smjacob	ISP_IOXGET_8(isp, &src->els_opcode, dst->els_opcode);
1320163899Smjacob	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved1);
1321163899Smjacob	ISP_IOXGET_8(isp, &src->els_did_lo, dst->els_did_lo);
1322163899Smjacob	ISP_IOXGET_8(isp, &src->els_did_mid, dst->els_did_mid);
1323163899Smjacob	ISP_IOXGET_8(isp, &src->els_did_hi, dst->els_did_hi);
1324163899Smjacob	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved2);
1325163899Smjacob	ISP_IOXGET_16(isp, &src->els_reserved3, dst->els_reserved3);
1326163899Smjacob	ISP_IOXGET_16(isp, &src->els_ctl_flags, dst->els_ctl_flags);
1327163899Smjacob	ISP_IOXGET_32(isp, &src->els_bytecnt, dst->els_bytecnt);
1328163899Smjacob	ISP_IOXGET_32(isp, &src->els_subcode1, dst->els_subcode1);
1329163899Smjacob	ISP_IOXGET_32(isp, &src->els_subcode2, dst->els_subcode2);
1330163899Smjacob	for (i = 0; i < 20; i++) {
1331163899Smjacob		ISP_IOXGET_8(isp, &src->els_reserved4[i],
1332163899Smjacob		    dst->els_reserved4[i]);
1333163899Smjacob	}
1334163899Smjacob}
1335163899Smjacob
1336163899Smjacobvoid
1337163899Smjacobisp_put_els(ispsoftc_t *isp, els_t *src, els_t *dst)
1338163899Smjacob{
1339163899Smjacob	isp_put_hdr(isp, &src->els_hdr, &dst->els_hdr);
1340163899Smjacob	ISP_IOXPUT_32(isp, src->els_handle, &dst->els_handle);
1341163899Smjacob	ISP_IOXPUT_16(isp, src->els_status, &dst->els_status);
1342163899Smjacob	ISP_IOXPUT_16(isp, src->els_nphdl, &dst->els_nphdl);
1343163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_count, &dst->els_xmit_dsd_count);
1344163899Smjacob	ISP_IOXPUT_8(isp, src->els_vphdl, &dst->els_vphdl);
1345163899Smjacob	ISP_IOXPUT_8(isp, src->els_sof, &dst->els_sof);
1346163899Smjacob	ISP_IOXPUT_32(isp, src->els_rxid, &dst->els_rxid);
1347163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_count, &dst->els_recv_dsd_count);
1348163899Smjacob	ISP_IOXPUT_8(isp, src->els_opcode, &dst->els_opcode);
1349163899Smjacob	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved1);
1350163899Smjacob	ISP_IOXPUT_8(isp, src->els_did_lo, &dst->els_did_lo);
1351163899Smjacob	ISP_IOXPUT_8(isp, src->els_did_mid, &dst->els_did_mid);
1352163899Smjacob	ISP_IOXPUT_8(isp, src->els_did_hi, &dst->els_did_hi);
1353163899Smjacob	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved2);
1354163899Smjacob	ISP_IOXPUT_16(isp, src->els_reserved3, &dst->els_reserved3);
1355163899Smjacob	ISP_IOXPUT_16(isp, src->els_ctl_flags, &dst->els_ctl_flags);
1356163899Smjacob	ISP_IOXPUT_32(isp, src->els_recv_bytecnt, &dst->els_recv_bytecnt);
1357163899Smjacob	ISP_IOXPUT_32(isp, src->els_xmit_bytecnt, &dst->els_xmit_bytecnt);
1358163899Smjacob	ISP_IOXPUT_32(isp, src->els_xmit_dsd_length, &dst->els_xmit_dsd_length);
1359163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a1500, &dst->els_xmit_dsd_a1500);
1360163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a3116, &dst->els_xmit_dsd_a3116);
1361163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a4732, &dst->els_xmit_dsd_a4732);
1362163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a6348, &dst->els_xmit_dsd_a6348);
1363163899Smjacob	ISP_IOXPUT_32(isp, src->els_recv_dsd_length, &dst->els_recv_dsd_length);
1364163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_a1500, &dst->els_recv_dsd_a1500);
1365163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_a3116, &dst->els_recv_dsd_a3116);
1366163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_a4732, &dst->els_recv_dsd_a4732);
1367163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_a6348, &dst->els_recv_dsd_a6348);
1368163899Smjacob}
1369163899Smjacob
1370163899Smjacob/*
1371163899Smjacob * FC Structure Canonicalization
1372163899Smjacob */
1373163899Smjacob
1374163899Smjacobvoid
1375163899Smjacobisp_get_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst)
1376163899Smjacob{
1377163899Smjacob        ISP_IOZGET_8(isp, &src->r_ctl, dst->r_ctl);
1378163899Smjacob        ISP_IOZGET_8(isp, &src->d_id[0], dst->d_id[0]);
1379163899Smjacob        ISP_IOZGET_8(isp, &src->d_id[1], dst->d_id[1]);
1380163899Smjacob        ISP_IOZGET_8(isp, &src->d_id[2], dst->d_id[2]);
1381163899Smjacob        ISP_IOZGET_8(isp, &src->cs_ctl, dst->cs_ctl);
1382163899Smjacob        ISP_IOZGET_8(isp, &src->s_id[0], dst->s_id[0]);
1383163899Smjacob        ISP_IOZGET_8(isp, &src->s_id[1], dst->s_id[1]);
1384163899Smjacob        ISP_IOZGET_8(isp, &src->s_id[2], dst->s_id[2]);
1385163899Smjacob        ISP_IOZGET_8(isp, &src->type, dst->type);
1386163899Smjacob        ISP_IOZGET_8(isp, &src->f_ctl, dst->f_ctl);
1387163899Smjacob        ISP_IOZGET_8(isp, &src->seq_id, dst->seq_id);
1388163899Smjacob        ISP_IOZGET_8(isp, &src->df_ctl, dst->df_ctl);
1389163899Smjacob        ISP_IOZGET_16(isp, &src->seq_cnt, dst->seq_cnt);
1390163899Smjacob	/* XXX SOMETHING WAS AND STILL CONTINUES WRONG HERE XXX */
1391163899Smjacob#if	0
1392163899Smjacob        ISP_IOZGET_16(isp, &src->ox_id, dst->ox_id);
1393163899Smjacob        ISP_IOZGET_16(isp, &src->rx_id, dst->rx_id);
1394163899Smjacob#else
1395163899Smjacob        ISP_IOZGET_32(isp, &src->ox_id, dst->parameter);
1396163899Smjacob        dst->ox_id = dst->parameter;
1397163899Smjacob        dst->rx_id = dst->parameter >> 16;
1398163899Smjacob#endif
1399163899Smjacob        ISP_IOZGET_32(isp, &src->parameter, dst->parameter);
1400163899Smjacob}
1401163899Smjacob
1402163899Smjacobvoid
1403163899Smjacobisp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *dst)
1404163899Smjacob{
1405163899Smjacob	int i;
1406163899Smjacob
1407163899Smjacob	for (i = 0; i < 8; i++) {
1408163899Smjacob		ISP_IOZGET_8(isp, &src->fcp_cmnd_lun[i], dst->fcp_cmnd_lun[i]);
1409163899Smjacob	}
1410163899Smjacob        ISP_IOZGET_8(isp, &src->fcp_cmnd_crn, dst->fcp_cmnd_crn);
1411163899Smjacob        ISP_IOZGET_8(isp, &src->fcp_cmnd_task_attribute,
1412163899Smjacob	    dst->fcp_cmnd_task_attribute);
1413163899Smjacob        ISP_IOZGET_8(isp, &src->fcp_cmnd_task_management,
1414163899Smjacob	    dst->fcp_cmnd_task_management);
1415163899Smjacob        ISP_IOZGET_8(isp, &src->fcp_cmnd_alen_datadir,
1416163899Smjacob	    dst->fcp_cmnd_alen_datadir);
1417163899Smjacob	for (i = 0; i < 16; i++) {
1418163899Smjacob		ISP_IOZGET_8(isp, &src->cdb_dl.sf.fcp_cmnd_cdb[i],
1419163899Smjacob		    dst->cdb_dl.sf.fcp_cmnd_cdb[i]);
1420163899Smjacob	}
1421163899Smjacob	ISP_IOZGET_32(isp, &src->cdb_dl.sf.fcp_cmnd_dl,
1422163899Smjacob	    dst->cdb_dl.sf.fcp_cmnd_dl);
1423163899Smjacob}
1424163899Smjacob
1425163899Smjacobvoid
1426163899Smjacobisp_put_rft_id(ispsoftc_t *isp, rft_id_t *src, rft_id_t *dst)
1427163899Smjacob{
1428163899Smjacob	int i;
1429163899Smjacob	isp_put_ct_hdr(isp, &src->rftid_hdr, &dst->rftid_hdr);
1430163899Smjacob	ISP_IOZPUT_8(isp, src->rftid_reserved, &dst->rftid_reserved);
1431163899Smjacob	for (i = 0; i < 3; i++) {
1432163899Smjacob		ISP_IOZPUT_8(isp, src->rftid_portid[i], &dst->rftid_portid[i]);
1433163899Smjacob	}
1434163899Smjacob	for (i = 0; i < 8; i++) {
1435163899Smjacob		ISP_IOZPUT_32(isp, src->rftid_fc4types[i],
1436163899Smjacob		    &dst->rftid_fc4types[i]);
1437163899Smjacob	}
1438163899Smjacob}
1439163899Smjacob
1440163899Smjacobvoid
1441163899Smjacobisp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
1442163899Smjacob{
1443163899Smjacob	ISP_IOZGET_8(isp, &src->ct_revision, dst->ct_revision);
1444163899Smjacob	ISP_IOZGET_8(isp, &src->ct_in_id[0], dst->ct_in_id[0]);
1445163899Smjacob	ISP_IOZGET_8(isp, &src->ct_in_id[1], dst->ct_in_id[1]);
1446163899Smjacob	ISP_IOZGET_8(isp, &src->ct_in_id[2], dst->ct_in_id[2]);
1447163899Smjacob	ISP_IOZGET_8(isp, &src->ct_fcs_type, dst->ct_fcs_type);
1448163899Smjacob	ISP_IOZGET_8(isp, &src->ct_fcs_subtype, dst->ct_fcs_subtype);
1449163899Smjacob	ISP_IOZGET_8(isp, &src->ct_options, dst->ct_options);
1450163899Smjacob	ISP_IOZGET_8(isp, &src->ct_reserved0, dst->ct_reserved0);
1451163899Smjacob	ISP_IOZGET_16(isp, &src->ct_cmd_resp, dst->ct_cmd_resp);
1452163899Smjacob	ISP_IOZGET_16(isp, &src->ct_bcnt_resid, dst->ct_bcnt_resid);
1453163899Smjacob	ISP_IOZGET_8(isp, &src->ct_reserved1, dst->ct_reserved1);
1454163899Smjacob	ISP_IOZGET_8(isp, &src->ct_reason, dst->ct_reason);
1455163899Smjacob	ISP_IOZGET_8(isp, &src->ct_explanation, dst->ct_explanation);
1456163899Smjacob	ISP_IOZGET_8(isp, &src->ct_vunique, dst->ct_vunique);
1457163899Smjacob}
1458163899Smjacob
1459163899Smjacobvoid
1460163899Smjacobisp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
1461163899Smjacob{
1462163899Smjacob	ISP_IOZPUT_8(isp, src->ct_revision, &dst->ct_revision);
1463163899Smjacob	ISP_IOZPUT_8(isp, src->ct_in_id[0], &dst->ct_in_id[0]);
1464163899Smjacob	ISP_IOZPUT_8(isp, src->ct_in_id[1], &dst->ct_in_id[1]);
1465163899Smjacob	ISP_IOZPUT_8(isp, src->ct_in_id[2], &dst->ct_in_id[2]);
1466163899Smjacob	ISP_IOZPUT_8(isp, src->ct_fcs_type, &dst->ct_fcs_type);
1467163899Smjacob	ISP_IOZPUT_8(isp, src->ct_fcs_subtype, &dst->ct_fcs_subtype);
1468163899Smjacob	ISP_IOZPUT_8(isp, src->ct_options, &dst->ct_options);
1469163899Smjacob	ISP_IOZPUT_8(isp, src->ct_reserved0, &dst->ct_reserved0);
1470163899Smjacob	ISP_IOZPUT_16(isp, src->ct_cmd_resp, &dst->ct_cmd_resp);
1471163899Smjacob	ISP_IOZPUT_16(isp, src->ct_bcnt_resid, &dst->ct_bcnt_resid);
1472163899Smjacob	ISP_IOZPUT_8(isp, src->ct_reserved1, &dst->ct_reserved1);
1473163899Smjacob	ISP_IOZPUT_8(isp, src->ct_reason, &dst->ct_reason);
1474163899Smjacob	ISP_IOZPUT_8(isp, src->ct_explanation, &dst->ct_explanation);
1475163899Smjacob	ISP_IOZPUT_8(isp, src->ct_vunique, &dst->ct_vunique);
1476163899Smjacob}
1477163899Smjacob
1478155228Smjacob#ifdef	ISP_TARGET_MODE
1479155228Smjacobint
1480163899Smjacobisp_save_xs_tgt(ispsoftc_t *isp, void *xs, uint32_t *handlep)
1481155228Smjacob{
1482155228Smjacob	int i;
1483155228Smjacob
1484155228Smjacob	for (i = 0; i < (int) isp->isp_maxcmds; i++) {
1485155228Smjacob		if (isp->isp_tgtlist[i] == NULL) {
1486155228Smjacob			break;
1487155228Smjacob		}
1488155228Smjacob	}
1489155228Smjacob	if (i == isp->isp_maxcmds) {
1490155228Smjacob		return (-1);
1491155228Smjacob	}
1492155228Smjacob	isp->isp_tgtlist[i] = xs;
1493163899Smjacob	*handlep = (i+1) | 0x8000;
1494155228Smjacob	return (0);
1495155228Smjacob}
1496155228Smjacob
1497155228Smjacobvoid *
1498163899Smjacobisp_find_xs_tgt(ispsoftc_t *isp, uint32_t handle)
1499155228Smjacob{
1500163899Smjacob	if (handle == 0 || (handle & 0x8000) == 0 ||
1501163899Smjacob	    (handle & 0x7fff) > isp->isp_maxcmds) {
1502163899Smjacob		isp_prt(isp, ISP_LOGERR, "bad handle in isp_find_xs_tgt");
1503155228Smjacob		return (NULL);
1504155228Smjacob	} else {
1505163899Smjacob		return (isp->isp_tgtlist[(handle & 0x7fff) - 1]);
1506155228Smjacob	}
1507155228Smjacob}
1508155228Smjacob
1509163899Smjacobuint32_t
1510155704Smjacobisp_find_tgt_handle(ispsoftc_t *isp, void *xs)
1511155228Smjacob{
1512155228Smjacob	int i;
1513155228Smjacob	if (xs != NULL) {
1514155228Smjacob		for (i = 0; i < isp->isp_maxcmds; i++) {
1515155228Smjacob			if (isp->isp_tgtlist[i] == xs) {
1516163899Smjacob				return ((i+1) & 0x7fff);
1517155228Smjacob			}
1518155228Smjacob		}
1519155228Smjacob	}
1520155228Smjacob	return (0);
1521155228Smjacob}
1522155228Smjacob
1523155228Smjacobvoid
1524163899Smjacobisp_destroy_tgt_handle(ispsoftc_t *isp, uint32_t handle)
1525155228Smjacob{
1526163899Smjacob	if (handle == 0 || (handle & 0x8000) == 0 ||
1527163899Smjacob	    (handle & 0x7fff) > isp->isp_maxcmds) {
1528163899Smjacob		isp_prt(isp, ISP_LOGERR,
1529163899Smjacob		    "bad handle in isp_destroy_tgt_handle");
1530163899Smjacob	} else {
1531163899Smjacob		isp->isp_tgtlist[(handle & 0x7fff) - 1] = NULL;
1532155228Smjacob	}
1533155228Smjacob}
1534163899Smjacob
1535155228Smjacobvoid
1536163899Smjacobisp_put_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
1537155228Smjacob{
1538155228Smjacob	int i;
1539163899Smjacob	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1540163899Smjacob	ISP_IOXPUT_16(isp, src->at_reserved, &dst->at_reserved);
1541163899Smjacob	ISP_IOXPUT_16(isp, src->at_handle, &dst->at_handle);
1542155228Smjacob	if (ISP_IS_SBUS(isp)) {
1543163899Smjacob		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_iid);
1544163899Smjacob		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_lun);
1545163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_tgt);
1546163899Smjacob		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_cdblen);
1547163899Smjacob		ISP_IOXPUT_8(isp, src->at_status, &dst->at_scsi_status);
1548163899Smjacob		ISP_IOXPUT_8(isp, src->at_scsi_status, &dst->at_status);
1549163899Smjacob		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_type);
1550163899Smjacob		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_val);
1551155228Smjacob	} else {
1552163899Smjacob		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
1553163899Smjacob		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
1554163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_cdblen);
1555163899Smjacob		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_tgt);
1556163899Smjacob		ISP_IOXPUT_8(isp, src->at_status, &dst->at_status);
1557163899Smjacob		ISP_IOXPUT_8(isp, src->at_scsi_status,
1558163899Smjacob		    &dst->at_scsi_status);
1559163899Smjacob		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_val);
1560163899Smjacob		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_type);
1561155228Smjacob	}
1562163899Smjacob	ISP_IOXPUT_32(isp, src->at_flags, &dst->at_flags);
1563155228Smjacob	for (i = 0; i < ATIO_CDBLEN; i++) {
1564163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1565155228Smjacob	}
1566155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
1567163899Smjacob		ISP_IOXPUT_8(isp, src->at_sense[i], &dst->at_sense[i]);
1568155228Smjacob	}
1569155228Smjacob}
1570155228Smjacob
1571155228Smjacobvoid
1572163899Smjacobisp_get_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
1573155228Smjacob{
1574155228Smjacob	int i;
1575163899Smjacob	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1576163899Smjacob	ISP_IOXGET_16(isp, &src->at_reserved, dst->at_reserved);
1577163899Smjacob	ISP_IOXGET_16(isp, &src->at_handle, dst->at_handle);
1578155228Smjacob	if (ISP_IS_SBUS(isp)) {
1579163899Smjacob		ISP_IOXGET_8(isp, &src->at_lun, dst->at_iid);
1580163899Smjacob		ISP_IOXGET_8(isp, &src->at_iid, dst->at_lun);
1581163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_tgt);
1582163899Smjacob		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_cdblen);
1583163899Smjacob		ISP_IOXGET_8(isp, &src->at_status, dst->at_scsi_status);
1584163899Smjacob		ISP_IOXGET_8(isp, &src->at_scsi_status, dst->at_status);
1585163899Smjacob		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_type);
1586163899Smjacob		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_val);
1587155228Smjacob	} else {
1588163899Smjacob		ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
1589163899Smjacob		ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
1590163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_cdblen);
1591163899Smjacob		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_tgt);
1592163899Smjacob		ISP_IOXGET_8(isp, &src->at_status, dst->at_status);
1593163899Smjacob		ISP_IOXGET_8(isp, &src->at_scsi_status,
1594163899Smjacob		    dst->at_scsi_status);
1595163899Smjacob		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_val);
1596163899Smjacob		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_type);
1597155228Smjacob	}
1598163899Smjacob	ISP_IOXGET_32(isp, &src->at_flags, dst->at_flags);
1599155228Smjacob	for (i = 0; i < ATIO_CDBLEN; i++) {
1600163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1601155228Smjacob	}
1602155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
1603163899Smjacob		ISP_IOXGET_8(isp, &src->at_sense[i], dst->at_sense[i]);
1604155228Smjacob	}
1605155228Smjacob}
1606155228Smjacob
1607155228Smjacobvoid
1608163899Smjacobisp_put_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
1609155228Smjacob{
1610155228Smjacob	int i;
1611163899Smjacob	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1612163899Smjacob	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
1613163899Smjacob	ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
1614163899Smjacob	ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
1615163899Smjacob	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
1616163899Smjacob	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
1617163899Smjacob	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
1618163899Smjacob	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
1619163899Smjacob	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
1620163899Smjacob	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
1621163899Smjacob	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
1622155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1623163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1624155228Smjacob	}
1625163899Smjacob	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
1626163899Smjacob	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
1627155228Smjacob	for (i = 0; i < 4; i++) {
1628163899Smjacob		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
1629155228Smjacob	}
1630155228Smjacob	for (i = 0; i < 6; i++) {
1631163899Smjacob		ISP_IOXPUT_16(isp, src->at_reserved2[i],
1632163899Smjacob		    &dst->at_reserved2[i]);
1633155228Smjacob	}
1634163899Smjacob	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
1635155228Smjacob}
1636155228Smjacob
1637155228Smjacobvoid
1638163899Smjacobisp_put_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
1639155228Smjacob{
1640155228Smjacob	int i;
1641163899Smjacob	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1642163899Smjacob	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
1643163899Smjacob	ISP_IOXPUT_16(isp, src->at_iid, &dst->at_iid);
1644163899Smjacob	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
1645163899Smjacob	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
1646163899Smjacob	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
1647163899Smjacob	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
1648163899Smjacob	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
1649163899Smjacob	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
1650163899Smjacob	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
1651155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1652163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1653155228Smjacob	}
1654163899Smjacob	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
1655163899Smjacob	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
1656155228Smjacob	for (i = 0; i < 4; i++) {
1657163899Smjacob		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
1658155228Smjacob	}
1659155228Smjacob	for (i = 0; i < 6; i++) {
1660163899Smjacob		ISP_IOXPUT_16(isp, src->at_reserved2[i],
1661163899Smjacob		    &dst->at_reserved2[i]);
1662155228Smjacob	}
1663163899Smjacob	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
1664155228Smjacob}
1665155228Smjacob
1666155228Smjacobvoid
1667163899Smjacobisp_get_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
1668155228Smjacob{
1669155228Smjacob	int i;
1670163899Smjacob	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1671163899Smjacob	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
1672163899Smjacob	ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
1673163899Smjacob	ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
1674163899Smjacob	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
1675163899Smjacob	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
1676163899Smjacob	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
1677163899Smjacob	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
1678163899Smjacob	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
1679163899Smjacob	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
1680163899Smjacob	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
1681155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1682163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1683155228Smjacob	}
1684163899Smjacob	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
1685163899Smjacob	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
1686155228Smjacob	for (i = 0; i < 4; i++) {
1687163899Smjacob		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
1688155228Smjacob	}
1689155228Smjacob	for (i = 0; i < 6; i++) {
1690163899Smjacob		ISP_IOXGET_16(isp, &src->at_reserved2[i],
1691163899Smjacob		    dst->at_reserved2[i]);
1692155228Smjacob	}
1693163899Smjacob	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
1694155228Smjacob}
1695155228Smjacob
1696155228Smjacobvoid
1697163899Smjacobisp_get_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
1698155228Smjacob{
1699155228Smjacob	int i;
1700163899Smjacob	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1701163899Smjacob	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
1702163899Smjacob	ISP_IOXGET_16(isp, &src->at_iid, dst->at_iid);
1703163899Smjacob	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
1704163899Smjacob	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
1705163899Smjacob	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
1706163899Smjacob	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
1707163899Smjacob	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
1708163899Smjacob	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
1709163899Smjacob	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
1710155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1711163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1712155228Smjacob	}
1713163899Smjacob	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
1714163899Smjacob	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
1715155228Smjacob	for (i = 0; i < 4; i++) {
1716163899Smjacob		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
1717155228Smjacob	}
1718155228Smjacob	for (i = 0; i < 6; i++) {
1719163899Smjacob		ISP_IOXGET_16(isp, &src->at_reserved2[i],
1720163899Smjacob		    dst->at_reserved2[i]);
1721155228Smjacob	}
1722163899Smjacob	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
1723155228Smjacob}
1724155228Smjacob
1725155228Smjacobvoid
1726163899Smjacobisp_get_atio7(ispsoftc_t *isp, at7_entry_t *src, at7_entry_t *dst)
1727155228Smjacob{
1728163899Smjacob	ISP_IOXGET_8(isp, &src->at_type, dst->at_type);
1729163899Smjacob	ISP_IOXGET_8(isp, &src->at_count, dst->at_count);
1730163899Smjacob	ISP_IOXGET_16(isp, &src->at_ta_len, dst->at_ta_len);
1731163899Smjacob	ISP_IOXGET_32(isp, &src->at_rxid, dst->at_rxid);
1732163899Smjacob	isp_get_fc_hdr(isp, &src->at_hdr, &dst->at_hdr);
1733163899Smjacob	isp_get_fcp_cmnd_iu(isp, &src->at_cmnd, &dst->at_cmnd);
1734163899Smjacob}
1735163899Smjacob
1736163899Smjacobvoid
1737163899Smjacobisp_put_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
1738163899Smjacob{
1739155228Smjacob	int i;
1740163899Smjacob	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1741163899Smjacob	ISP_IOXPUT_16(isp, src->ct_syshandle, &dst->ct_syshandle);
1742163899Smjacob	ISP_IOXPUT_16(isp, src->ct_fwhandle, &dst->ct_fwhandle);
1743155228Smjacob	if (ISP_IS_SBUS(isp)) {
1744163899Smjacob		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_lun);
1745163899Smjacob		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_iid);
1746163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_reserved2);
1747163899Smjacob		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_tgt);
1748163899Smjacob		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_scsi_status);
1749163899Smjacob		ISP_IOXPUT_8(isp, src->ct_scsi_status, &dst->ct_status);
1750163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_val);
1751163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_type);
1752155228Smjacob	} else {
1753163899Smjacob		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
1754163899Smjacob		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
1755163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_tgt);
1756163899Smjacob		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_reserved2);
1757163899Smjacob		ISP_IOXPUT_8(isp, src->ct_scsi_status,
1758163899Smjacob		    &dst->ct_scsi_status);
1759163899Smjacob		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_status);
1760163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_type);
1761163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_val);
1762155228Smjacob	}
1763163899Smjacob	ISP_IOXPUT_32(isp, src->ct_flags, &dst->ct_flags);
1764163899Smjacob	ISP_IOXPUT_32(isp, src->ct_xfrlen, &dst->ct_xfrlen);
1765163899Smjacob	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1766163899Smjacob	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1767163899Smjacob	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1768155228Smjacob	for (i = 0; i < ISP_RQDSEG; i++) {
1769163899Smjacob		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_base,
1770163899Smjacob		    &dst->ct_dataseg[i].ds_base);
1771163899Smjacob		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_count,
1772163899Smjacob		    &dst->ct_dataseg[i].ds_count);
1773155228Smjacob	}
1774155228Smjacob}
1775155228Smjacob
1776155228Smjacobvoid
1777163899Smjacobisp_get_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
1778155228Smjacob{
1779155228Smjacob	int i;
1780163899Smjacob	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
1781163899Smjacob	ISP_IOXGET_16(isp, &src->ct_syshandle, dst->ct_syshandle);
1782163899Smjacob	ISP_IOXGET_16(isp, &src->ct_fwhandle, dst->ct_fwhandle);
1783155228Smjacob	if (ISP_IS_SBUS(isp)) {
1784163899Smjacob		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_iid);
1785163899Smjacob		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_lun);
1786163899Smjacob		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_tgt);
1787163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_reserved2);
1788163899Smjacob		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_scsi_status);
1789163899Smjacob		ISP_IOXGET_8(isp, &src->ct_scsi_status, dst->ct_status);
1790163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_type);
1791163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_val);
1792155228Smjacob	} else {
1793163899Smjacob		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
1794163899Smjacob		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
1795163899Smjacob		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_reserved2);
1796163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_tgt);
1797163899Smjacob		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_status);
1798163899Smjacob		ISP_IOXGET_8(isp, &src->ct_scsi_status,
1799163899Smjacob		    dst->ct_scsi_status);
1800163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_val);
1801163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_type);
1802155228Smjacob	}
1803163899Smjacob	ISP_IOXGET_32(isp, &src->ct_flags, dst->ct_flags);
1804163899Smjacob	ISP_IOXGET_32(isp, &src->ct_xfrlen, dst->ct_xfrlen);
1805163899Smjacob	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
1806163899Smjacob	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
1807163899Smjacob	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
1808155228Smjacob	for (i = 0; i < ISP_RQDSEG; i++) {
1809155228Smjacob		ISP_IOXGET_32(isp,
1810163899Smjacob		    &src->ct_dataseg[i].ds_base,
1811163899Smjacob		    dst->ct_dataseg[i].ds_base);
1812155228Smjacob		ISP_IOXGET_32(isp,
1813163899Smjacob		    &src->ct_dataseg[i].ds_count,
1814163899Smjacob		    dst->ct_dataseg[i].ds_count);
1815155228Smjacob	}
1816155228Smjacob}
1817155228Smjacob
1818155228Smjacobvoid
1819163899Smjacobisp_put_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
1820155228Smjacob{
1821155228Smjacob	int i;
1822163899Smjacob	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1823163899Smjacob	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1824163899Smjacob	ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
1825163899Smjacob	ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
1826163899Smjacob	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
1827163899Smjacob	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
1828163899Smjacob	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1829163899Smjacob	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1830163899Smjacob	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1831163899Smjacob	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
1832163899Smjacob	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1833163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0._reserved,
1834163899Smjacob		    &dst->rsp.m0._reserved);
1835163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2,
1836163899Smjacob		    &dst->rsp.m0._reserved2);
1837163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status,
1838163899Smjacob		    &dst->rsp.m0.ct_scsi_status);
1839163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
1840163899Smjacob		    &dst->rsp.m0.ct_xfrlen);
1841163899Smjacob		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1842155228Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1843155228Smjacob				ISP_IOXPUT_32(isp,
1844163899Smjacob				    src->rsp.m0.u.ct_dataseg[i].ds_base,
1845163899Smjacob				    &dst->rsp.m0.u.ct_dataseg[i].ds_base);
1846155228Smjacob				ISP_IOXPUT_32(isp,
1847163899Smjacob				    src->rsp.m0.u.ct_dataseg[i].ds_count,
1848163899Smjacob				    &dst->rsp.m0.u.ct_dataseg[i].ds_count);
1849155228Smjacob			}
1850163899Smjacob		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1851155228Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1852155228Smjacob				ISP_IOXPUT_32(isp,
1853163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_base,
1854163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
1855155228Smjacob				ISP_IOXPUT_32(isp,
1856163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
1857163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
1858155228Smjacob				ISP_IOXPUT_32(isp,
1859163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_count,
1860163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
1861155228Smjacob			}
1862163899Smjacob		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1863163899Smjacob			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type,
1864163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_type);
1865163899Smjacob			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment,
1866163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_segment);
1867163899Smjacob			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base,
1868163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_base);
1869155228Smjacob		}
1870163899Smjacob	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1871163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1._reserved,
1872163899Smjacob		    &dst->rsp.m1._reserved);
1873163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2,
1874163899Smjacob		    &dst->rsp.m1._reserved2);
1875163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen,
1876163899Smjacob		    &dst->rsp.m1.ct_senselen);
1877163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status,
1878163899Smjacob		    &dst->rsp.m1.ct_scsi_status);
1879163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
1880163899Smjacob		    &dst->rsp.m1.ct_resplen);
1881155228Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
1882163899Smjacob			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
1883163899Smjacob			    &dst->rsp.m1.ct_resp[i]);
1884155228Smjacob		}
1885155228Smjacob	} else {
1886163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2._reserved,
1887163899Smjacob		    &dst->rsp.m2._reserved);
1888163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2,
1889163899Smjacob		    &dst->rsp.m2._reserved2);
1890163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3,
1891163899Smjacob		    &dst->rsp.m2._reserved3);
1892163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
1893163899Smjacob		    &dst->rsp.m2.ct_datalen);
1894163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1895163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1896163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1897163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1898155228Smjacob	}
1899155228Smjacob}
1900155228Smjacob
1901155228Smjacobvoid
1902163899Smjacobisp_put_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
1903155228Smjacob{
1904155228Smjacob	int i;
1905163899Smjacob	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1906163899Smjacob	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1907163899Smjacob	ISP_IOXPUT_16(isp, src->ct_iid, &dst->ct_iid);
1908163899Smjacob	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
1909163899Smjacob	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
1910163899Smjacob	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1911163899Smjacob	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1912163899Smjacob	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1913163899Smjacob	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
1914163899Smjacob	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1915163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0._reserved,
1916163899Smjacob		    &dst->rsp.m0._reserved);
1917163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2,
1918163899Smjacob		    &dst->rsp.m0._reserved2);
1919163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status,
1920163899Smjacob		    &dst->rsp.m0.ct_scsi_status);
1921163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
1922163899Smjacob		    &dst->rsp.m0.ct_xfrlen);
1923163899Smjacob		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1924155228Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1925155228Smjacob				ISP_IOXPUT_32(isp,
1926163899Smjacob				    src->rsp.m0.u.ct_dataseg[i].ds_base,
1927163899Smjacob				    &dst->rsp.m0.u.ct_dataseg[i].ds_base);
1928155228Smjacob				ISP_IOXPUT_32(isp,
1929163899Smjacob				    src->rsp.m0.u.ct_dataseg[i].ds_count,
1930163899Smjacob				    &dst->rsp.m0.u.ct_dataseg[i].ds_count);
1931155228Smjacob			}
1932163899Smjacob		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1933155228Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1934155228Smjacob				ISP_IOXPUT_32(isp,
1935163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_base,
1936163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
1937155228Smjacob				ISP_IOXPUT_32(isp,
1938163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
1939163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
1940155228Smjacob				ISP_IOXPUT_32(isp,
1941163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_count,
1942163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
1943155228Smjacob			}
1944163899Smjacob		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1945163899Smjacob			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type,
1946163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_type);
1947163899Smjacob			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment,
1948163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_segment);
1949163899Smjacob			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base,
1950163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_base);
1951155228Smjacob		}
1952163899Smjacob	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1953163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1._reserved,
1954163899Smjacob		    &dst->rsp.m1._reserved);
1955163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2,
1956163899Smjacob		    &dst->rsp.m1._reserved2);
1957163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen,
1958163899Smjacob		    &dst->rsp.m1.ct_senselen);
1959163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status,
1960163899Smjacob		    &dst->rsp.m1.ct_scsi_status);
1961163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
1962163899Smjacob		    &dst->rsp.m1.ct_resplen);
1963155228Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
1964163899Smjacob			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
1965163899Smjacob			    &dst->rsp.m1.ct_resp[i]);
1966155228Smjacob		}
1967155228Smjacob	} else {
1968163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2._reserved,
1969163899Smjacob		    &dst->rsp.m2._reserved);
1970163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2,
1971163899Smjacob		    &dst->rsp.m2._reserved2);
1972163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3,
1973163899Smjacob		    &dst->rsp.m2._reserved3);
1974163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
1975163899Smjacob		    &dst->rsp.m2.ct_datalen);
1976163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1977163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1978163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1979163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1980155228Smjacob	}
1981155228Smjacob}
1982155228Smjacob
1983155228Smjacobvoid
1984163899Smjacobisp_put_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
1985155228Smjacob{
1986163899Smjacob	int i;
1987163899Smjacob
1988163899Smjacob	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1989163899Smjacob	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1990163899Smjacob	ISP_IOXPUT_16(isp, src->ct_nphdl, &dst->ct_nphdl);
1991163899Smjacob	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1992163899Smjacob	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1993163899Smjacob	ISP_IOXPUT_8(isp, src->ct_vpindex, &dst->ct_vpindex);
1994163899Smjacob	ISP_IOXPUT_8(isp, src->ct_xflags, &dst->ct_xflags);
1995163899Smjacob	ISP_IOXPUT_16(isp, src->ct_iid_lo, &dst->ct_iid_lo);
1996163899Smjacob	ISP_IOXPUT_8(isp, src->ct_iid_hi, &dst->ct_iid_hi);
1997163899Smjacob	ISP_IOXPUT_8(isp, src->ct_reserved, &dst->ct_reserved);
1998163899Smjacob	ISP_IOXPUT_32(isp, src->ct_rxid, &dst->ct_rxid);
1999163899Smjacob	ISP_IOXPUT_16(isp, src->ct_senselen, &dst->ct_senselen);
2000163899Smjacob	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
2001163899Smjacob	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
2002163899Smjacob	ISP_IOXPUT_16(isp, src->ct_oxid, &dst->ct_oxid);
2003163899Smjacob	ISP_IOXPUT_16(isp, src->ct_scsi_status, &dst->ct_scsi_status);
2004163899Smjacob	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
2005163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.reloff, &dst->rsp.m0.reloff);
2006163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.reserved0,
2007163899Smjacob		    &dst->rsp.m0.reserved0);
2008163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
2009163899Smjacob		    &dst->rsp.m0.ct_xfrlen);
2010163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.reserved1,
2011163899Smjacob		    &dst->rsp.m0.reserved1);
2012163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_base,
2013163899Smjacob		    &dst->rsp.m0.ds.ds_base);
2014163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_basehi,
2015163899Smjacob		    &dst->rsp.m0.ds.ds_basehi);
2016163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_count,
2017163899Smjacob		    &dst->rsp.m0.ds.ds_count);
2018163899Smjacob	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
2019163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
2020163899Smjacob		    &dst->rsp.m1.ct_resplen);
2021163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.reserved, &dst->rsp.m1.reserved);
2022163899Smjacob		for (i = 0; i < MAXRESPLEN_24XX; i++) {
2023163899Smjacob			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
2024163899Smjacob			    &dst->rsp.m1.ct_resp[i]);
2025163899Smjacob		}
2026163899Smjacob	} else {
2027163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.reserved0,
2028163899Smjacob		    &dst->rsp.m2.reserved0);
2029163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
2030163899Smjacob		    &dst->rsp.m2.ct_datalen);
2031163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.reserved1,
2032163899Smjacob		    &dst->rsp.m2.reserved1);
2033163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2034163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2035163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi,
2036163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
2037163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2038163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2039163899Smjacob	}
2040155228Smjacob}
2041155228Smjacob
2042163899Smjacob
2043155228Smjacobvoid
2044163899Smjacobisp_get_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
2045155228Smjacob{
2046163899Smjacob	int i;
2047163899Smjacob
2048163899Smjacob	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2049163899Smjacob	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2050163899Smjacob	ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
2051163899Smjacob	ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
2052163899Smjacob	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
2053163899Smjacob	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2054163899Smjacob	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
2055163899Smjacob	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2056163899Smjacob	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2057163899Smjacob	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
2058163899Smjacob	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2059163899Smjacob	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
2060163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0._reserved,
2061163899Smjacob		    dst->rsp.m0._reserved);
2062163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2,
2063163899Smjacob		    dst->rsp.m0._reserved2);
2064163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status,
2065163899Smjacob		    dst->rsp.m0.ct_scsi_status);
2066163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2067163899Smjacob		    dst->rsp.m0.ct_xfrlen);
2068163899Smjacob		if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
2069163899Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
2070163899Smjacob				ISP_IOXGET_32(isp,
2071163899Smjacob				    &src->rsp.m0.u.ct_dataseg[i].ds_base,
2072163899Smjacob				    dst->rsp.m0.u.ct_dataseg[i].ds_base);
2073163899Smjacob				ISP_IOXGET_32(isp,
2074163899Smjacob				    &src->rsp.m0.u.ct_dataseg[i].ds_count,
2075163899Smjacob				    dst->rsp.m0.u.ct_dataseg[i].ds_count);
2076163899Smjacob			}
2077163899Smjacob		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
2078163899Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
2079163899Smjacob				ISP_IOXGET_32(isp,
2080163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_base,
2081163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_base);
2082163899Smjacob				ISP_IOXGET_32(isp,
2083163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
2084163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
2085163899Smjacob				ISP_IOXGET_32(isp,
2086163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_count,
2087163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_count);
2088163899Smjacob			}
2089163899Smjacob		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
2090163899Smjacob			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type,
2091163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_type);
2092163899Smjacob			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment,
2093163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_segment);
2094163899Smjacob			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base,
2095163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_base);
2096163899Smjacob		}
2097163899Smjacob	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
2098163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1._reserved,
2099163899Smjacob		    dst->rsp.m1._reserved);
2100163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2,
2101163899Smjacob		    dst->rsp.m1._reserved2);
2102163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen,
2103163899Smjacob		    dst->rsp.m1.ct_senselen);
2104163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status,
2105163899Smjacob		    dst->rsp.m1.ct_scsi_status);
2106163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2107163899Smjacob		    dst->rsp.m1.ct_resplen);
2108163899Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
2109163899Smjacob			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2110163899Smjacob			    dst->rsp.m1.ct_resp[i]);
2111163899Smjacob		}
2112163899Smjacob	} else {
2113163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2._reserved,
2114163899Smjacob		    dst->rsp.m2._reserved);
2115163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2,
2116163899Smjacob		    dst->rsp.m2._reserved2);
2117163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3,
2118163899Smjacob		    dst->rsp.m2._reserved3);
2119163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2120163899Smjacob		    dst->rsp.m2.ct_datalen);
2121163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2122163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2123163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2124163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2125163899Smjacob	}
2126155228Smjacob}
2127155228Smjacob
2128155228Smjacobvoid
2129163899Smjacobisp_get_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
2130163899Smjacob{
2131163899Smjacob	int i;
2132163899Smjacob
2133163899Smjacob	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2134163899Smjacob	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2135163899Smjacob	ISP_IOXGET_16(isp, &src->ct_iid, dst->ct_iid);
2136163899Smjacob	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
2137163899Smjacob	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2138163899Smjacob	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
2139163899Smjacob	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2140163899Smjacob	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2141163899Smjacob	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
2142163899Smjacob	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2143163899Smjacob	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
2144163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0._reserved,
2145163899Smjacob		    dst->rsp.m0._reserved);
2146163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2,
2147163899Smjacob		    dst->rsp.m0._reserved2);
2148163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status,
2149163899Smjacob		    dst->rsp.m0.ct_scsi_status);
2150163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2151163899Smjacob		    dst->rsp.m0.ct_xfrlen);
2152163899Smjacob		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
2153163899Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
2154163899Smjacob				ISP_IOXGET_32(isp,
2155163899Smjacob				    &src->rsp.m0.u.ct_dataseg[i].ds_base,
2156163899Smjacob				    dst->rsp.m0.u.ct_dataseg[i].ds_base);
2157163899Smjacob				ISP_IOXGET_32(isp,
2158163899Smjacob				    &src->rsp.m0.u.ct_dataseg[i].ds_count,
2159163899Smjacob				    dst->rsp.m0.u.ct_dataseg[i].ds_count);
2160163899Smjacob			}
2161163899Smjacob		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
2162163899Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
2163163899Smjacob				ISP_IOXGET_32(isp,
2164163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_base,
2165163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_base);
2166163899Smjacob				ISP_IOXGET_32(isp,
2167163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
2168163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
2169163899Smjacob				ISP_IOXGET_32(isp,
2170163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_count,
2171163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_count);
2172163899Smjacob			}
2173163899Smjacob		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
2174163899Smjacob			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type,
2175163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_type);
2176163899Smjacob			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment,
2177163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_segment);
2178163899Smjacob			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base,
2179163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_base);
2180163899Smjacob		}
2181163899Smjacob	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
2182163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1._reserved,
2183163899Smjacob		    dst->rsp.m1._reserved);
2184163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2,
2185163899Smjacob		    dst->rsp.m1._reserved2);
2186163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen,
2187163899Smjacob		    dst->rsp.m1.ct_senselen);
2188163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status,
2189163899Smjacob		    dst->rsp.m1.ct_scsi_status);
2190163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2191163899Smjacob		    dst->rsp.m1.ct_resplen);
2192163899Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
2193163899Smjacob			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2194163899Smjacob			    dst->rsp.m1.ct_resp[i]);
2195163899Smjacob		}
2196163899Smjacob	} else {
2197163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2._reserved,
2198163899Smjacob		    dst->rsp.m2._reserved);
2199163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2,
2200163899Smjacob		    dst->rsp.m2._reserved2);
2201163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3,
2202163899Smjacob		    dst->rsp.m2._reserved3);
2203163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2204163899Smjacob		    dst->rsp.m2.ct_datalen);
2205163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2206163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2207163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2208163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2209163899Smjacob	}
2210163899Smjacob}
2211163899Smjacob
2212163899Smjacobvoid
2213163899Smjacobisp_get_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
2214163899Smjacob{
2215163899Smjacob	int i;
2216163899Smjacob
2217163899Smjacob	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2218163899Smjacob	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2219163899Smjacob	ISP_IOXGET_16(isp, &src->ct_nphdl, dst->ct_nphdl);
2220163899Smjacob	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2221163899Smjacob	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2222163899Smjacob	ISP_IOXGET_8(isp, &src->ct_vpindex, dst->ct_vpindex);
2223163899Smjacob	ISP_IOXGET_8(isp, &src->ct_xflags, dst->ct_xflags);
2224163899Smjacob	ISP_IOXGET_16(isp, &src->ct_iid_lo, dst->ct_iid_lo);
2225163899Smjacob	ISP_IOXGET_8(isp, &src->ct_iid_hi, dst->ct_iid_hi);
2226163899Smjacob	ISP_IOXGET_8(isp, &src->ct_reserved, dst->ct_reserved);
2227163899Smjacob	ISP_IOXGET_32(isp, &src->ct_rxid, dst->ct_rxid);
2228163899Smjacob	ISP_IOXGET_16(isp, &src->ct_senselen, dst->ct_senselen);
2229163899Smjacob	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2230163899Smjacob	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2231163899Smjacob	ISP_IOXGET_16(isp, &src->ct_oxid, dst->ct_oxid);
2232163899Smjacob	ISP_IOXGET_16(isp, &src->ct_scsi_status, dst->ct_scsi_status);
2233163899Smjacob	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
2234163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.reloff, dst->rsp.m0.reloff);
2235163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.reserved0,
2236163899Smjacob		    dst->rsp.m0.reserved0);
2237163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2238163899Smjacob		    dst->rsp.m0.ct_xfrlen);
2239163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.reserved1,
2240163899Smjacob		    dst->rsp.m0.reserved1);
2241163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_base,
2242163899Smjacob		    dst->rsp.m0.ds.ds_base);
2243163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_basehi,
2244163899Smjacob		    dst->rsp.m0.ds.ds_basehi);
2245163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_count,
2246163899Smjacob		    dst->rsp.m0.ds.ds_count);
2247163899Smjacob	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
2248163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2249163899Smjacob		    dst->rsp.m1.ct_resplen);
2250163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.reserved, dst->rsp.m1.reserved);
2251163899Smjacob		for (i = 0; i < MAXRESPLEN_24XX; i++) {
2252163899Smjacob			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2253163899Smjacob			    dst->rsp.m1.ct_resp[i]);
2254163899Smjacob		}
2255163899Smjacob	} else {
2256163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.reserved0,
2257163899Smjacob		    dst->rsp.m2.reserved0);
2258163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2259163899Smjacob		    dst->rsp.m2.ct_datalen);
2260163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.reserved1,
2261163899Smjacob		    dst->rsp.m2.reserved1);
2262163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2263163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2264163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi,
2265163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
2266163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2267163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2268163899Smjacob	}
2269163899Smjacob}
2270163899Smjacob
2271163899Smjacobvoid
2272155704Smjacobisp_put_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
2273155228Smjacob{
2274155228Smjacob	int i;
2275163899Smjacob	isp_put_hdr(isp, &lesrc->le_header, &ledst->le_header);
2276155228Smjacob	ISP_IOXPUT_32(isp, lesrc->le_reserved, &ledst->le_reserved);
2277155228Smjacob	if (ISP_IS_SBUS(isp)) {
2278155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_rsvd);
2279155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_lun);
2280155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_tgt);
2281155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_ops);
2282155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_reserved2);
2283155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_status);
2284155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_in_count);
2285155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_cmd_count);
2286155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb7len);
2287155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb6len);
2288155228Smjacob	} else {
2289155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_lun);
2290155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_rsvd);
2291155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_ops);
2292155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_tgt);
2293155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_status);
2294155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_reserved2);
2295155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_cmd_count);
2296155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_in_count);
2297155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb6len);
2298155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb7len);
2299155228Smjacob	}
2300155228Smjacob	ISP_IOXPUT_32(isp, lesrc->le_flags, &ledst->le_flags);
2301155228Smjacob	ISP_IOXPUT_16(isp, lesrc->le_timeout, &ledst->le_timeout);
2302155228Smjacob	for (i = 0; i < 20; i++) {
2303155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_reserved3[i],
2304155228Smjacob		    &ledst->le_reserved3[i]);
2305155228Smjacob	}
2306155228Smjacob}
2307155228Smjacob
2308155228Smjacobvoid
2309155704Smjacobisp_get_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
2310155228Smjacob{
2311155228Smjacob	int i;
2312163899Smjacob	isp_get_hdr(isp, &lesrc->le_header, &ledst->le_header);
2313155228Smjacob	ISP_IOXGET_32(isp, &lesrc->le_reserved, ledst->le_reserved);
2314155228Smjacob	if (ISP_IS_SBUS(isp)) {
2315155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_rsvd);
2316155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_lun);
2317155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_tgt);
2318155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_ops);
2319155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_reserved2);
2320155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_status);
2321155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_in_count);
2322155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_cmd_count);
2323155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb7len);
2324155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb6len);
2325155228Smjacob	} else {
2326155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_lun);
2327155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_rsvd);
2328155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_ops);
2329155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_tgt);
2330155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_status);
2331155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_reserved2);
2332155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_cmd_count);
2333155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_in_count);
2334155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb6len);
2335155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb7len);
2336155228Smjacob	}
2337155228Smjacob	ISP_IOXGET_32(isp, &lesrc->le_flags, ledst->le_flags);
2338155228Smjacob	ISP_IOXGET_16(isp, &lesrc->le_timeout, ledst->le_timeout);
2339155228Smjacob	for (i = 0; i < 20; i++) {
2340155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_reserved3[i],
2341155228Smjacob		    ledst->le_reserved3[i]);
2342155228Smjacob	}
2343155228Smjacob}
2344155228Smjacob
2345155228Smjacobvoid
2346163899Smjacobisp_put_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
2347155228Smjacob{
2348155228Smjacob	int i;
2349163899Smjacob	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2350163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2351155228Smjacob	if (ISP_IS_SBUS(isp)) {
2352163899Smjacob		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_iid);
2353163899Smjacob		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_lun);
2354163899Smjacob		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_tgt);
2355163899Smjacob		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_reserved2);
2356163899Smjacob		ISP_IOXPUT_8(isp, src->in_status, &dst->in_rsvd2);
2357163899Smjacob		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_status);
2358163899Smjacob		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_type);
2359163899Smjacob		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_val);
2360155228Smjacob	} else {
2361163899Smjacob		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
2362163899Smjacob		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
2363163899Smjacob		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_reserved2);
2364163899Smjacob		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_tgt);
2365163899Smjacob		ISP_IOXPUT_8(isp, src->in_status, &dst->in_status);
2366163899Smjacob		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_rsvd2);
2367163899Smjacob		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_val);
2368163899Smjacob		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_type);
2369155228Smjacob	}
2370163899Smjacob	ISP_IOXPUT_32(isp, src->in_flags, &dst->in_flags);
2371163899Smjacob	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2372155228Smjacob	for (i = 0; i < IN_MSGLEN; i++) {
2373163899Smjacob		ISP_IOXPUT_8(isp, src->in_msg[i], &dst->in_msg[i]);
2374155228Smjacob	}
2375155228Smjacob	for (i = 0; i < IN_RSVDLEN; i++) {
2376163899Smjacob		ISP_IOXPUT_8(isp, src->in_reserved3[i],
2377163899Smjacob		    &dst->in_reserved3[i]);
2378155228Smjacob	}
2379155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
2380163899Smjacob		ISP_IOXPUT_8(isp, src->in_sense[i],
2381163899Smjacob		    &dst->in_sense[i]);
2382155228Smjacob	}
2383155228Smjacob}
2384155228Smjacob
2385155228Smjacobvoid
2386163899Smjacobisp_get_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
2387155228Smjacob{
2388155228Smjacob	int i;
2389163899Smjacob	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2390163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2391155228Smjacob	if (ISP_IS_SBUS(isp)) {
2392163899Smjacob		ISP_IOXGET_8(isp, &src->in_lun, dst->in_iid);
2393163899Smjacob		ISP_IOXGET_8(isp, &src->in_iid, dst->in_lun);
2394163899Smjacob		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_tgt);
2395163899Smjacob		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_reserved2);
2396163899Smjacob		ISP_IOXGET_8(isp, &src->in_status, dst->in_rsvd2);
2397163899Smjacob		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_status);
2398163899Smjacob		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_type);
2399163899Smjacob		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_val);
2400155228Smjacob	} else {
2401163899Smjacob		ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
2402163899Smjacob		ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
2403163899Smjacob		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_reserved2);
2404163899Smjacob		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_tgt);
2405163899Smjacob		ISP_IOXGET_8(isp, &src->in_status, dst->in_status);
2406163899Smjacob		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_rsvd2);
2407163899Smjacob		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_val);
2408163899Smjacob		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_type);
2409155228Smjacob	}
2410163899Smjacob	ISP_IOXGET_32(isp, &src->in_flags, dst->in_flags);
2411163899Smjacob	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2412155228Smjacob	for (i = 0; i < IN_MSGLEN; i++) {
2413163899Smjacob		ISP_IOXGET_8(isp, &src->in_msg[i], dst->in_msg[i]);
2414155228Smjacob	}
2415155228Smjacob	for (i = 0; i < IN_RSVDLEN; i++) {
2416163899Smjacob		ISP_IOXGET_8(isp, &src->in_reserved3[i],
2417163899Smjacob		    dst->in_reserved3[i]);
2418155228Smjacob	}
2419155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
2420163899Smjacob		ISP_IOXGET_8(isp, &src->in_sense[i],
2421163899Smjacob		    dst->in_sense[i]);
2422155228Smjacob	}
2423155228Smjacob}
2424155228Smjacob
2425155228Smjacobvoid
2426163899Smjacobisp_put_notify_fc(ispsoftc_t *isp, in_fcentry_t *src,
2427163899Smjacob    in_fcentry_t *dst)
2428155228Smjacob{
2429163899Smjacob	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2430163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2431163899Smjacob	ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
2432163899Smjacob	ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
2433163899Smjacob	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
2434163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
2435163899Smjacob	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2436163899Smjacob	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
2437163899Smjacob	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2438155228Smjacob}
2439155228Smjacob
2440155228Smjacobvoid
2441163899Smjacobisp_put_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src,
2442163899Smjacob    in_fcentry_e_t *dst)
2443155228Smjacob{
2444163899Smjacob	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2445163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2446163899Smjacob	ISP_IOXPUT_16(isp, src->in_iid, &dst->in_iid);
2447163899Smjacob	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
2448163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
2449163899Smjacob	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2450163899Smjacob	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
2451163899Smjacob	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2452155228Smjacob}
2453155228Smjacob
2454155228Smjacobvoid
2455163899Smjacobisp_put_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src,
2456163899Smjacob    in_fcentry_24xx_t *dst)
2457155228Smjacob{
2458163899Smjacob	int i;
2459163899Smjacob
2460163899Smjacob	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2461163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2462163899Smjacob	ISP_IOXPUT_16(isp, src->in_nphdl, &dst->in_nphdl);
2463163899Smjacob	ISP_IOXPUT_16(isp, src->in_reserved1, &dst->in_reserved1);
2464163899Smjacob	ISP_IOXPUT_16(isp, src->in_flags, &dst->in_flags);
2465163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_rxid, &dst->in_srr_rxid);
2466163899Smjacob	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2467163899Smjacob	ISP_IOXPUT_8(isp, src->in_status_subcode, &dst->in_status_subcode);
2468163899Smjacob	ISP_IOXPUT_16(isp, src->in_reserved2, &dst->in_reserved2);
2469163899Smjacob	ISP_IOXPUT_32(isp, src->in_rxid, &dst->in_rxid);
2470163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_reloff_hi, &dst->in_srr_reloff_hi);
2471163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_reloff_lo, &dst->in_srr_reloff_lo);
2472163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_iu, &dst->in_srr_iu);
2473163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_oxid, &dst->in_srr_oxid);
2474163899Smjacob	for (i = 0; i < 18; i++) {
2475163899Smjacob		ISP_IOXPUT_8(isp, src->in_reserved3[i], &dst->in_reserved3[i]);
2476163899Smjacob	}
2477163899Smjacob	ISP_IOXPUT_8(isp, src->in_reserved4, &dst->in_reserved4);
2478163899Smjacob	ISP_IOXPUT_8(isp, src->in_vpindex, &dst->in_vpindex);
2479163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved5, &dst->in_reserved5);
2480163899Smjacob	ISP_IOXPUT_16(isp, src->in_portid_lo, &dst->in_portid_lo);
2481163899Smjacob	ISP_IOXPUT_8(isp, src->in_portid_hi, &dst->in_portid_hi);
2482163899Smjacob	ISP_IOXPUT_8(isp, src->in_reserved6, &dst->in_reserved6);
2483163899Smjacob	ISP_IOXPUT_16(isp, src->in_reserved7, &dst->in_reserved7);
2484163899Smjacob	ISP_IOXPUT_16(isp, src->in_oxid, &dst->in_oxid);
2485155228Smjacob}
2486155228Smjacob
2487155228Smjacobvoid
2488163899Smjacobisp_get_notify_fc(ispsoftc_t *isp, in_fcentry_t *src,
2489163899Smjacob    in_fcentry_t *dst)
2490155228Smjacob{
2491163899Smjacob	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2492163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2493163899Smjacob	ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
2494163899Smjacob	ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
2495163899Smjacob	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
2496163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
2497163899Smjacob	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2498163899Smjacob	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
2499163899Smjacob	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2500155228Smjacob}
2501155228Smjacob
2502155228Smjacobvoid
2503163899Smjacobisp_get_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src,
2504163899Smjacob    in_fcentry_e_t *dst)
2505155228Smjacob{
2506163899Smjacob	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2507163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2508163899Smjacob	ISP_IOXGET_16(isp, &src->in_iid, dst->in_iid);
2509163899Smjacob	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
2510163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
2511163899Smjacob	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2512163899Smjacob	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
2513163899Smjacob	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2514163899Smjacob}
2515163899Smjacob
2516163899Smjacobvoid
2517163899Smjacobisp_get_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src,
2518163899Smjacob    in_fcentry_24xx_t *dst)
2519163899Smjacob{
2520155228Smjacob	int i;
2521163899Smjacob
2522163899Smjacob	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2523163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2524163899Smjacob	ISP_IOXGET_16(isp, &src->in_nphdl, dst->in_nphdl);
2525163899Smjacob	ISP_IOXGET_16(isp, &src->in_reserved1, dst->in_reserved1);
2526163899Smjacob	ISP_IOXGET_16(isp, &src->in_flags, dst->in_flags);
2527163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_rxid, dst->in_srr_rxid);
2528163899Smjacob	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2529163899Smjacob	ISP_IOXGET_8(isp, &src->in_status_subcode, dst->in_status_subcode);
2530163899Smjacob	ISP_IOXGET_16(isp, &src->in_reserved2, dst->in_reserved2);
2531163899Smjacob	ISP_IOXGET_32(isp, &src->in_rxid, dst->in_rxid);
2532163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_reloff_hi, dst->in_srr_reloff_hi);
2533163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_reloff_lo, dst->in_srr_reloff_lo);
2534163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_iu, dst->in_srr_iu);
2535163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_oxid, dst->in_srr_oxid);
2536163899Smjacob	for (i = 0; i < 18; i++) {
2537163899Smjacob		ISP_IOXGET_8(isp, &src->in_reserved3[i], dst->in_reserved3[i]);
2538163899Smjacob	}
2539163899Smjacob	ISP_IOXGET_8(isp, &src->in_reserved4, dst->in_reserved4);
2540163899Smjacob	ISP_IOXGET_8(isp, &src->in_vpindex, dst->in_vpindex);
2541163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved5, dst->in_reserved5);
2542163899Smjacob	ISP_IOXGET_16(isp, &src->in_portid_lo, dst->in_portid_lo);
2543163899Smjacob	ISP_IOXGET_8(isp, &src->in_portid_hi, dst->in_portid_hi);
2544163899Smjacob	ISP_IOXGET_8(isp, &src->in_reserved6, dst->in_reserved6);
2545163899Smjacob	ISP_IOXGET_16(isp, &src->in_reserved7, dst->in_reserved7);
2546163899Smjacob	ISP_IOXGET_16(isp, &src->in_oxid, dst->in_oxid);
2547163899Smjacob}
2548163899Smjacob
2549163899Smjacobvoid
2550163899Smjacobisp_put_notify_ack(ispsoftc_t *isp, na_entry_t *src,  na_entry_t *dst)
2551163899Smjacob{
2552163899Smjacob	int i;
2553163899Smjacob	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2554163899Smjacob	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2555155228Smjacob	if (ISP_IS_SBUS(isp)) {
2556163899Smjacob		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_iid);
2557163899Smjacob		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_lun);
2558163899Smjacob		ISP_IOXPUT_8(isp, src->na_status, &dst->na_event);
2559163899Smjacob		ISP_IOXPUT_8(isp, src->na_event, &dst->na_status);
2560155228Smjacob	} else {
2561163899Smjacob		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_lun);
2562163899Smjacob		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
2563163899Smjacob		ISP_IOXPUT_8(isp, src->na_status, &dst->na_status);
2564163899Smjacob		ISP_IOXPUT_8(isp, src->na_event, &dst->na_event);
2565155228Smjacob	}
2566163899Smjacob	ISP_IOXPUT_32(isp, src->na_flags, &dst->na_flags);
2567155228Smjacob	for (i = 0; i < NA_RSVDLEN; i++) {
2568163899Smjacob		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2569163899Smjacob		    &dst->na_reserved3[i]);
2570155228Smjacob	}
2571155228Smjacob}
2572155228Smjacob
2573155228Smjacobvoid
2574163899Smjacobisp_get_notify_ack(ispsoftc_t *isp, na_entry_t *src, na_entry_t *dst)
2575155228Smjacob{
2576155228Smjacob	int i;
2577163899Smjacob	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2578163899Smjacob	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2579155228Smjacob	if (ISP_IS_SBUS(isp)) {
2580163899Smjacob		ISP_IOXGET_8(isp, &src->na_lun, dst->na_iid);
2581163899Smjacob		ISP_IOXGET_8(isp, &src->na_iid, dst->na_lun);
2582163899Smjacob		ISP_IOXGET_8(isp, &src->na_status, dst->na_event);
2583163899Smjacob		ISP_IOXGET_8(isp, &src->na_event, dst->na_status);
2584155228Smjacob	} else {
2585163899Smjacob		ISP_IOXGET_8(isp, &src->na_lun, dst->na_lun);
2586163899Smjacob		ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
2587163899Smjacob		ISP_IOXGET_8(isp, &src->na_status, dst->na_status);
2588163899Smjacob		ISP_IOXGET_8(isp, &src->na_event, dst->na_event);
2589155228Smjacob	}
2590163899Smjacob	ISP_IOXGET_32(isp, &src->na_flags, dst->na_flags);
2591155228Smjacob	for (i = 0; i < NA_RSVDLEN; i++) {
2592163899Smjacob		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2593163899Smjacob		    dst->na_reserved3[i]);
2594155228Smjacob	}
2595155228Smjacob}
2596155228Smjacob
2597155228Smjacobvoid
2598163899Smjacobisp_put_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src,
2599163899Smjacob    na_fcentry_t *dst)
2600155228Smjacob{
2601155228Smjacob	int i;
2602163899Smjacob	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2603163899Smjacob	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2604163899Smjacob	ISP_IOXPUT_8(isp, src->na_reserved1, &dst->na_reserved1);
2605163899Smjacob	ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
2606163899Smjacob	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
2607163899Smjacob	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2608163899Smjacob	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2609163899Smjacob	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2610163899Smjacob	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
2611163899Smjacob	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
2612155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
2613163899Smjacob		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2614163899Smjacob		    &dst->na_reserved3[i]);
2615155228Smjacob	}
2616155228Smjacob}
2617155228Smjacob
2618155228Smjacobvoid
2619163899Smjacobisp_put_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src,
2620163899Smjacob    na_fcentry_e_t *dst)
2621155228Smjacob{
2622155228Smjacob	int i;
2623163899Smjacob	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2624163899Smjacob	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2625163899Smjacob	ISP_IOXPUT_16(isp, src->na_iid, &dst->na_iid);
2626163899Smjacob	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
2627163899Smjacob	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2628163899Smjacob	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2629163899Smjacob	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2630163899Smjacob	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
2631163899Smjacob	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
2632155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
2633163899Smjacob		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2634163899Smjacob		    &dst->na_reserved3[i]);
2635155228Smjacob	}
2636155228Smjacob}
2637155228Smjacob
2638155228Smjacobvoid
2639163899Smjacobisp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src,
2640163899Smjacob    na_fcentry_24xx_t *dst)
2641155228Smjacob{
2642155228Smjacob	int i;
2643163899Smjacob
2644163899Smjacob	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2645163899Smjacob	ISP_IOXPUT_32(isp, src->na_handle, &dst->na_handle);
2646163899Smjacob	ISP_IOXPUT_16(isp, src->na_nphdl, &dst->na_nphdl);
2647163899Smjacob	ISP_IOXPUT_16(isp, src->na_reserved1, &dst->na_reserved1);
2648163899Smjacob	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2649163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_rxid, &dst->na_srr_rxid);
2650163899Smjacob	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2651163899Smjacob	ISP_IOXPUT_8(isp, src->na_status_subcode, &dst->na_status_subcode);
2652163899Smjacob	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2653163899Smjacob	ISP_IOXPUT_32(isp, src->na_rxid, &dst->na_rxid);
2654163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_reloff_hi, &dst->na_srr_reloff_hi);
2655163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_reloff_lo, &dst->na_srr_reloff_lo);
2656163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_iu, &dst->na_srr_iu);
2657163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_flags, &dst->na_srr_flags);
2658163899Smjacob	for (i = 0; i < 18; i++) {
2659163899Smjacob		ISP_IOXPUT_8(isp, src->na_reserved3[i], &dst->na_reserved3[i]);
2660163899Smjacob	}
2661163899Smjacob	ISP_IOXPUT_8(isp, src->na_reserved4, &dst->na_reserved4);
2662163899Smjacob	ISP_IOXPUT_8(isp, src->na_vpindex, &dst->na_vpindex);
2663163899Smjacob	ISP_IOXPUT_8(isp, src->na_srr_reject_vunique,
2664163899Smjacob	    &dst->na_srr_reject_vunique);
2665163899Smjacob	ISP_IOXPUT_8(isp, src->na_srr_reject_explanation,
2666163899Smjacob	    &dst->na_srr_reject_explanation);
2667163899Smjacob	ISP_IOXPUT_8(isp, src->na_srr_reject_code, &dst->na_srr_reject_code);
2668163899Smjacob	ISP_IOXPUT_8(isp, src->na_reserved5, &dst->na_reserved5);
2669163899Smjacob	for (i = 0; i < 6; i++) {
2670163899Smjacob		ISP_IOXPUT_8(isp, src->na_reserved6[i], &dst->na_reserved6[i]);
2671163899Smjacob	}
2672163899Smjacob	ISP_IOXPUT_16(isp, src->na_oxid, &dst->na_oxid);
2673163899Smjacob}
2674163899Smjacob
2675163899Smjacobvoid
2676163899Smjacobisp_get_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src,
2677163899Smjacob    na_fcentry_t *dst)
2678163899Smjacob{
2679163899Smjacob	int i;
2680163899Smjacob	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2681163899Smjacob	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2682163899Smjacob	ISP_IOXGET_8(isp, &src->na_reserved1, dst->na_reserved1);
2683163899Smjacob	ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
2684163899Smjacob	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
2685163899Smjacob	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2686163899Smjacob	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2687163899Smjacob	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2688163899Smjacob	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
2689163899Smjacob	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
2690155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
2691163899Smjacob		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2692163899Smjacob		    dst->na_reserved3[i]);
2693155228Smjacob	}
2694155228Smjacob}
2695155228Smjacob
2696155228Smjacobvoid
2697163899Smjacobisp_get_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src,
2698163899Smjacob    na_fcentry_e_t *dst)
2699155228Smjacob{
2700155228Smjacob	int i;
2701163899Smjacob	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2702163899Smjacob	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2703163899Smjacob	ISP_IOXGET_16(isp, &src->na_iid, dst->na_iid);
2704163899Smjacob	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
2705163899Smjacob	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2706163899Smjacob	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2707163899Smjacob	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2708163899Smjacob	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
2709163899Smjacob	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
2710155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
2711163899Smjacob		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2712163899Smjacob		    dst->na_reserved3[i]);
2713155228Smjacob	}
2714155228Smjacob}
2715163899Smjacob
2716163899Smjacobvoid
2717163899Smjacobisp_get_notify_ack_24xx(ispsoftc_t *isp, na_fcentry_24xx_t *src,
2718163899Smjacob    na_fcentry_24xx_t *dst)
2719163899Smjacob{
2720163899Smjacob	int i;
2721163899Smjacob
2722163899Smjacob	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2723163899Smjacob	ISP_IOXGET_32(isp, &src->na_handle, dst->na_handle);
2724163899Smjacob	ISP_IOXGET_16(isp, &src->na_nphdl, dst->na_nphdl);
2725163899Smjacob	ISP_IOXGET_16(isp, &src->na_reserved1, dst->na_reserved1);
2726163899Smjacob	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2727163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_rxid, dst->na_srr_rxid);
2728163899Smjacob	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2729163899Smjacob	ISP_IOXGET_8(isp, &src->na_status_subcode, dst->na_status_subcode);
2730163899Smjacob	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2731163899Smjacob	ISP_IOXGET_32(isp, &src->na_rxid, dst->na_rxid);
2732163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_reloff_hi, dst->na_srr_reloff_hi);
2733163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_reloff_lo, dst->na_srr_reloff_lo);
2734163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_iu, dst->na_srr_iu);
2735163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_flags, dst->na_srr_flags);
2736163899Smjacob	for (i = 0; i < 18; i++) {
2737163899Smjacob		ISP_IOXGET_8(isp, &src->na_reserved3[i], dst->na_reserved3[i]);
2738163899Smjacob	}
2739163899Smjacob	ISP_IOXGET_8(isp, &src->na_reserved4, dst->na_reserved4);
2740163899Smjacob	ISP_IOXGET_8(isp, &src->na_vpindex, dst->na_vpindex);
2741163899Smjacob	ISP_IOXGET_8(isp, &src->na_srr_reject_vunique,
2742163899Smjacob	    dst->na_srr_reject_vunique);
2743163899Smjacob	ISP_IOXGET_8(isp, &src->na_srr_reject_explanation,
2744163899Smjacob	    dst->na_srr_reject_explanation);
2745163899Smjacob	ISP_IOXGET_8(isp, &src->na_srr_reject_code, dst->na_srr_reject_code);
2746163899Smjacob	ISP_IOXGET_8(isp, &src->na_reserved5, dst->na_reserved5);
2747163899Smjacob	for (i = 0; i < 6; i++) {
2748163899Smjacob		ISP_IOXGET_8(isp, &src->na_reserved6[i], dst->na_reserved6[i]);
2749163899Smjacob	}
2750163899Smjacob	ISP_IOXGET_16(isp, &src->na_oxid, dst->na_oxid);
2751163899Smjacob}
2752163899Smjacob
2753163899Smjacobvoid
2754163899Smjacobisp_get_abts(ispsoftc_t *isp, abts_t *src, abts_t *dst)
2755163899Smjacob{
2756163899Smjacob	int i;
2757163899Smjacob
2758163899Smjacob	isp_get_hdr(isp, &src->abts_header, &dst->abts_header);
2759163899Smjacob	for (i = 0; i < 6; i++) {
2760163899Smjacob		ISP_IOXGET_8(isp, &src->abts_reserved0[i],
2761163899Smjacob		    dst->abts_reserved0[i]);
2762163899Smjacob	}
2763163899Smjacob	ISP_IOXGET_16(isp, &src->abts_nphdl, dst->abts_nphdl);
2764163899Smjacob	ISP_IOXGET_16(isp, &src->abts_reserved1, dst->abts_reserved1);
2765163899Smjacob	ISP_IOXGET_16(isp, &src->abts_sof, dst->abts_sof);
2766163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rxid_abts, dst->abts_rxid_abts);
2767163899Smjacob	ISP_IOXGET_16(isp, &src->abts_did_lo, dst->abts_did_lo);
2768163899Smjacob	ISP_IOXGET_8(isp, &src->abts_did_hi, dst->abts_did_hi);
2769163899Smjacob	ISP_IOXGET_8(isp, &src->abts_r_ctl, dst->abts_r_ctl);
2770163899Smjacob	ISP_IOXGET_16(isp, &src->abts_sid_lo, dst->abts_sid_lo);
2771163899Smjacob	ISP_IOXGET_8(isp, &src->abts_sid_hi, dst->abts_sid_hi);
2772163899Smjacob	ISP_IOXGET_8(isp, &src->abts_cs_ctl, dst->abts_cs_ctl);
2773163899Smjacob	ISP_IOXGET_16(isp, &src->abts_fs_ctl, dst->abts_fs_ctl);
2774163899Smjacob	ISP_IOXGET_8(isp, &src->abts_f_ctl, dst->abts_f_ctl);
2775163899Smjacob	ISP_IOXGET_8(isp, &src->abts_type, dst->abts_type);
2776163899Smjacob	ISP_IOXGET_16(isp, &src->abts_seq_cnt, dst->abts_seq_cnt);
2777163899Smjacob	ISP_IOXGET_8(isp, &src->abts_df_ctl, dst->abts_df_ctl);
2778163899Smjacob	ISP_IOXGET_8(isp, &src->abts_seq_id, dst->abts_seq_id);
2779163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rx_id, dst->abts_rx_id);
2780163899Smjacob	ISP_IOXGET_16(isp, &src->abts_ox_id, dst->abts_ox_id);
2781163899Smjacob	ISP_IOXGET_32(isp, &src->abts_param, dst->abts_param);
2782163899Smjacob	for (i = 0; i < 16; i++) {
2783163899Smjacob	ISP_IOXGET_8(isp, &src->abts_reserved2[i],
2784163899Smjacob		    dst->abts_reserved2[i]);
2785163899Smjacob	}
2786163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rxid_task, dst->abts_rxid_task);
2787163899Smjacob}
2788163899Smjacob
2789163899Smjacobvoid
2790163899Smjacobisp_put_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
2791163899Smjacob{
2792163899Smjacob	int i;
2793163899Smjacob
2794163899Smjacob	isp_put_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
2795163899Smjacob	ISP_IOXPUT_32(isp, src->abts_rsp_handle, &dst->abts_rsp_handle);
2796163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_status, &dst->abts_rsp_status);
2797163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_nphdl, &dst->abts_rsp_nphdl);
2798163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_ctl_flags, &dst->abts_rsp_ctl_flags);
2799163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_sof, &dst->abts_rsp_sof);
2800163899Smjacob	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_abts, &dst->abts_rsp_rxid_abts);
2801163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_did_lo, &dst->abts_rsp_did_lo);
2802163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_did_hi, &dst->abts_rsp_did_hi);
2803163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_r_ctl, &dst->abts_rsp_r_ctl);
2804163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_sid_lo, &dst->abts_rsp_sid_lo);
2805163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_sid_hi, &dst->abts_rsp_sid_hi);
2806163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_cs_ctl, &dst->abts_rsp_cs_ctl);
2807163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_f_ctl_lo, &dst->abts_rsp_f_ctl_lo);
2808163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_f_ctl_hi, &dst->abts_rsp_f_ctl_hi);
2809163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_type, &dst->abts_rsp_type);
2810163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_seq_cnt, &dst->abts_rsp_seq_cnt);
2811163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_df_ctl, &dst->abts_rsp_df_ctl);
2812163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_seq_id, &dst->abts_rsp_seq_id);
2813163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_rx_id, &dst->abts_rsp_rx_id);
2814163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_ox_id, &dst->abts_rsp_ox_id);
2815163899Smjacob	ISP_IOXPUT_32(isp, src->abts_rsp_param, &dst->abts_rsp_param);
2816163899Smjacob	if (src->abts_rsp_r_ctl == BA_ACC) {
2817163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.reserved,
2818163899Smjacob		    &dst->abts_rsp_payload.ba_acc.reserved);
2819163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.last_seq_id,
2820163899Smjacob		    &dst->abts_rsp_payload.ba_acc.last_seq_id);
2821163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.seq_id_valid,
2822163899Smjacob		    &dst->abts_rsp_payload.ba_acc.seq_id_valid);
2823163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_rx_id,
2824163899Smjacob		    &dst->abts_rsp_payload.ba_acc.aborted_rx_id);
2825163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_ox_id,
2826163899Smjacob		    &dst->abts_rsp_payload.ba_acc.aborted_ox_id);
2827163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.high_seq_cnt,
2828163899Smjacob		    &dst->abts_rsp_payload.ba_acc.high_seq_cnt);
2829163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.low_seq_cnt,
2830163899Smjacob		    &dst->abts_rsp_payload.ba_acc.low_seq_cnt);
2831163899Smjacob		for (i = 0; i < 4; i++) {
2832163899Smjacob			ISP_IOXPUT_16(isp,
2833163899Smjacob			    src->abts_rsp_payload.ba_acc.reserved2[i],
2834163899Smjacob			    &dst->abts_rsp_payload.ba_acc.reserved2[i]);
2835163899Smjacob		}
2836163899Smjacob	} else if (src->abts_rsp_r_ctl == BA_RJT) {
2837163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.vendor_unique,
2838163899Smjacob		    &dst->abts_rsp_payload.ba_rjt.vendor_unique);
2839163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.explanation,
2840163899Smjacob		    &dst->abts_rsp_payload.ba_rjt.explanation);
2841163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reason,
2842163899Smjacob		    &dst->abts_rsp_payload.ba_rjt.reason);
2843163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reserved,
2844163899Smjacob		    &dst->abts_rsp_payload.ba_rjt.reserved);
2845163899Smjacob		for (i = 0; i < 12; i++) {
2846163899Smjacob			ISP_IOXPUT_16(isp,
2847163899Smjacob			    src->abts_rsp_payload.ba_rjt.reserved2[i],
2848163899Smjacob			    &dst->abts_rsp_payload.ba_rjt.reserved2[i]);
2849163899Smjacob		}
2850163899Smjacob	} else {
2851163899Smjacob		for (i = 0; i < 16; i++) {
2852163899Smjacob			ISP_IOXPUT_8(isp, src->abts_rsp_payload.reserved[i],
2853163899Smjacob			    &dst->abts_rsp_payload.reserved[i]);
2854163899Smjacob		}
2855163899Smjacob	}
2856163899Smjacob	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_task, &dst->abts_rsp_rxid_task);
2857163899Smjacob}
2858163899Smjacob
2859163899Smjacobvoid
2860163899Smjacobisp_get_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
2861163899Smjacob{
2862163899Smjacob	int i;
2863163899Smjacob
2864163899Smjacob	isp_get_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
2865163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_handle, dst->abts_rsp_handle);
2866163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_status, dst->abts_rsp_status);
2867163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_nphdl, dst->abts_rsp_nphdl);
2868163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_ctl_flags, dst->abts_rsp_ctl_flags);
2869163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_sof, dst->abts_rsp_sof);
2870163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_abts, dst->abts_rsp_rxid_abts);
2871163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_did_lo, dst->abts_rsp_did_lo);
2872163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_did_hi, dst->abts_rsp_did_hi);
2873163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_r_ctl, dst->abts_rsp_r_ctl);
2874163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_sid_lo, dst->abts_rsp_sid_lo);
2875163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_sid_hi, dst->abts_rsp_sid_hi);
2876163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_cs_ctl, dst->abts_rsp_cs_ctl);
2877163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_f_ctl_lo, dst->abts_rsp_f_ctl_lo);
2878163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_f_ctl_hi, dst->abts_rsp_f_ctl_hi);
2879163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_type, dst->abts_rsp_type);
2880163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_seq_cnt, dst->abts_rsp_seq_cnt);
2881163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_df_ctl, dst->abts_rsp_df_ctl);
2882163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_seq_id, dst->abts_rsp_seq_id);
2883163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_rx_id, dst->abts_rsp_rx_id);
2884163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_ox_id, dst->abts_rsp_ox_id);
2885163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_param, dst->abts_rsp_param);
2886163899Smjacob	for (i = 0; i < 8; i++) {
2887163899Smjacob		ISP_IOXGET_8(isp, &src->abts_rsp_payload.rsp.reserved[i],
2888163899Smjacob		    dst->abts_rsp_payload.rsp.reserved[i]);
2889163899Smjacob	}
2890163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode1,
2891163899Smjacob	    dst->abts_rsp_payload.rsp.subcode1);
2892163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode2,
2893163899Smjacob	    dst->abts_rsp_payload.rsp.subcode2);
2894163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_task, dst->abts_rsp_rxid_task);
2895163899Smjacob}
2896155228Smjacob#endif	/* ISP_TARGET_MODE */
2897163899Smjacob/*
2898163899Smjacob * vim:ts=8:sw=8
2899163899Smjacob */
2900