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