isp_library.c revision 155228
1155228Smjacob/*-
2155228Smjacob * Qlogic Host Adapter Internal Library Functions
3155228Smjacob *
4155228Smjacob * Copyright (c) 1999-2006 by Matthew Jacob
5155228Smjacob * All rights reserved.
6155228Smjacob *
7155228Smjacob * Redistribution and use in source and binary forms, with or without
8155228Smjacob * modification, are permitted provided that the following conditions
9155228Smjacob * are met:
10155228Smjacob * 1. Redistributions of source code must retain the above copyright
11155228Smjacob *    notice immediately at the beginning of the file, without modification,
12155228Smjacob *    this list of conditions, and the following disclaimer.
13155228Smjacob * 2. The name of the author may not be used to endorse or promote products
14155228Smjacob *    derived from this software without specific prior written permission.
15155228Smjacob *
16155228Smjacob * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17155228Smjacob * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18155228Smjacob * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19155228Smjacob * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
20155228Smjacob * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21155228Smjacob * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22155228Smjacob * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23155228Smjacob * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24155228Smjacob * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25155228Smjacob * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26155228Smjacob * SUCH DAMAGE.
27155228Smjacob *
28155228Smjacob */
29155228Smjacob#include <sys/cdefs.h>
30155228Smjacob__FBSDID("$FreeBSD: head/sys/dev/isp/isp_library.c 155228 2006-02-02 21:31:34Z mjacob $");
31155228Smjacob#include <dev/isp/isp_freebsd.h>
32155228Smjacob
33155228Smjacobint
34155228Smjacobisp_save_xs(struct ispsoftc *isp, XS_T *xs, u_int16_t *handlep)
35155228Smjacob{
36155228Smjacob	int i, j;
37155228Smjacob
38155228Smjacob	for (j = isp->isp_lasthdls, i = 0; i < (int) isp->isp_maxcmds; i++) {
39155228Smjacob		if (isp->isp_xflist[j] == NULL) {
40155228Smjacob			break;
41155228Smjacob		}
42155228Smjacob		if (++j == isp->isp_maxcmds) {
43155228Smjacob			j = 0;
44155228Smjacob		}
45155228Smjacob	}
46155228Smjacob	if (i == isp->isp_maxcmds) {
47155228Smjacob		return (-1);
48155228Smjacob	}
49155228Smjacob	isp->isp_xflist[j] = xs;
50155228Smjacob	*handlep = j+1;
51155228Smjacob	if (++j == isp->isp_maxcmds)
52155228Smjacob		j = 0;
53155228Smjacob	isp->isp_lasthdls = (u_int16_t)j;
54155228Smjacob	return (0);
55155228Smjacob}
56155228Smjacob
57155228SmjacobXS_T *
58155228Smjacobisp_find_xs(struct ispsoftc *isp, u_int16_t handle)
59155228Smjacob{
60155228Smjacob	if (handle < 1 || handle > (u_int16_t) isp->isp_maxcmds) {
61155228Smjacob		return (NULL);
62155228Smjacob	} else {
63155228Smjacob		return (isp->isp_xflist[handle - 1]);
64155228Smjacob	}
65155228Smjacob}
66155228Smjacob
67155228Smjacobu_int16_t
68155228Smjacobisp_find_handle(struct ispsoftc *isp, XS_T *xs)
69155228Smjacob{
70155228Smjacob	int i;
71155228Smjacob	if (xs != NULL) {
72155228Smjacob		for (i = 0; i < isp->isp_maxcmds; i++) {
73155228Smjacob			if (isp->isp_xflist[i] == xs) {
74155228Smjacob				return ((u_int16_t) i+1);
75155228Smjacob			}
76155228Smjacob		}
77155228Smjacob	}
78155228Smjacob	return (0);
79155228Smjacob}
80155228Smjacob
81155228Smjacobint
82155228Smjacobisp_handle_index(u_int16_t handle)
83155228Smjacob{
84155228Smjacob	return (handle-1);
85155228Smjacob}
86155228Smjacob
87155228Smjacobu_int16_t
88155228Smjacobisp_index_handle(int index)
89155228Smjacob{
90155228Smjacob	return (index+1);
91155228Smjacob}
92155228Smjacob
93155228Smjacobvoid
94155228Smjacobisp_destroy_handle(struct ispsoftc *isp, u_int16_t handle)
95155228Smjacob{
96155228Smjacob	if (handle > 0 && handle <= (u_int16_t) isp->isp_maxcmds) {
97155228Smjacob		isp->isp_xflist[handle - 1] = NULL;
98155228Smjacob	}
99155228Smjacob}
100155228Smjacob
101155228Smjacobint
102155228Smjacobisp_getrqentry(struct ispsoftc *isp, u_int16_t *iptrp,
103155228Smjacob    u_int16_t *optrp, void **resultp)
104155228Smjacob{
105155228Smjacob	volatile u_int16_t iptr, optr;
106155228Smjacob
107155228Smjacob	optr = isp->isp_reqodx = READ_REQUEST_QUEUE_OUT_POINTER(isp);
108155228Smjacob	iptr = isp->isp_reqidx;
109155228Smjacob	*resultp = ISP_QUEUE_ENTRY(isp->isp_rquest, iptr);
110155228Smjacob	iptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN(isp));
111155228Smjacob	if (iptr == optr) {
112155228Smjacob		return (1);
113155228Smjacob	}
114155228Smjacob	if (optrp)
115155228Smjacob		*optrp = optr;
116155228Smjacob	if (iptrp)
117155228Smjacob		*iptrp = iptr;
118155228Smjacob	return (0);
119155228Smjacob}
120155228Smjacob
121155228Smjacob#define	TBA	(4 * (((QENTRY_LEN >> 2) * 3) + 1) + 1)
122155228Smjacobvoid
123155228Smjacobisp_print_qentry(struct ispsoftc *isp, char *msg, int idx, void *arg)
124155228Smjacob{
125155228Smjacob	char buf[TBA];
126155228Smjacob	int amt, i, j;
127155228Smjacob	u_int8_t *ptr = arg;
128155228Smjacob
129155228Smjacob	isp_prt(isp, ISP_LOGALL, "%s index %d=>", msg, idx);
130155228Smjacob	for (buf[0] = 0, amt = i = 0; i < 4; i++) {
131155228Smjacob		buf[0] = 0;
132155228Smjacob		SNPRINTF(buf, TBA, "  ");
133155228Smjacob		for (j = 0; j < (QENTRY_LEN >> 2); j++) {
134155228Smjacob			SNPRINTF(buf, TBA, "%s %02x", buf, ptr[amt++] & 0xff);
135155228Smjacob		}
136155228Smjacob		isp_prt(isp, ISP_LOGALL, buf);
137155228Smjacob	}
138155228Smjacob}
139155228Smjacob
140155228Smjacobvoid
141155228Smjacobisp_print_bytes(struct ispsoftc *isp, char *msg, int amt, void *arg)
142155228Smjacob{
143155228Smjacob	char buf[128];
144155228Smjacob	u_int8_t *ptr = arg;
145155228Smjacob	int off;
146155228Smjacob
147155228Smjacob	if (msg)
148155228Smjacob		isp_prt(isp, ISP_LOGALL, "%s:", msg);
149155228Smjacob	off = 0;
150155228Smjacob	buf[0] = 0;
151155228Smjacob	while (off < amt) {
152155228Smjacob		int j, to;
153155228Smjacob		to = off;
154155228Smjacob		for (j = 0; j < 16; j++) {
155155228Smjacob			SNPRINTF(buf, 128, "%s %02x", buf, ptr[off++] & 0xff);
156155228Smjacob			if (off == amt)
157155228Smjacob				break;
158155228Smjacob		}
159155228Smjacob		isp_prt(isp, ISP_LOGALL, "0x%08x:%s", to, buf);
160155228Smjacob		buf[0] = 0;
161155228Smjacob	}
162155228Smjacob}
163155228Smjacob
164155228Smjacob/*
165155228Smjacob * Do the common path to try and ensure that link is up, we've scanned
166155228Smjacob * the fabric (if we're on a fabric), and that we've synchronized this
167155228Smjacob * all with our own database and done the appropriate logins.
168155228Smjacob *
169155228Smjacob * We repeatedly check for firmware state and loop state after each
170155228Smjacob * action because things may have changed while we were doing this.
171155228Smjacob * Any failure or change of state causes us to return a nonzero value.
172155228Smjacob *
173155228Smjacob * We honor HBA roles in that if we're not in Initiator mode, we don't
174155228Smjacob * attempt to sync up the database (that's for somebody else to do,
175155228Smjacob * if ever).
176155228Smjacob *
177155228Smjacob * We assume we enter here with any locks held.
178155228Smjacob */
179155228Smjacob
180155228Smjacobint
181155228Smjacobisp_fc_runstate(struct ispsoftc *isp, int tval)
182155228Smjacob{
183155228Smjacob	fcparam *fcp;
184155228Smjacob	int *tptr;
185155228Smjacob
186155228Smjacob	if (IS_SCSI(isp))
187155228Smjacob		return (0);
188155228Smjacob
189155228Smjacob	tptr = tval? &tval : NULL;
190155228Smjacob	if (isp_control(isp, ISPCTL_FCLINK_TEST, tptr) != 0) {
191155228Smjacob		return (-1);
192155228Smjacob	}
193155228Smjacob	fcp = FCPARAM(isp);
194155228Smjacob	if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD)
195155228Smjacob		return (-1);
196155228Smjacob	if (isp_control(isp, ISPCTL_SCAN_FABRIC, NULL) != 0) {
197155228Smjacob		return (-1);
198155228Smjacob	}
199155228Smjacob	if (isp_control(isp, ISPCTL_SCAN_LOOP, NULL) != 0) {
200155228Smjacob		return (-1);
201155228Smjacob	}
202155228Smjacob	if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
203155228Smjacob		return (0);
204155228Smjacob	}
205155228Smjacob	if (isp_control(isp, ISPCTL_PDB_SYNC, NULL) != 0) {
206155228Smjacob		return (-1);
207155228Smjacob	}
208155228Smjacob	if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) {
209155228Smjacob		return (-1);
210155228Smjacob	}
211155228Smjacob	return (0);
212155228Smjacob}
213155228Smjacob
214155228Smjacob/*
215155228Smjacob * Functions to move stuff to a form that the QLogic RISC engine understands
216155228Smjacob * and functions to move stuff back to a form the processor understands.
217155228Smjacob *
218155228Smjacob * Each platform is required to provide the 8, 16 and 32 bit
219155228Smjacob * swizzle and unswizzle macros (ISP_IOX{PUT|GET}_{8,16,32})
220155228Smjacob *
221155228Smjacob * The assumption is that swizzling and unswizzling is mostly done 'in place'
222155228Smjacob * (with a few exceptions for efficiency).
223155228Smjacob */
224155228Smjacob
225155228Smjacob#define	ISP_IS_SBUS(isp)	\
226155228Smjacob	(ISP_SBUS_SUPPORTED && (isp)->isp_bustype == ISP_BT_SBUS)
227155228Smjacob
228155228Smjacob/*
229155228Smjacob * Swizzle/Copy Functions
230155228Smjacob */
231155228Smjacobvoid
232155228Smjacobisp_copy_out_hdr(struct ispsoftc *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
233155228Smjacob{
234155228Smjacob	if (ISP_IS_SBUS(isp)) {
235155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
236155228Smjacob		    &hpdst->rqs_entry_count);
237155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
238155228Smjacob		    &hpdst->rqs_entry_type);
239155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
240155228Smjacob		    &hpdst->rqs_flags);
241155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
242155228Smjacob		    &hpdst->rqs_seqno);
243155228Smjacob	} else {
244155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
245155228Smjacob		    &hpdst->rqs_entry_type);
246155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
247155228Smjacob		    &hpdst->rqs_entry_count);
248155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
249155228Smjacob		    &hpdst->rqs_seqno);
250155228Smjacob		ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
251155228Smjacob		    &hpdst->rqs_flags);
252155228Smjacob	}
253155228Smjacob}
254155228Smjacob
255155228Smjacobvoid
256155228Smjacobisp_copy_in_hdr(struct ispsoftc *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
257155228Smjacob{
258155228Smjacob	if (ISP_IS_SBUS(isp)) {
259155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
260155228Smjacob		    hpdst->rqs_entry_count);
261155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
262155228Smjacob		    hpdst->rqs_entry_type);
263155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
264155228Smjacob		    hpdst->rqs_flags);
265155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
266155228Smjacob		    hpdst->rqs_seqno);
267155228Smjacob	} else {
268155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
269155228Smjacob		    hpdst->rqs_entry_type);
270155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
271155228Smjacob		    hpdst->rqs_entry_count);
272155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
273155228Smjacob		    hpdst->rqs_seqno);
274155228Smjacob		ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
275155228Smjacob		    hpdst->rqs_flags);
276155228Smjacob	}
277155228Smjacob}
278155228Smjacob
279155228Smjacobint
280155228Smjacobisp_get_response_type(struct ispsoftc *isp, isphdr_t *hp)
281155228Smjacob{
282155228Smjacob	u_int8_t type;
283155228Smjacob	if (ISP_IS_SBUS(isp)) {
284155228Smjacob		ISP_IOXGET_8(isp, &hp->rqs_entry_count, type);
285155228Smjacob	} else {
286155228Smjacob		ISP_IOXGET_8(isp, &hp->rqs_entry_type, type);
287155228Smjacob	}
288155228Smjacob	return ((int)type);
289155228Smjacob}
290155228Smjacob
291155228Smjacobvoid
292155228Smjacobisp_put_request(struct ispsoftc *isp, ispreq_t *rqsrc, ispreq_t *rqdst)
293155228Smjacob{
294155228Smjacob	int i;
295155228Smjacob	isp_copy_out_hdr(isp, &rqsrc->req_header, &rqdst->req_header);
296155228Smjacob	ISP_IOXPUT_32(isp, rqsrc->req_handle, &rqdst->req_handle);
297155228Smjacob	if (ISP_IS_SBUS(isp)) {
298155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_target);
299155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_lun_trn);
300155228Smjacob	} else {
301155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_lun_trn);
302155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_target);
303155228Smjacob	}
304155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_cdblen, &rqdst->req_cdblen);
305155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_flags, &rqdst->req_flags);
306155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_time, &rqdst->req_time);
307155228Smjacob	ISP_IOXPUT_16(isp, rqsrc->req_seg_count, &rqdst->req_seg_count);
308155228Smjacob	for (i = 0; i < 12; i++) {
309155228Smjacob		ISP_IOXPUT_8(isp, rqsrc->req_cdb[i], &rqdst->req_cdb[i]);
310155228Smjacob	}
311155228Smjacob	for (i = 0; i < ISP_RQDSEG; i++) {
312155228Smjacob		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_base,
313155228Smjacob		    &rqdst->req_dataseg[i].ds_base);
314155228Smjacob		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_count,
315155228Smjacob		    &rqdst->req_dataseg[i].ds_count);
316155228Smjacob	}
317155228Smjacob}
318155228Smjacob
319155228Smjacobvoid
320155228Smjacobisp_put_request_t2(struct ispsoftc *isp, ispreqt2_t *tqsrc, ispreqt2_t *tqdst)
321155228Smjacob{
322155228Smjacob	int i;
323155228Smjacob	isp_copy_out_hdr(isp, &tqsrc->req_header, &tqdst->req_header);
324155228Smjacob	ISP_IOXPUT_32(isp, tqsrc->req_handle, &tqdst->req_handle);
325155228Smjacob	ISP_IOXPUT_8(isp, tqsrc->req_lun_trn, &tqdst->req_lun_trn);
326155228Smjacob	ISP_IOXPUT_8(isp, tqsrc->req_target, &tqdst->req_target);
327155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_scclun, &tqdst->req_scclun);
328155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_flags,  &tqdst->req_flags);
329155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->_res2, &tqdst->_res2);
330155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_time, &tqdst->req_time);
331155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_seg_count, &tqdst->req_seg_count);
332155228Smjacob	for (i = 0; i < 16; i++) {
333155228Smjacob		ISP_IOXPUT_8(isp, tqsrc->req_cdb[i], &tqdst->req_cdb[i]);
334155228Smjacob	}
335155228Smjacob	ISP_IOXPUT_32(isp, tqsrc->req_totalcnt, &tqdst->req_totalcnt);
336155228Smjacob	for (i = 0; i < ISP_RQDSEG_T2; i++) {
337155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_base,
338155228Smjacob		    &tqdst->req_dataseg[i].ds_base);
339155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_count,
340155228Smjacob		    &tqdst->req_dataseg[i].ds_count);
341155228Smjacob	}
342155228Smjacob}
343155228Smjacob
344155228Smjacobvoid
345155228Smjacobisp_put_request_t2e(struct ispsoftc *isp, ispreqt2e_t *tqsrc, ispreqt2e_t *tqdst)
346155228Smjacob{
347155228Smjacob	int i;
348155228Smjacob	isp_copy_out_hdr(isp, &tqsrc->req_header, &tqdst->req_header);
349155228Smjacob	ISP_IOXPUT_32(isp, tqsrc->req_handle, &tqdst->req_handle);
350155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_target, &tqdst->req_target);
351155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_scclun, &tqdst->req_scclun);
352155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_flags,  &tqdst->req_flags);
353155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->_res2, &tqdst->_res2);
354155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_time, &tqdst->req_time);
355155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_seg_count, &tqdst->req_seg_count);
356155228Smjacob	for (i = 0; i < 16; i++) {
357155228Smjacob		ISP_IOXPUT_8(isp, tqsrc->req_cdb[i], &tqdst->req_cdb[i]);
358155228Smjacob	}
359155228Smjacob	ISP_IOXPUT_32(isp, tqsrc->req_totalcnt, &tqdst->req_totalcnt);
360155228Smjacob	for (i = 0; i < ISP_RQDSEG_T2; i++) {
361155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_base,
362155228Smjacob		    &tqdst->req_dataseg[i].ds_base);
363155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_count,
364155228Smjacob		    &tqdst->req_dataseg[i].ds_count);
365155228Smjacob	}
366155228Smjacob}
367155228Smjacob
368155228Smjacobvoid
369155228Smjacobisp_put_request_t3(struct ispsoftc *isp, ispreqt3_t *tqsrc, ispreqt3_t *tqdst)
370155228Smjacob{
371155228Smjacob	int i;
372155228Smjacob	isp_copy_out_hdr(isp, &tqsrc->req_header, &tqdst->req_header);
373155228Smjacob	ISP_IOXPUT_32(isp, tqsrc->req_handle, &tqdst->req_handle);
374155228Smjacob	ISP_IOXPUT_8(isp, tqsrc->req_lun_trn, &tqdst->req_lun_trn);
375155228Smjacob	ISP_IOXPUT_8(isp, tqsrc->req_target, &tqdst->req_target);
376155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_scclun, &tqdst->req_scclun);
377155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_flags,  &tqdst->req_flags);
378155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->_res2, &tqdst->_res2);
379155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_time, &tqdst->req_time);
380155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_seg_count, &tqdst->req_seg_count);
381155228Smjacob	for (i = 0; i < 16; i++) {
382155228Smjacob		ISP_IOXPUT_8(isp, tqsrc->req_cdb[i], &tqdst->req_cdb[i]);
383155228Smjacob	}
384155228Smjacob	ISP_IOXPUT_32(isp, tqsrc->req_totalcnt, &tqdst->req_totalcnt);
385155228Smjacob	for (i = 0; i < ISP_RQDSEG_T3; i++) {
386155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_base,
387155228Smjacob		    &tqdst->req_dataseg[i].ds_base);
388155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_basehi,
389155228Smjacob		    &tqdst->req_dataseg[i].ds_basehi);
390155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_count,
391155228Smjacob		    &tqdst->req_dataseg[i].ds_count);
392155228Smjacob	}
393155228Smjacob}
394155228Smjacob
395155228Smjacobvoid
396155228Smjacobisp_put_request_t3e(struct ispsoftc *isp, ispreqt3e_t *tqsrc, ispreqt3e_t *tqdst)
397155228Smjacob{
398155228Smjacob	int i;
399155228Smjacob	isp_copy_out_hdr(isp, &tqsrc->req_header, &tqdst->req_header);
400155228Smjacob	ISP_IOXPUT_32(isp, tqsrc->req_handle, &tqdst->req_handle);
401155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_target, &tqdst->req_target);
402155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_scclun, &tqdst->req_scclun);
403155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_flags,  &tqdst->req_flags);
404155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->_res2, &tqdst->_res2);
405155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_time, &tqdst->req_time);
406155228Smjacob	ISP_IOXPUT_16(isp, tqsrc->req_seg_count, &tqdst->req_seg_count);
407155228Smjacob	for (i = 0; i < 16; i++) {
408155228Smjacob		ISP_IOXPUT_8(isp, tqsrc->req_cdb[i], &tqdst->req_cdb[i]);
409155228Smjacob	}
410155228Smjacob	ISP_IOXPUT_32(isp, tqsrc->req_totalcnt, &tqdst->req_totalcnt);
411155228Smjacob	for (i = 0; i < ISP_RQDSEG_T3; i++) {
412155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_base,
413155228Smjacob		    &tqdst->req_dataseg[i].ds_base);
414155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_basehi,
415155228Smjacob		    &tqdst->req_dataseg[i].ds_basehi);
416155228Smjacob		ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_count,
417155228Smjacob		    &tqdst->req_dataseg[i].ds_count);
418155228Smjacob	}
419155228Smjacob}
420155228Smjacob
421155228Smjacobvoid
422155228Smjacobisp_put_extended_request(struct ispsoftc *isp, ispextreq_t *xqsrc,
423155228Smjacob    ispextreq_t *xqdst)
424155228Smjacob{
425155228Smjacob	int i;
426155228Smjacob	isp_copy_out_hdr(isp, &xqsrc->req_header, &xqdst->req_header);
427155228Smjacob	ISP_IOXPUT_32(isp, xqsrc->req_handle, &xqdst->req_handle);
428155228Smjacob	if (ISP_IS_SBUS(isp)) {
429155228Smjacob		ISP_IOXPUT_8(isp, xqsrc->req_lun_trn, &xqdst->req_target);
430155228Smjacob		ISP_IOXPUT_8(isp, xqsrc->req_target, &xqdst->req_lun_trn);
431155228Smjacob	} else {
432155228Smjacob		ISP_IOXPUT_8(isp, xqsrc->req_lun_trn, &xqdst->req_lun_trn);
433155228Smjacob		ISP_IOXPUT_8(isp, xqsrc->req_target, &xqdst->req_target);
434155228Smjacob	}
435155228Smjacob	ISP_IOXPUT_16(isp, xqsrc->req_cdblen, &xqdst->req_cdblen);
436155228Smjacob	ISP_IOXPUT_16(isp, xqsrc->req_flags, &xqdst->req_flags);
437155228Smjacob	ISP_IOXPUT_16(isp, xqsrc->req_time, &xqdst->req_time);
438155228Smjacob	ISP_IOXPUT_16(isp, xqsrc->req_seg_count, &xqdst->req_seg_count);
439155228Smjacob	for (i = 0; i < 44; i++) {
440155228Smjacob		ISP_IOXPUT_8(isp, xqsrc->req_cdb[i], &xqdst->req_cdb[i]);
441155228Smjacob	}
442155228Smjacob}
443155228Smjacob
444155228Smjacobvoid
445155228Smjacobisp_put_cont_req(struct ispsoftc *isp, ispcontreq_t *cqsrc, ispcontreq_t *cqdst)
446155228Smjacob{
447155228Smjacob	int i;
448155228Smjacob	isp_copy_out_hdr(isp, &cqsrc->req_header, &cqdst->req_header);
449155228Smjacob	for (i = 0; i < ISP_CDSEG; i++) {
450155228Smjacob		ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_base,
451155228Smjacob		    &cqdst->req_dataseg[i].ds_base);
452155228Smjacob		ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_count,
453155228Smjacob		    &cqdst->req_dataseg[i].ds_count);
454155228Smjacob	}
455155228Smjacob}
456155228Smjacob
457155228Smjacobvoid
458155228Smjacobisp_put_cont64_req(struct ispsoftc *isp, ispcontreq64_t *cqsrc,
459155228Smjacob    ispcontreq64_t *cqdst)
460155228Smjacob{
461155228Smjacob	int i;
462155228Smjacob	isp_copy_out_hdr(isp, &cqsrc->req_header, &cqdst->req_header);
463155228Smjacob	for (i = 0; i < ISP_CDSEG64; i++) {
464155228Smjacob		ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_base,
465155228Smjacob		    &cqdst->req_dataseg[i].ds_base);
466155228Smjacob		ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_basehi,
467155228Smjacob		    &cqdst->req_dataseg[i].ds_basehi);
468155228Smjacob		ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_count,
469155228Smjacob		    &cqdst->req_dataseg[i].ds_count);
470155228Smjacob	}
471155228Smjacob}
472155228Smjacob
473155228Smjacobvoid
474155228Smjacobisp_get_response(struct ispsoftc *isp, ispstatusreq_t *spsrc,
475155228Smjacob    ispstatusreq_t *spdst)
476155228Smjacob{
477155228Smjacob	int i;
478155228Smjacob	isp_copy_in_hdr(isp, &spsrc->req_header, &spdst->req_header);
479155228Smjacob	ISP_IOXGET_32(isp, &spsrc->req_handle, spdst->req_handle);
480155228Smjacob	ISP_IOXGET_16(isp, &spsrc->req_scsi_status, spdst->req_scsi_status);
481155228Smjacob	ISP_IOXGET_16(isp, &spsrc->req_completion_status,
482155228Smjacob	    spdst->req_completion_status);
483155228Smjacob	ISP_IOXGET_16(isp, &spsrc->req_state_flags, spdst->req_state_flags);
484155228Smjacob	ISP_IOXGET_16(isp, &spsrc->req_status_flags, spdst->req_status_flags);
485155228Smjacob	ISP_IOXGET_16(isp, &spsrc->req_time, spdst->req_time);
486155228Smjacob	ISP_IOXGET_16(isp, &spsrc->req_sense_len, spdst->req_sense_len);
487155228Smjacob	ISP_IOXGET_32(isp, &spsrc->req_resid, spdst->req_resid);
488155228Smjacob	for (i = 0; i < 8; i++) {
489155228Smjacob		ISP_IOXGET_8(isp, &spsrc->req_response[i],
490155228Smjacob		    spdst->req_response[i]);
491155228Smjacob	}
492155228Smjacob	for (i = 0; i < 32; i++) {
493155228Smjacob		ISP_IOXGET_8(isp, &spsrc->req_sense_data[i],
494155228Smjacob		    spdst->req_sense_data[i]);
495155228Smjacob	}
496155228Smjacob}
497155228Smjacob
498155228Smjacobvoid
499155228Smjacobisp_get_response_x(struct ispsoftc *isp, ispstatus_cont_t *cpsrc,
500155228Smjacob    ispstatus_cont_t *cpdst)
501155228Smjacob{
502155228Smjacob	int i;
503155228Smjacob	isp_copy_in_hdr(isp, &cpsrc->req_header, &cpdst->req_header);
504155228Smjacob	for (i = 0; i < 60; i++) {
505155228Smjacob		ISP_IOXGET_8(isp, &cpsrc->req_sense_data[i],
506155228Smjacob		    cpdst->req_sense_data[i]);
507155228Smjacob	}
508155228Smjacob}
509155228Smjacob
510155228Smjacobvoid
511155228Smjacobisp_get_rio2(struct ispsoftc *isp, isp_rio2_t *r2src, isp_rio2_t *r2dst)
512155228Smjacob{
513155228Smjacob	int i;
514155228Smjacob	isp_copy_in_hdr(isp, &r2src->req_header, &r2dst->req_header);
515155228Smjacob	if (r2dst->req_header.rqs_seqno > 30)
516155228Smjacob		r2dst->req_header.rqs_seqno = 30;
517155228Smjacob	for (i = 0; i < r2dst->req_header.rqs_seqno; i++) {
518155228Smjacob		ISP_IOXGET_16(isp, &r2src->req_handles[i],
519155228Smjacob		    r2dst->req_handles[i]);
520155228Smjacob	}
521155228Smjacob	while (i < 30) {
522155228Smjacob		r2dst->req_handles[i++] = 0;
523155228Smjacob	}
524155228Smjacob}
525155228Smjacob
526155228Smjacobvoid
527155228Smjacobisp_put_icb(struct ispsoftc *isp, isp_icb_t *Is, isp_icb_t *Id)
528155228Smjacob{
529155228Smjacob	int i;
530155228Smjacob	if (ISP_IS_SBUS(isp)) {
531155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_version, &Id->_reserved0);
532155228Smjacob		ISP_IOXPUT_8(isp, Is->_reserved0, &Id->icb_version);
533155228Smjacob	} else {
534155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_version, &Id->icb_version);
535155228Smjacob		ISP_IOXPUT_8(isp, Is->_reserved0, &Id->_reserved0);
536155228Smjacob	}
537155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_fwoptions, &Id->icb_fwoptions);
538155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_maxfrmlen, &Id->icb_maxfrmlen);
539155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_maxalloc, &Id->icb_maxalloc);
540155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_execthrottle, &Id->icb_execthrottle);
541155228Smjacob	if (ISP_IS_SBUS(isp)) {
542155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_retry_count, &Id->icb_retry_delay);
543155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_retry_delay, &Id->icb_retry_count);
544155228Smjacob	} else {
545155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_retry_count, &Id->icb_retry_count);
546155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_retry_delay, &Id->icb_retry_delay);
547155228Smjacob	}
548155228Smjacob	for (i = 0; i < 8; i++) {
549155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_portname[i], &Id->icb_portname[i]);
550155228Smjacob	}
551155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_hardaddr, &Id->icb_hardaddr);
552155228Smjacob	if (ISP_IS_SBUS(isp)) {
553155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_iqdevtype, &Id->icb_logintime);
554155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_logintime, &Id->icb_iqdevtype);
555155228Smjacob	} else {
556155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_iqdevtype, &Id->icb_iqdevtype);
557155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_logintime, &Id->icb_logintime);
558155228Smjacob	}
559155228Smjacob	for (i = 0; i < 8; i++) {
560155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_nodename[i], &Id->icb_nodename[i]);
561155228Smjacob	}
562155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_rqstout, &Id->icb_rqstout);
563155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_rspnsin, &Id->icb_rspnsin);
564155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_rqstqlen, &Id->icb_rqstqlen);
565155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_rsltqlen, &Id->icb_rsltqlen);
566155228Smjacob	for (i = 0; i < 4; i++) {
567155228Smjacob		ISP_IOXPUT_16(isp, Is->icb_rqstaddr[i], &Id->icb_rqstaddr[i]);
568155228Smjacob	}
569155228Smjacob	for (i = 0; i < 4; i++) {
570155228Smjacob		ISP_IOXPUT_16(isp, Is->icb_respaddr[i], &Id->icb_respaddr[i]);
571155228Smjacob	}
572155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_lunenables, &Id->icb_lunenables);
573155228Smjacob	if (ISP_IS_SBUS(isp)) {
574155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_ccnt, &Id->icb_icnt);
575155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_icnt, &Id->icb_ccnt);
576155228Smjacob	} else {
577155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_ccnt, &Id->icb_ccnt);
578155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_icnt, &Id->icb_icnt);
579155228Smjacob	}
580155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_lunetimeout, &Id->icb_lunetimeout);
581155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_xfwoptions, &Id->icb_xfwoptions);
582155228Smjacob	if (ISP_IS_SBUS(isp)) {
583155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_racctimer, &Id->icb_idelaytimer);
584155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_idelaytimer, &Id->icb_racctimer);
585155228Smjacob	} else {
586155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_racctimer, &Id->icb_racctimer);
587155228Smjacob		ISP_IOXPUT_8(isp, Is->icb_idelaytimer, &Id->icb_idelaytimer);
588155228Smjacob	}
589155228Smjacob	ISP_IOXPUT_16(isp, Is->icb_zfwoptions, &Id->icb_zfwoptions);
590155228Smjacob}
591155228Smjacob
592155228Smjacobvoid
593155228Smjacobisp_get_pdb(struct ispsoftc *isp, isp_pdb_t *src, isp_pdb_t *dst)
594155228Smjacob{
595155228Smjacob	int i;
596155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_options, dst->pdb_options);
597155228Smjacob        ISP_IOXGET_8(isp, &src->pdb_mstate, dst->pdb_mstate);
598155228Smjacob        ISP_IOXGET_8(isp, &src->pdb_sstate, dst->pdb_sstate);
599155228Smjacob	for (i = 0; i < 4; i++) {
600155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i],
601155228Smjacob		    dst->pdb_hardaddr_bits[i]);
602155228Smjacob	}
603155228Smjacob	for (i = 0; i < 4; i++) {
604155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_portid_bits[i],
605155228Smjacob		    dst->pdb_portid_bits[i]);
606155228Smjacob	}
607155228Smjacob	for (i = 0; i < 8; i++) {
608155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
609155228Smjacob	}
610155228Smjacob	for (i = 0; i < 8; i++) {
611155228Smjacob		ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
612155228Smjacob	}
613155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_execthrottle, dst->pdb_execthrottle);
614155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_exec_count, dst->pdb_exec_count);
615155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_retry_count, dst->pdb_retry_count);
616155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_retry_delay, dst->pdb_retry_delay);
617155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_resalloc, dst->pdb_resalloc);
618155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_curalloc, dst->pdb_curalloc);
619155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_qhead, dst->pdb_qhead);
620155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_qtail, dst->pdb_qtail);
621155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_tl_next, dst->pdb_tl_next);
622155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_tl_last, dst->pdb_tl_last);
623155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_features, dst->pdb_features);
624155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_pconcurrnt, dst->pdb_pconcurrnt);
625155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_roi, dst->pdb_roi);
626155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_target, dst->pdb_target);
627155228Smjacob	ISP_IOXGET_8(isp, &src->pdb_initiator, dst->pdb_initiator);
628155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_rdsiz, dst->pdb_rdsiz);
629155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_ncseq, dst->pdb_ncseq);
630155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_noseq, dst->pdb_noseq);
631155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_labrtflg, dst->pdb_labrtflg);
632155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_lstopflg, dst->pdb_lstopflg);
633155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_sqhead, dst->pdb_sqhead);
634155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_sqtail, dst->pdb_sqtail);
635155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_ptimer, dst->pdb_ptimer);
636155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_nxt_seqid, dst->pdb_nxt_seqid);
637155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_fcount, dst->pdb_fcount);
638155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_len, dst->pdb_prli_len);
639155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
640155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
641155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_loopid, dst->pdb_loopid);
642155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_il_ptr, dst->pdb_il_ptr);
643155228Smjacob	ISP_IOXGET_16(isp, &src->pdb_sl_ptr, dst->pdb_sl_ptr);
644155228Smjacob}
645155228Smjacob
646155228Smjacob
647155228Smjacob/*
648155228Smjacob * CT_HDR canonicalization- only needed for SNS responses
649155228Smjacob */
650155228Smjacobvoid
651155228Smjacobisp_get_ct_hdr(struct ispsoftc *isp, ct_hdr_t *src, ct_hdr_t *dst)
652155228Smjacob{
653155228Smjacob	ISP_IOXGET_8(isp, &src->ct_revision, dst->ct_revision);
654155228Smjacob	ISP_IOXGET_8(isp, &src->ct_portid[0], dst->ct_portid[0]);
655155228Smjacob	ISP_IOXGET_8(isp, &src->ct_portid[1], dst->ct_portid[1]);
656155228Smjacob	ISP_IOXGET_8(isp, &src->ct_portid[2], dst->ct_portid[2]);
657155228Smjacob	ISP_IOXGET_8(isp, &src->ct_fcs_type, dst->ct_fcs_type);
658155228Smjacob	ISP_IOXGET_8(isp, &src->ct_fcs_subtype, dst->ct_fcs_subtype);
659155228Smjacob	ISP_IOXGET_8(isp, &src->ct_options, dst->ct_options);
660155228Smjacob	ISP_IOXGET_8(isp, &src->ct_res0, dst->ct_res0);
661155228Smjacob	ISP_IOXGET_16(isp, &src->ct_response, dst->ct_response);
662155228Smjacob	dst->ct_response = (dst->ct_response << 8) | (dst->ct_response >> 8);
663155228Smjacob	ISP_IOXGET_16(isp, &src->ct_resid, dst->ct_resid);
664155228Smjacob	dst->ct_resid = (dst->ct_resid << 8) | (dst->ct_resid >> 8);
665155228Smjacob	ISP_IOXGET_8(isp, &src->ct_res1, dst->ct_res1);
666155228Smjacob	ISP_IOXGET_8(isp, &src->ct_reason, dst->ct_reason);
667155228Smjacob	ISP_IOXGET_8(isp, &src->ct_explanation, dst->ct_explanation);
668155228Smjacob	ISP_IOXGET_8(isp, &src->ct_vunique, dst->ct_vunique);
669155228Smjacob}
670155228Smjacob
671155228Smjacob/*
672155228Smjacob * Generic SNS request - not particularly useful since the per-command data
673155228Smjacob * isn't always 16 bit words.
674155228Smjacob */
675155228Smjacobvoid
676155228Smjacobisp_put_sns_request(struct ispsoftc *isp, sns_screq_t *src, sns_screq_t *dst)
677155228Smjacob{
678155228Smjacob	int i, nw = (int) src->snscb_sblen;
679155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
680155228Smjacob	for (i = 0; i < 4; i++) {
681155228Smjacob		ISP_IOXPUT_16(isp, src->snscb_addr[i], &dst->snscb_addr[i]);
682155228Smjacob	}
683155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
684155228Smjacob	for (i = 0; i < nw; i++) {
685155228Smjacob		ISP_IOXPUT_16(isp, src->snscb_data[i], &dst->snscb_data[i]);
686155228Smjacob	}
687155228Smjacob
688155228Smjacob}
689155228Smjacob
690155228Smjacobvoid
691155228Smjacobisp_put_gid_ft_request(struct ispsoftc *isp, sns_gid_ft_req_t *src,
692155228Smjacob    sns_gid_ft_req_t *dst)
693155228Smjacob{
694155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
695155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_res0, &dst->snscb_res0);
696155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
697155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
698155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
699155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
700155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
701155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_res1, &dst->snscb_res1);
702155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
703155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2);
704155228Smjacob	ISP_IOXPUT_32(isp, src->snscb_res3, &dst->snscb_res3);
705155228Smjacob	ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type);
706155228Smjacob}
707155228Smjacob
708155228Smjacobvoid
709155228Smjacobisp_put_gxn_id_request(struct ispsoftc *isp, sns_gxn_id_req_t *src,
710155228Smjacob    sns_gxn_id_req_t *dst)
711155228Smjacob{
712155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
713155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_res0, &dst->snscb_res0);
714155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
715155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
716155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
717155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
718155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
719155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_res1, &dst->snscb_res1);
720155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
721155228Smjacob	ISP_IOXPUT_16(isp, src->snscb_res2, &dst->snscb_res2);
722155228Smjacob	ISP_IOXPUT_32(isp, src->snscb_res3, &dst->snscb_res3);
723155228Smjacob	ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid);
724155228Smjacob}
725155228Smjacob
726155228Smjacob/*
727155228Smjacob * Generic SNS response - not particularly useful since the per-command data
728155228Smjacob * isn't always 16 bit words.
729155228Smjacob */
730155228Smjacobvoid
731155228Smjacobisp_get_sns_response(struct ispsoftc *isp, sns_scrsp_t *src,
732155228Smjacob    sns_scrsp_t *dst, int nwords)
733155228Smjacob{
734155228Smjacob	int i;
735155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
736155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
737155228Smjacob	for (i = 0; i < 3; i++) {
738155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
739155228Smjacob		    dst->snscb_port_id[i]);
740155228Smjacob	}
741155228Smjacob	for (i = 0; i < 8; i++) {
742155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_portname[i],
743155228Smjacob		    dst->snscb_portname[i]);
744155228Smjacob	}
745155228Smjacob	for (i = 0; i < nwords; i++) {
746155228Smjacob		ISP_IOXGET_16(isp, &src->snscb_data[i], dst->snscb_data[i]);
747155228Smjacob	}
748155228Smjacob}
749155228Smjacob
750155228Smjacobvoid
751155228Smjacobisp_get_gid_ft_response(struct ispsoftc *isp, sns_gid_ft_rsp_t *src,
752155228Smjacob    sns_gid_ft_rsp_t *dst, int nwords)
753155228Smjacob{
754155228Smjacob	int i;
755155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
756155228Smjacob	for (i = 0; i < nwords; i++) {
757155228Smjacob		int j;
758155228Smjacob		ISP_IOXGET_8(isp,
759155228Smjacob		    &src->snscb_ports[i].control,
760155228Smjacob		    dst->snscb_ports[i].control);
761155228Smjacob		for (j = 0; j < 3; j++) {
762155228Smjacob			ISP_IOXGET_8(isp,
763155228Smjacob			    &src->snscb_ports[i].portid[j],
764155228Smjacob			    dst->snscb_ports[i].portid[j]);
765155228Smjacob		}
766155228Smjacob		if (dst->snscb_ports[i].control & 0x80) {
767155228Smjacob			break;
768155228Smjacob		}
769155228Smjacob	}
770155228Smjacob}
771155228Smjacob
772155228Smjacobvoid
773155228Smjacobisp_get_gxn_id_response(struct ispsoftc *isp, sns_gxn_id_rsp_t *src,
774155228Smjacob    sns_gxn_id_rsp_t *dst)
775155228Smjacob{
776155228Smjacob	int i;
777155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
778155228Smjacob	for (i = 0; i < 8; i++)
779155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]);
780155228Smjacob}
781155228Smjacob
782155228Smjacobvoid
783155228Smjacobisp_get_gff_id_response(struct ispsoftc *isp, sns_gff_id_rsp_t *src,
784155228Smjacob    sns_gff_id_rsp_t *dst)
785155228Smjacob{
786155228Smjacob	int i;
787155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
788155228Smjacob	for (i = 0; i < 32; i++) {
789155228Smjacob		ISP_IOXGET_32(isp, &src->snscb_fc4_features[i],
790155228Smjacob		    dst->snscb_fc4_features[i]);
791155228Smjacob	}
792155228Smjacob}
793155228Smjacob
794155228Smjacobvoid
795155228Smjacobisp_get_ga_nxt_response(struct ispsoftc *isp, sns_ga_nxt_rsp_t *src,
796155228Smjacob    sns_ga_nxt_rsp_t *dst)
797155228Smjacob{
798155228Smjacob	int i;
799155228Smjacob	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
800155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
801155228Smjacob	for (i = 0; i < 3; i++) {
802155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
803155228Smjacob		    dst->snscb_port_id[i]);
804155228Smjacob	}
805155228Smjacob	for (i = 0; i < 8; i++) {
806155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_portname[i],
807155228Smjacob		    dst->snscb_portname[i]);
808155228Smjacob	}
809155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen);
810155228Smjacob	for (i = 0; i < 255; i++) {
811155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]);
812155228Smjacob	}
813155228Smjacob	for (i = 0; i < 8; i++) {
814155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_nodename[i],
815155228Smjacob		    dst->snscb_nodename[i]);
816155228Smjacob	}
817155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen);
818155228Smjacob	for (i = 0; i < 255; i++) {
819155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]);
820155228Smjacob	}
821155228Smjacob	for (i = 0; i < 8; i++) {
822155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_ipassoc[i],
823155228Smjacob		    dst->snscb_ipassoc[i]);
824155228Smjacob	}
825155228Smjacob	for (i = 0; i < 16; i++) {
826155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]);
827155228Smjacob	}
828155228Smjacob	for (i = 0; i < 4; i++) {
829155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_svc_class[i],
830155228Smjacob		    dst->snscb_svc_class[i]);
831155228Smjacob	}
832155228Smjacob	for (i = 0; i < 32; i++) {
833155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_fc4_types[i],
834155228Smjacob		    dst->snscb_fc4_types[i]);
835155228Smjacob	}
836155228Smjacob	for (i = 0; i < 8; i++) {
837155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]);
838155228Smjacob	}
839155228Smjacob	ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved);
840155228Smjacob	for (i = 0; i < 3; i++) {
841155228Smjacob		ISP_IOXGET_8(isp, &src->snscb_hardaddr[i],
842155228Smjacob		    dst->snscb_hardaddr[i]);
843155228Smjacob	}
844155228Smjacob}
845155228Smjacob
846155228Smjacob#ifdef	ISP_TARGET_MODE
847155228Smjacob
848155228Smjacobint
849155228Smjacobisp_save_xs_tgt(struct ispsoftc *isp, void *xs, u_int16_t *handlep)
850155228Smjacob{
851155228Smjacob	int i;
852155228Smjacob
853155228Smjacob	for (i = 0; i < (int) isp->isp_maxcmds; i++) {
854155228Smjacob		if (isp->isp_tgtlist[i] == NULL) {
855155228Smjacob			break;
856155228Smjacob		}
857155228Smjacob	}
858155228Smjacob	if (i == isp->isp_maxcmds) {
859155228Smjacob		return (-1);
860155228Smjacob	}
861155228Smjacob	isp->isp_tgtlist[i] = xs;
862155228Smjacob	*handlep = i+1;
863155228Smjacob	return (0);
864155228Smjacob}
865155228Smjacob
866155228Smjacobvoid *
867155228Smjacobisp_find_xs_tgt(struct ispsoftc *isp, u_int16_t handle)
868155228Smjacob{
869155228Smjacob	if (handle < 1 || handle > (u_int16_t) isp->isp_maxcmds) {
870155228Smjacob		return (NULL);
871155228Smjacob	} else {
872155228Smjacob		return (isp->isp_tgtlist[handle - 1]);
873155228Smjacob	}
874155228Smjacob}
875155228Smjacob
876155228Smjacobu_int16_t
877155228Smjacobisp_find_tgt_handle(struct ispsoftc *isp, void *xs)
878155228Smjacob{
879155228Smjacob	int i;
880155228Smjacob	if (xs != NULL) {
881155228Smjacob		for (i = 0; i < isp->isp_maxcmds; i++) {
882155228Smjacob			if (isp->isp_tgtlist[i] == xs) {
883155228Smjacob				return ((u_int16_t) i+1);
884155228Smjacob			}
885155228Smjacob		}
886155228Smjacob	}
887155228Smjacob	return (0);
888155228Smjacob}
889155228Smjacob
890155228Smjacobvoid
891155228Smjacobisp_destroy_tgt_handle(struct ispsoftc *isp, u_int16_t handle)
892155228Smjacob{
893155228Smjacob	if (handle > 0 && handle <= (u_int16_t) isp->isp_maxcmds) {
894155228Smjacob		isp->isp_tgtlist[handle - 1] = NULL;
895155228Smjacob	}
896155228Smjacob}
897155228Smjacobvoid
898155228Smjacobisp_put_atio(struct ispsoftc *isp, at_entry_t *atsrc, at_entry_t *atdst)
899155228Smjacob{
900155228Smjacob	int i;
901155228Smjacob	isp_copy_out_hdr(isp, &atsrc->at_header, &atdst->at_header);
902155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_reserved, &atdst->at_reserved);
903155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_handle, &atdst->at_handle);
904155228Smjacob	if (ISP_IS_SBUS(isp)) {
905155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_lun, &atdst->at_iid);
906155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_iid, &atdst->at_lun);
907155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_cdblen, &atdst->at_tgt);
908155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_tgt, &atdst->at_cdblen);
909155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_status, &atdst->at_scsi_status);
910155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_scsi_status, &atdst->at_status);
911155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_tag_val, &atdst->at_tag_type);
912155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_tag_type, &atdst->at_tag_val);
913155228Smjacob	} else {
914155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_lun, &atdst->at_lun);
915155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_iid, &atdst->at_iid);
916155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_cdblen, &atdst->at_cdblen);
917155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_tgt, &atdst->at_tgt);
918155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_status, &atdst->at_status);
919155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_scsi_status,
920155228Smjacob		    &atdst->at_scsi_status);
921155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_tag_val, &atdst->at_tag_val);
922155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_tag_type, &atdst->at_tag_type);
923155228Smjacob	}
924155228Smjacob	ISP_IOXPUT_32(isp, atsrc->at_flags, &atdst->at_flags);
925155228Smjacob	for (i = 0; i < ATIO_CDBLEN; i++) {
926155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_cdb[i], &atdst->at_cdb[i]);
927155228Smjacob	}
928155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
929155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_sense[i], &atdst->at_sense[i]);
930155228Smjacob	}
931155228Smjacob}
932155228Smjacob
933155228Smjacobvoid
934155228Smjacobisp_get_atio(struct ispsoftc *isp, at_entry_t *atsrc, at_entry_t *atdst)
935155228Smjacob{
936155228Smjacob	int i;
937155228Smjacob	isp_copy_in_hdr(isp, &atsrc->at_header, &atdst->at_header);
938155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_reserved, atdst->at_reserved);
939155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_handle, atdst->at_handle);
940155228Smjacob	if (ISP_IS_SBUS(isp)) {
941155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_lun, atdst->at_iid);
942155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_iid, atdst->at_lun);
943155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_cdblen, atdst->at_tgt);
944155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_tgt, atdst->at_cdblen);
945155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_status, atdst->at_scsi_status);
946155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_scsi_status, atdst->at_status);
947155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_tag_val, atdst->at_tag_type);
948155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_tag_type, atdst->at_tag_val);
949155228Smjacob	} else {
950155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_lun, atdst->at_lun);
951155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_iid, atdst->at_iid);
952155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_cdblen, atdst->at_cdblen);
953155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_tgt, atdst->at_tgt);
954155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_status, atdst->at_status);
955155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_scsi_status,
956155228Smjacob		    atdst->at_scsi_status);
957155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_tag_val, atdst->at_tag_val);
958155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_tag_type, atdst->at_tag_type);
959155228Smjacob	}
960155228Smjacob	ISP_IOXGET_32(isp, &atsrc->at_flags, atdst->at_flags);
961155228Smjacob	for (i = 0; i < ATIO_CDBLEN; i++) {
962155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_cdb[i], atdst->at_cdb[i]);
963155228Smjacob	}
964155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
965155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_sense[i], atdst->at_sense[i]);
966155228Smjacob	}
967155228Smjacob}
968155228Smjacob
969155228Smjacobvoid
970155228Smjacobisp_put_atio2(struct ispsoftc *isp, at2_entry_t *atsrc, at2_entry_t *atdst)
971155228Smjacob{
972155228Smjacob	int i;
973155228Smjacob	isp_copy_out_hdr(isp, &atsrc->at_header, &atdst->at_header);
974155228Smjacob	ISP_IOXPUT_32(isp, atsrc->at_reserved, &atdst->at_reserved);
975155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_lun, &atdst->at_lun);
976155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_iid, &atdst->at_iid);
977155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_rxid, &atdst->at_rxid);
978155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_flags, &atdst->at_flags);
979155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_status, &atdst->at_status);
980155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_crn, &atdst->at_crn);
981155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_taskcodes, &atdst->at_taskcodes);
982155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_taskflags, &atdst->at_taskflags);
983155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_execodes, &atdst->at_execodes);
984155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
985155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_cdb[i], &atdst->at_cdb[i]);
986155228Smjacob	}
987155228Smjacob	ISP_IOXPUT_32(isp, atsrc->at_datalen, &atdst->at_datalen);
988155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_scclun, &atdst->at_scclun);
989155228Smjacob	for (i = 0; i < 4; i++) {
990155228Smjacob		ISP_IOXPUT_16(isp, atsrc->at_wwpn[i], &atdst->at_wwpn[i]);
991155228Smjacob	}
992155228Smjacob	for (i = 0; i < 6; i++) {
993155228Smjacob		ISP_IOXPUT_16(isp, atsrc->at_reserved2[i],
994155228Smjacob		    &atdst->at_reserved2[i]);
995155228Smjacob	}
996155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_oxid, &atdst->at_oxid);
997155228Smjacob}
998155228Smjacob
999155228Smjacobvoid
1000155228Smjacobisp_put_atio2e(struct ispsoftc *isp, at2e_entry_t *atsrc, at2e_entry_t *atdst)
1001155228Smjacob{
1002155228Smjacob	int i;
1003155228Smjacob	isp_copy_out_hdr(isp, &atsrc->at_header, &atdst->at_header);
1004155228Smjacob	ISP_IOXPUT_32(isp, atsrc->at_reserved, &atdst->at_reserved);
1005155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_iid, &atdst->at_iid);
1006155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_rxid, &atdst->at_rxid);
1007155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_flags, &atdst->at_flags);
1008155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_status, &atdst->at_status);
1009155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_crn, &atdst->at_crn);
1010155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_taskcodes, &atdst->at_taskcodes);
1011155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_taskflags, &atdst->at_taskflags);
1012155228Smjacob	ISP_IOXPUT_8(isp, atsrc->at_execodes, &atdst->at_execodes);
1013155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1014155228Smjacob		ISP_IOXPUT_8(isp, atsrc->at_cdb[i], &atdst->at_cdb[i]);
1015155228Smjacob	}
1016155228Smjacob	ISP_IOXPUT_32(isp, atsrc->at_datalen, &atdst->at_datalen);
1017155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_scclun, &atdst->at_scclun);
1018155228Smjacob	for (i = 0; i < 4; i++) {
1019155228Smjacob		ISP_IOXPUT_16(isp, atsrc->at_wwpn[i], &atdst->at_wwpn[i]);
1020155228Smjacob	}
1021155228Smjacob	for (i = 0; i < 6; i++) {
1022155228Smjacob		ISP_IOXPUT_16(isp, atsrc->at_reserved2[i],
1023155228Smjacob		    &atdst->at_reserved2[i]);
1024155228Smjacob	}
1025155228Smjacob	ISP_IOXPUT_16(isp, atsrc->at_oxid, &atdst->at_oxid);
1026155228Smjacob}
1027155228Smjacob
1028155228Smjacobvoid
1029155228Smjacobisp_get_atio2(struct ispsoftc *isp, at2_entry_t *atsrc, at2_entry_t *atdst)
1030155228Smjacob{
1031155228Smjacob	int i;
1032155228Smjacob	isp_copy_in_hdr(isp, &atsrc->at_header, &atdst->at_header);
1033155228Smjacob	ISP_IOXGET_32(isp, &atsrc->at_reserved, atdst->at_reserved);
1034155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_lun, atdst->at_lun);
1035155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_iid, atdst->at_iid);
1036155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_rxid, atdst->at_rxid);
1037155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_flags, atdst->at_flags);
1038155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_status, atdst->at_status);
1039155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_crn, atdst->at_crn);
1040155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_taskcodes, atdst->at_taskcodes);
1041155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_taskflags, atdst->at_taskflags);
1042155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_execodes, atdst->at_execodes);
1043155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1044155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_cdb[i], atdst->at_cdb[i]);
1045155228Smjacob	}
1046155228Smjacob	ISP_IOXGET_32(isp, &atsrc->at_datalen, atdst->at_datalen);
1047155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_scclun, atdst->at_scclun);
1048155228Smjacob	for (i = 0; i < 4; i++) {
1049155228Smjacob		ISP_IOXGET_16(isp, &atsrc->at_wwpn[i], atdst->at_wwpn[i]);
1050155228Smjacob	}
1051155228Smjacob	for (i = 0; i < 6; i++) {
1052155228Smjacob		ISP_IOXGET_16(isp, &atsrc->at_reserved2[i],
1053155228Smjacob		    atdst->at_reserved2[i]);
1054155228Smjacob	}
1055155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_oxid, atdst->at_oxid);
1056155228Smjacob}
1057155228Smjacob
1058155228Smjacobvoid
1059155228Smjacobisp_get_atio2e(struct ispsoftc *isp, at2e_entry_t *atsrc, at2e_entry_t *atdst)
1060155228Smjacob{
1061155228Smjacob	int i;
1062155228Smjacob	isp_copy_in_hdr(isp, &atsrc->at_header, &atdst->at_header);
1063155228Smjacob	ISP_IOXGET_32(isp, &atsrc->at_reserved, atdst->at_reserved);
1064155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_iid, atdst->at_iid);
1065155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_rxid, atdst->at_rxid);
1066155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_flags, atdst->at_flags);
1067155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_status, atdst->at_status);
1068155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_crn, atdst->at_crn);
1069155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_taskcodes, atdst->at_taskcodes);
1070155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_taskflags, atdst->at_taskflags);
1071155228Smjacob	ISP_IOXGET_8(isp, &atsrc->at_execodes, atdst->at_execodes);
1072155228Smjacob	for (i = 0; i < ATIO2_CDBLEN; i++) {
1073155228Smjacob		ISP_IOXGET_8(isp, &atsrc->at_cdb[i], atdst->at_cdb[i]);
1074155228Smjacob	}
1075155228Smjacob	ISP_IOXGET_32(isp, &atsrc->at_datalen, atdst->at_datalen);
1076155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_scclun, atdst->at_scclun);
1077155228Smjacob	for (i = 0; i < 4; i++) {
1078155228Smjacob		ISP_IOXGET_16(isp, &atsrc->at_wwpn[i], atdst->at_wwpn[i]);
1079155228Smjacob	}
1080155228Smjacob	for (i = 0; i < 6; i++) {
1081155228Smjacob		ISP_IOXGET_16(isp, &atsrc->at_reserved2[i],
1082155228Smjacob		    atdst->at_reserved2[i]);
1083155228Smjacob	}
1084155228Smjacob	ISP_IOXGET_16(isp, &atsrc->at_oxid, atdst->at_oxid);
1085155228Smjacob}
1086155228Smjacob
1087155228Smjacobvoid
1088155228Smjacobisp_put_ctio(struct ispsoftc *isp, ct_entry_t *ctsrc, ct_entry_t *ctdst)
1089155228Smjacob{
1090155228Smjacob	int i;
1091155228Smjacob	isp_copy_out_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
1092155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_reserved, &ctdst->ct_reserved);
1093155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_fwhandle, &ctdst->ct_fwhandle);
1094155228Smjacob	if (ISP_IS_SBUS(isp)) {
1095155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_iid, &ctdst->ct_lun);
1096155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_lun, &ctdst->ct_iid);
1097155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_tgt, &ctdst->ct_reserved2);
1098155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_reserved2, &ctdst->ct_tgt);
1099155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_status, &ctdst->ct_scsi_status);
1100155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_scsi_status, &ctdst->ct_status);
1101155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_tag_type, &ctdst->ct_tag_val);
1102155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_tag_val, &ctdst->ct_tag_type);
1103155228Smjacob	} else {
1104155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_iid, &ctdst->ct_iid);
1105155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_lun, &ctdst->ct_lun);
1106155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_tgt, &ctdst->ct_tgt);
1107155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_reserved2, &ctdst->ct_reserved2);
1108155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_scsi_status,
1109155228Smjacob		    &ctdst->ct_scsi_status);
1110155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_status, &ctdst->ct_status);
1111155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_tag_type, &ctdst->ct_tag_type);
1112155228Smjacob		ISP_IOXPUT_8(isp, ctsrc->ct_tag_val, &ctdst->ct_tag_val);
1113155228Smjacob	}
1114155228Smjacob	ISP_IOXPUT_32(isp, ctsrc->ct_flags, &ctdst->ct_flags);
1115155228Smjacob	ISP_IOXPUT_32(isp, ctsrc->ct_xfrlen, &ctdst->ct_xfrlen);
1116155228Smjacob	ISP_IOXPUT_32(isp, ctsrc->ct_resid, &ctdst->ct_resid);
1117155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_timeout, &ctdst->ct_timeout);
1118155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_seg_count, &ctdst->ct_seg_count);
1119155228Smjacob	for (i = 0; i < ISP_RQDSEG; i++) {
1120155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->ct_dataseg[i].ds_base,
1121155228Smjacob		    &ctdst->ct_dataseg[i].ds_base);
1122155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->ct_dataseg[i].ds_count,
1123155228Smjacob		    &ctdst->ct_dataseg[i].ds_count);
1124155228Smjacob	}
1125155228Smjacob}
1126155228Smjacob
1127155228Smjacobvoid
1128155228Smjacobisp_get_ctio(struct ispsoftc *isp, ct_entry_t *ctsrc, ct_entry_t *ctdst)
1129155228Smjacob{
1130155228Smjacob	int i;
1131155228Smjacob	isp_copy_in_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
1132155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_reserved, ctdst->ct_reserved);
1133155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_fwhandle, ctdst->ct_fwhandle);
1134155228Smjacob	if (ISP_IS_SBUS(isp)) {
1135155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_lun, ctdst->ct_iid);
1136155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_iid, ctdst->ct_lun);
1137155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_reserved2, ctdst->ct_tgt);
1138155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_tgt, ctdst->ct_reserved2);
1139155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_status, ctdst->ct_scsi_status);
1140155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_scsi_status, ctdst->ct_status);
1141155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_tag_val, ctdst->ct_tag_type);
1142155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_tag_type, ctdst->ct_tag_val);
1143155228Smjacob	} else {
1144155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_lun, ctdst->ct_lun);
1145155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_iid, ctdst->ct_iid);
1146155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_reserved2, ctdst->ct_reserved2);
1147155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_tgt, ctdst->ct_tgt);
1148155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_status, ctdst->ct_status);
1149155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_scsi_status,
1150155228Smjacob		    ctdst->ct_scsi_status);
1151155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_tag_val, ctdst->ct_tag_val);
1152155228Smjacob		ISP_IOXGET_8(isp, &ctsrc->ct_tag_type, ctdst->ct_tag_type);
1153155228Smjacob	}
1154155228Smjacob	ISP_IOXGET_32(isp, &ctsrc->ct_flags, ctdst->ct_flags);
1155155228Smjacob	ISP_IOXGET_32(isp, &ctsrc->ct_xfrlen, ctdst->ct_xfrlen);
1156155228Smjacob	ISP_IOXGET_32(isp, &ctsrc->ct_resid, ctdst->ct_resid);
1157155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_timeout, ctdst->ct_timeout);
1158155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_seg_count, ctdst->ct_seg_count);
1159155228Smjacob	for (i = 0; i < ISP_RQDSEG; i++) {
1160155228Smjacob		ISP_IOXGET_32(isp,
1161155228Smjacob		    &ctsrc->ct_dataseg[i].ds_base,
1162155228Smjacob		    ctdst->ct_dataseg[i].ds_base);
1163155228Smjacob		ISP_IOXGET_32(isp,
1164155228Smjacob		    &ctsrc->ct_dataseg[i].ds_count,
1165155228Smjacob		    ctdst->ct_dataseg[i].ds_count);
1166155228Smjacob	}
1167155228Smjacob}
1168155228Smjacob
1169155228Smjacobvoid
1170155228Smjacobisp_put_ctio2(struct ispsoftc *isp, ct2_entry_t *ctsrc, ct2_entry_t *ctdst)
1171155228Smjacob{
1172155228Smjacob	int i;
1173155228Smjacob	isp_copy_out_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
1174155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_reserved, &ctdst->ct_reserved);
1175155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_fwhandle, &ctdst->ct_fwhandle);
1176155228Smjacob	ISP_IOXPUT_8(isp, ctsrc->ct_lun, &ctdst->ct_lun);
1177155228Smjacob	ISP_IOXPUT_8(isp, ctsrc->ct_iid, &ctdst->ct_iid);
1178155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_rxid, &ctdst->ct_rxid);
1179155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_flags, &ctdst->ct_flags);
1180155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_timeout, &ctdst->ct_timeout);
1181155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_seg_count, &ctdst->ct_seg_count);
1182155228Smjacob	ISP_IOXPUT_32(isp, ctsrc->ct_resid, &ctdst->ct_resid);
1183155228Smjacob	ISP_IOXPUT_32(isp, ctsrc->ct_reloff, &ctdst->ct_reloff);
1184155228Smjacob	if ((ctsrc->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1185155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m0._reserved,
1186155228Smjacob		    &ctdst->rsp.m0._reserved);
1187155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m0._reserved2,
1188155228Smjacob		    &ctdst->rsp.m0._reserved2);
1189155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m0.ct_scsi_status,
1190155228Smjacob		    &ctdst->rsp.m0.ct_scsi_status);
1191155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_xfrlen,
1192155228Smjacob		    &ctdst->rsp.m0.ct_xfrlen);
1193155228Smjacob		if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1194155228Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1195155228Smjacob				ISP_IOXPUT_32(isp,
1196155228Smjacob				    ctsrc->rsp.m0.ct_dataseg[i].ds_base,
1197155228Smjacob				    &ctdst->rsp.m0.ct_dataseg[i].ds_base);
1198155228Smjacob				ISP_IOXPUT_32(isp,
1199155228Smjacob				    ctsrc->rsp.m0.ct_dataseg[i].ds_count,
1200155228Smjacob				    &ctdst->rsp.m0.ct_dataseg[i].ds_count);
1201155228Smjacob			}
1202155228Smjacob		} else if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1203155228Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1204155228Smjacob				ISP_IOXPUT_32(isp,
1205155228Smjacob				    ctsrc->rsp.m0.ct_dataseg64[i].ds_base,
1206155228Smjacob				    &ctdst->rsp.m0.ct_dataseg64[i].ds_base);
1207155228Smjacob				ISP_IOXPUT_32(isp,
1208155228Smjacob				    ctsrc->rsp.m0.ct_dataseg64[i].ds_basehi,
1209155228Smjacob				    &ctdst->rsp.m0.ct_dataseg64[i].ds_basehi);
1210155228Smjacob				ISP_IOXPUT_32(isp,
1211155228Smjacob				    ctsrc->rsp.m0.ct_dataseg64[i].ds_count,
1212155228Smjacob				    &ctdst->rsp.m0.ct_dataseg64[i].ds_count);
1213155228Smjacob			}
1214155228Smjacob		} else if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1215155228Smjacob			ISP_IOXPUT_16(isp, ctsrc->rsp.m0.ct_dslist.ds_type,
1216155228Smjacob			    &ctdst->rsp.m0.ct_dslist.ds_type);
1217155228Smjacob			ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_dslist.ds_segment,
1218155228Smjacob			    &ctdst->rsp.m0.ct_dslist.ds_segment);
1219155228Smjacob			ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_dslist.ds_base,
1220155228Smjacob			    &ctdst->rsp.m0.ct_dslist.ds_base);
1221155228Smjacob		}
1222155228Smjacob	} else if ((ctsrc->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1223155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1._reserved,
1224155228Smjacob		    &ctdst->rsp.m1._reserved);
1225155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1._reserved2,
1226155228Smjacob		    &ctdst->rsp.m1._reserved2);
1227155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_senselen,
1228155228Smjacob		    &ctdst->rsp.m1.ct_senselen);
1229155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_scsi_status,
1230155228Smjacob		    &ctdst->rsp.m1.ct_scsi_status);
1231155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_resplen,
1232155228Smjacob		    &ctdst->rsp.m1.ct_resplen);
1233155228Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
1234155228Smjacob			ISP_IOXPUT_8(isp, ctsrc->rsp.m1.ct_resp[i],
1235155228Smjacob			    &ctdst->rsp.m1.ct_resp[i]);
1236155228Smjacob		}
1237155228Smjacob	} else {
1238155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m2._reserved,
1239155228Smjacob		    &ctdst->rsp.m2._reserved);
1240155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m2._reserved2,
1241155228Smjacob		    &ctdst->rsp.m2._reserved2);
1242155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m2._reserved3,
1243155228Smjacob		    &ctdst->rsp.m2._reserved3);
1244155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_datalen,
1245155228Smjacob		    &ctdst->rsp.m2.ct_datalen);
1246155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1247155228Smjacob		    &ctdst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1248155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1249155228Smjacob		    &ctdst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1250155228Smjacob	}
1251155228Smjacob}
1252155228Smjacob
1253155228Smjacobvoid
1254155228Smjacobisp_put_ctio2e(struct ispsoftc *isp, ct2e_entry_t *ctsrc, ct2e_entry_t *ctdst)
1255155228Smjacob{
1256155228Smjacob	int i;
1257155228Smjacob	isp_copy_out_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
1258155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_reserved, &ctdst->ct_reserved);
1259155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_fwhandle, &ctdst->ct_fwhandle);
1260155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_iid, &ctdst->ct_iid);
1261155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_rxid, &ctdst->ct_rxid);
1262155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_flags, &ctdst->ct_flags);
1263155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_timeout, &ctdst->ct_timeout);
1264155228Smjacob	ISP_IOXPUT_16(isp, ctsrc->ct_seg_count, &ctdst->ct_seg_count);
1265155228Smjacob	ISP_IOXPUT_32(isp, ctsrc->ct_resid, &ctdst->ct_resid);
1266155228Smjacob	ISP_IOXPUT_32(isp, ctsrc->ct_reloff, &ctdst->ct_reloff);
1267155228Smjacob	if ((ctsrc->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
1268155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m0._reserved,
1269155228Smjacob		    &ctdst->rsp.m0._reserved);
1270155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m0._reserved2,
1271155228Smjacob		    &ctdst->rsp.m0._reserved2);
1272155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m0.ct_scsi_status,
1273155228Smjacob		    &ctdst->rsp.m0.ct_scsi_status);
1274155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_xfrlen,
1275155228Smjacob		    &ctdst->rsp.m0.ct_xfrlen);
1276155228Smjacob		if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
1277155228Smjacob			for (i = 0; i < ISP_RQDSEG_T2; i++) {
1278155228Smjacob				ISP_IOXPUT_32(isp,
1279155228Smjacob				    ctsrc->rsp.m0.ct_dataseg[i].ds_base,
1280155228Smjacob				    &ctdst->rsp.m0.ct_dataseg[i].ds_base);
1281155228Smjacob				ISP_IOXPUT_32(isp,
1282155228Smjacob				    ctsrc->rsp.m0.ct_dataseg[i].ds_count,
1283155228Smjacob				    &ctdst->rsp.m0.ct_dataseg[i].ds_count);
1284155228Smjacob			}
1285155228Smjacob		} else if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
1286155228Smjacob			for (i = 0; i < ISP_RQDSEG_T3; i++) {
1287155228Smjacob				ISP_IOXPUT_32(isp,
1288155228Smjacob				    ctsrc->rsp.m0.ct_dataseg64[i].ds_base,
1289155228Smjacob				    &ctdst->rsp.m0.ct_dataseg64[i].ds_base);
1290155228Smjacob				ISP_IOXPUT_32(isp,
1291155228Smjacob				    ctsrc->rsp.m0.ct_dataseg64[i].ds_basehi,
1292155228Smjacob				    &ctdst->rsp.m0.ct_dataseg64[i].ds_basehi);
1293155228Smjacob				ISP_IOXPUT_32(isp,
1294155228Smjacob				    ctsrc->rsp.m0.ct_dataseg64[i].ds_count,
1295155228Smjacob				    &ctdst->rsp.m0.ct_dataseg64[i].ds_count);
1296155228Smjacob			}
1297155228Smjacob		} else if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
1298155228Smjacob			ISP_IOXPUT_16(isp, ctsrc->rsp.m0.ct_dslist.ds_type,
1299155228Smjacob			    &ctdst->rsp.m0.ct_dslist.ds_type);
1300155228Smjacob			ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_dslist.ds_segment,
1301155228Smjacob			    &ctdst->rsp.m0.ct_dslist.ds_segment);
1302155228Smjacob			ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_dslist.ds_base,
1303155228Smjacob			    &ctdst->rsp.m0.ct_dslist.ds_base);
1304155228Smjacob		}
1305155228Smjacob	} else if ((ctsrc->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
1306155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1._reserved,
1307155228Smjacob		    &ctdst->rsp.m1._reserved);
1308155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1._reserved2,
1309155228Smjacob		    &ctdst->rsp.m1._reserved2);
1310155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_senselen,
1311155228Smjacob		    &ctdst->rsp.m1.ct_senselen);
1312155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_scsi_status,
1313155228Smjacob		    &ctdst->rsp.m1.ct_scsi_status);
1314155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_resplen,
1315155228Smjacob		    &ctdst->rsp.m1.ct_resplen);
1316155228Smjacob		for (i = 0; i < MAXRESPLEN; i++) {
1317155228Smjacob			ISP_IOXPUT_8(isp, ctsrc->rsp.m1.ct_resp[i],
1318155228Smjacob			    &ctdst->rsp.m1.ct_resp[i]);
1319155228Smjacob		}
1320155228Smjacob	} else {
1321155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m2._reserved,
1322155228Smjacob		    &ctdst->rsp.m2._reserved);
1323155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m2._reserved2,
1324155228Smjacob		    &ctdst->rsp.m2._reserved2);
1325155228Smjacob		ISP_IOXPUT_16(isp, ctsrc->rsp.m2._reserved3,
1326155228Smjacob		    &ctdst->rsp.m2._reserved3);
1327155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_datalen,
1328155228Smjacob		    &ctdst->rsp.m2.ct_datalen);
1329155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_fcp_rsp_iudata.ds_base,
1330155228Smjacob		    &ctdst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
1331155228Smjacob		ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_fcp_rsp_iudata.ds_count,
1332155228Smjacob		    &ctdst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
1333155228Smjacob	}
1334155228Smjacob}
1335155228Smjacob
1336155228Smjacobvoid
1337155228Smjacobisp_get_ctio2(struct ispsoftc *isp, ct2_entry_t *ctsrc, ct2_entry_t *ctdst)
1338155228Smjacob{
1339155228Smjacob	isp_copy_in_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
1340155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_reserved, ctdst->ct_reserved);
1341155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_fwhandle, ctdst->ct_fwhandle);
1342155228Smjacob	ISP_IOXGET_8(isp, &ctsrc->ct_lun, ctdst->ct_lun);
1343155228Smjacob	ISP_IOXGET_8(isp, &ctsrc->ct_iid, ctdst->ct_iid);
1344155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_rxid, ctdst->ct_rxid);
1345155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_flags, ctdst->ct_flags);
1346155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_status, ctdst->ct_status);
1347155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_timeout, ctdst->ct_timeout);
1348155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_seg_count, ctdst->ct_seg_count);
1349155228Smjacob	ISP_IOXGET_32(isp, &ctsrc->ct_reloff, ctdst->ct_reloff);
1350155228Smjacob	ISP_IOXGET_32(isp, &ctsrc->ct_resid, ctdst->ct_resid);
1351155228Smjacob}
1352155228Smjacob
1353155228Smjacobvoid
1354155228Smjacobisp_get_ctio2e(struct ispsoftc *isp, ct2e_entry_t *ctsrc, ct2e_entry_t *ctdst)
1355155228Smjacob{
1356155228Smjacob	isp_copy_in_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
1357155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_reserved, ctdst->ct_reserved);
1358155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_fwhandle, ctdst->ct_fwhandle);
1359155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_iid, ctdst->ct_iid);
1360155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_rxid, ctdst->ct_rxid);
1361155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_flags, ctdst->ct_flags);
1362155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_status, ctdst->ct_status);
1363155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_timeout, ctdst->ct_timeout);
1364155228Smjacob	ISP_IOXGET_16(isp, &ctsrc->ct_seg_count, ctdst->ct_seg_count);
1365155228Smjacob	ISP_IOXGET_32(isp, &ctsrc->ct_reloff, ctdst->ct_reloff);
1366155228Smjacob	ISP_IOXGET_32(isp, &ctsrc->ct_resid, ctdst->ct_resid);
1367155228Smjacob}
1368155228Smjacob
1369155228Smjacobvoid
1370155228Smjacobisp_put_enable_lun(struct ispsoftc *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
1371155228Smjacob{
1372155228Smjacob	int i;
1373155228Smjacob	isp_copy_out_hdr(isp, &lesrc->le_header, &ledst->le_header);
1374155228Smjacob	ISP_IOXPUT_32(isp, lesrc->le_reserved, &ledst->le_reserved);
1375155228Smjacob	if (ISP_IS_SBUS(isp)) {
1376155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_rsvd);
1377155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_lun);
1378155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_tgt);
1379155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_ops);
1380155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_reserved2);
1381155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_status);
1382155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_in_count);
1383155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_cmd_count);
1384155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb7len);
1385155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb6len);
1386155228Smjacob	} else {
1387155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_lun);
1388155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_rsvd);
1389155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_ops);
1390155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_tgt);
1391155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_status);
1392155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_reserved2);
1393155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_cmd_count);
1394155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_in_count);
1395155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb6len);
1396155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb7len);
1397155228Smjacob	}
1398155228Smjacob	ISP_IOXPUT_32(isp, lesrc->le_flags, &ledst->le_flags);
1399155228Smjacob	ISP_IOXPUT_16(isp, lesrc->le_timeout, &ledst->le_timeout);
1400155228Smjacob	for (i = 0; i < 20; i++) {
1401155228Smjacob		ISP_IOXPUT_8(isp, lesrc->le_reserved3[i],
1402155228Smjacob		    &ledst->le_reserved3[i]);
1403155228Smjacob	}
1404155228Smjacob}
1405155228Smjacob
1406155228Smjacobvoid
1407155228Smjacobisp_get_enable_lun(struct ispsoftc *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
1408155228Smjacob{
1409155228Smjacob	int i;
1410155228Smjacob	isp_copy_in_hdr(isp, &lesrc->le_header, &ledst->le_header);
1411155228Smjacob	ISP_IOXGET_32(isp, &lesrc->le_reserved, ledst->le_reserved);
1412155228Smjacob	if (ISP_IS_SBUS(isp)) {
1413155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_rsvd);
1414155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_lun);
1415155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_tgt);
1416155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_ops);
1417155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_reserved2);
1418155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_status);
1419155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_in_count);
1420155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_cmd_count);
1421155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb7len);
1422155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb6len);
1423155228Smjacob	} else {
1424155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_lun);
1425155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_rsvd);
1426155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_ops);
1427155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_tgt);
1428155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_status);
1429155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_reserved2);
1430155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_cmd_count);
1431155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_in_count);
1432155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb6len);
1433155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb7len);
1434155228Smjacob	}
1435155228Smjacob	ISP_IOXGET_32(isp, &lesrc->le_flags, ledst->le_flags);
1436155228Smjacob	ISP_IOXGET_16(isp, &lesrc->le_timeout, ledst->le_timeout);
1437155228Smjacob	for (i = 0; i < 20; i++) {
1438155228Smjacob		ISP_IOXGET_8(isp, &lesrc->le_reserved3[i],
1439155228Smjacob		    ledst->le_reserved3[i]);
1440155228Smjacob	}
1441155228Smjacob}
1442155228Smjacob
1443155228Smjacobvoid
1444155228Smjacobisp_put_notify(struct ispsoftc *isp, in_entry_t *insrc, in_entry_t *indst)
1445155228Smjacob{
1446155228Smjacob	int i;
1447155228Smjacob	isp_copy_out_hdr(isp, &insrc->in_header, &indst->in_header);
1448155228Smjacob	ISP_IOXPUT_32(isp, insrc->in_reserved, &indst->in_reserved);
1449155228Smjacob	if (ISP_IS_SBUS(isp)) {
1450155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_lun, &indst->in_iid);
1451155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_iid, &indst->in_lun);
1452155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_reserved2, &indst->in_tgt);
1453155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_tgt, &indst->in_reserved2);
1454155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_status, &indst->in_rsvd2);
1455155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_rsvd2, &indst->in_status);
1456155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_tag_val, &indst->in_tag_type);
1457155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_tag_type, &indst->in_tag_val);
1458155228Smjacob	} else {
1459155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_lun, &indst->in_lun);
1460155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_iid, &indst->in_iid);
1461155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_reserved2, &indst->in_reserved2);
1462155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_tgt, &indst->in_tgt);
1463155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_status, &indst->in_status);
1464155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_rsvd2, &indst->in_rsvd2);
1465155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_tag_val, &indst->in_tag_val);
1466155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_tag_type, &indst->in_tag_type);
1467155228Smjacob	}
1468155228Smjacob	ISP_IOXPUT_32(isp, insrc->in_flags, &indst->in_flags);
1469155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_seqid, &indst->in_seqid);
1470155228Smjacob	for (i = 0; i < IN_MSGLEN; i++) {
1471155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_msg[i], &indst->in_msg[i]);
1472155228Smjacob	}
1473155228Smjacob	for (i = 0; i < IN_RSVDLEN; i++) {
1474155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_reserved3[i],
1475155228Smjacob		    &indst->in_reserved3[i]);
1476155228Smjacob	}
1477155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
1478155228Smjacob		ISP_IOXPUT_8(isp, insrc->in_sense[i],
1479155228Smjacob		    &indst->in_sense[i]);
1480155228Smjacob	}
1481155228Smjacob}
1482155228Smjacob
1483155228Smjacobvoid
1484155228Smjacobisp_get_notify(struct ispsoftc *isp, in_entry_t *insrc, in_entry_t *indst)
1485155228Smjacob{
1486155228Smjacob	int i;
1487155228Smjacob	isp_copy_in_hdr(isp, &insrc->in_header, &indst->in_header);
1488155228Smjacob	ISP_IOXGET_32(isp, &insrc->in_reserved, indst->in_reserved);
1489155228Smjacob	if (ISP_IS_SBUS(isp)) {
1490155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_lun, indst->in_iid);
1491155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_iid, indst->in_lun);
1492155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_reserved2, indst->in_tgt);
1493155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_tgt, indst->in_reserved2);
1494155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_status, indst->in_rsvd2);
1495155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_rsvd2, indst->in_status);
1496155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_tag_val, indst->in_tag_type);
1497155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_tag_type, indst->in_tag_val);
1498155228Smjacob	} else {
1499155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_lun, indst->in_lun);
1500155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_iid, indst->in_iid);
1501155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_reserved2, indst->in_reserved2);
1502155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_tgt, indst->in_tgt);
1503155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_status, indst->in_status);
1504155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_rsvd2, indst->in_rsvd2);
1505155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_tag_val, indst->in_tag_val);
1506155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_tag_type, indst->in_tag_type);
1507155228Smjacob	}
1508155228Smjacob	ISP_IOXGET_32(isp, &insrc->in_flags, indst->in_flags);
1509155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_seqid, indst->in_seqid);
1510155228Smjacob	for (i = 0; i < IN_MSGLEN; i++) {
1511155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_msg[i], indst->in_msg[i]);
1512155228Smjacob	}
1513155228Smjacob	for (i = 0; i < IN_RSVDLEN; i++) {
1514155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_reserved3[i],
1515155228Smjacob		    indst->in_reserved3[i]);
1516155228Smjacob	}
1517155228Smjacob	for (i = 0; i < QLTM_SENSELEN; i++) {
1518155228Smjacob		ISP_IOXGET_8(isp, &insrc->in_sense[i],
1519155228Smjacob		    indst->in_sense[i]);
1520155228Smjacob	}
1521155228Smjacob}
1522155228Smjacob
1523155228Smjacobvoid
1524155228Smjacobisp_put_notify_fc(struct ispsoftc *isp, in_fcentry_t *insrc,
1525155228Smjacob    in_fcentry_t *indst)
1526155228Smjacob{
1527155228Smjacob	isp_copy_out_hdr(isp, &insrc->in_header, &indst->in_header);
1528155228Smjacob	ISP_IOXPUT_32(isp, insrc->in_reserved, &indst->in_reserved);
1529155228Smjacob	ISP_IOXPUT_8(isp, insrc->in_lun, &indst->in_lun);
1530155228Smjacob	ISP_IOXPUT_8(isp, insrc->in_iid, &indst->in_iid);
1531155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_scclun, &indst->in_scclun);
1532155228Smjacob	ISP_IOXPUT_32(isp, insrc->in_reserved2, &indst->in_reserved2);
1533155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_status, &indst->in_status);
1534155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_task_flags, &indst->in_task_flags);
1535155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_seqid, &indst->in_seqid);
1536155228Smjacob}
1537155228Smjacob
1538155228Smjacobvoid
1539155228Smjacobisp_put_notify_fc_e(struct ispsoftc *isp, in_fcentry_e_t *insrc,
1540155228Smjacob    in_fcentry_e_t *indst)
1541155228Smjacob{
1542155228Smjacob	isp_copy_out_hdr(isp, &insrc->in_header, &indst->in_header);
1543155228Smjacob	ISP_IOXPUT_32(isp, insrc->in_reserved, &indst->in_reserved);
1544155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_iid, &indst->in_iid);
1545155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_scclun, &indst->in_scclun);
1546155228Smjacob	ISP_IOXPUT_32(isp, insrc->in_reserved2, &indst->in_reserved2);
1547155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_status, &indst->in_status);
1548155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_task_flags, &indst->in_task_flags);
1549155228Smjacob	ISP_IOXPUT_16(isp, insrc->in_seqid, &indst->in_seqid);
1550155228Smjacob}
1551155228Smjacob
1552155228Smjacobvoid
1553155228Smjacobisp_get_notify_fc(struct ispsoftc *isp, in_fcentry_t *insrc,
1554155228Smjacob    in_fcentry_t *indst)
1555155228Smjacob{
1556155228Smjacob	isp_copy_in_hdr(isp, &insrc->in_header, &indst->in_header);
1557155228Smjacob	ISP_IOXGET_32(isp, &insrc->in_reserved, indst->in_reserved);
1558155228Smjacob	ISP_IOXGET_8(isp, &insrc->in_lun, indst->in_lun);
1559155228Smjacob	ISP_IOXGET_8(isp, &insrc->in_iid, indst->in_iid);
1560155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_scclun, indst->in_scclun);
1561155228Smjacob	ISP_IOXGET_32(isp, &insrc->in_reserved2, indst->in_reserved2);
1562155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_status, indst->in_status);
1563155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_task_flags, indst->in_task_flags);
1564155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_seqid, indst->in_seqid);
1565155228Smjacob}
1566155228Smjacob
1567155228Smjacobvoid
1568155228Smjacobisp_get_notify_fc_e(struct ispsoftc *isp, in_fcentry_e_t *insrc,
1569155228Smjacob    in_fcentry_e_t *indst)
1570155228Smjacob{
1571155228Smjacob	isp_copy_in_hdr(isp, &insrc->in_header, &indst->in_header);
1572155228Smjacob	ISP_IOXGET_32(isp, &insrc->in_reserved, indst->in_reserved);
1573155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_iid, indst->in_iid);
1574155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_scclun, indst->in_scclun);
1575155228Smjacob	ISP_IOXGET_32(isp, &insrc->in_reserved2, indst->in_reserved2);
1576155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_status, indst->in_status);
1577155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_task_flags, indst->in_task_flags);
1578155228Smjacob	ISP_IOXGET_16(isp, &insrc->in_seqid, indst->in_seqid);
1579155228Smjacob}
1580155228Smjacob
1581155228Smjacobvoid
1582155228Smjacobisp_put_notify_ack(struct ispsoftc *isp, na_entry_t *nasrc,  na_entry_t *nadst)
1583155228Smjacob{
1584155228Smjacob	int i;
1585155228Smjacob	isp_copy_out_hdr(isp, &nasrc->na_header, &nadst->na_header);
1586155228Smjacob	ISP_IOXPUT_32(isp, nasrc->na_reserved, &nadst->na_reserved);
1587155228Smjacob	if (ISP_IS_SBUS(isp)) {
1588155228Smjacob		ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_iid);
1589155228Smjacob		ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_lun);
1590155228Smjacob		ISP_IOXPUT_8(isp, nasrc->na_status, &nadst->na_event);
1591155228Smjacob		ISP_IOXPUT_8(isp, nasrc->na_event, &nadst->na_status);
1592155228Smjacob	} else {
1593155228Smjacob		ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_lun);
1594155228Smjacob		ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_iid);
1595155228Smjacob		ISP_IOXPUT_8(isp, nasrc->na_status, &nadst->na_status);
1596155228Smjacob		ISP_IOXPUT_8(isp, nasrc->na_event, &nadst->na_event);
1597155228Smjacob	}
1598155228Smjacob	ISP_IOXPUT_32(isp, nasrc->na_flags, &nadst->na_flags);
1599155228Smjacob	for (i = 0; i < NA_RSVDLEN; i++) {
1600155228Smjacob		ISP_IOXPUT_16(isp, nasrc->na_reserved3[i],
1601155228Smjacob		    &nadst->na_reserved3[i]);
1602155228Smjacob	}
1603155228Smjacob}
1604155228Smjacob
1605155228Smjacobvoid
1606155228Smjacobisp_get_notify_ack(struct ispsoftc *isp, na_entry_t *nasrc, na_entry_t *nadst)
1607155228Smjacob{
1608155228Smjacob	int i;
1609155228Smjacob	isp_copy_in_hdr(isp, &nasrc->na_header, &nadst->na_header);
1610155228Smjacob	ISP_IOXGET_32(isp, &nasrc->na_reserved, nadst->na_reserved);
1611155228Smjacob	if (ISP_IS_SBUS(isp)) {
1612155228Smjacob		ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_iid);
1613155228Smjacob		ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_lun);
1614155228Smjacob		ISP_IOXGET_8(isp, &nasrc->na_status, nadst->na_event);
1615155228Smjacob		ISP_IOXGET_8(isp, &nasrc->na_event, nadst->na_status);
1616155228Smjacob	} else {
1617155228Smjacob		ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_lun);
1618155228Smjacob		ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_iid);
1619155228Smjacob		ISP_IOXGET_8(isp, &nasrc->na_status, nadst->na_status);
1620155228Smjacob		ISP_IOXGET_8(isp, &nasrc->na_event, nadst->na_event);
1621155228Smjacob	}
1622155228Smjacob	ISP_IOXGET_32(isp, &nasrc->na_flags, nadst->na_flags);
1623155228Smjacob	for (i = 0; i < NA_RSVDLEN; i++) {
1624155228Smjacob		ISP_IOXGET_16(isp, &nasrc->na_reserved3[i],
1625155228Smjacob		    nadst->na_reserved3[i]);
1626155228Smjacob	}
1627155228Smjacob}
1628155228Smjacob
1629155228Smjacobvoid
1630155228Smjacobisp_put_notify_ack_fc(struct ispsoftc *isp, na_fcentry_t *nasrc,
1631155228Smjacob    na_fcentry_t *nadst)
1632155228Smjacob{
1633155228Smjacob	int i;
1634155228Smjacob	isp_copy_out_hdr(isp, &nasrc->na_header, &nadst->na_header);
1635155228Smjacob	ISP_IOXPUT_32(isp, nasrc->na_reserved, &nadst->na_reserved);
1636155228Smjacob	ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_lun);
1637155228Smjacob	ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_iid);
1638155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_scclun, &nadst->na_scclun);
1639155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_flags, &nadst->na_flags);
1640155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_reserved2, &nadst->na_reserved2);
1641155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_status, &nadst->na_status);
1642155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_task_flags, &nadst->na_task_flags);
1643155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_seqid, &nadst->na_seqid);
1644155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
1645155228Smjacob		ISP_IOXPUT_16(isp, nasrc->na_reserved3[i],
1646155228Smjacob		    &nadst->na_reserved3[i]);
1647155228Smjacob	}
1648155228Smjacob}
1649155228Smjacob
1650155228Smjacobvoid
1651155228Smjacobisp_put_notify_ack_fc_e(struct ispsoftc *isp, na_fcentry_e_t *nasrc,
1652155228Smjacob    na_fcentry_e_t *nadst)
1653155228Smjacob{
1654155228Smjacob	int i;
1655155228Smjacob	isp_copy_out_hdr(isp, &nasrc->na_header, &nadst->na_header);
1656155228Smjacob	ISP_IOXPUT_32(isp, nasrc->na_reserved, &nadst->na_reserved);
1657155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_iid, &nadst->na_iid);
1658155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_scclun, &nadst->na_scclun);
1659155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_flags, &nadst->na_flags);
1660155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_reserved2, &nadst->na_reserved2);
1661155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_status, &nadst->na_status);
1662155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_task_flags, &nadst->na_task_flags);
1663155228Smjacob	ISP_IOXPUT_16(isp, nasrc->na_seqid, &nadst->na_seqid);
1664155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
1665155228Smjacob		ISP_IOXPUT_16(isp, nasrc->na_reserved3[i],
1666155228Smjacob		    &nadst->na_reserved3[i]);
1667155228Smjacob	}
1668155228Smjacob}
1669155228Smjacob
1670155228Smjacobvoid
1671155228Smjacobisp_get_notify_ack_fc(struct ispsoftc *isp, na_fcentry_t *nasrc,
1672155228Smjacob    na_fcentry_t *nadst)
1673155228Smjacob{
1674155228Smjacob	int i;
1675155228Smjacob	isp_copy_in_hdr(isp, &nasrc->na_header, &nadst->na_header);
1676155228Smjacob	ISP_IOXGET_32(isp, &nasrc->na_reserved, nadst->na_reserved);
1677155228Smjacob	ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_lun);
1678155228Smjacob	ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_iid);
1679155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_scclun, nadst->na_scclun);
1680155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_flags, nadst->na_flags);
1681155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_reserved2, nadst->na_reserved2);
1682155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_status, nadst->na_status);
1683155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_task_flags, nadst->na_task_flags);
1684155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_seqid, nadst->na_seqid);
1685155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
1686155228Smjacob		ISP_IOXGET_16(isp, &nasrc->na_reserved3[i],
1687155228Smjacob		    nadst->na_reserved3[i]);
1688155228Smjacob	}
1689155228Smjacob}
1690155228Smjacob
1691155228Smjacobvoid
1692155228Smjacobisp_get_notify_ack_fc_e(struct ispsoftc *isp, na_fcentry_e_t *nasrc,
1693155228Smjacob    na_fcentry_e_t *nadst)
1694155228Smjacob{
1695155228Smjacob	int i;
1696155228Smjacob	isp_copy_in_hdr(isp, &nasrc->na_header, &nadst->na_header);
1697155228Smjacob	ISP_IOXGET_32(isp, &nasrc->na_reserved, nadst->na_reserved);
1698155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_iid, nadst->na_iid);
1699155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_scclun, nadst->na_scclun);
1700155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_flags, nadst->na_flags);
1701155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_reserved2, nadst->na_reserved2);
1702155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_status, nadst->na_status);
1703155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_task_flags, nadst->na_task_flags);
1704155228Smjacob	ISP_IOXGET_16(isp, &nasrc->na_seqid, nadst->na_seqid);
1705155228Smjacob	for (i = 0; i < NA2_RSVDLEN; i++) {
1706155228Smjacob		ISP_IOXGET_16(isp, &nasrc->na_reserved3[i],
1707155228Smjacob		    nadst->na_reserved3[i]);
1708155228Smjacob	}
1709155228Smjacob}
1710155228Smjacob#endif	/* ISP_TARGET_MODE */
1711