isp_library.c revision 167821
1155228Smjacob/*-
2167403Smjacob *  Copyright (c) 1997-2007 by Matthew Jacob
3167403Smjacob *  All rights reserved.
4167403Smjacob *
5167403Smjacob *  Redistribution and use in source and binary forms, with or without
6167403Smjacob *  modification, are permitted provided that the following conditions
7167403Smjacob *  are met:
8167403Smjacob *
9167403Smjacob *  1. Redistributions of source code must retain the above copyright
10167403Smjacob *     notice, this list of conditions and the following disclaimer.
11167403Smjacob *  2. Redistributions in binary form must reproduce the above copyright
12167403Smjacob *     notice, this list of conditions and the following disclaimer in the
13167403Smjacob *     documentation and/or other materials provided with the distribution.
14167403Smjacob *
15167403Smjacob *  THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16167403Smjacob *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17167403Smjacob *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18167403Smjacob *  ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
19167403Smjacob *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20167403Smjacob *  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21167403Smjacob *  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22167403Smjacob *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23167403Smjacob *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24167403Smjacob *  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25167403Smjacob *  SUCH DAMAGE.
26155228Smjacob */
27160410Smjacob/*
28160410Smjacob * Qlogic Host Adapter Internal Library Functions
29160410Smjacob */
30155704Smjacob#ifdef	__NetBSD__
31167403Smjacob#include <sys/cdefs.h>
32167403Smjacob__KERNEL_RCSID(0, "$NetBSD$");
33155704Smjacob#include <dev/ic/isp_netbsd.h>
34155704Smjacob#endif
35155704Smjacob#ifdef	__FreeBSD__
36160410Smjacob#include <sys/cdefs.h>
37160410Smjacob__FBSDID("$FreeBSD: head/sys/dev/isp/isp_library.c 167821 2007-03-22 23:38:32Z mjacob $");
38155228Smjacob#include <dev/isp/isp_freebsd.h>
39155704Smjacob#endif
40155704Smjacob#ifdef	__OpenBSD__
41155704Smjacob#include <dev/ic/isp_openbsd.h>
42155704Smjacob#endif
43155704Smjacob#ifdef	__linux__
44155704Smjacob#include "isp_linux.h"
45155704Smjacob#endif
46155704Smjacob#ifdef	__svr4__
47155704Smjacob#include "isp_solaris.h"
48155704Smjacob#endif
49155228Smjacob
50155228Smjacobint
51163899Smjacobisp_save_xs(ispsoftc_t *isp, XS_T *xs, uint32_t *handlep)
52155228Smjacob{
53163899Smjacob	uint16_t i, j;
54155228Smjacob
55163899Smjacob	for (j = isp->isp_lasthdls, i = 0; i < isp->isp_maxcmds; i++) {
56155228Smjacob		if (isp->isp_xflist[j] == NULL) {
57155228Smjacob			break;
58155228Smjacob		}
59155228Smjacob		if (++j == isp->isp_maxcmds) {
60155228Smjacob			j = 0;
61155228Smjacob		}
62155228Smjacob	}
63155228Smjacob	if (i == isp->isp_maxcmds) {
64155228Smjacob		return (-1);
65155228Smjacob	}
66155228Smjacob	isp->isp_xflist[j] = xs;
67155228Smjacob	*handlep = j+1;
68163899Smjacob	if (++j == isp->isp_maxcmds) {
69155228Smjacob		j = 0;
70163899Smjacob	}
71163899Smjacob	isp->isp_lasthdls = (uint32_t)j;
72155228Smjacob	return (0);
73155228Smjacob}
74155228Smjacob
75155228SmjacobXS_T *
76163899Smjacobisp_find_xs(ispsoftc_t *isp, uint32_t handle)
77155228Smjacob{
78163899Smjacob	if (handle < 1 || handle > (uint32_t) isp->isp_maxcmds) {
79155228Smjacob		return (NULL);
80155228Smjacob	} else {
81155228Smjacob		return (isp->isp_xflist[handle - 1]);
82155228Smjacob	}
83155228Smjacob}
84155228Smjacob
85163899Smjacobuint32_t
86155704Smjacobisp_find_handle(ispsoftc_t *isp, XS_T *xs)
87155228Smjacob{
88163899Smjacob	uint16_t i;
89155228Smjacob	if (xs != NULL) {
90155228Smjacob		for (i = 0; i < isp->isp_maxcmds; i++) {
91155228Smjacob			if (isp->isp_xflist[i] == xs) {
92163899Smjacob				return ((uint32_t) (i+1));
93155228Smjacob			}
94155228Smjacob		}
95155228Smjacob	}
96155228Smjacob	return (0);
97155228Smjacob}
98155228Smjacob
99163899Smjacobuint32_t
100163899Smjacobisp_handle_index(uint32_t handle)
101155228Smjacob{
102163899Smjacob	return (handle - 1);
103155228Smjacob}
104155228Smjacob
105155228Smjacobvoid
106163899Smjacobisp_destroy_handle(ispsoftc_t *isp, uint32_t handle)
107155228Smjacob{
108163899Smjacob	if (handle > 0 && handle <= (uint32_t) isp->isp_maxcmds) {
109155228Smjacob		isp->isp_xflist[handle - 1] = NULL;
110155228Smjacob	}
111155228Smjacob}
112155228Smjacob
113155228Smjacobint
114163899Smjacobisp_getrqentry(ispsoftc_t *isp, uint32_t *iptrp,
115163899Smjacob    uint32_t *optrp, void **resultp)
116155228Smjacob{
117163899Smjacob	volatile uint32_t iptr, optr;
118155228Smjacob
119163899Smjacob	optr = isp->isp_reqodx = ISP_READ(isp, isp->isp_rqstoutrp);
120155228Smjacob	iptr = isp->isp_reqidx;
121155228Smjacob	*resultp = ISP_QUEUE_ENTRY(isp->isp_rquest, iptr);
122155228Smjacob	iptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN(isp));
123155228Smjacob	if (iptr == optr) {
124155228Smjacob		return (1);
125155228Smjacob	}
126155228Smjacob	if (optrp)
127155228Smjacob		*optrp = optr;
128155228Smjacob	if (iptrp)
129155228Smjacob		*iptrp = iptr;
130155228Smjacob	return (0);
131155228Smjacob}
132155228Smjacob
133155228Smjacob#define	TBA	(4 * (((QENTRY_LEN >> 2) * 3) + 1) + 1)
134155228Smjacobvoid
135155704Smjacobisp_print_qentry(ispsoftc_t *isp, char *msg, int idx, void *arg)
136155228Smjacob{
137155228Smjacob	char buf[TBA];
138155228Smjacob	int amt, i, j;
139155704Smjacob	uint8_t *ptr = arg;
140155228Smjacob
141155228Smjacob	isp_prt(isp, ISP_LOGALL, "%s index %d=>", msg, idx);
142155228Smjacob	for (buf[0] = 0, amt = i = 0; i < 4; i++) {
143155228Smjacob		buf[0] = 0;
144155228Smjacob		SNPRINTF(buf, TBA, "  ");
145155228Smjacob		for (j = 0; j < (QENTRY_LEN >> 2); j++) {
146155228Smjacob			SNPRINTF(buf, TBA, "%s %02x", buf, ptr[amt++] & 0xff);
147155228Smjacob		}
148155228Smjacob		isp_prt(isp, ISP_LOGALL, buf);
149155228Smjacob	}
150155228Smjacob}
151155228Smjacob
152155228Smjacobvoid
153167821Smjacobisp_print_bytes(ispsoftc_t *isp, const char *msg, int amt, void *arg)
154155228Smjacob{
155155228Smjacob	char buf[128];
156155704Smjacob	uint8_t *ptr = arg;
157155228Smjacob	int off;
158155228Smjacob
159155228Smjacob	if (msg)
160155228Smjacob		isp_prt(isp, ISP_LOGALL, "%s:", msg);
161155228Smjacob	off = 0;
162155228Smjacob	buf[0] = 0;
163155228Smjacob	while (off < amt) {
164155228Smjacob		int j, to;
165155228Smjacob		to = off;
166155228Smjacob		for (j = 0; j < 16; j++) {
167155228Smjacob			SNPRINTF(buf, 128, "%s %02x", buf, ptr[off++] & 0xff);
168155228Smjacob			if (off == amt)
169155228Smjacob				break;
170155228Smjacob		}
171155228Smjacob		isp_prt(isp, ISP_LOGALL, "0x%08x:%s", to, buf);
172155228Smjacob		buf[0] = 0;
173155228Smjacob	}
174155228Smjacob}
175155228Smjacob
176155228Smjacob/*
177155228Smjacob * Do the common path to try and ensure that link is up, we've scanned
178155228Smjacob * the fabric (if we're on a fabric), and that we've synchronized this
179155228Smjacob * all with our own database and done the appropriate logins.
180155228Smjacob *
181155228Smjacob * We repeatedly check for firmware state and loop state after each
182155228Smjacob * action because things may have changed while we were doing this.
183155228Smjacob * Any failure or change of state causes us to return a nonzero value.
184155228Smjacob *
185155228Smjacob * We assume we enter here with any locks held.
186155228Smjacob */
187155228Smjacob
188155228Smjacobint
189155704Smjacobisp_fc_runstate(ispsoftc_t *isp, int tval)
190155228Smjacob{
191155228Smjacob	fcparam *fcp;
192155228Smjacob	int *tptr;
193155228Smjacob
194163899Smjacob        if (isp->isp_role == ISP_ROLE_NONE) {
195155228Smjacob		return (0);
196155228Smjacob	}
197155228Smjacob	fcp = FCPARAM(isp);
198163899Smjacob	tptr = &tval;
199163899Smjacob	if (fcp->isp_fwstate < FW_READY ||
200163899Smjacob	    fcp->isp_loopstate < LOOP_PDB_RCVD) {
201163899Smjacob		if (isp_control(isp, ISPCTL_FCLINK_TEST, tptr) != 0) {
202164272Smjacob			isp_prt(isp, ISP_LOGSANCFG,
203163899Smjacob			    "isp_fc_runstate: linktest failed");
204163899Smjacob			return (-1);
205163899Smjacob		}
206163899Smjacob		if (fcp->isp_fwstate != FW_READY ||
207163899Smjacob		    fcp->isp_loopstate < LOOP_PDB_RCVD) {
208164272Smjacob			isp_prt(isp, ISP_LOGSANCFG,
209163899Smjacob				"isp_fc_runstate: f/w not ready");
210163899Smjacob			return (-1);
211163899Smjacob		}
212155228Smjacob	}
213155228Smjacob	if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
214155228Smjacob		return (0);
215155228Smjacob	}
216163899Smjacob	if (isp_control(isp, ISPCTL_SCAN_LOOP, NULL) != 0) {
217164272Smjacob		isp_prt(isp, ISP_LOGSANCFG,
218163899Smjacob		    "isp_fc_runstate: scan loop fails");
219163899Smjacob		return (LOOP_PDB_RCVD);
220163899Smjacob	}
221163899Smjacob	if (isp_control(isp, ISPCTL_SCAN_FABRIC, NULL) != 0) {
222164272Smjacob		isp_prt(isp, ISP_LOGSANCFG,
223163899Smjacob		    "isp_fc_runstate: scan fabric fails");
224163899Smjacob		return (LOOP_LSCAN_DONE);
225163899Smjacob	}
226155228Smjacob	if (isp_control(isp, ISPCTL_PDB_SYNC, NULL) != 0) {
227164272Smjacob		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: pdb_sync fails");
228163899Smjacob		return (LOOP_FSCAN_DONE);
229155228Smjacob	}
230155228Smjacob	if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) {
231164272Smjacob		isp_prt(isp, ISP_LOGSANCFG,
232163899Smjacob		    "isp_fc_runstate: f/w not ready again");
233155228Smjacob		return (-1);
234155228Smjacob	}
235155228Smjacob	return (0);
236155228Smjacob}
237155228Smjacob
238164272Smjacob/*
239164272Smjacob * Fibre Channel Support- get the port database for the id.
240164272Smjacob */
241163899Smjacobvoid
242164272Smjacobisp_dump_portdb(ispsoftc_t *isp)
243164272Smjacob{
244164272Smjacob	fcparam *fcp = (fcparam *) isp->isp_param;
245164272Smjacob	int i;
246164272Smjacob
247164272Smjacob	for (i = 0; i < MAX_FC_TARG; i++) {
248164272Smjacob		char mb[4];
249164272Smjacob		const char *dbs[8] = {
250164272Smjacob			"NIL ",
251164272Smjacob			"PROB",
252164272Smjacob			"DEAD",
253164272Smjacob			"CHGD",
254164272Smjacob			"NEW ",
255164272Smjacob			"PVLD",
256164272Smjacob			"ZOMB",
257164272Smjacob			"VLD "
258164272Smjacob		};
259164272Smjacob		const char *roles[4] = {
260164272Smjacob			" UNK", " TGT", " INI", "TINI"
261164272Smjacob		};
262164272Smjacob		fcportdb_t *lp = &fcp->portdb[i];
263164272Smjacob
264164272Smjacob		if (lp->state == FC_PORTDB_STATE_NIL) {
265164272Smjacob			continue;
266164272Smjacob		}
267164272Smjacob		if (lp->ini_map_idx) {
268164272Smjacob			SNPRINTF(mb, sizeof (mb), "%3d",
269164272Smjacob			    ((int) lp->ini_map_idx) - 1);
270164272Smjacob		} else {
271164272Smjacob			SNPRINTF(mb, sizeof (mb), "---");
272164272Smjacob		}
273164318Smjacob		isp_prt(isp, ISP_LOGALL, "%d: hdl 0x%x %s al%d tgt %s %s "
274164318Smjacob		    "0x%06x =>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x", i,
275164318Smjacob		    lp->handle, dbs[lp->state], lp->autologin, mb,
276164272Smjacob		    roles[lp->roles], lp->portid,
277164272Smjacob		    roles[lp->new_roles], lp->new_portid,
278164272Smjacob		    (uint32_t) (lp->node_wwn >> 32),
279164272Smjacob		    (uint32_t) (lp->node_wwn),
280164272Smjacob		    (uint32_t) (lp->port_wwn >> 32),
281164272Smjacob		    (uint32_t) (lp->port_wwn));
282164272Smjacob	}
283164272Smjacob}
284164272Smjacob
285164272Smjacobvoid
286163899Smjacobisp_shutdown(ispsoftc_t *isp)
287163899Smjacob{
288163899Smjacob	if (IS_FC(isp)) {
289163899Smjacob		if (IS_24XX(isp)) {
290163899Smjacob			ISP_WRITE(isp, BIU2400_ICR, 0);
291163899Smjacob			ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_PAUSE);
292163899Smjacob		} else {
293163899Smjacob			ISP_WRITE(isp, BIU_ICR, 0);
294163899Smjacob			ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
295163899Smjacob			ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
296163899Smjacob			ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
297163899Smjacob			ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
298163899Smjacob			ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
299163899Smjacob			ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
300163899Smjacob		}
301163899Smjacob	} else {
302163899Smjacob		ISP_WRITE(isp, BIU_ICR, 0);
303163899Smjacob		ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
304163899Smjacob	}
305163899Smjacob}
306163899Smjacob
307155228Smjacob/*
308155228Smjacob * Functions to move stuff to a form that the QLogic RISC engine understands
309155228Smjacob * and functions to move stuff back to a form the processor understands.
310155228Smjacob *
311155228Smjacob * Each platform is required to provide the 8, 16 and 32 bit
312155228Smjacob * swizzle and unswizzle macros (ISP_IOX{PUT|GET}_{8,16,32})
313155228Smjacob *
314155228Smjacob * The assumption is that swizzling and unswizzling is mostly done 'in place'
315155228Smjacob * (with a few exceptions for efficiency).
316155228Smjacob */
317155228Smjacob
318155228Smjacob#define	ISP_IS_SBUS(isp)	\
319155228Smjacob	(ISP_SBUS_SUPPORTED && (isp)->isp_bustype == ISP_BT_SBUS)
320155228Smjacob
321163899Smjacob#define	ASIZE(x)	(sizeof (x) / sizeof (x[0]))
322155228Smjacob/*
323155228Smjacob * Swizzle/Copy Functions
324155228Smjacob */
325155228Smjacobvoid
326163899Smjacobisp_put_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
327155228Smjacob{
328155228Smjacob	if (ISP_IS_SBUS(isp)) {
329155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
330155228Smjacob		    &hpdst->rqs_entry_count);
331155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
332155228Smjacob		    &hpdst->rqs_entry_type);
333155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
334155228Smjacob		    &hpdst->rqs_flags);
335155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
336155228Smjacob		    &hpdst->rqs_seqno);
337155228Smjacob	} else {
338155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
339155228Smjacob		    &hpdst->rqs_entry_type);
340155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
341155228Smjacob		    &hpdst->rqs_entry_count);
342155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
343155228Smjacob		    &hpdst->rqs_seqno);
344155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
345155228Smjacob		    &hpdst->rqs_flags);
346155228Smjacob	}
347155228Smjacob}
348155228Smjacob
349155228Smjacobvoid
350163899Smjacobisp_get_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
351155228Smjacob{
352155228Smjacob	if (ISP_IS_SBUS(isp)) {
353155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
354155228Smjacob		    hpdst->rqs_entry_count);
355155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
356155228Smjacob		    hpdst->rqs_entry_type);
357155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
358155228Smjacob		    hpdst->rqs_flags);
359155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
360155228Smjacob		    hpdst->rqs_seqno);
361155228Smjacob	} else {
362155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
363155228Smjacob		    hpdst->rqs_entry_type);
364155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
365155228Smjacob		    hpdst->rqs_entry_count);
366155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
367155228Smjacob		    hpdst->rqs_seqno);
368155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
369155228Smjacob		    hpdst->rqs_flags);
370155228Smjacob	}
371155228Smjacob}
372155228Smjacob
373155228Smjacobint
374155704Smjacobisp_get_response_type(ispsoftc_t *isp, isphdr_t *hp)
375155228Smjacob{
376155704Smjacob	uint8_t type;
377155228Smjacob	if (ISP_IS_SBUS(isp)) {
378155228Smjacob		ISP_IOXGET_8(isp, &hp->rqs_entry_count, type);
379155228Smjacob	} else {
380155228Smjacob		ISP_IOXGET_8(isp, &hp->rqs_entry_type, type);
381155228Smjacob	}
382155228Smjacob	return ((int)type);
383155228Smjacob}
384155228Smjacob
385155228Smjacobvoid
386155704Smjacobisp_put_request(ispsoftc_t *isp, ispreq_t *rqsrc, ispreq_t *rqdst)
387155228Smjacob{
388155228Smjacob	int i;
389163899Smjacob	isp_put_hdr(isp, &rqsrc->req_header, &rqdst->req_header);
390155228Smjacob	ISP_IOXPUT_32(isp, rqsrc->req_handle, &rqdst->req_handle);
391155228Smjacob	if (ISP_IS_SBUS(isp)) {
392155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_target);
393155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_lun_trn);
394155228Smjacob	} else {
395155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_lun_trn);
396155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_target);
397155228Smjacob	}
398155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_cdblen, &rqdst->req_cdblen);
399155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_flags, &rqdst->req_flags);
400155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_time, &rqdst->req_time);
401155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_seg_count, &rqdst->req_seg_count);
402163899Smjacob	for (i = 0; i < ASIZE(rqsrc->req_cdb); i++) {
403155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_cdb[i], &rqdst->req_cdb[i]);
404155228Smjacob	}
405155228Smjacob	for (i = 0; i < ISP_RQDSEG; i++) {
406155228Smjacob		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_base,
407155228Smjacob		    &rqdst->req_dataseg[i].ds_base);
408155228Smjacob		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_count,
409155228Smjacob		    &rqdst->req_dataseg[i].ds_count);
410155228Smjacob	}
411155228Smjacob}
412155228Smjacob
413155228Smjacobvoid
414163899Smjacobisp_put_marker(ispsoftc_t *isp, isp_marker_t *src, isp_marker_t *dst)
415155228Smjacob{
416155228Smjacob	int i;
417163899Smjacob	isp_put_hdr(isp, &src->mrk_header, &dst->mrk_header);
418163899Smjacob	ISP_IOXPUT_32(isp, src->mrk_handle, &dst->mrk_handle);
419163899Smjacob	if (ISP_IS_SBUS(isp)) {
420163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_target);
421163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_target, &dst->mrk_reserved0);
422163899Smjacob	} else {
423163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_reserved0);
424163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_target, &dst->mrk_target);
425155228Smjacob	}
426163899Smjacob	ISP_IOXPUT_16(isp, src->mrk_modifier, &dst->mrk_modifier);
427163899Smjacob	ISP_IOXPUT_16(isp, src->mrk_flags, &dst->mrk_flags);
428163899Smjacob	ISP_IOXPUT_16(isp, src->mrk_lun, &dst->mrk_lun);
429163899Smjacob	for (i = 0; i < ASIZE(src->mrk_reserved1); i++) {
430163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_reserved1[i],
431163899Smjacob		    &dst->mrk_reserved1[i]);
432163899Smjacob	}
433163899Smjacob}
434163899Smjacob
435163899Smjacobvoid
436163899Smjacobisp_put_marker_24xx(ispsoftc_t *isp,
437163899Smjacob    isp_marker_24xx_t *src, isp_marker_24xx_t *dst)
438163899Smjacob{
439163899Smjacob	int i;
440163899Smjacob	isp_put_hdr(isp, &src->mrk_header, &dst->mrk_header);
441163899Smjacob	ISP_IOXPUT_32(isp, src->mrk_handle, &dst->mrk_handle);
442163899Smjacob	ISP_IOXPUT_16(isp, src->mrk_nphdl, &dst->mrk_nphdl);
443163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_modifier, &dst->mrk_modifier);
444163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_reserved0);
445163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_reserved1, &dst->mrk_reserved1);
446163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_vphdl, &dst->mrk_vphdl);
447163899Smjacob	ISP_IOXPUT_8(isp, src->mrk_reserved2, &dst->mrk_reserved2);
448163899Smjacob	for (i = 0; i < ASIZE(src->mrk_lun); i++) {
449163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_lun[i], &dst->mrk_lun[i]);
450163899Smjacob	}
451163899Smjacob	for (i = 0; i < ASIZE(src->mrk_reserved3); i++) {
452163899Smjacob		ISP_IOXPUT_8(isp, src->mrk_reserved3[i],
453163899Smjacob		    &dst->mrk_reserved3[i]);
454163899Smjacob	}
455163899Smjacob}
456163899Smjacob
457163899Smjacobvoid
458163899Smjacobisp_put_request_t2(ispsoftc_t *isp, ispreqt2_t *src, ispreqt2_t *dst)
459163899Smjacob{
460163899Smjacob	int i;
461163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
462163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
463163899Smjacob	ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
464163899Smjacob	ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
465163899Smjacob	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
466163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
467163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
468163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
469163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
470163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
471163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
472163899Smjacob	}
473163899Smjacob	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
474155228Smjacob	for (i = 0; i < ISP_RQDSEG_T2; i++) {
475163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
476163899Smjacob		    &dst->req_dataseg[i].ds_base);
477163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
478163899Smjacob		    &dst->req_dataseg[i].ds_count);
479155228Smjacob	}
480155228Smjacob}
481155228Smjacob
482155228Smjacobvoid
483163899Smjacobisp_put_request_t2e(ispsoftc_t *isp, ispreqt2e_t *src, ispreqt2e_t *dst)
484155228Smjacob{
485155228Smjacob	int i;
486163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
487163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
488163899Smjacob	ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
489163899Smjacob	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
490163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
491163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
492163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
493163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
494163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
495163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
496155228Smjacob	}
497163899Smjacob	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
498155228Smjacob	for (i = 0; i < ISP_RQDSEG_T2; i++) {
499163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
500163899Smjacob		    &dst->req_dataseg[i].ds_base);
501163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
502163899Smjacob		    &dst->req_dataseg[i].ds_count);
503155228Smjacob	}
504155228Smjacob}
505155228Smjacob
506155228Smjacobvoid
507163899Smjacobisp_put_request_t3(ispsoftc_t *isp, ispreqt3_t *src, ispreqt3_t *dst)
508155228Smjacob{
509155228Smjacob	int i;
510163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
511163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
512163899Smjacob	ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
513163899Smjacob	ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
514163899Smjacob	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
515163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
516163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
517163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
518163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
519163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
520163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
521155228Smjacob	}
522163899Smjacob	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
523155228Smjacob	for (i = 0; i < ISP_RQDSEG_T3; i++) {
524163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
525163899Smjacob		    &dst->req_dataseg[i].ds_base);
526163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi,
527163899Smjacob		    &dst->req_dataseg[i].ds_basehi);
528163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
529163899Smjacob		    &dst->req_dataseg[i].ds_count);
530155228Smjacob	}
531155228Smjacob}
532155228Smjacob
533155228Smjacobvoid
534163899Smjacobisp_put_request_t3e(ispsoftc_t *isp, ispreqt3e_t *src, ispreqt3e_t *dst)
535155228Smjacob{
536155228Smjacob	int i;
537163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
538163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
539163899Smjacob	ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
540163899Smjacob	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
541163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
542163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
543163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
544163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
545163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
546163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
547155228Smjacob	}
548163899Smjacob	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
549155228Smjacob	for (i = 0; i < ISP_RQDSEG_T3; i++) {
550163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
551163899Smjacob		    &dst->req_dataseg[i].ds_base);
552163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi,
553163899Smjacob		    &dst->req_dataseg[i].ds_basehi);
554163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
555163899Smjacob		    &dst->req_dataseg[i].ds_count);
556155228Smjacob	}
557155228Smjacob}
558155228Smjacob
559155228Smjacobvoid
560163899Smjacobisp_put_extended_request(ispsoftc_t *isp, ispextreq_t *src, ispextreq_t *dst)
561155228Smjacob{
562155228Smjacob	int i;
563163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
564163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
565155228Smjacob	if (ISP_IS_SBUS(isp)) {
566163899Smjacob		ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_target);
567163899Smjacob		ISP_IOXPUT_8(isp, src->req_target, &dst->req_lun_trn);
568155228Smjacob	} else {
569163899Smjacob		ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
570163899Smjacob		ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
571155228Smjacob	}
572163899Smjacob	ISP_IOXPUT_16(isp, src->req_cdblen, &dst->req_cdblen);
573163899Smjacob	ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags);
574163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
575163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
576163899Smjacob	for (i = 0; i < ASIZE(src->req_cdb); i++) {
577163899Smjacob		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
578155228Smjacob	}
579155228Smjacob}
580155228Smjacob
581155228Smjacobvoid
582163899Smjacobisp_put_request_t7(ispsoftc_t *isp, ispreqt7_t *src, ispreqt7_t *dst)
583155228Smjacob{
584155228Smjacob	int i;
585163899Smjacob	uint32_t *a, *b;
586163899Smjacob
587163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
588163899Smjacob	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
589163899Smjacob	ISP_IOXPUT_16(isp, src->req_nphdl, &dst->req_nphdl);
590163899Smjacob	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
591163899Smjacob	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
592163899Smjacob	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
593163899Smjacob	a = (uint32_t *) src->req_lun;
594163899Smjacob	b = (uint32_t *) dst->req_lun;
595163899Smjacob	for (i = 0; i < (ASIZE(src->req_lun) >> 2); i++ ) {
596163899Smjacob		ISP_IOZPUT_32(isp, *a++, b++);
597163899Smjacob	}
598163899Smjacob	ISP_IOXPUT_8(isp, src->req_alen_datadir, &dst->req_alen_datadir);
599163899Smjacob	ISP_IOXPUT_8(isp, src->req_task_management, &dst->req_task_management);
600163899Smjacob	ISP_IOXPUT_8(isp, src->req_task_attribute, &dst->req_task_attribute);
601163899Smjacob	ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
602163899Smjacob	a = (uint32_t *) src->req_cdb;
603163899Smjacob	b = (uint32_t *) dst->req_cdb;
604163899Smjacob	for (i = 0; i < (ASIZE(src->req_cdb) >> 2); i++ ) {
605163899Smjacob		ISP_IOZPUT_32(isp, *a++, b++);
606163899Smjacob	}
607163899Smjacob	ISP_IOXPUT_32(isp, src->req_dl, &dst->req_dl);
608163899Smjacob	ISP_IOXPUT_16(isp, src->req_tidlo, &dst->req_tidlo);
609163899Smjacob	ISP_IOXPUT_8(isp, src->req_tidhi, &dst->req_tidhi);
610163899Smjacob	ISP_IOXPUT_8(isp, src->req_vpidx, &dst->req_vpidx);
611163899Smjacob	ISP_IOXPUT_32(isp, src->req_dataseg.ds_base,
612163899Smjacob	    &dst->req_dataseg.ds_base);
613163899Smjacob	ISP_IOXPUT_32(isp, src->req_dataseg.ds_basehi,
614163899Smjacob	    &dst->req_dataseg.ds_basehi);
615163899Smjacob	ISP_IOXPUT_32(isp, src->req_dataseg.ds_count,
616163899Smjacob	    &dst->req_dataseg.ds_count);
617163899Smjacob}
618163899Smjacob
619163899Smjacobvoid
620163899Smjacobisp_put_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
621163899Smjacob{
622163899Smjacob	int i;
623163899Smjacob	isp_put_hdr(isp, &src->abrt_header, &dst->abrt_header);
624163899Smjacob	ISP_IOXPUT_32(isp, src->abrt_handle, &dst->abrt_handle);
625163899Smjacob	ISP_IOXPUT_16(isp, src->abrt_nphdl, &dst->abrt_nphdl);
626163899Smjacob	ISP_IOXPUT_16(isp, src->abrt_options, &dst->abrt_options);
627163899Smjacob	ISP_IOXPUT_32(isp, src->abrt_cmd_handle, &dst->abrt_cmd_handle);
628163899Smjacob	for (i = 0; i < ASIZE(src->abrt_reserved); i++) {
629163899Smjacob		ISP_IOXPUT_8(isp, src->abrt_reserved[i],
630163899Smjacob		    &dst->abrt_reserved[i]);
631163899Smjacob	}
632163899Smjacob	ISP_IOXPUT_16(isp, src->abrt_tidlo, &dst->abrt_tidlo);
633163899Smjacob	ISP_IOXPUT_8(isp, src->abrt_tidhi, &dst->abrt_tidhi);
634163899Smjacob	ISP_IOXPUT_8(isp, src->abrt_vpidx, &dst->abrt_vpidx);
635163899Smjacob	for (i = 0; i < ASIZE(src->abrt_reserved1); i++) {
636163899Smjacob		ISP_IOXPUT_8(isp, src->abrt_reserved1[i],
637163899Smjacob		    &dst->abrt_reserved1[i]);
638163899Smjacob	}
639163899Smjacob}
640163899Smjacob
641163899Smjacobvoid
642163899Smjacobisp_put_cont_req(ispsoftc_t *isp, ispcontreq_t *src, ispcontreq_t *dst)
643163899Smjacob{
644163899Smjacob	int i;
645163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
646155228Smjacob	for (i = 0; i < ISP_CDSEG; i++) {
647163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
648163899Smjacob		    &dst->req_dataseg[i].ds_base);
649163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
650163899Smjacob		    &dst->req_dataseg[i].ds_count);
651155228Smjacob	}
652155228Smjacob}
653155228Smjacob
654155228Smjacobvoid
655163899Smjacobisp_put_cont64_req(ispsoftc_t *isp, ispcontreq64_t *src, ispcontreq64_t *dst)
656155228Smjacob{
657155228Smjacob	int i;
658163899Smjacob	isp_put_hdr(isp, &src->req_header, &dst->req_header);
659155228Smjacob	for (i = 0; i < ISP_CDSEG64; i++) {
660163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base,
661163899Smjacob		    &dst->req_dataseg[i].ds_base);
662163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi,
663163899Smjacob		    &dst->req_dataseg[i].ds_basehi);
664163899Smjacob		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count,
665163899Smjacob		    &dst->req_dataseg[i].ds_count);
666155228Smjacob	}
667155228Smjacob}
668155228Smjacob
669155228Smjacobvoid
670163899Smjacobisp_get_response(ispsoftc_t *isp, ispstatusreq_t *src, ispstatusreq_t *dst)
671155228Smjacob{
672155228Smjacob	int i;
673163899Smjacob	isp_get_hdr(isp, &src->req_header, &dst->req_header);
674163899Smjacob	ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle);
675163899Smjacob	ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status);
676163899Smjacob	ISP_IOXGET_16(isp, &src->req_completion_status,
677163899Smjacob	    dst->req_completion_status);
678163899Smjacob	ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags);
679163899Smjacob	ISP_IOXGET_16(isp, &src->req_status_flags, dst->req_status_flags);
680163899Smjacob	ISP_IOXGET_16(isp, &src->req_time, dst->req_time);
681163899Smjacob	ISP_IOXGET_16(isp, &src->req_sense_len, dst->req_sense_len);
682163899Smjacob	ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
683155228Smjacob	for (i = 0; i < 8; i++) {
684163899Smjacob		ISP_IOXGET_8(isp, &src->req_response[i],
685163899Smjacob		    dst->req_response[i]);
686155228Smjacob	}
687155228Smjacob	for (i = 0; i < 32; i++) {
688163899Smjacob		ISP_IOXGET_8(isp, &src->req_sense_data[i],
689163899Smjacob		    dst->req_sense_data[i]);
690155228Smjacob	}
691155228Smjacob}
692155228Smjacob
693155228Smjacobvoid
694163899Smjacobisp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src,
695163899Smjacob    isp24xx_statusreq_t *dst)
696155228Smjacob{
697155228Smjacob	int i;
698163899Smjacob	isp_get_hdr(isp, &src->req_header, &dst->req_header);
699163899Smjacob	ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle);
700163899Smjacob	ISP_IOXGET_16(isp, &src->req_completion_status,
701163899Smjacob	    dst->req_completion_status);
702163899Smjacob	ISP_IOXGET_16(isp, &src->req_oxid, dst->req_oxid);
703163899Smjacob	ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
704163899Smjacob	ISP_IOXGET_16(isp, &src->req_reserved0, dst->req_reserved0);
705163899Smjacob	ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags);
706163899Smjacob	ISP_IOXGET_16(isp, &src->req_reserved1, dst->req_reserved1);
707163899Smjacob	ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status);
708163899Smjacob	ISP_IOXGET_32(isp, &src->req_fcp_residual, dst->req_fcp_residual);
709163899Smjacob	ISP_IOXGET_32(isp, &src->req_sense_len, dst->req_sense_len);
710163899Smjacob	ISP_IOXGET_32(isp, &src->req_response_len, dst->req_response_len);
711163899Smjacob	for (i = 0; i < 28; i++) {
712163899Smjacob		ISP_IOXGET_8(isp, &src->req_rsp_sense[i],
713163899Smjacob		    dst->req_rsp_sense[i]);
714155228Smjacob	}
715155228Smjacob}
716155228Smjacob
717155228Smjacobvoid
718163899Smjacobisp_get_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
719163899Smjacob{
720163899Smjacob	int i;
721163899Smjacob	isp_get_hdr(isp, &src->abrt_header, &dst->abrt_header);
722163899Smjacob	ISP_IOXGET_32(isp, &src->abrt_handle, dst->abrt_handle);
723163899Smjacob	ISP_IOXGET_16(isp, &src->abrt_nphdl, dst->abrt_nphdl);
724163899Smjacob	ISP_IOXGET_16(isp, &src->abrt_options, dst->abrt_options);
725163899Smjacob	ISP_IOXGET_32(isp, &src->abrt_cmd_handle, dst->abrt_cmd_handle);
726163899Smjacob	for (i = 0; i < ASIZE(&src->abrt_reserved); i++) {
727163899Smjacob		ISP_IOXGET_8(isp, &src->abrt_reserved[i],
728163899Smjacob		    dst->abrt_reserved[i]);
729163899Smjacob	}
730163899Smjacob	ISP_IOXGET_16(isp, &src->abrt_tidlo, dst->abrt_tidlo);
731163899Smjacob	ISP_IOXGET_8(isp, &src->abrt_tidhi, dst->abrt_tidhi);
732163899Smjacob	ISP_IOXGET_8(isp, &src->abrt_vpidx, dst->abrt_vpidx);
733163899Smjacob	for (i = 0; i < ASIZE(&src->abrt_reserved1); i++) {
734163899Smjacob		ISP_IOXGET_8(isp, &src->abrt_reserved1[i],
735163899Smjacob		    dst->abrt_reserved1[i]);
736163899Smjacob	}
737163899Smjacob}
738163899Smjacob
739163899Smjacob
740163899Smjacobvoid
741155704Smjacobisp_get_rio2(ispsoftc_t *isp, isp_rio2_t *r2src, isp_rio2_t *r2dst)
742155228Smjacob{
743155228Smjacob	int i;
744163899Smjacob	isp_get_hdr(isp, &r2src->req_header, &r2dst->req_header);
745163899Smjacob	if (r2dst->req_header.rqs_seqno > 30) {
746155228Smjacob		r2dst->req_header.rqs_seqno = 30;
747163899Smjacob	}
748155228Smjacob	for (i = 0; i < r2dst->req_header.rqs_seqno; i++) {
749155228Smjacob		ISP_IOXGET_16(isp, &r2src->req_handles[i],
750155228Smjacob		    r2dst->req_handles[i]);
751155228Smjacob	}
752155228Smjacob	while (i < 30) {
753155228Smjacob		r2dst->req_handles[i++] = 0;
754155228Smjacob	}
755155228Smjacob}
756155228Smjacob
757155228Smjacobvoid
758163899Smjacobisp_put_icb(ispsoftc_t *isp, isp_icb_t *src, isp_icb_t *dst)
759155228Smjacob{
760155228Smjacob	int i;
761155228Smjacob	if (ISP_IS_SBUS(isp)) {
762163899Smjacob		ISP_IOXPUT_8(isp, src->icb_version, &dst->icb_reserved0);
763163899Smjacob		ISP_IOXPUT_8(isp, src->icb_reserved0, &dst->icb_version);
764155228Smjacob	} else {
765163899Smjacob		ISP_IOXPUT_8(isp, src->icb_version, &dst->icb_version);
766163899Smjacob		ISP_IOXPUT_8(isp, src->icb_reserved0, &dst->icb_reserved0);
767155228Smjacob	}
768163899Smjacob	ISP_IOXPUT_16(isp, src->icb_fwoptions, &dst->icb_fwoptions);
769163899Smjacob	ISP_IOXPUT_16(isp, src->icb_maxfrmlen, &dst->icb_maxfrmlen);
770163899Smjacob	ISP_IOXPUT_16(isp, src->icb_maxalloc, &dst->icb_maxalloc);
771163899Smjacob	ISP_IOXPUT_16(isp, src->icb_execthrottle, &dst->icb_execthrottle);
772155228Smjacob	if (ISP_IS_SBUS(isp)) {
773163899Smjacob		ISP_IOXPUT_8(isp, src->icb_retry_count, &dst->icb_retry_delay);
774163899Smjacob		ISP_IOXPUT_8(isp, src->icb_retry_delay, &dst->icb_retry_count);
775155228Smjacob	} else {
776163899Smjacob		ISP_IOXPUT_8(isp, src->icb_retry_count, &dst->icb_retry_count);
777163899Smjacob		ISP_IOXPUT_8(isp, src->icb_retry_delay, &dst->icb_retry_delay);
778155228Smjacob	}
779155228Smjacob	for (i = 0; i < 8; i++) {
780163899Smjacob		ISP_IOXPUT_8(isp, src->icb_portname[i], &dst->icb_portname[i]);
781155228Smjacob	}
782163899Smjacob	ISP_IOXPUT_16(isp, src->icb_hardaddr, &dst->icb_hardaddr);
783155228Smjacob	if (ISP_IS_SBUS(isp)) {
784163899Smjacob		ISP_IOXPUT_8(isp, src->icb_iqdevtype, &dst->icb_logintime);
785163899Smjacob		ISP_IOXPUT_8(isp, src->icb_logintime, &dst->icb_iqdevtype);
786155228Smjacob	} else {
787163899Smjacob		ISP_IOXPUT_8(isp, src->icb_iqdevtype, &dst->icb_iqdevtype);
788163899Smjacob		ISP_IOXPUT_8(isp, src->icb_logintime, &dst->icb_logintime);
789155228Smjacob	}
790155228Smjacob	for (i = 0; i < 8; i++) {
791163899Smjacob		ISP_IOXPUT_8(isp, src->icb_nodename[i], &dst->icb_nodename[i]);
792155228Smjacob	}
793163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rqstout, &dst->icb_rqstout);
794163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rspnsin, &dst->icb_rspnsin);
795163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rqstqlen, &dst->icb_rqstqlen);
796163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rsltqlen, &dst->icb_rsltqlen);
797155228Smjacob	for (i = 0; i < 4; i++) {
798163899Smjacob		ISP_IOXPUT_16(isp, src->icb_rqstaddr[i], &dst->icb_rqstaddr[i]);
799155228Smjacob	}
800155228Smjacob	for (i = 0; i < 4; i++) {
801163899Smjacob		ISP_IOXPUT_16(isp, src->icb_respaddr[i], &dst->icb_respaddr[i]);
802155228Smjacob	}
803163899Smjacob	ISP_IOXPUT_16(isp, src->icb_lunenables, &dst->icb_lunenables);
804155228Smjacob	if (ISP_IS_SBUS(isp)) {
805163899Smjacob		ISP_IOXPUT_8(isp, src->icb_ccnt, &dst->icb_icnt);
806163899Smjacob		ISP_IOXPUT_8(isp, src->icb_icnt, &dst->icb_ccnt);
807155228Smjacob	} else {
808163899Smjacob		ISP_IOXPUT_8(isp, src->icb_ccnt, &dst->icb_ccnt);
809163899Smjacob		ISP_IOXPUT_8(isp, src->icb_icnt, &dst->icb_icnt);
810155228Smjacob	}
811163899Smjacob	ISP_IOXPUT_16(isp, src->icb_lunetimeout, &dst->icb_lunetimeout);
812163899Smjacob	ISP_IOXPUT_16(isp, src->icb_reserved1, &dst->icb_reserved1);
813163899Smjacob	ISP_IOXPUT_16(isp, src->icb_xfwoptions, &dst->icb_xfwoptions);
814155228Smjacob	if (ISP_IS_SBUS(isp)) {
815163899Smjacob		ISP_IOXPUT_8(isp, src->icb_racctimer, &dst->icb_idelaytimer);
816163899Smjacob		ISP_IOXPUT_8(isp, src->icb_idelaytimer, &dst->icb_racctimer);
817155228Smjacob	} else {
818163899Smjacob		ISP_IOXPUT_8(isp, src->icb_racctimer, &dst->icb_racctimer);
819163899Smjacob		ISP_IOXPUT_8(isp, src->icb_idelaytimer, &dst->icb_idelaytimer);
820155228Smjacob	}
821163899Smjacob	ISP_IOXPUT_16(isp, src->icb_zfwoptions, &dst->icb_zfwoptions);
822155228Smjacob}
823155228Smjacob
824155228Smjacobvoid
825163899Smjacobisp_put_icb_2400(ispsoftc_t *isp, isp_icb_2400_t *src, isp_icb_2400_t *dst)
826155228Smjacob{
827155228Smjacob	int i;
828163899Smjacob	ISP_IOXPUT_16(isp, src->icb_version, &dst->icb_version);
829163899Smjacob	ISP_IOXPUT_16(isp, src->icb_reserved0, &dst->icb_reserved0);
830163899Smjacob	ISP_IOXPUT_16(isp, src->icb_maxfrmlen, &dst->icb_maxfrmlen);
831163899Smjacob	ISP_IOXPUT_16(isp, src->icb_execthrottle, &dst->icb_execthrottle);
832163899Smjacob	ISP_IOXPUT_16(isp, src->icb_xchgcnt, &dst->icb_xchgcnt);
833163899Smjacob	ISP_IOXPUT_16(isp, src->icb_hardaddr, &dst->icb_hardaddr);
834163899Smjacob	for (i = 0; i < 8; i++) {
835163899Smjacob		ISP_IOXPUT_8(isp, src->icb_portname[i], &dst->icb_portname[i]);
836163899Smjacob	}
837163899Smjacob	for (i = 0; i < 8; i++) {
838163899Smjacob		ISP_IOXPUT_8(isp, src->icb_nodename[i], &dst->icb_nodename[i]);
839163899Smjacob	}
840163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rspnsin, &dst->icb_rspnsin);
841163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rqstout, &dst->icb_rqstout);
842163899Smjacob	ISP_IOXPUT_16(isp, src->icb_retry_count, &dst->icb_retry_count);
843163899Smjacob	ISP_IOXPUT_16(isp, src->icb_priout, &dst->icb_priout);
844163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rsltqlen, &dst->icb_rsltqlen);
845163899Smjacob	ISP_IOXPUT_16(isp, src->icb_rqstqlen, &dst->icb_rqstqlen);
846163899Smjacob	ISP_IOXPUT_16(isp, src->icb_ldn_nols, &dst->icb_ldn_nols);
847163899Smjacob	ISP_IOXPUT_16(isp, src->icb_prqstqlen, &dst->icb_prqstqlen);
848163899Smjacob	for (i = 0; i < 4; i++) {
849163899Smjacob		ISP_IOXPUT_16(isp, src->icb_rqstaddr[i], &dst->icb_rqstaddr[i]);
850163899Smjacob	}
851163899Smjacob	for (i = 0; i < 4; i++) {
852163899Smjacob		ISP_IOXPUT_16(isp, src->icb_respaddr[i], &dst->icb_respaddr[i]);
853163899Smjacob	}
854163899Smjacob	for (i = 0; i < 4; i++) {
855163899Smjacob		ISP_IOXPUT_16(isp, src->icb_priaddr[i], &dst->icb_priaddr[i]);
856163899Smjacob	}
857163899Smjacob	for (i = 0; i < 4; i++) {
858163899Smjacob		ISP_IOXPUT_16(isp, src->icb_reserved1[i],
859163899Smjacob		    &dst->icb_reserved1[i]);
860163899Smjacob	}
861163899Smjacob	ISP_IOXPUT_16(isp, src->icb_atio_in, &dst->icb_atio_in);
862163899Smjacob	ISP_IOXPUT_16(isp, src->icb_atioqlen, &dst->icb_atioqlen);
863163899Smjacob	for (i = 0; i < 4; i++) {
864163899Smjacob		ISP_IOXPUT_16(isp, src->icb_atioqaddr[i],
865163899Smjacob		    &dst->icb_atioqaddr[i]);
866163899Smjacob	}
867163899Smjacob	ISP_IOXPUT_16(isp, src->icb_idelaytimer, &dst->icb_idelaytimer);
868163899Smjacob	ISP_IOXPUT_16(isp, src->icb_logintime, &dst->icb_logintime);
869163899Smjacob	ISP_IOXPUT_32(isp, src->icb_fwoptions1, &dst->icb_fwoptions1);
870163899Smjacob	ISP_IOXPUT_32(isp, src->icb_fwoptions2, &dst->icb_fwoptions2);
871163899Smjacob	ISP_IOXPUT_32(isp, src->icb_fwoptions3, &dst->icb_fwoptions3);
872163899Smjacob	for (i = 0; i < 12; i++) {
873163899Smjacob		ISP_IOXPUT_16(isp, src->icb_reserved2[i],
874163899Smjacob		    &dst->icb_reserved2[i]);
875163899Smjacob	}
876163899Smjacob}
877163899Smjacob
878163899Smjacobvoid
879163899Smjacobisp_get_pdb_21xx(ispsoftc_t *isp, isp_pdb_21xx_t *src, isp_pdb_21xx_t *dst)
880163899Smjacob{
881163899Smjacob	int i;
882155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_options, dst->pdb_options);
883155228Smjacob        ISP_IOXGET_8(isp, &src->pdb_mstate, dst->pdb_mstate);
884155228Smjacob        ISP_IOXGET_8(isp, &src->pdb_sstate, dst->pdb_sstate);
885155228Smjacob	for (i = 0; i < 4; i++) {
886155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i],
887155228Smjacob		    dst->pdb_hardaddr_bits[i]);
888155228Smjacob	}
889155228Smjacob	for (i = 0; i < 4; i++) {
890155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_portid_bits[i],
891155228Smjacob		    dst->pdb_portid_bits[i]);
892155228Smjacob	}
893155228Smjacob	for (i = 0; i < 8; i++) {
894155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
895155228Smjacob	}
896155228Smjacob	for (i = 0; i < 8; i++) {
897155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
898155228Smjacob	}
899155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_execthrottle, dst->pdb_execthrottle);
900155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_exec_count, dst->pdb_exec_count);
901155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_retry_count, dst->pdb_retry_count);
902155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_retry_delay, dst->pdb_retry_delay);
903155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_resalloc, dst->pdb_resalloc);
904155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_curalloc, dst->pdb_curalloc);
905155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_qhead, dst->pdb_qhead);
906155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_qtail, dst->pdb_qtail);
907155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_tl_next, dst->pdb_tl_next);
908155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_tl_last, dst->pdb_tl_last);
909155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_features, dst->pdb_features);
910155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_pconcurrnt, dst->pdb_pconcurrnt);
911155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_roi, dst->pdb_roi);
912155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_target, dst->pdb_target);
913155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_initiator, dst->pdb_initiator);
914155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_rdsiz, dst->pdb_rdsiz);
915155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_ncseq, dst->pdb_ncseq);
916155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_noseq, dst->pdb_noseq);
917155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_labrtflg, dst->pdb_labrtflg);
918155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_lstopflg, dst->pdb_lstopflg);
919155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_sqhead, dst->pdb_sqhead);
920155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_sqtail, dst->pdb_sqtail);
921155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_ptimer, dst->pdb_ptimer);
922155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_nxt_seqid, dst->pdb_nxt_seqid);
923155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_fcount, dst->pdb_fcount);
924155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_len, dst->pdb_prli_len);
925155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
926155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
927155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_loopid, dst->pdb_loopid);
928155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_il_ptr, dst->pdb_il_ptr);
929155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_sl_ptr, dst->pdb_sl_ptr);
930155228Smjacob}
931155228Smjacob
932163899Smjacobvoid
933163899Smjacobisp_get_pdb_24xx(ispsoftc_t *isp, isp_pdb_24xx_t *src, isp_pdb_24xx_t *dst)
934163899Smjacob{
935163899Smjacob	int i;
936163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_flags, dst->pdb_flags);
937163899Smjacob        ISP_IOXGET_8(isp, &src->pdb_curstate, dst->pdb_curstate);
938163899Smjacob        ISP_IOXGET_8(isp, &src->pdb_laststate, dst->pdb_laststate);
939163899Smjacob	for (i = 0; i < 4; i++) {
940163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i],
941163899Smjacob		    dst->pdb_hardaddr_bits[i]);
942163899Smjacob	}
943163899Smjacob	for (i = 0; i < 4; i++) {
944163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_portid_bits[i],
945163899Smjacob		    dst->pdb_portid_bits[i]);
946163899Smjacob	}
947163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_retry_timer, dst->pdb_retry_timer);
948163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_handle, dst->pdb_handle);
949163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_rcv_dsize, dst->pdb_rcv_dsize);
950163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_reserved0, dst->pdb_reserved0);
951163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
952163899Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
953163899Smjacob	for (i = 0; i < 8; i++) {
954163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
955163899Smjacob	}
956163899Smjacob	for (i = 0; i < 8; i++) {
957163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
958163899Smjacob	}
959163899Smjacob	for (i = 0; i < 24; i++) {
960163899Smjacob		ISP_IOXGET_8(isp, &src->pdb_reserved1[i],
961163899Smjacob		    dst->pdb_reserved1[i]);
962163899Smjacob	}
963163899Smjacob}
964155228Smjacob
965155228Smjacob/*
966163899Smjacob * PLOGI/LOGO IOCB canonicalization
967155228Smjacob */
968163899Smjacob
969155228Smjacobvoid
970163899Smjacobisp_get_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst)
971155228Smjacob{
972163899Smjacob	int i;
973163899Smjacob	isp_get_hdr(isp, &src->plogx_header, &dst->plogx_header);
974163899Smjacob	ISP_IOXGET_32(isp, &src->plogx_handle, dst->plogx_handle);
975163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_status, dst->plogx_status);
976163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_nphdl, dst->plogx_nphdl);
977163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_flags, dst->plogx_flags);
978163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_vphdl, dst->plogx_vphdl);
979163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_portlo, dst->plogx_portlo);
980163899Smjacob	ISP_IOXGET_16(isp, &src->plogx_rspsz_porthi, dst->plogx_rspsz_porthi);
981163899Smjacob	for (i = 0; i < 11; i++) {
982163899Smjacob		ISP_IOXGET_16(isp, &src->plogx_ioparm[i].lo16,
983163899Smjacob		    dst->plogx_ioparm[i].lo16);
984163899Smjacob		ISP_IOXGET_16(isp, &src->plogx_ioparm[i].hi16,
985163899Smjacob		    dst->plogx_ioparm[i].hi16);
986163899Smjacob	}
987155228Smjacob}
988155228Smjacob
989163899Smjacobvoid
990163899Smjacobisp_put_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst)
991163899Smjacob{
992163899Smjacob	int i;
993163899Smjacob	isp_put_hdr(isp, &src->plogx_header, &dst->plogx_header);
994163899Smjacob	ISP_IOXPUT_32(isp, src->plogx_handle, &dst->plogx_handle);
995163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_status, &dst->plogx_status);
996163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_nphdl, &dst->plogx_nphdl);
997163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_flags, &dst->plogx_flags);
998163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_vphdl, &dst->plogx_vphdl);
999163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_portlo, &dst->plogx_portlo);
1000163899Smjacob	ISP_IOXPUT_16(isp, src->plogx_rspsz_porthi, &dst->plogx_rspsz_porthi);
1001163899Smjacob	for (i = 0; i < 11; i++) {
1002163899Smjacob		ISP_IOXPUT_16(isp, src->plogx_ioparm[i].lo16,
1003163899Smjacob		    &dst->plogx_ioparm[i].lo16);
1004163899Smjacob		ISP_IOXPUT_16(isp, src->plogx_ioparm[i].hi16,
1005163899Smjacob		    &dst->plogx_ioparm[i].hi16);
1006163899Smjacob	}
1007163899Smjacob}
1008163899Smjacob
1009155228Smjacob/*
1010163899Smjacob * CT Passthru canonicalization
1011163899Smjacob */
1012163899Smjacobvoid
1013163899Smjacobisp_get_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst)
1014163899Smjacob{
1015163899Smjacob	int i;
1016163899Smjacob
1017163899Smjacob	isp_get_hdr(isp, &src->ctp_header, &dst->ctp_header);
1018163899Smjacob	ISP_IOXGET_32(isp, &src->ctp_handle, dst->ctp_handle);
1019163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_status, dst->ctp_status);
1020163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_nphdl, dst->ctp_nphdl);
1021163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_cmd_cnt, dst->ctp_cmd_cnt);
1022163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_vpidx, dst->ctp_vpidx);
1023163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_time, dst->ctp_time);
1024163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_reserved0, dst->ctp_reserved0);
1025163899Smjacob	ISP_IOXGET_16(isp, &src->ctp_rsp_cnt, dst->ctp_rsp_cnt);
1026163899Smjacob	for (i = 0; i < 5; i++) {
1027163899Smjacob		ISP_IOXGET_16(isp, &src->ctp_reserved1[i],
1028163899Smjacob		    dst->ctp_reserved1[i]);
1029163899Smjacob	}
1030163899Smjacob	ISP_IOXGET_32(isp, &src->ctp_rsp_bcnt, dst->ctp_rsp_bcnt);
1031163899Smjacob	ISP_IOXGET_32(isp, &src->ctp_cmd_bcnt, dst->ctp_cmd_bcnt);
1032163899Smjacob	for (i = 0; i < 2; i++) {
1033163899Smjacob		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_base,
1034163899Smjacob		    dst->ctp_dataseg[i].ds_base);
1035163899Smjacob		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_basehi,
1036163899Smjacob		    dst->ctp_dataseg[i].ds_basehi);
1037163899Smjacob		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_count,
1038163899Smjacob		    dst->ctp_dataseg[i].ds_count);
1039163899Smjacob	}
1040163899Smjacob}
1041163899Smjacob
1042163899Smjacobvoid
1043164370Smjacobisp_get_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst)
1044164370Smjacob{
1045164370Smjacob	int i;
1046164370Smjacob
1047164370Smjacob	isp_get_hdr(isp, &src->ms_header, &dst->ms_header);
1048164370Smjacob	ISP_IOXGET_32(isp, &src->ms_handle, dst->ms_handle);
1049164370Smjacob	ISP_IOXGET_16(isp, &src->ms_nphdl, dst->ms_nphdl);
1050164370Smjacob	ISP_IOXGET_16(isp, &src->ms_status, dst->ms_status);
1051164370Smjacob	ISP_IOXGET_16(isp, &src->ms_flags, dst->ms_flags);
1052164370Smjacob	ISP_IOXGET_16(isp, &src->ms_reserved1, dst->ms_reserved1);
1053164370Smjacob	ISP_IOXGET_16(isp, &src->ms_time, dst->ms_time);
1054164370Smjacob	ISP_IOXGET_16(isp, &src->ms_cmd_cnt, dst->ms_cmd_cnt);
1055164370Smjacob	ISP_IOXGET_16(isp, &src->ms_tot_cnt, dst->ms_tot_cnt);
1056164370Smjacob	ISP_IOXGET_8(isp, &src->ms_type, dst->ms_type);
1057164370Smjacob	ISP_IOXGET_8(isp, &src->ms_r_ctl, dst->ms_r_ctl);
1058164370Smjacob	ISP_IOXGET_16(isp, &src->ms_rxid, dst->ms_rxid);
1059164370Smjacob	ISP_IOXGET_16(isp, &src->ms_reserved2, dst->ms_reserved2);
1060164370Smjacob	ISP_IOXGET_32(isp, &src->ms_rsp_bcnt, dst->ms_rsp_bcnt);
1061164370Smjacob	ISP_IOXGET_32(isp, &src->ms_cmd_bcnt, dst->ms_cmd_bcnt);
1062164370Smjacob	for (i = 0; i < 2; i++) {
1063164370Smjacob		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_base,
1064164370Smjacob		    dst->ms_dataseg[i].ds_base);
1065164370Smjacob		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_basehi,
1066164370Smjacob		    dst->ms_dataseg[i].ds_basehi);
1067164370Smjacob		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_count,
1068164370Smjacob		    dst->ms_dataseg[i].ds_count);
1069164370Smjacob	}
1070164370Smjacob}
1071164370Smjacob
1072164370Smjacobvoid
1073163899Smjacobisp_put_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst)
1074163899Smjacob{
1075163899Smjacob	int i;
1076163899Smjacob
1077163899Smjacob	isp_put_hdr(isp, &src->ctp_header, &dst->ctp_header);
1078163899Smjacob	ISP_IOXPUT_32(isp, src->ctp_handle, &dst->ctp_handle);
1079163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_status, &dst->ctp_status);
1080163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_nphdl, &dst->ctp_nphdl);
1081163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_cmd_cnt, &dst->ctp_cmd_cnt);
1082163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_vpidx, &dst->ctp_vpidx);
1083163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_time, &dst->ctp_time);
1084163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_reserved0, &dst->ctp_reserved0);
1085163899Smjacob	ISP_IOXPUT_16(isp, src->ctp_rsp_cnt, &dst->ctp_rsp_cnt);
1086163899Smjacob	for (i = 0; i < 5; i++) {
1087163899Smjacob		ISP_IOXPUT_16(isp, src->ctp_reserved1[i],
1088163899Smjacob		    &dst->ctp_reserved1[i]);
1089163899Smjacob	}
1090163899Smjacob	ISP_IOXPUT_32(isp, src->ctp_rsp_bcnt, &dst->ctp_rsp_bcnt);
1091163899Smjacob	ISP_IOXPUT_32(isp, src->ctp_cmd_bcnt, &dst->ctp_cmd_bcnt);
1092163899Smjacob	for (i = 0; i < 2; i++) {
1093163899Smjacob		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_base,
1094163899Smjacob		    &dst->ctp_dataseg[i].ds_base);
1095163899Smjacob		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_basehi,
1096163899Smjacob		    &dst->ctp_dataseg[i].ds_basehi);
1097163899Smjacob		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_count,
1098163899Smjacob		    &dst->ctp_dataseg[i].ds_count);
1099163899Smjacob	}
1100163899Smjacob}
1101163899Smjacob
1102164370Smjacobvoid
1103164370Smjacobisp_put_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst)
1104164370Smjacob{
1105164370Smjacob	int i;
1106164370Smjacob
1107164370Smjacob	isp_put_hdr(isp, &src->ms_header, &dst->ms_header);
1108164370Smjacob	ISP_IOXPUT_32(isp, src->ms_handle, &dst->ms_handle);
1109164370Smjacob	ISP_IOXPUT_16(isp, src->ms_nphdl, &dst->ms_nphdl);
1110164370Smjacob	ISP_IOXPUT_16(isp, src->ms_status, &dst->ms_status);
1111164370Smjacob	ISP_IOXPUT_16(isp, src->ms_flags, &dst->ms_flags);
1112164370Smjacob	ISP_IOXPUT_16(isp, src->ms_reserved1, &dst->ms_reserved1);
1113164370Smjacob	ISP_IOXPUT_16(isp, src->ms_time, &dst->ms_time);
1114164370Smjacob	ISP_IOXPUT_16(isp, src->ms_cmd_cnt, &dst->ms_cmd_cnt);
1115164370Smjacob	ISP_IOXPUT_16(isp, src->ms_tot_cnt, &dst->ms_tot_cnt);
1116164370Smjacob	ISP_IOXPUT_8(isp, src->ms_type, &dst->ms_type);
1117164370Smjacob	ISP_IOXPUT_8(isp, src->ms_r_ctl, &dst->ms_r_ctl);
1118164370Smjacob	ISP_IOXPUT_16(isp, src->ms_rxid, &dst->ms_rxid);
1119164370Smjacob	ISP_IOXPUT_16(isp, src->ms_reserved2, &dst->ms_reserved2);
1120164370Smjacob	ISP_IOXPUT_32(isp, src->ms_rsp_bcnt, &dst->ms_rsp_bcnt);
1121164370Smjacob	ISP_IOXPUT_32(isp, src->ms_cmd_bcnt, &dst->ms_cmd_bcnt);
1122164370Smjacob	for (i = 0; i < 2; i++) {
1123164370Smjacob		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_base,
1124164370Smjacob		    &dst->ms_dataseg[i].ds_base);
1125164370Smjacob		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_basehi,
1126164370Smjacob		    &dst->ms_dataseg[i].ds_basehi);
1127164370Smjacob		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_count,
1128164370Smjacob		    &dst->ms_dataseg[i].ds_count);
1129164370Smjacob	}
1130164370Smjacob}
1131164370Smjacob
1132163899Smjacob/*
1133155228Smjacob * Generic SNS request - not particularly useful since the per-command data
1134155228Smjacob * isn't always 16 bit words.
1135155228Smjacob */
1136155228Smjacobvoid
1137155704Smjacobisp_put_sns_request(ispsoftc_t *isp, sns_screq_t *src, sns_screq_t *dst)
1138155228Smjacob{
1139155228Smjacob	int i, nw = (int) src->snscb_sblen;
1140155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1141155228Smjacob	for (i = 0; i < 4; i++) {
1142155228Smjacob		ISP_IOXPUT_16(isp, src->snscb_addr[i], &dst->snscb_addr[i]);
1143155228Smjacob	}
1144155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1145155228Smjacob	for (i = 0; i < nw; i++) {
1146155228Smjacob		ISP_IOXPUT_16(isp, src->snscb_data[i], &dst->snscb_data[i]);
1147155228Smjacob	}
1148155228Smjacob
1149155228Smjacob}
1150155228Smjacob
1151155228Smjacobvoid
1152155704Smjacobisp_put_gid_ft_request(ispsoftc_t *isp, sns_gid_ft_req_t *src,
1153155228Smjacob    sns_gid_ft_req_t *dst)
1154155228Smjacob{
1155155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1156163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
1157155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
1158155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
1159155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
1160155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
1161155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1162163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
1163155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
1164155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2);
1165163899Smjacob	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
1166155228Smjacob	ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type);
1167155228Smjacob}
1168155228Smjacob
1169155228Smjacobvoid
1170155704Smjacobisp_put_gxn_id_request(ispsoftc_t *isp, sns_gxn_id_req_t *src,
1171155228Smjacob    sns_gxn_id_req_t *dst)
1172155228Smjacob{
1173155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
1174163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
1175155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
1176155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
1177155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
1178155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
1179155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
1180163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
1181155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
1182163899Smjacob	ISP_IOXPUT_16(isp, src->snscb_reserved2, &dst->snscb_reserved2);
1183163899Smjacob	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
1184155228Smjacob	ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid);
1185155228Smjacob}
1186155228Smjacob
1187155228Smjacob/*
1188155228Smjacob * Generic SNS response - not particularly useful since the per-command data
1189155228Smjacob * isn't always 16 bit words.
1190155228Smjacob */
1191155228Smjacobvoid
1192155704Smjacobisp_get_sns_response(ispsoftc_t *isp, sns_scrsp_t *src,
1193155228Smjacob    sns_scrsp_t *dst, int nwords)
1194155228Smjacob{
1195155228Smjacob	int i;
1196155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1197155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
1198155228Smjacob	for (i = 0; i < 3; i++) {
1199155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
1200155228Smjacob		    dst->snscb_port_id[i]);
1201155228Smjacob	}
1202155228Smjacob	for (i = 0; i < 8; i++) {
1203155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_portname[i],
1204155228Smjacob		    dst->snscb_portname[i]);
1205155228Smjacob	}
1206155228Smjacob	for (i = 0; i < nwords; i++) {
1207155228Smjacob		ISP_IOXGET_16(isp, &src->snscb_data[i], dst->snscb_data[i]);
1208155228Smjacob	}
1209155228Smjacob}
1210155228Smjacob
1211155228Smjacobvoid
1212155704Smjacobisp_get_gid_ft_response(ispsoftc_t *isp, sns_gid_ft_rsp_t *src,
1213155228Smjacob    sns_gid_ft_rsp_t *dst, int nwords)
1214155228Smjacob{
1215155228Smjacob	int i;
1216155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1217155228Smjacob	for (i = 0; i < nwords; i++) {
1218155228Smjacob		int j;
1219155228Smjacob		ISP_IOXGET_8(isp,
1220155228Smjacob		    &src->snscb_ports[i].control,
1221155228Smjacob		    dst->snscb_ports[i].control);
1222155228Smjacob		for (j = 0; j < 3; j++) {
1223155228Smjacob			ISP_IOXGET_8(isp,
1224155228Smjacob			    &src->snscb_ports[i].portid[j],
1225155228Smjacob			    dst->snscb_ports[i].portid[j]);
1226155228Smjacob		}
1227155228Smjacob		if (dst->snscb_ports[i].control & 0x80) {
1228155228Smjacob			break;
1229155228Smjacob		}
1230155228Smjacob	}
1231155228Smjacob}
1232155228Smjacob
1233155228Smjacobvoid
1234155704Smjacobisp_get_gxn_id_response(ispsoftc_t *isp, sns_gxn_id_rsp_t *src,
1235155228Smjacob    sns_gxn_id_rsp_t *dst)
1236155228Smjacob{
1237155228Smjacob	int i;
1238155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1239155228Smjacob	for (i = 0; i < 8; i++)
1240155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]);
1241155228Smjacob}
1242155228Smjacob
1243155228Smjacobvoid
1244155704Smjacobisp_get_gff_id_response(ispsoftc_t *isp, sns_gff_id_rsp_t *src,
1245155228Smjacob    sns_gff_id_rsp_t *dst)
1246155228Smjacob{
1247155228Smjacob	int i;
1248155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1249155228Smjacob	for (i = 0; i < 32; i++) {
1250155228Smjacob		ISP_IOXGET_32(isp, &src->snscb_fc4_features[i],
1251155228Smjacob		    dst->snscb_fc4_features[i]);
1252155228Smjacob	}
1253155228Smjacob}
1254155228Smjacob
1255155228Smjacobvoid
1256155704Smjacobisp_get_ga_nxt_response(ispsoftc_t *isp, sns_ga_nxt_rsp_t *src,
1257155228Smjacob    sns_ga_nxt_rsp_t *dst)
1258155228Smjacob{
1259155228Smjacob	int i;
1260155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
1261155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
1262155228Smjacob	for (i = 0; i < 3; i++) {
1263155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
1264155228Smjacob		    dst->snscb_port_id[i]);
1265155228Smjacob	}
1266155228Smjacob	for (i = 0; i < 8; i++) {
1267155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_portname[i],
1268155228Smjacob		    dst->snscb_portname[i]);
1269155228Smjacob	}
1270155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen);
1271155228Smjacob	for (i = 0; i < 255; i++) {
1272155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]);
1273155228Smjacob	}
1274155228Smjacob	for (i = 0; i < 8; i++) {
1275155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_nodename[i],
1276155228Smjacob		    dst->snscb_nodename[i]);
1277155228Smjacob	}
1278155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen);
1279155228Smjacob	for (i = 0; i < 255; i++) {
1280155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]);
1281155228Smjacob	}
1282155228Smjacob	for (i = 0; i < 8; i++) {
1283155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_ipassoc[i],
1284155228Smjacob		    dst->snscb_ipassoc[i]);
1285155228Smjacob	}
1286155228Smjacob	for (i = 0; i < 16; i++) {
1287155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]);
1288155228Smjacob	}
1289155228Smjacob	for (i = 0; i < 4; i++) {
1290155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_svc_class[i],
1291155228Smjacob		    dst->snscb_svc_class[i]);
1292155228Smjacob	}
1293155228Smjacob	for (i = 0; i < 32; i++) {
1294155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_fc4_types[i],
1295155228Smjacob		    dst->snscb_fc4_types[i]);
1296155228Smjacob	}
1297155228Smjacob	for (i = 0; i < 8; i++) {
1298155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]);
1299155228Smjacob	}
1300155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved);
1301155228Smjacob	for (i = 0; i < 3; i++) {
1302155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_hardaddr[i],
1303155228Smjacob		    dst->snscb_hardaddr[i]);
1304155228Smjacob	}
1305155228Smjacob}
1306155228Smjacob
1307163899Smjacobvoid
1308163899Smjacobisp_get_els(ispsoftc_t *isp, els_t *src, els_t *dst)
1309163899Smjacob{
1310163899Smjacob	int i;
1311163899Smjacob
1312163899Smjacob	isp_get_hdr(isp, &src->els_hdr, &dst->els_hdr);
1313163899Smjacob	ISP_IOXGET_32(isp, &src->els_handle, dst->els_handle);
1314163899Smjacob	ISP_IOXGET_16(isp, &src->els_status, dst->els_status);
1315163899Smjacob	ISP_IOXGET_16(isp, &src->els_nphdl, dst->els_nphdl);
1316163899Smjacob	ISP_IOXGET_16(isp, &src->els_xmit_dsd_count, dst->els_xmit_dsd_count);
1317163899Smjacob	ISP_IOXGET_8(isp, &src->els_vphdl, dst->els_vphdl);
1318163899Smjacob	ISP_IOXGET_8(isp, &src->els_sof, dst->els_sof);
1319163899Smjacob	ISP_IOXGET_32(isp, &src->els_rxid, dst->els_rxid);
1320163899Smjacob	ISP_IOXGET_16(isp, &src->els_recv_dsd_count, dst->els_recv_dsd_count);
1321163899Smjacob	ISP_IOXGET_8(isp, &src->els_opcode, dst->els_opcode);
1322163899Smjacob	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved1);
1323163899Smjacob	ISP_IOXGET_8(isp, &src->els_did_lo, dst->els_did_lo);
1324163899Smjacob	ISP_IOXGET_8(isp, &src->els_did_mid, dst->els_did_mid);
1325163899Smjacob	ISP_IOXGET_8(isp, &src->els_did_hi, dst->els_did_hi);
1326163899Smjacob	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved2);
1327163899Smjacob	ISP_IOXGET_16(isp, &src->els_reserved3, dst->els_reserved3);
1328163899Smjacob	ISP_IOXGET_16(isp, &src->els_ctl_flags, dst->els_ctl_flags);
1329163899Smjacob	ISP_IOXGET_32(isp, &src->els_bytecnt, dst->els_bytecnt);
1330163899Smjacob	ISP_IOXGET_32(isp, &src->els_subcode1, dst->els_subcode1);
1331163899Smjacob	ISP_IOXGET_32(isp, &src->els_subcode2, dst->els_subcode2);
1332163899Smjacob	for (i = 0; i < 20; i++) {
1333163899Smjacob		ISP_IOXGET_8(isp, &src->els_reserved4[i],
1334163899Smjacob		    dst->els_reserved4[i]);
1335163899Smjacob	}
1336163899Smjacob}
1337163899Smjacob
1338163899Smjacobvoid
1339163899Smjacobisp_put_els(ispsoftc_t *isp, els_t *src, els_t *dst)
1340163899Smjacob{
1341163899Smjacob	isp_put_hdr(isp, &src->els_hdr, &dst->els_hdr);
1342163899Smjacob	ISP_IOXPUT_32(isp, src->els_handle, &dst->els_handle);
1343163899Smjacob	ISP_IOXPUT_16(isp, src->els_status, &dst->els_status);
1344163899Smjacob	ISP_IOXPUT_16(isp, src->els_nphdl, &dst->els_nphdl);
1345163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_count, &dst->els_xmit_dsd_count);
1346163899Smjacob	ISP_IOXPUT_8(isp, src->els_vphdl, &dst->els_vphdl);
1347163899Smjacob	ISP_IOXPUT_8(isp, src->els_sof, &dst->els_sof);
1348163899Smjacob	ISP_IOXPUT_32(isp, src->els_rxid, &dst->els_rxid);
1349163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_count, &dst->els_recv_dsd_count);
1350163899Smjacob	ISP_IOXPUT_8(isp, src->els_opcode, &dst->els_opcode);
1351163899Smjacob	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved1);
1352163899Smjacob	ISP_IOXPUT_8(isp, src->els_did_lo, &dst->els_did_lo);
1353163899Smjacob	ISP_IOXPUT_8(isp, src->els_did_mid, &dst->els_did_mid);
1354163899Smjacob	ISP_IOXPUT_8(isp, src->els_did_hi, &dst->els_did_hi);
1355163899Smjacob	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved2);
1356163899Smjacob	ISP_IOXPUT_16(isp, src->els_reserved3, &dst->els_reserved3);
1357163899Smjacob	ISP_IOXPUT_16(isp, src->els_ctl_flags, &dst->els_ctl_flags);
1358163899Smjacob	ISP_IOXPUT_32(isp, src->els_recv_bytecnt, &dst->els_recv_bytecnt);
1359163899Smjacob	ISP_IOXPUT_32(isp, src->els_xmit_bytecnt, &dst->els_xmit_bytecnt);
1360163899Smjacob	ISP_IOXPUT_32(isp, src->els_xmit_dsd_length, &dst->els_xmit_dsd_length);
1361163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a1500, &dst->els_xmit_dsd_a1500);
1362163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a3116, &dst->els_xmit_dsd_a3116);
1363163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a4732, &dst->els_xmit_dsd_a4732);
1364163899Smjacob	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a6348, &dst->els_xmit_dsd_a6348);
1365163899Smjacob	ISP_IOXPUT_32(isp, src->els_recv_dsd_length, &dst->els_recv_dsd_length);
1366163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_a1500, &dst->els_recv_dsd_a1500);
1367163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_a3116, &dst->els_recv_dsd_a3116);
1368163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_a4732, &dst->els_recv_dsd_a4732);
1369163899Smjacob	ISP_IOXPUT_16(isp, src->els_recv_dsd_a6348, &dst->els_recv_dsd_a6348);
1370163899Smjacob}
1371163899Smjacob
1372163899Smjacob/*
1373163899Smjacob * FC Structure Canonicalization
1374163899Smjacob */
1375163899Smjacob
1376163899Smjacobvoid
1377163899Smjacobisp_get_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst)
1378163899Smjacob{
1379163899Smjacob        ISP_IOZGET_8(isp, &src->r_ctl, dst->r_ctl);
1380163899Smjacob        ISP_IOZGET_8(isp, &src->d_id[0], dst->d_id[0]);
1381163899Smjacob        ISP_IOZGET_8(isp, &src->d_id[1], dst->d_id[1]);
1382163899Smjacob        ISP_IOZGET_8(isp, &src->d_id[2], dst->d_id[2]);
1383163899Smjacob        ISP_IOZGET_8(isp, &src->cs_ctl, dst->cs_ctl);
1384163899Smjacob        ISP_IOZGET_8(isp, &src->s_id[0], dst->s_id[0]);
1385163899Smjacob        ISP_IOZGET_8(isp, &src->s_id[1], dst->s_id[1]);
1386163899Smjacob        ISP_IOZGET_8(isp, &src->s_id[2], dst->s_id[2]);
1387163899Smjacob        ISP_IOZGET_8(isp, &src->type, dst->type);
1388163899Smjacob        ISP_IOZGET_8(isp, &src->f_ctl, dst->f_ctl);
1389163899Smjacob        ISP_IOZGET_8(isp, &src->seq_id, dst->seq_id);
1390163899Smjacob        ISP_IOZGET_8(isp, &src->df_ctl, dst->df_ctl);
1391163899Smjacob        ISP_IOZGET_16(isp, &src->seq_cnt, dst->seq_cnt);
1392163899Smjacob	/* XXX SOMETHING WAS AND STILL CONTINUES WRONG HERE XXX */
1393163899Smjacob#if	0
1394163899Smjacob        ISP_IOZGET_16(isp, &src->ox_id, dst->ox_id);
1395163899Smjacob        ISP_IOZGET_16(isp, &src->rx_id, dst->rx_id);
1396163899Smjacob#else
1397163899Smjacob        ISP_IOZGET_32(isp, &src->ox_id, dst->parameter);
1398163899Smjacob        dst->ox_id = dst->parameter;
1399163899Smjacob        dst->rx_id = dst->parameter >> 16;
1400163899Smjacob#endif
1401163899Smjacob        ISP_IOZGET_32(isp, &src->parameter, dst->parameter);
1402163899Smjacob}
1403163899Smjacob
1404163899Smjacobvoid
1405163899Smjacobisp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *dst)
1406163899Smjacob{
1407163899Smjacob	int i;
1408163899Smjacob
1409163899Smjacob	for (i = 0; i < 8; i++) {
1410163899Smjacob		ISP_IOZGET_8(isp, &src->fcp_cmnd_lun[i], dst->fcp_cmnd_lun[i]);
1411163899Smjacob	}
1412163899Smjacob        ISP_IOZGET_8(isp, &src->fcp_cmnd_crn, dst->fcp_cmnd_crn);
1413163899Smjacob        ISP_IOZGET_8(isp, &src->fcp_cmnd_task_attribute,
1414163899Smjacob	    dst->fcp_cmnd_task_attribute);
1415163899Smjacob        ISP_IOZGET_8(isp, &src->fcp_cmnd_task_management,
1416163899Smjacob	    dst->fcp_cmnd_task_management);
1417163899Smjacob        ISP_IOZGET_8(isp, &src->fcp_cmnd_alen_datadir,
1418163899Smjacob	    dst->fcp_cmnd_alen_datadir);
1419163899Smjacob	for (i = 0; i < 16; i++) {
1420163899Smjacob		ISP_IOZGET_8(isp, &src->cdb_dl.sf.fcp_cmnd_cdb[i],
1421163899Smjacob		    dst->cdb_dl.sf.fcp_cmnd_cdb[i]);
1422163899Smjacob	}
1423163899Smjacob	ISP_IOZGET_32(isp, &src->cdb_dl.sf.fcp_cmnd_dl,
1424163899Smjacob	    dst->cdb_dl.sf.fcp_cmnd_dl);
1425163899Smjacob}
1426163899Smjacob
1427163899Smjacobvoid
1428163899Smjacobisp_put_rft_id(ispsoftc_t *isp, rft_id_t *src, rft_id_t *dst)
1429163899Smjacob{
1430163899Smjacob	int i;
1431163899Smjacob	isp_put_ct_hdr(isp, &src->rftid_hdr, &dst->rftid_hdr);
1432163899Smjacob	ISP_IOZPUT_8(isp, src->rftid_reserved, &dst->rftid_reserved);
1433163899Smjacob	for (i = 0; i < 3; i++) {
1434163899Smjacob		ISP_IOZPUT_8(isp, src->rftid_portid[i], &dst->rftid_portid[i]);
1435163899Smjacob	}
1436163899Smjacob	for (i = 0; i < 8; i++) {
1437163899Smjacob		ISP_IOZPUT_32(isp, src->rftid_fc4types[i],
1438163899Smjacob		    &dst->rftid_fc4types[i]);
1439163899Smjacob	}
1440163899Smjacob}
1441163899Smjacob
1442163899Smjacobvoid
1443163899Smjacobisp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
1444163899Smjacob{
1445163899Smjacob	ISP_IOZGET_8(isp, &src->ct_revision, dst->ct_revision);
1446163899Smjacob	ISP_IOZGET_8(isp, &src->ct_in_id[0], dst->ct_in_id[0]);
1447163899Smjacob	ISP_IOZGET_8(isp, &src->ct_in_id[1], dst->ct_in_id[1]);
1448163899Smjacob	ISP_IOZGET_8(isp, &src->ct_in_id[2], dst->ct_in_id[2]);
1449163899Smjacob	ISP_IOZGET_8(isp, &src->ct_fcs_type, dst->ct_fcs_type);
1450163899Smjacob	ISP_IOZGET_8(isp, &src->ct_fcs_subtype, dst->ct_fcs_subtype);
1451163899Smjacob	ISP_IOZGET_8(isp, &src->ct_options, dst->ct_options);
1452163899Smjacob	ISP_IOZGET_8(isp, &src->ct_reserved0, dst->ct_reserved0);
1453163899Smjacob	ISP_IOZGET_16(isp, &src->ct_cmd_resp, dst->ct_cmd_resp);
1454163899Smjacob	ISP_IOZGET_16(isp, &src->ct_bcnt_resid, dst->ct_bcnt_resid);
1455163899Smjacob	ISP_IOZGET_8(isp, &src->ct_reserved1, dst->ct_reserved1);
1456163899Smjacob	ISP_IOZGET_8(isp, &src->ct_reason, dst->ct_reason);
1457163899Smjacob	ISP_IOZGET_8(isp, &src->ct_explanation, dst->ct_explanation);
1458163899Smjacob	ISP_IOZGET_8(isp, &src->ct_vunique, dst->ct_vunique);
1459163899Smjacob}
1460163899Smjacob
1461163899Smjacobvoid
1462163899Smjacobisp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
1463163899Smjacob{
1464163899Smjacob	ISP_IOZPUT_8(isp, src->ct_revision, &dst->ct_revision);
1465163899Smjacob	ISP_IOZPUT_8(isp, src->ct_in_id[0], &dst->ct_in_id[0]);
1466163899Smjacob	ISP_IOZPUT_8(isp, src->ct_in_id[1], &dst->ct_in_id[1]);
1467163899Smjacob	ISP_IOZPUT_8(isp, src->ct_in_id[2], &dst->ct_in_id[2]);
1468163899Smjacob	ISP_IOZPUT_8(isp, src->ct_fcs_type, &dst->ct_fcs_type);
1469163899Smjacob	ISP_IOZPUT_8(isp, src->ct_fcs_subtype, &dst->ct_fcs_subtype);
1470163899Smjacob	ISP_IOZPUT_8(isp, src->ct_options, &dst->ct_options);
1471163899Smjacob	ISP_IOZPUT_8(isp, src->ct_reserved0, &dst->ct_reserved0);
1472163899Smjacob	ISP_IOZPUT_16(isp, src->ct_cmd_resp, &dst->ct_cmd_resp);
1473163899Smjacob	ISP_IOZPUT_16(isp, src->ct_bcnt_resid, &dst->ct_bcnt_resid);
1474163899Smjacob	ISP_IOZPUT_8(isp, src->ct_reserved1, &dst->ct_reserved1);
1475163899Smjacob	ISP_IOZPUT_8(isp, src->ct_reason, &dst->ct_reason);
1476163899Smjacob	ISP_IOZPUT_8(isp, src->ct_explanation, &dst->ct_explanation);
1477163899Smjacob	ISP_IOZPUT_8(isp, src->ct_vunique, &dst->ct_vunique);
1478163899Smjacob}
1479163899Smjacob
1480155228Smjacob#ifdef	ISP_TARGET_MODE
1481155228Smjacobint
1482163899Smjacobisp_save_xs_tgt(ispsoftc_t *isp, void *xs, uint32_t *handlep)
1483155228Smjacob{
1484155228Smjacob	int i;
1485155228Smjacob
1486155228Smjacob	for (i = 0; i < (int) isp->isp_maxcmds; i++) {
1487155228Smjacob		if (isp->isp_tgtlist[i] == NULL) {
1488155228Smjacob			break;
1489155228Smjacob		}
1490155228Smjacob	}
1491155228Smjacob	if (i == isp->isp_maxcmds) {
1492155228Smjacob		return (-1);
1493155228Smjacob	}
1494155228Smjacob	isp->isp_tgtlist[i] = xs;
1495163899Smjacob	*handlep = (i+1) | 0x8000;
1496155228Smjacob	return (0);
1497155228Smjacob}
1498155228Smjacob
1499155228Smjacobvoid *
1500163899Smjacobisp_find_xs_tgt(ispsoftc_t *isp, uint32_t handle)
1501155228Smjacob{
1502163899Smjacob	if (handle == 0 || (handle & 0x8000) == 0 ||
1503163899Smjacob	    (handle & 0x7fff) > isp->isp_maxcmds) {
1504163899Smjacob		isp_prt(isp, ISP_LOGERR, "bad handle in isp_find_xs_tgt");
1505155228Smjacob		return (NULL);
1506155228Smjacob	} else {
1507163899Smjacob		return (isp->isp_tgtlist[(handle & 0x7fff) - 1]);
1508155228Smjacob	}
1509155228Smjacob}
1510155228Smjacob
1511163899Smjacobuint32_t
1512155704Smjacobisp_find_tgt_handle(ispsoftc_t *isp, void *xs)
1513155228Smjacob{
1514155228Smjacob	int i;
1515155228Smjacob	if (xs != NULL) {
1516155228Smjacob		for (i = 0; i < isp->isp_maxcmds; i++) {
1517155228Smjacob			if (isp->isp_tgtlist[i] == xs) {
1518163899Smjacob				return ((i+1) & 0x7fff);
1519155228Smjacob			}
1520155228Smjacob		}
1521155228Smjacob	}
1522155228Smjacob	return (0);
1523155228Smjacob}
1524155228Smjacob
1525155228Smjacobvoid
1526163899Smjacobisp_destroy_tgt_handle(ispsoftc_t *isp, uint32_t handle)
1527155228Smjacob{
1528163899Smjacob	if (handle == 0 || (handle & 0x8000) == 0 ||
1529163899Smjacob	    (handle & 0x7fff) > isp->isp_maxcmds) {
1530163899Smjacob		isp_prt(isp, ISP_LOGERR,
1531163899Smjacob		    "bad handle in isp_destroy_tgt_handle");
1532163899Smjacob	} else {
1533163899Smjacob		isp->isp_tgtlist[(handle & 0x7fff) - 1] = NULL;
1534155228Smjacob	}
1535155228Smjacob}
1536163899Smjacob
1537155228Smjacobvoid
1538163899Smjacobisp_put_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
1539155228Smjacob{
1540155228Smjacob	int i;
1541163899Smjacob	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1542163899Smjacob	ISP_IOXPUT_16(isp, src->at_reserved, &dst->at_reserved);
1543163899Smjacob	ISP_IOXPUT_16(isp, src->at_handle, &dst->at_handle);
1544155228Smjacob	if (ISP_IS_SBUS(isp)) {
1545163899Smjacob		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_iid);
1546163899Smjacob		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_lun);
1547163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_tgt);
1548163899Smjacob		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_cdblen);
1549163899Smjacob		ISP_IOXPUT_8(isp, src->at_status, &dst->at_scsi_status);
1550163899Smjacob		ISP_IOXPUT_8(isp, src->at_scsi_status, &dst->at_status);
1551163899Smjacob		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_type);
1552163899Smjacob		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_val);
1553155228Smjacob	} else {
1554163899Smjacob		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
1555163899Smjacob		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
1556163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_cdblen);
1557163899Smjacob		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_tgt);
1558163899Smjacob		ISP_IOXPUT_8(isp, src->at_status, &dst->at_status);
1559163899Smjacob		ISP_IOXPUT_8(isp, src->at_scsi_status,
1560163899Smjacob		    &dst->at_scsi_status);
1561163899Smjacob		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_val);
1562163899Smjacob		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_type);
1563155228Smjacob	}
1564163899Smjacob	ISP_IOXPUT_32(isp, src->at_flags, &dst->at_flags);
1565155228Smjacob	for (i = 0; i < ATIO_CDBLEN; i++) {
1566163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1567155228Smjacob	}
1568155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
1569163899Smjacob		ISP_IOXPUT_8(isp, src->at_sense[i], &dst->at_sense[i]);
1570155228Smjacob	}
1571155228Smjacob}
1572155228Smjacob
1573155228Smjacobvoid
1574163899Smjacobisp_get_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
1575155228Smjacob{
1576155228Smjacob	int i;
1577163899Smjacob	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1578163899Smjacob	ISP_IOXGET_16(isp, &src->at_reserved, dst->at_reserved);
1579163899Smjacob	ISP_IOXGET_16(isp, &src->at_handle, dst->at_handle);
1580155228Smjacob	if (ISP_IS_SBUS(isp)) {
1581163899Smjacob		ISP_IOXGET_8(isp, &src->at_lun, dst->at_iid);
1582163899Smjacob		ISP_IOXGET_8(isp, &src->at_iid, dst->at_lun);
1583163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_tgt);
1584163899Smjacob		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_cdblen);
1585163899Smjacob		ISP_IOXGET_8(isp, &src->at_status, dst->at_scsi_status);
1586163899Smjacob		ISP_IOXGET_8(isp, &src->at_scsi_status, dst->at_status);
1587163899Smjacob		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_type);
1588163899Smjacob		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_val);
1589155228Smjacob	} else {
1590163899Smjacob		ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
1591163899Smjacob		ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
1592163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_cdblen);
1593163899Smjacob		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_tgt);
1594163899Smjacob		ISP_IOXGET_8(isp, &src->at_status, dst->at_status);
1595163899Smjacob		ISP_IOXGET_8(isp, &src->at_scsi_status,
1596163899Smjacob		    dst->at_scsi_status);
1597163899Smjacob		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_val);
1598163899Smjacob		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_type);
1599155228Smjacob	}
1600163899Smjacob	ISP_IOXGET_32(isp, &src->at_flags, dst->at_flags);
1601155228Smjacob	for (i = 0; i < ATIO_CDBLEN; i++) {
1602163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1603155228Smjacob	}
1604155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
1605163899Smjacob		ISP_IOXGET_8(isp, &src->at_sense[i], dst->at_sense[i]);
1606155228Smjacob	}
1607155228Smjacob}
1608155228Smjacob
1609155228Smjacobvoid
1610163899Smjacobisp_put_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
1611155228Smjacob{
1612155228Smjacob	int i;
1613163899Smjacob	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1614163899Smjacob	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
1615163899Smjacob	ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
1616163899Smjacob	ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
1617163899Smjacob	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
1618163899Smjacob	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
1619163899Smjacob	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
1620163899Smjacob	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
1621163899Smjacob	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
1622163899Smjacob	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
1623163899Smjacob	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
1624155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1625163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1626155228Smjacob	}
1627163899Smjacob	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
1628163899Smjacob	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
1629155228Smjacob	for (i = 0; i < 4; i++) {
1630163899Smjacob		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
1631155228Smjacob	}
1632155228Smjacob	for (i = 0; i < 6; i++) {
1633163899Smjacob		ISP_IOXPUT_16(isp, src->at_reserved2[i],
1634163899Smjacob		    &dst->at_reserved2[i]);
1635155228Smjacob	}
1636163899Smjacob	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
1637155228Smjacob}
1638155228Smjacob
1639155228Smjacobvoid
1640163899Smjacobisp_put_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
1641155228Smjacob{
1642155228Smjacob	int i;
1643163899Smjacob	isp_put_hdr(isp, &src->at_header, &dst->at_header);
1644163899Smjacob	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
1645163899Smjacob	ISP_IOXPUT_16(isp, src->at_iid, &dst->at_iid);
1646163899Smjacob	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
1647163899Smjacob	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
1648163899Smjacob	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
1649163899Smjacob	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
1650163899Smjacob	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
1651163899Smjacob	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
1652163899Smjacob	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
1653155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1654163899Smjacob		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
1655155228Smjacob	}
1656163899Smjacob	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
1657163899Smjacob	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
1658155228Smjacob	for (i = 0; i < 4; i++) {
1659163899Smjacob		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
1660155228Smjacob	}
1661155228Smjacob	for (i = 0; i < 6; i++) {
1662163899Smjacob		ISP_IOXPUT_16(isp, src->at_reserved2[i],
1663163899Smjacob		    &dst->at_reserved2[i]);
1664155228Smjacob	}
1665163899Smjacob	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
1666155228Smjacob}
1667155228Smjacob
1668155228Smjacobvoid
1669163899Smjacobisp_get_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
1670155228Smjacob{
1671155228Smjacob	int i;
1672163899Smjacob	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1673163899Smjacob	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
1674163899Smjacob	ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
1675163899Smjacob	ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
1676163899Smjacob	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
1677163899Smjacob	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
1678163899Smjacob	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
1679163899Smjacob	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
1680163899Smjacob	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
1681163899Smjacob	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
1682163899Smjacob	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
1683155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1684163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1685155228Smjacob	}
1686163899Smjacob	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
1687163899Smjacob	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
1688155228Smjacob	for (i = 0; i < 4; i++) {
1689163899Smjacob		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
1690155228Smjacob	}
1691155228Smjacob	for (i = 0; i < 6; i++) {
1692163899Smjacob		ISP_IOXGET_16(isp, &src->at_reserved2[i],
1693163899Smjacob		    dst->at_reserved2[i]);
1694155228Smjacob	}
1695163899Smjacob	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
1696155228Smjacob}
1697155228Smjacob
1698155228Smjacobvoid
1699163899Smjacobisp_get_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
1700155228Smjacob{
1701155228Smjacob	int i;
1702163899Smjacob	isp_get_hdr(isp, &src->at_header, &dst->at_header);
1703163899Smjacob	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
1704163899Smjacob	ISP_IOXGET_16(isp, &src->at_iid, dst->at_iid);
1705163899Smjacob	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
1706163899Smjacob	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
1707163899Smjacob	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
1708163899Smjacob	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
1709163899Smjacob	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
1710163899Smjacob	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
1711163899Smjacob	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
1712155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1713163899Smjacob		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
1714155228Smjacob	}
1715163899Smjacob	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
1716163899Smjacob	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
1717155228Smjacob	for (i = 0; i < 4; i++) {
1718163899Smjacob		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
1719155228Smjacob	}
1720155228Smjacob	for (i = 0; i < 6; i++) {
1721163899Smjacob		ISP_IOXGET_16(isp, &src->at_reserved2[i],
1722163899Smjacob		    dst->at_reserved2[i]);
1723155228Smjacob	}
1724163899Smjacob	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
1725155228Smjacob}
1726155228Smjacob
1727155228Smjacobvoid
1728163899Smjacobisp_get_atio7(ispsoftc_t *isp, at7_entry_t *src, at7_entry_t *dst)
1729155228Smjacob{
1730163899Smjacob	ISP_IOXGET_8(isp, &src->at_type, dst->at_type);
1731163899Smjacob	ISP_IOXGET_8(isp, &src->at_count, dst->at_count);
1732163899Smjacob	ISP_IOXGET_16(isp, &src->at_ta_len, dst->at_ta_len);
1733163899Smjacob	ISP_IOXGET_32(isp, &src->at_rxid, dst->at_rxid);
1734163899Smjacob	isp_get_fc_hdr(isp, &src->at_hdr, &dst->at_hdr);
1735163899Smjacob	isp_get_fcp_cmnd_iu(isp, &src->at_cmnd, &dst->at_cmnd);
1736163899Smjacob}
1737163899Smjacob
1738163899Smjacobvoid
1739163899Smjacobisp_put_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
1740163899Smjacob{
1741155228Smjacob	int i;
1742163899Smjacob	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1743163899Smjacob	ISP_IOXPUT_16(isp, src->ct_syshandle, &dst->ct_syshandle);
1744163899Smjacob	ISP_IOXPUT_16(isp, src->ct_fwhandle, &dst->ct_fwhandle);
1745155228Smjacob	if (ISP_IS_SBUS(isp)) {
1746163899Smjacob		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_lun);
1747163899Smjacob		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_iid);
1748163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_reserved2);
1749163899Smjacob		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_tgt);
1750163899Smjacob		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_scsi_status);
1751163899Smjacob		ISP_IOXPUT_8(isp, src->ct_scsi_status, &dst->ct_status);
1752163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_val);
1753163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_type);
1754155228Smjacob	} else {
1755163899Smjacob		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
1756163899Smjacob		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
1757163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_tgt);
1758163899Smjacob		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_reserved2);
1759163899Smjacob		ISP_IOXPUT_8(isp, src->ct_scsi_status,
1760163899Smjacob		    &dst->ct_scsi_status);
1761163899Smjacob		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_status);
1762163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_type);
1763163899Smjacob		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_val);
1764155228Smjacob	}
1765163899Smjacob	ISP_IOXPUT_32(isp, src->ct_flags, &dst->ct_flags);
1766163899Smjacob	ISP_IOXPUT_32(isp, src->ct_xfrlen, &dst->ct_xfrlen);
1767163899Smjacob	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1768163899Smjacob	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1769163899Smjacob	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1770155228Smjacob	for (i = 0; i < ISP_RQDSEG; i++) {
1771163899Smjacob		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_base,
1772163899Smjacob		    &dst->ct_dataseg[i].ds_base);
1773163899Smjacob		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_count,
1774163899Smjacob		    &dst->ct_dataseg[i].ds_count);
1775155228Smjacob	}
1776155228Smjacob}
1777155228Smjacob
1778155228Smjacobvoid
1779163899Smjacobisp_get_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
1780155228Smjacob{
1781155228Smjacob	int i;
1782163899Smjacob	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
1783163899Smjacob	ISP_IOXGET_16(isp, &src->ct_syshandle, dst->ct_syshandle);
1784163899Smjacob	ISP_IOXGET_16(isp, &src->ct_fwhandle, dst->ct_fwhandle);
1785155228Smjacob	if (ISP_IS_SBUS(isp)) {
1786163899Smjacob		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_iid);
1787163899Smjacob		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_lun);
1788163899Smjacob		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_tgt);
1789163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_reserved2);
1790163899Smjacob		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_scsi_status);
1791163899Smjacob		ISP_IOXGET_8(isp, &src->ct_scsi_status, dst->ct_status);
1792163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_type);
1793163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_val);
1794155228Smjacob	} else {
1795163899Smjacob		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
1796163899Smjacob		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
1797163899Smjacob		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_reserved2);
1798163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_tgt);
1799163899Smjacob		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_status);
1800163899Smjacob		ISP_IOXGET_8(isp, &src->ct_scsi_status,
1801163899Smjacob		    dst->ct_scsi_status);
1802163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_val);
1803163899Smjacob		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_type);
1804155228Smjacob	}
1805163899Smjacob	ISP_IOXGET_32(isp, &src->ct_flags, dst->ct_flags);
1806163899Smjacob	ISP_IOXGET_32(isp, &src->ct_xfrlen, dst->ct_xfrlen);
1807163899Smjacob	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
1808163899Smjacob	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
1809163899Smjacob	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
1810155228Smjacob	for (i = 0; i < ISP_RQDSEG; i++) {
1811155228Smjacob		ISP_IOXGET_32(isp,
1812163899Smjacob		    &src->ct_dataseg[i].ds_base,
1813163899Smjacob		    dst->ct_dataseg[i].ds_base);
1814155228Smjacob		ISP_IOXGET_32(isp,
1815163899Smjacob		    &src->ct_dataseg[i].ds_count,
1816163899Smjacob		    dst->ct_dataseg[i].ds_count);
1817155228Smjacob	}
1818155228Smjacob}
1819155228Smjacob
1820155228Smjacobvoid
1821163899Smjacobisp_put_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
1822155228Smjacob{
1823155228Smjacob	int i;
1824163899Smjacob	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1825163899Smjacob	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1826163899Smjacob	ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
1827163899Smjacob	ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
1828163899Smjacob	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
1829163899Smjacob	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
1830163899Smjacob	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1831163899Smjacob	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1832163899Smjacob	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1833163899Smjacob	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
1834163899Smjacob	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1835163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0._reserved,
1836163899Smjacob		    &dst->rsp.m0._reserved);
1837163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2,
1838163899Smjacob		    &dst->rsp.m0._reserved2);
1839163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status,
1840163899Smjacob		    &dst->rsp.m0.ct_scsi_status);
1841163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
1842163899Smjacob		    &dst->rsp.m0.ct_xfrlen);
1843163899Smjacob		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1844155228Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1845155228Smjacob				ISP_IOXPUT_32(isp,
1846163899Smjacob				    src->rsp.m0.u.ct_dataseg[i].ds_base,
1847163899Smjacob				    &dst->rsp.m0.u.ct_dataseg[i].ds_base);
1848155228Smjacob				ISP_IOXPUT_32(isp,
1849163899Smjacob				    src->rsp.m0.u.ct_dataseg[i].ds_count,
1850163899Smjacob				    &dst->rsp.m0.u.ct_dataseg[i].ds_count);
1851155228Smjacob			}
1852163899Smjacob		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1853155228Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1854155228Smjacob				ISP_IOXPUT_32(isp,
1855163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_base,
1856163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
1857155228Smjacob				ISP_IOXPUT_32(isp,
1858163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
1859163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
1860155228Smjacob				ISP_IOXPUT_32(isp,
1861163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_count,
1862163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
1863155228Smjacob			}
1864163899Smjacob		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1865163899Smjacob			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type,
1866163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_type);
1867163899Smjacob			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment,
1868163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_segment);
1869163899Smjacob			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base,
1870163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_base);
1871155228Smjacob		}
1872163899Smjacob	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1873163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1._reserved,
1874163899Smjacob		    &dst->rsp.m1._reserved);
1875163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2,
1876163899Smjacob		    &dst->rsp.m1._reserved2);
1877163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen,
1878163899Smjacob		    &dst->rsp.m1.ct_senselen);
1879163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status,
1880163899Smjacob		    &dst->rsp.m1.ct_scsi_status);
1881163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
1882163899Smjacob		    &dst->rsp.m1.ct_resplen);
1883155228Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
1884163899Smjacob			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
1885163899Smjacob			    &dst->rsp.m1.ct_resp[i]);
1886155228Smjacob		}
1887155228Smjacob	} else {
1888163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2._reserved,
1889163899Smjacob		    &dst->rsp.m2._reserved);
1890163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2,
1891163899Smjacob		    &dst->rsp.m2._reserved2);
1892163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3,
1893163899Smjacob		    &dst->rsp.m2._reserved3);
1894163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
1895163899Smjacob		    &dst->rsp.m2.ct_datalen);
1896163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1897163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1898163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1899163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1900155228Smjacob	}
1901155228Smjacob}
1902155228Smjacob
1903155228Smjacobvoid
1904163899Smjacobisp_put_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
1905155228Smjacob{
1906155228Smjacob	int i;
1907163899Smjacob	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1908163899Smjacob	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1909163899Smjacob	ISP_IOXPUT_16(isp, src->ct_iid, &dst->ct_iid);
1910163899Smjacob	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
1911163899Smjacob	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
1912163899Smjacob	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1913163899Smjacob	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1914163899Smjacob	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
1915163899Smjacob	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
1916163899Smjacob	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1917163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0._reserved,
1918163899Smjacob		    &dst->rsp.m0._reserved);
1919163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2,
1920163899Smjacob		    &dst->rsp.m0._reserved2);
1921163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status,
1922163899Smjacob		    &dst->rsp.m0.ct_scsi_status);
1923163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
1924163899Smjacob		    &dst->rsp.m0.ct_xfrlen);
1925163899Smjacob		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1926155228Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1927155228Smjacob				ISP_IOXPUT_32(isp,
1928163899Smjacob				    src->rsp.m0.u.ct_dataseg[i].ds_base,
1929163899Smjacob				    &dst->rsp.m0.u.ct_dataseg[i].ds_base);
1930155228Smjacob				ISP_IOXPUT_32(isp,
1931163899Smjacob				    src->rsp.m0.u.ct_dataseg[i].ds_count,
1932163899Smjacob				    &dst->rsp.m0.u.ct_dataseg[i].ds_count);
1933155228Smjacob			}
1934163899Smjacob		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1935155228Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1936155228Smjacob				ISP_IOXPUT_32(isp,
1937163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_base,
1938163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
1939155228Smjacob				ISP_IOXPUT_32(isp,
1940163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
1941163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
1942155228Smjacob				ISP_IOXPUT_32(isp,
1943163899Smjacob				    src->rsp.m0.u.ct_dataseg64[i].ds_count,
1944163899Smjacob				    &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
1945155228Smjacob			}
1946163899Smjacob		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1947163899Smjacob			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type,
1948163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_type);
1949163899Smjacob			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment,
1950163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_segment);
1951163899Smjacob			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base,
1952163899Smjacob			    &dst->rsp.m0.u.ct_dslist.ds_base);
1953155228Smjacob		}
1954163899Smjacob	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1955163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1._reserved,
1956163899Smjacob		    &dst->rsp.m1._reserved);
1957163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2,
1958163899Smjacob		    &dst->rsp.m1._reserved2);
1959163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen,
1960163899Smjacob		    &dst->rsp.m1.ct_senselen);
1961163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status,
1962163899Smjacob		    &dst->rsp.m1.ct_scsi_status);
1963163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
1964163899Smjacob		    &dst->rsp.m1.ct_resplen);
1965155228Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
1966163899Smjacob			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
1967163899Smjacob			    &dst->rsp.m1.ct_resp[i]);
1968155228Smjacob		}
1969155228Smjacob	} else {
1970163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2._reserved,
1971163899Smjacob		    &dst->rsp.m2._reserved);
1972163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2,
1973163899Smjacob		    &dst->rsp.m2._reserved2);
1974163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3,
1975163899Smjacob		    &dst->rsp.m2._reserved3);
1976163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
1977163899Smjacob		    &dst->rsp.m2.ct_datalen);
1978163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1979163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1980163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1981163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1982155228Smjacob	}
1983155228Smjacob}
1984155228Smjacob
1985155228Smjacobvoid
1986163899Smjacobisp_put_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
1987155228Smjacob{
1988163899Smjacob	int i;
1989163899Smjacob
1990163899Smjacob	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
1991163899Smjacob	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
1992163899Smjacob	ISP_IOXPUT_16(isp, src->ct_nphdl, &dst->ct_nphdl);
1993163899Smjacob	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
1994163899Smjacob	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
1995163899Smjacob	ISP_IOXPUT_8(isp, src->ct_vpindex, &dst->ct_vpindex);
1996163899Smjacob	ISP_IOXPUT_8(isp, src->ct_xflags, &dst->ct_xflags);
1997163899Smjacob	ISP_IOXPUT_16(isp, src->ct_iid_lo, &dst->ct_iid_lo);
1998163899Smjacob	ISP_IOXPUT_8(isp, src->ct_iid_hi, &dst->ct_iid_hi);
1999163899Smjacob	ISP_IOXPUT_8(isp, src->ct_reserved, &dst->ct_reserved);
2000163899Smjacob	ISP_IOXPUT_32(isp, src->ct_rxid, &dst->ct_rxid);
2001163899Smjacob	ISP_IOXPUT_16(isp, src->ct_senselen, &dst->ct_senselen);
2002163899Smjacob	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
2003163899Smjacob	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
2004163899Smjacob	ISP_IOXPUT_16(isp, src->ct_oxid, &dst->ct_oxid);
2005163899Smjacob	ISP_IOXPUT_16(isp, src->ct_scsi_status, &dst->ct_scsi_status);
2006163899Smjacob	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
2007163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.reloff, &dst->rsp.m0.reloff);
2008163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.reserved0,
2009163899Smjacob		    &dst->rsp.m0.reserved0);
2010163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen,
2011163899Smjacob		    &dst->rsp.m0.ct_xfrlen);
2012163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.reserved1,
2013163899Smjacob		    &dst->rsp.m0.reserved1);
2014163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_base,
2015163899Smjacob		    &dst->rsp.m0.ds.ds_base);
2016163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_basehi,
2017163899Smjacob		    &dst->rsp.m0.ds.ds_basehi);
2018163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_count,
2019163899Smjacob		    &dst->rsp.m0.ds.ds_count);
2020163899Smjacob	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
2021163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen,
2022163899Smjacob		    &dst->rsp.m1.ct_resplen);
2023163899Smjacob		ISP_IOXPUT_16(isp, src->rsp.m1.reserved, &dst->rsp.m1.reserved);
2024163899Smjacob		for (i = 0; i < MAXRESPLEN_24XX; i++) {
2025163899Smjacob			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i],
2026163899Smjacob			    &dst->rsp.m1.ct_resp[i]);
2027163899Smjacob		}
2028163899Smjacob	} else {
2029163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.reserved0,
2030163899Smjacob		    &dst->rsp.m2.reserved0);
2031163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen,
2032163899Smjacob		    &dst->rsp.m2.ct_datalen);
2033163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.reserved1,
2034163899Smjacob		    &dst->rsp.m2.reserved1);
2035163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2036163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2037163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi,
2038163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
2039163899Smjacob		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2040163899Smjacob		    &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2041163899Smjacob	}
2042155228Smjacob}
2043155228Smjacob
2044163899Smjacob
2045155228Smjacobvoid
2046163899Smjacobisp_get_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
2047155228Smjacob{
2048163899Smjacob	int i;
2049163899Smjacob
2050163899Smjacob	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2051163899Smjacob	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2052163899Smjacob	ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
2053163899Smjacob	ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
2054163899Smjacob	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
2055163899Smjacob	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2056163899Smjacob	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
2057163899Smjacob	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2058163899Smjacob	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2059163899Smjacob	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
2060163899Smjacob	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2061163899Smjacob	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
2062163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0._reserved,
2063163899Smjacob		    dst->rsp.m0._reserved);
2064163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2,
2065163899Smjacob		    dst->rsp.m0._reserved2);
2066163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status,
2067163899Smjacob		    dst->rsp.m0.ct_scsi_status);
2068163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2069163899Smjacob		    dst->rsp.m0.ct_xfrlen);
2070163899Smjacob		if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
2071163899Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
2072163899Smjacob				ISP_IOXGET_32(isp,
2073163899Smjacob				    &src->rsp.m0.u.ct_dataseg[i].ds_base,
2074163899Smjacob				    dst->rsp.m0.u.ct_dataseg[i].ds_base);
2075163899Smjacob				ISP_IOXGET_32(isp,
2076163899Smjacob				    &src->rsp.m0.u.ct_dataseg[i].ds_count,
2077163899Smjacob				    dst->rsp.m0.u.ct_dataseg[i].ds_count);
2078163899Smjacob			}
2079163899Smjacob		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
2080163899Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
2081163899Smjacob				ISP_IOXGET_32(isp,
2082163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_base,
2083163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_base);
2084163899Smjacob				ISP_IOXGET_32(isp,
2085163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
2086163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
2087163899Smjacob				ISP_IOXGET_32(isp,
2088163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_count,
2089163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_count);
2090163899Smjacob			}
2091163899Smjacob		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
2092163899Smjacob			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type,
2093163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_type);
2094163899Smjacob			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment,
2095163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_segment);
2096163899Smjacob			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base,
2097163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_base);
2098163899Smjacob		}
2099163899Smjacob	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
2100163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1._reserved,
2101163899Smjacob		    dst->rsp.m1._reserved);
2102163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2,
2103163899Smjacob		    dst->rsp.m1._reserved2);
2104163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen,
2105163899Smjacob		    dst->rsp.m1.ct_senselen);
2106163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status,
2107163899Smjacob		    dst->rsp.m1.ct_scsi_status);
2108163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2109163899Smjacob		    dst->rsp.m1.ct_resplen);
2110163899Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
2111163899Smjacob			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2112163899Smjacob			    dst->rsp.m1.ct_resp[i]);
2113163899Smjacob		}
2114163899Smjacob	} else {
2115163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2._reserved,
2116163899Smjacob		    dst->rsp.m2._reserved);
2117163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2,
2118163899Smjacob		    dst->rsp.m2._reserved2);
2119163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3,
2120163899Smjacob		    dst->rsp.m2._reserved3);
2121163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2122163899Smjacob		    dst->rsp.m2.ct_datalen);
2123163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2124163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2125163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2126163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2127163899Smjacob	}
2128155228Smjacob}
2129155228Smjacob
2130155228Smjacobvoid
2131163899Smjacobisp_get_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
2132163899Smjacob{
2133163899Smjacob	int i;
2134163899Smjacob
2135163899Smjacob	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2136163899Smjacob	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2137163899Smjacob	ISP_IOXGET_16(isp, &src->ct_iid, dst->ct_iid);
2138163899Smjacob	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
2139163899Smjacob	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2140163899Smjacob	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
2141163899Smjacob	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2142163899Smjacob	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2143163899Smjacob	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
2144163899Smjacob	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2145163899Smjacob	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
2146163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0._reserved,
2147163899Smjacob		    dst->rsp.m0._reserved);
2148163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2,
2149163899Smjacob		    dst->rsp.m0._reserved2);
2150163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status,
2151163899Smjacob		    dst->rsp.m0.ct_scsi_status);
2152163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2153163899Smjacob		    dst->rsp.m0.ct_xfrlen);
2154163899Smjacob		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
2155163899Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
2156163899Smjacob				ISP_IOXGET_32(isp,
2157163899Smjacob				    &src->rsp.m0.u.ct_dataseg[i].ds_base,
2158163899Smjacob				    dst->rsp.m0.u.ct_dataseg[i].ds_base);
2159163899Smjacob				ISP_IOXGET_32(isp,
2160163899Smjacob				    &src->rsp.m0.u.ct_dataseg[i].ds_count,
2161163899Smjacob				    dst->rsp.m0.u.ct_dataseg[i].ds_count);
2162163899Smjacob			}
2163163899Smjacob		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
2164163899Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
2165163899Smjacob				ISP_IOXGET_32(isp,
2166163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_base,
2167163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_base);
2168163899Smjacob				ISP_IOXGET_32(isp,
2169163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_basehi,
2170163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
2171163899Smjacob				ISP_IOXGET_32(isp,
2172163899Smjacob				    &src->rsp.m0.u.ct_dataseg64[i].ds_count,
2173163899Smjacob				    dst->rsp.m0.u.ct_dataseg64[i].ds_count);
2174163899Smjacob			}
2175163899Smjacob		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
2176163899Smjacob			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type,
2177163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_type);
2178163899Smjacob			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment,
2179163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_segment);
2180163899Smjacob			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base,
2181163899Smjacob			    dst->rsp.m0.u.ct_dslist.ds_base);
2182163899Smjacob		}
2183163899Smjacob	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
2184163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1._reserved,
2185163899Smjacob		    dst->rsp.m1._reserved);
2186163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2,
2187163899Smjacob		    dst->rsp.m1._reserved2);
2188163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen,
2189163899Smjacob		    dst->rsp.m1.ct_senselen);
2190163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status,
2191163899Smjacob		    dst->rsp.m1.ct_scsi_status);
2192163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2193163899Smjacob		    dst->rsp.m1.ct_resplen);
2194163899Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
2195163899Smjacob			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2196163899Smjacob			    dst->rsp.m1.ct_resp[i]);
2197163899Smjacob		}
2198163899Smjacob	} else {
2199163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2._reserved,
2200163899Smjacob		    dst->rsp.m2._reserved);
2201163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2,
2202163899Smjacob		    dst->rsp.m2._reserved2);
2203163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3,
2204163899Smjacob		    dst->rsp.m2._reserved3);
2205163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2206163899Smjacob		    dst->rsp.m2.ct_datalen);
2207163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2208163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2209163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2210163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2211163899Smjacob	}
2212163899Smjacob}
2213163899Smjacob
2214163899Smjacobvoid
2215163899Smjacobisp_get_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
2216163899Smjacob{
2217163899Smjacob	int i;
2218163899Smjacob
2219163899Smjacob	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
2220163899Smjacob	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
2221163899Smjacob	ISP_IOXGET_16(isp, &src->ct_nphdl, dst->ct_nphdl);
2222163899Smjacob	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
2223163899Smjacob	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
2224163899Smjacob	ISP_IOXGET_8(isp, &src->ct_vpindex, dst->ct_vpindex);
2225163899Smjacob	ISP_IOXGET_8(isp, &src->ct_xflags, dst->ct_xflags);
2226163899Smjacob	ISP_IOXGET_16(isp, &src->ct_iid_lo, dst->ct_iid_lo);
2227163899Smjacob	ISP_IOXGET_8(isp, &src->ct_iid_hi, dst->ct_iid_hi);
2228163899Smjacob	ISP_IOXGET_8(isp, &src->ct_reserved, dst->ct_reserved);
2229163899Smjacob	ISP_IOXGET_32(isp, &src->ct_rxid, dst->ct_rxid);
2230163899Smjacob	ISP_IOXGET_16(isp, &src->ct_senselen, dst->ct_senselen);
2231163899Smjacob	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
2232163899Smjacob	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
2233163899Smjacob	ISP_IOXGET_16(isp, &src->ct_oxid, dst->ct_oxid);
2234163899Smjacob	ISP_IOXGET_16(isp, &src->ct_scsi_status, dst->ct_scsi_status);
2235163899Smjacob	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
2236163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.reloff, dst->rsp.m0.reloff);
2237163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.reserved0,
2238163899Smjacob		    dst->rsp.m0.reserved0);
2239163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen,
2240163899Smjacob		    dst->rsp.m0.ct_xfrlen);
2241163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.reserved1,
2242163899Smjacob		    dst->rsp.m0.reserved1);
2243163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_base,
2244163899Smjacob		    dst->rsp.m0.ds.ds_base);
2245163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_basehi,
2246163899Smjacob		    dst->rsp.m0.ds.ds_basehi);
2247163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_count,
2248163899Smjacob		    dst->rsp.m0.ds.ds_count);
2249163899Smjacob	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
2250163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen,
2251163899Smjacob		    dst->rsp.m1.ct_resplen);
2252163899Smjacob		ISP_IOXGET_16(isp, &src->rsp.m1.reserved, dst->rsp.m1.reserved);
2253163899Smjacob		for (i = 0; i < MAXRESPLEN_24XX; i++) {
2254163899Smjacob			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i],
2255163899Smjacob			    dst->rsp.m1.ct_resp[i]);
2256163899Smjacob		}
2257163899Smjacob	} else {
2258163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.reserved0,
2259163899Smjacob		    dst->rsp.m2.reserved0);
2260163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen,
2261163899Smjacob		    dst->rsp.m2.ct_datalen);
2262163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.reserved1,
2263163899Smjacob		    dst->rsp.m2.reserved1);
2264163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base,
2265163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
2266163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi,
2267163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
2268163899Smjacob		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count,
2269163899Smjacob		    dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
2270163899Smjacob	}
2271163899Smjacob}
2272163899Smjacob
2273163899Smjacobvoid
2274155704Smjacobisp_put_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
2275155228Smjacob{
2276155228Smjacob	int i;
2277163899Smjacob	isp_put_hdr(isp, &lesrc->le_header, &ledst->le_header);
2278155228Smjacob	ISP_IOXPUT_32(isp, lesrc->le_reserved, &ledst->le_reserved);
2279155228Smjacob	if (ISP_IS_SBUS(isp)) {
2280155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_rsvd);
2281155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_lun);
2282155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_tgt);
2283155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_ops);
2284155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_reserved2);
2285155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_status);
2286155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_in_count);
2287155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_cmd_count);
2288155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb7len);
2289155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb6len);
2290155228Smjacob	} else {
2291155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_lun);
2292155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_rsvd);
2293155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_ops);
2294155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_tgt);
2295155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_status);
2296155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_reserved2);
2297155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_cmd_count);
2298155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_in_count);
2299155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb6len);
2300155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb7len);
2301155228Smjacob	}
2302155228Smjacob	ISP_IOXPUT_32(isp, lesrc->le_flags, &ledst->le_flags);
2303155228Smjacob	ISP_IOXPUT_16(isp, lesrc->le_timeout, &ledst->le_timeout);
2304155228Smjacob	for (i = 0; i < 20; i++) {
2305155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_reserved3[i],
2306155228Smjacob		    &ledst->le_reserved3[i]);
2307155228Smjacob	}
2308155228Smjacob}
2309155228Smjacob
2310155228Smjacobvoid
2311155704Smjacobisp_get_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
2312155228Smjacob{
2313155228Smjacob	int i;
2314163899Smjacob	isp_get_hdr(isp, &lesrc->le_header, &ledst->le_header);
2315155228Smjacob	ISP_IOXGET_32(isp, &lesrc->le_reserved, ledst->le_reserved);
2316155228Smjacob	if (ISP_IS_SBUS(isp)) {
2317155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_rsvd);
2318155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_lun);
2319155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_tgt);
2320155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_ops);
2321155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_reserved2);
2322155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_status);
2323155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_in_count);
2324155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_cmd_count);
2325155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb7len);
2326155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb6len);
2327155228Smjacob	} else {
2328155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_lun);
2329155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_rsvd);
2330155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_ops);
2331155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_tgt);
2332155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_status);
2333155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_reserved2);
2334155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_cmd_count);
2335155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_in_count);
2336155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb6len);
2337155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb7len);
2338155228Smjacob	}
2339155228Smjacob	ISP_IOXGET_32(isp, &lesrc->le_flags, ledst->le_flags);
2340155228Smjacob	ISP_IOXGET_16(isp, &lesrc->le_timeout, ledst->le_timeout);
2341155228Smjacob	for (i = 0; i < 20; i++) {
2342155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_reserved3[i],
2343155228Smjacob		    ledst->le_reserved3[i]);
2344155228Smjacob	}
2345155228Smjacob}
2346155228Smjacob
2347155228Smjacobvoid
2348163899Smjacobisp_put_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
2349155228Smjacob{
2350155228Smjacob	int i;
2351163899Smjacob	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2352163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2353155228Smjacob	if (ISP_IS_SBUS(isp)) {
2354163899Smjacob		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_iid);
2355163899Smjacob		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_lun);
2356163899Smjacob		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_tgt);
2357163899Smjacob		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_reserved2);
2358163899Smjacob		ISP_IOXPUT_8(isp, src->in_status, &dst->in_rsvd2);
2359163899Smjacob		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_status);
2360163899Smjacob		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_type);
2361163899Smjacob		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_val);
2362155228Smjacob	} else {
2363163899Smjacob		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
2364163899Smjacob		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
2365163899Smjacob		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_reserved2);
2366163899Smjacob		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_tgt);
2367163899Smjacob		ISP_IOXPUT_8(isp, src->in_status, &dst->in_status);
2368163899Smjacob		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_rsvd2);
2369163899Smjacob		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_val);
2370163899Smjacob		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_type);
2371155228Smjacob	}
2372163899Smjacob	ISP_IOXPUT_32(isp, src->in_flags, &dst->in_flags);
2373163899Smjacob	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2374155228Smjacob	for (i = 0; i < IN_MSGLEN; i++) {
2375163899Smjacob		ISP_IOXPUT_8(isp, src->in_msg[i], &dst->in_msg[i]);
2376155228Smjacob	}
2377155228Smjacob	for (i = 0; i < IN_RSVDLEN; i++) {
2378163899Smjacob		ISP_IOXPUT_8(isp, src->in_reserved3[i],
2379163899Smjacob		    &dst->in_reserved3[i]);
2380155228Smjacob	}
2381155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
2382163899Smjacob		ISP_IOXPUT_8(isp, src->in_sense[i],
2383163899Smjacob		    &dst->in_sense[i]);
2384155228Smjacob	}
2385155228Smjacob}
2386155228Smjacob
2387155228Smjacobvoid
2388163899Smjacobisp_get_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
2389155228Smjacob{
2390155228Smjacob	int i;
2391163899Smjacob	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2392163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2393155228Smjacob	if (ISP_IS_SBUS(isp)) {
2394163899Smjacob		ISP_IOXGET_8(isp, &src->in_lun, dst->in_iid);
2395163899Smjacob		ISP_IOXGET_8(isp, &src->in_iid, dst->in_lun);
2396163899Smjacob		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_tgt);
2397163899Smjacob		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_reserved2);
2398163899Smjacob		ISP_IOXGET_8(isp, &src->in_status, dst->in_rsvd2);
2399163899Smjacob		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_status);
2400163899Smjacob		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_type);
2401163899Smjacob		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_val);
2402155228Smjacob	} else {
2403163899Smjacob		ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
2404163899Smjacob		ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
2405163899Smjacob		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_reserved2);
2406163899Smjacob		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_tgt);
2407163899Smjacob		ISP_IOXGET_8(isp, &src->in_status, dst->in_status);
2408163899Smjacob		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_rsvd2);
2409163899Smjacob		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_val);
2410163899Smjacob		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_type);
2411155228Smjacob	}
2412163899Smjacob	ISP_IOXGET_32(isp, &src->in_flags, dst->in_flags);
2413163899Smjacob	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2414155228Smjacob	for (i = 0; i < IN_MSGLEN; i++) {
2415163899Smjacob		ISP_IOXGET_8(isp, &src->in_msg[i], dst->in_msg[i]);
2416155228Smjacob	}
2417155228Smjacob	for (i = 0; i < IN_RSVDLEN; i++) {
2418163899Smjacob		ISP_IOXGET_8(isp, &src->in_reserved3[i],
2419163899Smjacob		    dst->in_reserved3[i]);
2420155228Smjacob	}
2421155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
2422163899Smjacob		ISP_IOXGET_8(isp, &src->in_sense[i],
2423163899Smjacob		    dst->in_sense[i]);
2424155228Smjacob	}
2425155228Smjacob}
2426155228Smjacob
2427155228Smjacobvoid
2428163899Smjacobisp_put_notify_fc(ispsoftc_t *isp, in_fcentry_t *src,
2429163899Smjacob    in_fcentry_t *dst)
2430155228Smjacob{
2431163899Smjacob	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2432163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2433163899Smjacob	ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
2434163899Smjacob	ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
2435163899Smjacob	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
2436163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
2437163899Smjacob	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2438163899Smjacob	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
2439163899Smjacob	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2440155228Smjacob}
2441155228Smjacob
2442155228Smjacobvoid
2443163899Smjacobisp_put_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src,
2444163899Smjacob    in_fcentry_e_t *dst)
2445155228Smjacob{
2446163899Smjacob	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2447163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2448163899Smjacob	ISP_IOXPUT_16(isp, src->in_iid, &dst->in_iid);
2449163899Smjacob	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
2450163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
2451163899Smjacob	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2452163899Smjacob	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
2453163899Smjacob	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
2454155228Smjacob}
2455155228Smjacob
2456155228Smjacobvoid
2457163899Smjacobisp_put_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src,
2458163899Smjacob    in_fcentry_24xx_t *dst)
2459155228Smjacob{
2460163899Smjacob	int i;
2461163899Smjacob
2462163899Smjacob	isp_put_hdr(isp, &src->in_header, &dst->in_header);
2463163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
2464163899Smjacob	ISP_IOXPUT_16(isp, src->in_nphdl, &dst->in_nphdl);
2465163899Smjacob	ISP_IOXPUT_16(isp, src->in_reserved1, &dst->in_reserved1);
2466163899Smjacob	ISP_IOXPUT_16(isp, src->in_flags, &dst->in_flags);
2467163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_rxid, &dst->in_srr_rxid);
2468163899Smjacob	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
2469163899Smjacob	ISP_IOXPUT_8(isp, src->in_status_subcode, &dst->in_status_subcode);
2470163899Smjacob	ISP_IOXPUT_16(isp, src->in_reserved2, &dst->in_reserved2);
2471163899Smjacob	ISP_IOXPUT_32(isp, src->in_rxid, &dst->in_rxid);
2472163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_reloff_hi, &dst->in_srr_reloff_hi);
2473163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_reloff_lo, &dst->in_srr_reloff_lo);
2474163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_iu, &dst->in_srr_iu);
2475163899Smjacob	ISP_IOXPUT_16(isp, src->in_srr_oxid, &dst->in_srr_oxid);
2476163899Smjacob	for (i = 0; i < 18; i++) {
2477163899Smjacob		ISP_IOXPUT_8(isp, src->in_reserved3[i], &dst->in_reserved3[i]);
2478163899Smjacob	}
2479163899Smjacob	ISP_IOXPUT_8(isp, src->in_reserved4, &dst->in_reserved4);
2480163899Smjacob	ISP_IOXPUT_8(isp, src->in_vpindex, &dst->in_vpindex);
2481163899Smjacob	ISP_IOXPUT_32(isp, src->in_reserved5, &dst->in_reserved5);
2482163899Smjacob	ISP_IOXPUT_16(isp, src->in_portid_lo, &dst->in_portid_lo);
2483163899Smjacob	ISP_IOXPUT_8(isp, src->in_portid_hi, &dst->in_portid_hi);
2484163899Smjacob	ISP_IOXPUT_8(isp, src->in_reserved6, &dst->in_reserved6);
2485163899Smjacob	ISP_IOXPUT_16(isp, src->in_reserved7, &dst->in_reserved7);
2486163899Smjacob	ISP_IOXPUT_16(isp, src->in_oxid, &dst->in_oxid);
2487155228Smjacob}
2488155228Smjacob
2489155228Smjacobvoid
2490163899Smjacobisp_get_notify_fc(ispsoftc_t *isp, in_fcentry_t *src,
2491163899Smjacob    in_fcentry_t *dst)
2492155228Smjacob{
2493163899Smjacob	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2494163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2495163899Smjacob	ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
2496163899Smjacob	ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
2497163899Smjacob	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
2498163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
2499163899Smjacob	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2500163899Smjacob	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
2501163899Smjacob	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2502155228Smjacob}
2503155228Smjacob
2504155228Smjacobvoid
2505163899Smjacobisp_get_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src,
2506163899Smjacob    in_fcentry_e_t *dst)
2507155228Smjacob{
2508163899Smjacob	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2509163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2510163899Smjacob	ISP_IOXGET_16(isp, &src->in_iid, dst->in_iid);
2511163899Smjacob	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
2512163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
2513163899Smjacob	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2514163899Smjacob	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
2515163899Smjacob	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
2516163899Smjacob}
2517163899Smjacob
2518163899Smjacobvoid
2519163899Smjacobisp_get_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src,
2520163899Smjacob    in_fcentry_24xx_t *dst)
2521163899Smjacob{
2522155228Smjacob	int i;
2523163899Smjacob
2524163899Smjacob	isp_get_hdr(isp, &src->in_header, &dst->in_header);
2525163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
2526163899Smjacob	ISP_IOXGET_16(isp, &src->in_nphdl, dst->in_nphdl);
2527163899Smjacob	ISP_IOXGET_16(isp, &src->in_reserved1, dst->in_reserved1);
2528163899Smjacob	ISP_IOXGET_16(isp, &src->in_flags, dst->in_flags);
2529163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_rxid, dst->in_srr_rxid);
2530163899Smjacob	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
2531163899Smjacob	ISP_IOXGET_8(isp, &src->in_status_subcode, dst->in_status_subcode);
2532163899Smjacob	ISP_IOXGET_16(isp, &src->in_reserved2, dst->in_reserved2);
2533163899Smjacob	ISP_IOXGET_32(isp, &src->in_rxid, dst->in_rxid);
2534163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_reloff_hi, dst->in_srr_reloff_hi);
2535163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_reloff_lo, dst->in_srr_reloff_lo);
2536163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_iu, dst->in_srr_iu);
2537163899Smjacob	ISP_IOXGET_16(isp, &src->in_srr_oxid, dst->in_srr_oxid);
2538163899Smjacob	for (i = 0; i < 18; i++) {
2539163899Smjacob		ISP_IOXGET_8(isp, &src->in_reserved3[i], dst->in_reserved3[i]);
2540163899Smjacob	}
2541163899Smjacob	ISP_IOXGET_8(isp, &src->in_reserved4, dst->in_reserved4);
2542163899Smjacob	ISP_IOXGET_8(isp, &src->in_vpindex, dst->in_vpindex);
2543163899Smjacob	ISP_IOXGET_32(isp, &src->in_reserved5, dst->in_reserved5);
2544163899Smjacob	ISP_IOXGET_16(isp, &src->in_portid_lo, dst->in_portid_lo);
2545163899Smjacob	ISP_IOXGET_8(isp, &src->in_portid_hi, dst->in_portid_hi);
2546163899Smjacob	ISP_IOXGET_8(isp, &src->in_reserved6, dst->in_reserved6);
2547163899Smjacob	ISP_IOXGET_16(isp, &src->in_reserved7, dst->in_reserved7);
2548163899Smjacob	ISP_IOXGET_16(isp, &src->in_oxid, dst->in_oxid);
2549163899Smjacob}
2550163899Smjacob
2551163899Smjacobvoid
2552163899Smjacobisp_put_notify_ack(ispsoftc_t *isp, na_entry_t *src,  na_entry_t *dst)
2553163899Smjacob{
2554163899Smjacob	int i;
2555163899Smjacob	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2556163899Smjacob	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2557155228Smjacob	if (ISP_IS_SBUS(isp)) {
2558163899Smjacob		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_iid);
2559163899Smjacob		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_lun);
2560163899Smjacob		ISP_IOXPUT_8(isp, src->na_status, &dst->na_event);
2561163899Smjacob		ISP_IOXPUT_8(isp, src->na_event, &dst->na_status);
2562155228Smjacob	} else {
2563163899Smjacob		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_lun);
2564163899Smjacob		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
2565163899Smjacob		ISP_IOXPUT_8(isp, src->na_status, &dst->na_status);
2566163899Smjacob		ISP_IOXPUT_8(isp, src->na_event, &dst->na_event);
2567155228Smjacob	}
2568163899Smjacob	ISP_IOXPUT_32(isp, src->na_flags, &dst->na_flags);
2569155228Smjacob	for (i = 0; i < NA_RSVDLEN; i++) {
2570163899Smjacob		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2571163899Smjacob		    &dst->na_reserved3[i]);
2572155228Smjacob	}
2573155228Smjacob}
2574155228Smjacob
2575155228Smjacobvoid
2576163899Smjacobisp_get_notify_ack(ispsoftc_t *isp, na_entry_t *src, na_entry_t *dst)
2577155228Smjacob{
2578155228Smjacob	int i;
2579163899Smjacob	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2580163899Smjacob	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2581155228Smjacob	if (ISP_IS_SBUS(isp)) {
2582163899Smjacob		ISP_IOXGET_8(isp, &src->na_lun, dst->na_iid);
2583163899Smjacob		ISP_IOXGET_8(isp, &src->na_iid, dst->na_lun);
2584163899Smjacob		ISP_IOXGET_8(isp, &src->na_status, dst->na_event);
2585163899Smjacob		ISP_IOXGET_8(isp, &src->na_event, dst->na_status);
2586155228Smjacob	} else {
2587163899Smjacob		ISP_IOXGET_8(isp, &src->na_lun, dst->na_lun);
2588163899Smjacob		ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
2589163899Smjacob		ISP_IOXGET_8(isp, &src->na_status, dst->na_status);
2590163899Smjacob		ISP_IOXGET_8(isp, &src->na_event, dst->na_event);
2591155228Smjacob	}
2592163899Smjacob	ISP_IOXGET_32(isp, &src->na_flags, dst->na_flags);
2593155228Smjacob	for (i = 0; i < NA_RSVDLEN; i++) {
2594163899Smjacob		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2595163899Smjacob		    dst->na_reserved3[i]);
2596155228Smjacob	}
2597155228Smjacob}
2598155228Smjacob
2599155228Smjacobvoid
2600163899Smjacobisp_put_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src,
2601163899Smjacob    na_fcentry_t *dst)
2602155228Smjacob{
2603155228Smjacob	int i;
2604163899Smjacob	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2605163899Smjacob	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2606163899Smjacob	ISP_IOXPUT_8(isp, src->na_reserved1, &dst->na_reserved1);
2607163899Smjacob	ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
2608163899Smjacob	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
2609163899Smjacob	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2610163899Smjacob	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2611163899Smjacob	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2612163899Smjacob	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
2613163899Smjacob	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
2614155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
2615163899Smjacob		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2616163899Smjacob		    &dst->na_reserved3[i]);
2617155228Smjacob	}
2618155228Smjacob}
2619155228Smjacob
2620155228Smjacobvoid
2621163899Smjacobisp_put_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src,
2622163899Smjacob    na_fcentry_e_t *dst)
2623155228Smjacob{
2624155228Smjacob	int i;
2625163899Smjacob	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2626163899Smjacob	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
2627163899Smjacob	ISP_IOXPUT_16(isp, src->na_iid, &dst->na_iid);
2628163899Smjacob	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
2629163899Smjacob	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2630163899Smjacob	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2631163899Smjacob	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2632163899Smjacob	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
2633163899Smjacob	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
2634155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
2635163899Smjacob		ISP_IOXPUT_16(isp, src->na_reserved3[i],
2636163899Smjacob		    &dst->na_reserved3[i]);
2637155228Smjacob	}
2638155228Smjacob}
2639155228Smjacob
2640155228Smjacobvoid
2641163899Smjacobisp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src,
2642163899Smjacob    na_fcentry_24xx_t *dst)
2643155228Smjacob{
2644155228Smjacob	int i;
2645163899Smjacob
2646163899Smjacob	isp_put_hdr(isp, &src->na_header, &dst->na_header);
2647163899Smjacob	ISP_IOXPUT_32(isp, src->na_handle, &dst->na_handle);
2648163899Smjacob	ISP_IOXPUT_16(isp, src->na_nphdl, &dst->na_nphdl);
2649163899Smjacob	ISP_IOXPUT_16(isp, src->na_reserved1, &dst->na_reserved1);
2650163899Smjacob	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
2651163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_rxid, &dst->na_srr_rxid);
2652163899Smjacob	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
2653163899Smjacob	ISP_IOXPUT_8(isp, src->na_status_subcode, &dst->na_status_subcode);
2654163899Smjacob	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
2655163899Smjacob	ISP_IOXPUT_32(isp, src->na_rxid, &dst->na_rxid);
2656163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_reloff_hi, &dst->na_srr_reloff_hi);
2657163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_reloff_lo, &dst->na_srr_reloff_lo);
2658163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_iu, &dst->na_srr_iu);
2659163899Smjacob	ISP_IOXPUT_16(isp, src->na_srr_flags, &dst->na_srr_flags);
2660163899Smjacob	for (i = 0; i < 18; i++) {
2661163899Smjacob		ISP_IOXPUT_8(isp, src->na_reserved3[i], &dst->na_reserved3[i]);
2662163899Smjacob	}
2663163899Smjacob	ISP_IOXPUT_8(isp, src->na_reserved4, &dst->na_reserved4);
2664163899Smjacob	ISP_IOXPUT_8(isp, src->na_vpindex, &dst->na_vpindex);
2665163899Smjacob	ISP_IOXPUT_8(isp, src->na_srr_reject_vunique,
2666163899Smjacob	    &dst->na_srr_reject_vunique);
2667163899Smjacob	ISP_IOXPUT_8(isp, src->na_srr_reject_explanation,
2668163899Smjacob	    &dst->na_srr_reject_explanation);
2669163899Smjacob	ISP_IOXPUT_8(isp, src->na_srr_reject_code, &dst->na_srr_reject_code);
2670163899Smjacob	ISP_IOXPUT_8(isp, src->na_reserved5, &dst->na_reserved5);
2671163899Smjacob	for (i = 0; i < 6; i++) {
2672163899Smjacob		ISP_IOXPUT_8(isp, src->na_reserved6[i], &dst->na_reserved6[i]);
2673163899Smjacob	}
2674163899Smjacob	ISP_IOXPUT_16(isp, src->na_oxid, &dst->na_oxid);
2675163899Smjacob}
2676163899Smjacob
2677163899Smjacobvoid
2678163899Smjacobisp_get_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src,
2679163899Smjacob    na_fcentry_t *dst)
2680163899Smjacob{
2681163899Smjacob	int i;
2682163899Smjacob	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2683163899Smjacob	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2684163899Smjacob	ISP_IOXGET_8(isp, &src->na_reserved1, dst->na_reserved1);
2685163899Smjacob	ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
2686163899Smjacob	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
2687163899Smjacob	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2688163899Smjacob	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2689163899Smjacob	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2690163899Smjacob	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
2691163899Smjacob	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
2692155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
2693163899Smjacob		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2694163899Smjacob		    dst->na_reserved3[i]);
2695155228Smjacob	}
2696155228Smjacob}
2697155228Smjacob
2698155228Smjacobvoid
2699163899Smjacobisp_get_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src,
2700163899Smjacob    na_fcentry_e_t *dst)
2701155228Smjacob{
2702155228Smjacob	int i;
2703163899Smjacob	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2704163899Smjacob	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
2705163899Smjacob	ISP_IOXGET_16(isp, &src->na_iid, dst->na_iid);
2706163899Smjacob	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
2707163899Smjacob	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2708163899Smjacob	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2709163899Smjacob	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2710163899Smjacob	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
2711163899Smjacob	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
2712155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
2713163899Smjacob		ISP_IOXGET_16(isp, &src->na_reserved3[i],
2714163899Smjacob		    dst->na_reserved3[i]);
2715155228Smjacob	}
2716155228Smjacob}
2717163899Smjacob
2718163899Smjacobvoid
2719163899Smjacobisp_get_notify_ack_24xx(ispsoftc_t *isp, na_fcentry_24xx_t *src,
2720163899Smjacob    na_fcentry_24xx_t *dst)
2721163899Smjacob{
2722163899Smjacob	int i;
2723163899Smjacob
2724163899Smjacob	isp_get_hdr(isp, &src->na_header, &dst->na_header);
2725163899Smjacob	ISP_IOXGET_32(isp, &src->na_handle, dst->na_handle);
2726163899Smjacob	ISP_IOXGET_16(isp, &src->na_nphdl, dst->na_nphdl);
2727163899Smjacob	ISP_IOXGET_16(isp, &src->na_reserved1, dst->na_reserved1);
2728163899Smjacob	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
2729163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_rxid, dst->na_srr_rxid);
2730163899Smjacob	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
2731163899Smjacob	ISP_IOXGET_8(isp, &src->na_status_subcode, dst->na_status_subcode);
2732163899Smjacob	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
2733163899Smjacob	ISP_IOXGET_32(isp, &src->na_rxid, dst->na_rxid);
2734163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_reloff_hi, dst->na_srr_reloff_hi);
2735163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_reloff_lo, dst->na_srr_reloff_lo);
2736163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_iu, dst->na_srr_iu);
2737163899Smjacob	ISP_IOXGET_16(isp, &src->na_srr_flags, dst->na_srr_flags);
2738163899Smjacob	for (i = 0; i < 18; i++) {
2739163899Smjacob		ISP_IOXGET_8(isp, &src->na_reserved3[i], dst->na_reserved3[i]);
2740163899Smjacob	}
2741163899Smjacob	ISP_IOXGET_8(isp, &src->na_reserved4, dst->na_reserved4);
2742163899Smjacob	ISP_IOXGET_8(isp, &src->na_vpindex, dst->na_vpindex);
2743163899Smjacob	ISP_IOXGET_8(isp, &src->na_srr_reject_vunique,
2744163899Smjacob	    dst->na_srr_reject_vunique);
2745163899Smjacob	ISP_IOXGET_8(isp, &src->na_srr_reject_explanation,
2746163899Smjacob	    dst->na_srr_reject_explanation);
2747163899Smjacob	ISP_IOXGET_8(isp, &src->na_srr_reject_code, dst->na_srr_reject_code);
2748163899Smjacob	ISP_IOXGET_8(isp, &src->na_reserved5, dst->na_reserved5);
2749163899Smjacob	for (i = 0; i < 6; i++) {
2750163899Smjacob		ISP_IOXGET_8(isp, &src->na_reserved6[i], dst->na_reserved6[i]);
2751163899Smjacob	}
2752163899Smjacob	ISP_IOXGET_16(isp, &src->na_oxid, dst->na_oxid);
2753163899Smjacob}
2754163899Smjacob
2755163899Smjacobvoid
2756163899Smjacobisp_get_abts(ispsoftc_t *isp, abts_t *src, abts_t *dst)
2757163899Smjacob{
2758163899Smjacob	int i;
2759163899Smjacob
2760163899Smjacob	isp_get_hdr(isp, &src->abts_header, &dst->abts_header);
2761163899Smjacob	for (i = 0; i < 6; i++) {
2762163899Smjacob		ISP_IOXGET_8(isp, &src->abts_reserved0[i],
2763163899Smjacob		    dst->abts_reserved0[i]);
2764163899Smjacob	}
2765163899Smjacob	ISP_IOXGET_16(isp, &src->abts_nphdl, dst->abts_nphdl);
2766163899Smjacob	ISP_IOXGET_16(isp, &src->abts_reserved1, dst->abts_reserved1);
2767163899Smjacob	ISP_IOXGET_16(isp, &src->abts_sof, dst->abts_sof);
2768163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rxid_abts, dst->abts_rxid_abts);
2769163899Smjacob	ISP_IOXGET_16(isp, &src->abts_did_lo, dst->abts_did_lo);
2770163899Smjacob	ISP_IOXGET_8(isp, &src->abts_did_hi, dst->abts_did_hi);
2771163899Smjacob	ISP_IOXGET_8(isp, &src->abts_r_ctl, dst->abts_r_ctl);
2772163899Smjacob	ISP_IOXGET_16(isp, &src->abts_sid_lo, dst->abts_sid_lo);
2773163899Smjacob	ISP_IOXGET_8(isp, &src->abts_sid_hi, dst->abts_sid_hi);
2774163899Smjacob	ISP_IOXGET_8(isp, &src->abts_cs_ctl, dst->abts_cs_ctl);
2775163899Smjacob	ISP_IOXGET_16(isp, &src->abts_fs_ctl, dst->abts_fs_ctl);
2776163899Smjacob	ISP_IOXGET_8(isp, &src->abts_f_ctl, dst->abts_f_ctl);
2777163899Smjacob	ISP_IOXGET_8(isp, &src->abts_type, dst->abts_type);
2778163899Smjacob	ISP_IOXGET_16(isp, &src->abts_seq_cnt, dst->abts_seq_cnt);
2779163899Smjacob	ISP_IOXGET_8(isp, &src->abts_df_ctl, dst->abts_df_ctl);
2780163899Smjacob	ISP_IOXGET_8(isp, &src->abts_seq_id, dst->abts_seq_id);
2781163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rx_id, dst->abts_rx_id);
2782163899Smjacob	ISP_IOXGET_16(isp, &src->abts_ox_id, dst->abts_ox_id);
2783163899Smjacob	ISP_IOXGET_32(isp, &src->abts_param, dst->abts_param);
2784163899Smjacob	for (i = 0; i < 16; i++) {
2785163899Smjacob	ISP_IOXGET_8(isp, &src->abts_reserved2[i],
2786163899Smjacob		    dst->abts_reserved2[i]);
2787163899Smjacob	}
2788163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rxid_task, dst->abts_rxid_task);
2789163899Smjacob}
2790163899Smjacob
2791163899Smjacobvoid
2792163899Smjacobisp_put_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
2793163899Smjacob{
2794163899Smjacob	int i;
2795163899Smjacob
2796163899Smjacob	isp_put_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
2797163899Smjacob	ISP_IOXPUT_32(isp, src->abts_rsp_handle, &dst->abts_rsp_handle);
2798163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_status, &dst->abts_rsp_status);
2799163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_nphdl, &dst->abts_rsp_nphdl);
2800163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_ctl_flags, &dst->abts_rsp_ctl_flags);
2801163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_sof, &dst->abts_rsp_sof);
2802163899Smjacob	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_abts, &dst->abts_rsp_rxid_abts);
2803163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_did_lo, &dst->abts_rsp_did_lo);
2804163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_did_hi, &dst->abts_rsp_did_hi);
2805163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_r_ctl, &dst->abts_rsp_r_ctl);
2806163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_sid_lo, &dst->abts_rsp_sid_lo);
2807163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_sid_hi, &dst->abts_rsp_sid_hi);
2808163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_cs_ctl, &dst->abts_rsp_cs_ctl);
2809163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_f_ctl_lo, &dst->abts_rsp_f_ctl_lo);
2810163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_f_ctl_hi, &dst->abts_rsp_f_ctl_hi);
2811163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_type, &dst->abts_rsp_type);
2812163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_seq_cnt, &dst->abts_rsp_seq_cnt);
2813163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_df_ctl, &dst->abts_rsp_df_ctl);
2814163899Smjacob	ISP_IOXPUT_8(isp, src->abts_rsp_seq_id, &dst->abts_rsp_seq_id);
2815163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_rx_id, &dst->abts_rsp_rx_id);
2816163899Smjacob	ISP_IOXPUT_16(isp, src->abts_rsp_ox_id, &dst->abts_rsp_ox_id);
2817163899Smjacob	ISP_IOXPUT_32(isp, src->abts_rsp_param, &dst->abts_rsp_param);
2818163899Smjacob	if (src->abts_rsp_r_ctl == BA_ACC) {
2819163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.reserved,
2820163899Smjacob		    &dst->abts_rsp_payload.ba_acc.reserved);
2821163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.last_seq_id,
2822163899Smjacob		    &dst->abts_rsp_payload.ba_acc.last_seq_id);
2823163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.seq_id_valid,
2824163899Smjacob		    &dst->abts_rsp_payload.ba_acc.seq_id_valid);
2825163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_rx_id,
2826163899Smjacob		    &dst->abts_rsp_payload.ba_acc.aborted_rx_id);
2827163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_ox_id,
2828163899Smjacob		    &dst->abts_rsp_payload.ba_acc.aborted_ox_id);
2829163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.high_seq_cnt,
2830163899Smjacob		    &dst->abts_rsp_payload.ba_acc.high_seq_cnt);
2831163899Smjacob		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.low_seq_cnt,
2832163899Smjacob		    &dst->abts_rsp_payload.ba_acc.low_seq_cnt);
2833163899Smjacob		for (i = 0; i < 4; i++) {
2834163899Smjacob			ISP_IOXPUT_16(isp,
2835163899Smjacob			    src->abts_rsp_payload.ba_acc.reserved2[i],
2836163899Smjacob			    &dst->abts_rsp_payload.ba_acc.reserved2[i]);
2837163899Smjacob		}
2838163899Smjacob	} else if (src->abts_rsp_r_ctl == BA_RJT) {
2839163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.vendor_unique,
2840163899Smjacob		    &dst->abts_rsp_payload.ba_rjt.vendor_unique);
2841163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.explanation,
2842163899Smjacob		    &dst->abts_rsp_payload.ba_rjt.explanation);
2843163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reason,
2844163899Smjacob		    &dst->abts_rsp_payload.ba_rjt.reason);
2845163899Smjacob		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reserved,
2846163899Smjacob		    &dst->abts_rsp_payload.ba_rjt.reserved);
2847163899Smjacob		for (i = 0; i < 12; i++) {
2848163899Smjacob			ISP_IOXPUT_16(isp,
2849163899Smjacob			    src->abts_rsp_payload.ba_rjt.reserved2[i],
2850163899Smjacob			    &dst->abts_rsp_payload.ba_rjt.reserved2[i]);
2851163899Smjacob		}
2852163899Smjacob	} else {
2853163899Smjacob		for (i = 0; i < 16; i++) {
2854163899Smjacob			ISP_IOXPUT_8(isp, src->abts_rsp_payload.reserved[i],
2855163899Smjacob			    &dst->abts_rsp_payload.reserved[i]);
2856163899Smjacob		}
2857163899Smjacob	}
2858163899Smjacob	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_task, &dst->abts_rsp_rxid_task);
2859163899Smjacob}
2860163899Smjacob
2861163899Smjacobvoid
2862163899Smjacobisp_get_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
2863163899Smjacob{
2864163899Smjacob	int i;
2865163899Smjacob
2866163899Smjacob	isp_get_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
2867163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_handle, dst->abts_rsp_handle);
2868163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_status, dst->abts_rsp_status);
2869163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_nphdl, dst->abts_rsp_nphdl);
2870163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_ctl_flags, dst->abts_rsp_ctl_flags);
2871163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_sof, dst->abts_rsp_sof);
2872163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_abts, dst->abts_rsp_rxid_abts);
2873163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_did_lo, dst->abts_rsp_did_lo);
2874163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_did_hi, dst->abts_rsp_did_hi);
2875163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_r_ctl, dst->abts_rsp_r_ctl);
2876163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_sid_lo, dst->abts_rsp_sid_lo);
2877163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_sid_hi, dst->abts_rsp_sid_hi);
2878163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_cs_ctl, dst->abts_rsp_cs_ctl);
2879163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_f_ctl_lo, dst->abts_rsp_f_ctl_lo);
2880163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_f_ctl_hi, dst->abts_rsp_f_ctl_hi);
2881163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_type, dst->abts_rsp_type);
2882163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_seq_cnt, dst->abts_rsp_seq_cnt);
2883163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_df_ctl, dst->abts_rsp_df_ctl);
2884163899Smjacob	ISP_IOXGET_8(isp, &src->abts_rsp_seq_id, dst->abts_rsp_seq_id);
2885163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_rx_id, dst->abts_rsp_rx_id);
2886163899Smjacob	ISP_IOXGET_16(isp, &src->abts_rsp_ox_id, dst->abts_rsp_ox_id);
2887163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_param, dst->abts_rsp_param);
2888163899Smjacob	for (i = 0; i < 8; i++) {
2889163899Smjacob		ISP_IOXGET_8(isp, &src->abts_rsp_payload.rsp.reserved[i],
2890163899Smjacob		    dst->abts_rsp_payload.rsp.reserved[i]);
2891163899Smjacob	}
2892163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode1,
2893163899Smjacob	    dst->abts_rsp_payload.rsp.subcode1);
2894163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode2,
2895163899Smjacob	    dst->abts_rsp_payload.rsp.subcode2);
2896163899Smjacob	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_task, dst->abts_rsp_rxid_task);
2897163899Smjacob}
2898155228Smjacob#endif	/* ISP_TARGET_MODE */
2899163899Smjacob/*
2900163899Smjacob * vim:ts=8:sw=8
2901163899Smjacob */
2902