Home | History | Annotate | Line # | Download | only in ic
isp_library.c revision 1.3.4.2
      1  1.3.4.2    yamt /* $NetBSD: isp_library.c,v 1.3.4.2 2010/03/11 15:03:31 yamt Exp $ */
      2      1.1  mjacob /*
      3      1.1  mjacob  * Copyright (c) 2006-2007 by Matthew Jacob
      4      1.1  mjacob  * All rights reserved.
      5      1.1  mjacob  *
      6      1.1  mjacob  * Redistribution and use in source and binary forms, with or without
      7      1.1  mjacob  * modification, are permitted provided that the following conditions
      8      1.1  mjacob  * are met:
      9      1.1  mjacob  *
     10      1.1  mjacob  * 1. Redistributions of source code must retain the above copyright
     11      1.1  mjacob  *    notice, this list of conditions and the following disclaimer.
     12      1.1  mjacob  * 2. Redistributions in binary form must reproduce the above copyright
     13      1.1  mjacob  *    notice, this list of conditions and the following disclaimer in the
     14      1.1  mjacob  *    documentation and/or other materials provided with the distribution.
     15      1.1  mjacob  *
     16      1.1  mjacob  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     17      1.1  mjacob  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18      1.1  mjacob  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     19      1.1  mjacob  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
     20      1.1  mjacob  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21      1.1  mjacob  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     22      1.1  mjacob  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23      1.1  mjacob  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     24      1.1  mjacob  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     25      1.1  mjacob  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26      1.1  mjacob  * SUCH DAMAGE.
     27      1.1  mjacob  */
     28      1.1  mjacob /*
     29      1.1  mjacob  * Qlogic Host Adapter Internal Library Functions
     30      1.1  mjacob  */
     31      1.1  mjacob #ifdef	__NetBSD__
     32      1.1  mjacob #include <sys/cdefs.h>
     33  1.3.4.2    yamt __KERNEL_RCSID(0, "$NetBSD: isp_library.c,v 1.3.4.2 2010/03/11 15:03:31 yamt Exp $");
     34      1.1  mjacob #include <dev/ic/isp_netbsd.h>
     35      1.1  mjacob #endif
     36      1.1  mjacob #ifdef	__FreeBSD__
     37      1.1  mjacob #include <sys/cdefs.h>
     38      1.1  mjacob __FBSDID("$FreeBSD$");
     39      1.1  mjacob #include <dev/isp/isp_freebsd.h>
     40      1.1  mjacob #endif
     41      1.1  mjacob #ifdef	__OpenBSD__
     42      1.1  mjacob #include <dev/ic/isp_openbsd.h>
     43      1.1  mjacob #endif
     44      1.1  mjacob #ifdef	__linux__
     45      1.1  mjacob #include "isp_linux.h"
     46      1.1  mjacob #endif
     47      1.1  mjacob #ifdef	__svr4__
     48      1.1  mjacob #include "isp_solaris.h"
     49      1.1  mjacob #endif
     50      1.1  mjacob 
     51      1.3  mjacob const char *isp_class3_roles[4] = {
     52      1.3  mjacob     "None", "Target", "Initiator", "Target/Initiator"
     53      1.3  mjacob };
     54      1.3  mjacob 
     55  1.3.4.1    yamt /*
     56  1.3.4.1    yamt  * Command shipping- finish off first queue entry and do dma mapping and additional segments as needed.
     57  1.3.4.1    yamt  *
     58  1.3.4.1    yamt  * Called with the first queue entry at least partially filled out.
     59  1.3.4.1    yamt  */
     60  1.3.4.1    yamt int
     61  1.3.4.1    yamt isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir)
     62  1.3.4.1    yamt {
     63  1.3.4.1    yamt 	uint8_t storage[QENTRY_LEN];
     64  1.3.4.1    yamt 	uint8_t type, nqe;
     65  1.3.4.1    yamt 	uint32_t seg, curseg, seglim, nxt, nxtnxt, ddf;
     66  1.3.4.1    yamt 	ispds_t *dsp = NULL;
     67  1.3.4.1    yamt 	ispds64_t *dsp64 = NULL;
     68  1.3.4.1    yamt 	void *qe0, *qe1;
     69  1.3.4.1    yamt 
     70  1.3.4.1    yamt 	qe0 = isp_getrqentry(isp);
     71  1.3.4.1    yamt 	if (qe0 == NULL) {
     72  1.3.4.1    yamt 		return (CMD_EAGAIN);
     73  1.3.4.1    yamt 	}
     74  1.3.4.1    yamt 	nxt = ISP_NXT_QENTRY(isp->isp_reqidx, RQUEST_QUEUE_LEN(isp));
     75  1.3.4.1    yamt 
     76  1.3.4.1    yamt 	type = ((isphdr_t *)fqe)->rqs_entry_type;
     77  1.3.4.1    yamt 	nqe = 1;
     78  1.3.4.1    yamt 
     79  1.3.4.1    yamt 	/*
     80  1.3.4.1    yamt 	 * If we have no data to transmit, just copy the first IOCB and start it up.
     81  1.3.4.1    yamt 	 */
     82  1.3.4.1    yamt 	if (ddir == ISP_NOXFR) {
     83  1.3.4.1    yamt 		if (type == RQSTYPE_T2RQS || type == RQSTYPE_T3RQS) {
     84  1.3.4.1    yamt 			ddf = CT2_NO_DATA;
     85  1.3.4.1    yamt 		} else {
     86  1.3.4.1    yamt 			ddf = 0;
     87  1.3.4.1    yamt 		}
     88  1.3.4.1    yamt 		goto copy_and_sync;
     89  1.3.4.1    yamt 	}
     90  1.3.4.1    yamt 
     91  1.3.4.1    yamt 	/*
     92  1.3.4.1    yamt 	 * First figure out how many pieces of data to transfer and what kind and how many we can put into the first queue entry.
     93  1.3.4.1    yamt 	 */
     94  1.3.4.1    yamt 	switch (type) {
     95  1.3.4.1    yamt 	case RQSTYPE_REQUEST:
     96  1.3.4.1    yamt 		ddf = (ddir == ISP_TO_DEVICE)? REQFLAG_DATA_OUT : REQFLAG_DATA_IN;
     97  1.3.4.1    yamt 		dsp = ((ispreq_t *)fqe)->req_dataseg;
     98  1.3.4.1    yamt 		seglim = ISP_RQDSEG;
     99  1.3.4.1    yamt 		break;
    100  1.3.4.1    yamt 	case RQSTYPE_CMDONLY:
    101  1.3.4.1    yamt 		ddf = (ddir == ISP_TO_DEVICE)? REQFLAG_DATA_OUT : REQFLAG_DATA_IN;
    102  1.3.4.1    yamt 		seglim = 0;
    103  1.3.4.1    yamt 		break;
    104  1.3.4.1    yamt 	case RQSTYPE_T2RQS:
    105  1.3.4.1    yamt 		ddf = (ddir == ISP_TO_DEVICE)? REQFLAG_DATA_OUT : REQFLAG_DATA_IN;
    106  1.3.4.1    yamt 		dsp = ((ispreqt2_t *)fqe)->req_dataseg;
    107  1.3.4.1    yamt 		seglim = ISP_RQDSEG_T2;
    108  1.3.4.1    yamt 		break;
    109  1.3.4.1    yamt 	case RQSTYPE_A64:
    110  1.3.4.1    yamt 		ddf = (ddir == ISP_TO_DEVICE)? REQFLAG_DATA_OUT : REQFLAG_DATA_IN;
    111  1.3.4.1    yamt 		dsp64 = ((ispreqt3_t *)fqe)->req_dataseg;
    112  1.3.4.1    yamt 		seglim = ISP_RQDSEG_T3;
    113  1.3.4.1    yamt 		break;
    114  1.3.4.1    yamt 	case RQSTYPE_T3RQS:
    115  1.3.4.1    yamt 		ddf = (ddir == ISP_TO_DEVICE)? REQFLAG_DATA_OUT : REQFLAG_DATA_IN;
    116  1.3.4.1    yamt 		dsp64 = ((ispreqt3_t *)fqe)->req_dataseg;
    117  1.3.4.1    yamt 		seglim = ISP_RQDSEG_T3;
    118  1.3.4.1    yamt 		break;
    119  1.3.4.1    yamt 	case RQSTYPE_T7RQS:
    120  1.3.4.1    yamt 		ddf = (ddir == ISP_TO_DEVICE)? FCP_CMND_DATA_WRITE : FCP_CMND_DATA_READ;
    121  1.3.4.1    yamt 		dsp64 = &((ispreqt7_t *)fqe)->req_dataseg;
    122  1.3.4.1    yamt 		seglim = 1;
    123  1.3.4.1    yamt 		break;
    124  1.3.4.1    yamt 	default:
    125  1.3.4.1    yamt 		return (CMD_COMPLETE);
    126  1.3.4.1    yamt 	}
    127  1.3.4.1    yamt 
    128  1.3.4.1    yamt 	if (seglim > nsegs) {
    129  1.3.4.1    yamt 		seglim = nsegs;
    130  1.3.4.1    yamt 	}
    131  1.3.4.1    yamt 
    132  1.3.4.1    yamt 	for (seg = curseg = 0; curseg < seglim; curseg++) {
    133  1.3.4.1    yamt 		if (dsp64) {
    134  1.3.4.1    yamt 			XS_GET_DMA64_SEG(dsp64++, segp, seg++);
    135  1.3.4.1    yamt 		} else {
    136  1.3.4.1    yamt 			XS_GET_DMA_SEG(dsp++, segp, seg++);
    137  1.3.4.1    yamt 		}
    138  1.3.4.1    yamt 	}
    139  1.3.4.1    yamt 
    140  1.3.4.1    yamt 
    141  1.3.4.1    yamt 	/*
    142  1.3.4.1    yamt 	 * Second, start building additional continuation segments as needed.
    143  1.3.4.1    yamt 	 */
    144  1.3.4.1    yamt 	while (seg < nsegs) {
    145  1.3.4.1    yamt 		nxtnxt = ISP_NXT_QENTRY(nxt, RQUEST_QUEUE_LEN(isp));
    146  1.3.4.1    yamt 		if (nxtnxt == isp->isp_reqodx) {
    147  1.3.4.1    yamt 			return (CMD_EAGAIN);
    148  1.3.4.1    yamt 		}
    149  1.3.4.1    yamt 		ISP_MEMZERO(storage, QENTRY_LEN);
    150  1.3.4.1    yamt 		qe1 = ISP_QUEUE_ENTRY(isp->isp_rquest, nxt);
    151  1.3.4.1    yamt 		nxt = nxtnxt;
    152  1.3.4.1    yamt 		if (dsp64) {
    153  1.3.4.1    yamt 			ispcontreq64_t *crq = (ispcontreq64_t *) storage;
    154  1.3.4.1    yamt 			seglim = ISP_CDSEG64;
    155  1.3.4.1    yamt 			crq->req_header.rqs_entry_type = RQSTYPE_A64_CONT;
    156  1.3.4.1    yamt 			crq->req_header.rqs_entry_count = 1;
    157  1.3.4.1    yamt 			dsp64 = crq->req_dataseg;
    158  1.3.4.1    yamt 		} else {
    159  1.3.4.1    yamt 			ispcontreq_t *crq = (ispcontreq_t *) storage;
    160  1.3.4.1    yamt 			seglim = ISP_CDSEG;
    161  1.3.4.1    yamt 			crq->req_header.rqs_entry_type = RQSTYPE_DATASEG;
    162  1.3.4.1    yamt 			crq->req_header.rqs_entry_count = 1;
    163  1.3.4.1    yamt 			dsp = crq->req_dataseg;
    164  1.3.4.1    yamt 		}
    165  1.3.4.1    yamt 		if (seg + seglim > nsegs) {
    166  1.3.4.1    yamt 			seglim = nsegs - seg;
    167  1.3.4.1    yamt 		}
    168  1.3.4.1    yamt 		for (curseg = 0; curseg < seglim; curseg++) {
    169  1.3.4.1    yamt 			if (dsp64) {
    170  1.3.4.1    yamt 				XS_GET_DMA64_SEG(dsp64++, segp, seg++);
    171  1.3.4.1    yamt 			} else {
    172  1.3.4.1    yamt 				XS_GET_DMA_SEG(dsp++, segp, seg++);
    173  1.3.4.1    yamt 			}
    174  1.3.4.1    yamt 		}
    175  1.3.4.1    yamt 		if (dsp64) {
    176  1.3.4.1    yamt 			isp_put_cont64_req(isp, (ispcontreq64_t *)storage, qe1);
    177  1.3.4.1    yamt 		} else {
    178  1.3.4.1    yamt 			isp_put_cont_req(isp, (ispcontreq_t *)storage, qe1);
    179  1.3.4.1    yamt 		}
    180  1.3.4.1    yamt 		if (isp->isp_dblev & ISP_LOGDEBUG1) {
    181  1.3.4.1    yamt 			isp_print_bytes(isp, "additional queue entry", QENTRY_LEN, storage);
    182  1.3.4.1    yamt 		}
    183  1.3.4.1    yamt 		nqe++;
    184  1.3.4.1    yamt         }
    185  1.3.4.1    yamt 
    186  1.3.4.1    yamt copy_and_sync:
    187  1.3.4.1    yamt 	((isphdr_t *)fqe)->rqs_entry_count = nqe;
    188  1.3.4.1    yamt 	switch (type) {
    189  1.3.4.1    yamt 	case RQSTYPE_REQUEST:
    190  1.3.4.1    yamt 		((ispreq_t *)fqe)->req_flags |= ddf;
    191  1.3.4.1    yamt 		/*
    192  1.3.4.1    yamt 		 * This is historical and not clear whether really needed.
    193  1.3.4.1    yamt 		 */
    194  1.3.4.1    yamt 		if (nsegs == 0) {
    195  1.3.4.1    yamt 			nsegs = 1;
    196  1.3.4.1    yamt 		}
    197  1.3.4.1    yamt 		((ispreq_t *)fqe)->req_seg_count = nsegs;
    198  1.3.4.1    yamt 		isp_put_request(isp, fqe, qe0);
    199  1.3.4.1    yamt 		break;
    200  1.3.4.1    yamt 	case RQSTYPE_CMDONLY:
    201  1.3.4.1    yamt 		((ispreq_t *)fqe)->req_flags |= ddf;
    202  1.3.4.1    yamt 		/*
    203  1.3.4.1    yamt 		 * This is historical and not clear whether really needed.
    204  1.3.4.1    yamt 		 */
    205  1.3.4.1    yamt 		if (nsegs == 0) {
    206  1.3.4.1    yamt 			nsegs = 1;
    207  1.3.4.1    yamt 		}
    208  1.3.4.1    yamt 		((ispextreq_t *)fqe)->req_seg_count = nsegs;
    209  1.3.4.1    yamt 		isp_put_extended_request(isp, fqe, qe0);
    210  1.3.4.1    yamt 		break;
    211  1.3.4.1    yamt 	case RQSTYPE_T2RQS:
    212  1.3.4.1    yamt 		((ispreqt2_t *)fqe)->req_flags |= ddf;
    213  1.3.4.1    yamt 		((ispreqt2_t *)fqe)->req_seg_count = nsegs;
    214  1.3.4.1    yamt 		((ispreqt2_t *)fqe)->req_totalcnt = totalcnt;
    215  1.3.4.1    yamt 		if (ISP_CAP_2KLOGIN(isp)) {
    216  1.3.4.1    yamt 			isp_put_request_t2e(isp, fqe, qe0);
    217  1.3.4.1    yamt 		} else {
    218  1.3.4.1    yamt 			isp_put_request_t2(isp, fqe, qe0);
    219  1.3.4.1    yamt 		}
    220  1.3.4.1    yamt 		break;
    221  1.3.4.1    yamt 	case RQSTYPE_A64:
    222  1.3.4.1    yamt 	case RQSTYPE_T3RQS:
    223  1.3.4.1    yamt 		((ispreqt3_t *)fqe)->req_flags |= ddf;
    224  1.3.4.1    yamt 		((ispreqt3_t *)fqe)->req_seg_count = nsegs;
    225  1.3.4.1    yamt 		((ispreqt3_t *)fqe)->req_totalcnt = totalcnt;
    226  1.3.4.1    yamt 		if (ISP_CAP_2KLOGIN(isp)) {
    227  1.3.4.1    yamt 			isp_put_request_t3e(isp, fqe, qe0);
    228  1.3.4.1    yamt 		} else {
    229  1.3.4.1    yamt 			isp_put_request_t3(isp, fqe, qe0);
    230  1.3.4.1    yamt 		}
    231  1.3.4.1    yamt 		break;
    232  1.3.4.1    yamt 	case RQSTYPE_T7RQS:
    233  1.3.4.1    yamt         	((ispreqt7_t *)fqe)->req_alen_datadir = ddf;
    234  1.3.4.1    yamt 		((ispreqt7_t *)fqe)->req_seg_count = nsegs;
    235  1.3.4.1    yamt 		((ispreqt7_t *)fqe)->req_dl = totalcnt;
    236  1.3.4.1    yamt 		isp_put_request_t7(isp, fqe, qe0);
    237  1.3.4.1    yamt 		break;
    238  1.3.4.1    yamt 	default:
    239  1.3.4.1    yamt 		return (CMD_COMPLETE);
    240  1.3.4.1    yamt 	}
    241  1.3.4.1    yamt 	if (isp->isp_dblev & ISP_LOGDEBUG1) {
    242  1.3.4.1    yamt 		isp_print_bytes(isp, "first queue entry", QENTRY_LEN, fqe);
    243  1.3.4.1    yamt 	}
    244  1.3.4.1    yamt 	ISP_ADD_REQUEST(isp, nxt);
    245  1.3.4.1    yamt 	return (CMD_QUEUED);
    246  1.3.4.1    yamt }
    247  1.3.4.1    yamt 
    248      1.1  mjacob int
    249      1.1  mjacob isp_save_xs(ispsoftc_t *isp, XS_T *xs, uint32_t *handlep)
    250      1.1  mjacob {
    251      1.1  mjacob 	uint16_t i, j;
    252      1.1  mjacob 
    253      1.1  mjacob 	for (j = isp->isp_lasthdls, i = 0; i < isp->isp_maxcmds; i++) {
    254      1.1  mjacob 		if (isp->isp_xflist[j] == NULL) {
    255      1.1  mjacob 			break;
    256      1.1  mjacob 		}
    257      1.1  mjacob 		if (++j == isp->isp_maxcmds) {
    258      1.1  mjacob 			j = 0;
    259      1.1  mjacob 		}
    260      1.1  mjacob 	}
    261      1.1  mjacob 	if (i == isp->isp_maxcmds) {
    262      1.1  mjacob 		return (-1);
    263      1.1  mjacob 	}
    264      1.1  mjacob 	isp->isp_xflist[j] = xs;
    265      1.1  mjacob 	*handlep = j+1;
    266      1.1  mjacob 	if (++j == isp->isp_maxcmds) {
    267      1.1  mjacob 		j = 0;
    268      1.1  mjacob 	}
    269      1.1  mjacob 	isp->isp_lasthdls = (uint32_t)j;
    270      1.1  mjacob 	return (0);
    271      1.1  mjacob }
    272      1.1  mjacob 
    273      1.1  mjacob XS_T *
    274      1.1  mjacob isp_find_xs(ispsoftc_t *isp, uint32_t handle)
    275      1.1  mjacob {
    276      1.1  mjacob 	if (handle < 1 || handle > (uint32_t) isp->isp_maxcmds) {
    277      1.1  mjacob 		return (NULL);
    278      1.1  mjacob 	} else {
    279      1.1  mjacob 		return (isp->isp_xflist[handle - 1]);
    280      1.1  mjacob 	}
    281      1.1  mjacob }
    282      1.1  mjacob 
    283      1.1  mjacob uint32_t
    284      1.1  mjacob isp_find_handle(ispsoftc_t *isp, XS_T *xs)
    285      1.1  mjacob {
    286      1.1  mjacob 	uint16_t i;
    287      1.1  mjacob 	if (xs != NULL) {
    288      1.1  mjacob 		for (i = 0; i < isp->isp_maxcmds; i++) {
    289      1.1  mjacob 			if (isp->isp_xflist[i] == xs) {
    290      1.1  mjacob 				return ((uint32_t) (i+1));
    291      1.1  mjacob 			}
    292      1.1  mjacob 		}
    293      1.1  mjacob 	}
    294      1.1  mjacob 	return (0);
    295      1.1  mjacob }
    296      1.1  mjacob 
    297      1.1  mjacob uint32_t
    298      1.1  mjacob isp_handle_index(uint32_t handle)
    299      1.1  mjacob {
    300      1.1  mjacob 	return (handle - 1);
    301      1.1  mjacob }
    302      1.1  mjacob 
    303      1.1  mjacob void
    304      1.1  mjacob isp_destroy_handle(ispsoftc_t *isp, uint32_t handle)
    305      1.1  mjacob {
    306      1.1  mjacob 	if (handle > 0 && handle <= (uint32_t) isp->isp_maxcmds) {
    307      1.1  mjacob 		isp->isp_xflist[handle - 1] = NULL;
    308      1.1  mjacob 	}
    309      1.1  mjacob }
    310      1.1  mjacob 
    311  1.3.4.1    yamt /*
    312  1.3.4.1    yamt  * Make sure we have space to put something on the request queue.
    313  1.3.4.1    yamt  * Return a pointer to that entry if we do. A side effect of this
    314  1.3.4.1    yamt  * function is to update the output index. The input index
    315  1.3.4.1    yamt  * stays the same.
    316  1.3.4.1    yamt  */
    317  1.3.4.1    yamt void *
    318  1.3.4.1    yamt isp_getrqentry(ispsoftc_t *isp)
    319      1.1  mjacob {
    320  1.3.4.1    yamt 	isp->isp_reqodx = ISP_READ(isp, isp->isp_rqstoutrp);
    321  1.3.4.1    yamt 	if (ISP_NXT_QENTRY(isp->isp_reqidx, RQUEST_QUEUE_LEN(isp)) == isp->isp_reqodx) {
    322  1.3.4.1    yamt 		return (NULL);
    323  1.3.4.1    yamt 	}
    324  1.3.4.1    yamt 	return (ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx));
    325      1.1  mjacob }
    326      1.1  mjacob 
    327      1.1  mjacob #define	TBA	(4 * (((QENTRY_LEN >> 2) * 3) + 1) + 1)
    328      1.1  mjacob void
    329  1.3.4.1    yamt isp_print_qentry(ispsoftc_t *isp, const char *msg, int idx, void *arg)
    330      1.1  mjacob {
    331      1.1  mjacob 	char buf[TBA];
    332      1.1  mjacob 	int amt, i, j;
    333      1.1  mjacob 	uint8_t *ptr = arg;
    334      1.1  mjacob 
    335      1.1  mjacob 	isp_prt(isp, ISP_LOGALL, "%s index %d=>", msg, idx);
    336      1.1  mjacob 	for (buf[0] = 0, amt = i = 0; i < 4; i++) {
    337      1.1  mjacob 		buf[0] = 0;
    338  1.3.4.1    yamt 		ISP_SNPRINTF(buf, TBA, "  ");
    339      1.1  mjacob 		for (j = 0; j < (QENTRY_LEN >> 2); j++) {
    340  1.3.4.1    yamt 			ISP_SNPRINTF(buf, TBA, "%s %02x", buf, ptr[amt++] & 0xff);
    341      1.1  mjacob 		}
    342      1.1  mjacob 		isp_prt(isp, ISP_LOGALL, buf);
    343      1.1  mjacob 	}
    344      1.1  mjacob }
    345      1.1  mjacob 
    346      1.1  mjacob void
    347      1.1  mjacob isp_print_bytes(ispsoftc_t *isp, const char *msg, int amt, void *arg)
    348      1.1  mjacob {
    349      1.1  mjacob 	char buf[128];
    350      1.1  mjacob 	uint8_t *ptr = arg;
    351      1.1  mjacob 	int off;
    352      1.1  mjacob 
    353      1.1  mjacob 	if (msg)
    354      1.1  mjacob 		isp_prt(isp, ISP_LOGALL, "%s:", msg);
    355      1.1  mjacob 	off = 0;
    356      1.1  mjacob 	buf[0] = 0;
    357      1.1  mjacob 	while (off < amt) {
    358      1.1  mjacob 		int j, to;
    359      1.1  mjacob 		to = off;
    360      1.1  mjacob 		for (j = 0; j < 16; j++) {
    361  1.3.4.1    yamt 			ISP_SNPRINTF(buf, 128, "%s %02x", buf, ptr[off++] & 0xff);
    362  1.3.4.1    yamt 			if (off == amt) {
    363      1.1  mjacob 				break;
    364  1.3.4.1    yamt 			}
    365      1.1  mjacob 		}
    366      1.1  mjacob 		isp_prt(isp, ISP_LOGALL, "0x%08x:%s", to, buf);
    367      1.1  mjacob 		buf[0] = 0;
    368      1.1  mjacob 	}
    369      1.1  mjacob }
    370      1.1  mjacob 
    371      1.1  mjacob /*
    372      1.1  mjacob  * Do the common path to try and ensure that link is up, we've scanned
    373      1.1  mjacob  * the fabric (if we're on a fabric), and that we've synchronized this
    374      1.1  mjacob  * all with our own database and done the appropriate logins.
    375      1.1  mjacob  *
    376      1.1  mjacob  * We repeatedly check for firmware state and loop state after each
    377      1.1  mjacob  * action because things may have changed while we were doing this.
    378      1.1  mjacob  * Any failure or change of state causes us to return a nonzero value.
    379      1.1  mjacob  *
    380      1.1  mjacob  * We assume we enter here with any locks held.
    381      1.1  mjacob  */
    382      1.1  mjacob 
    383      1.1  mjacob int
    384      1.3  mjacob isp_fc_runstate(ispsoftc_t *isp, int chan, int tval)
    385      1.1  mjacob {
    386      1.1  mjacob 	fcparam *fcp;
    387      1.1  mjacob 
    388      1.3  mjacob 	fcp = FCPARAM(isp, chan);
    389      1.3  mjacob         if (fcp->role == ISP_ROLE_NONE) {
    390      1.1  mjacob 		return (0);
    391      1.1  mjacob 	}
    392  1.3.4.1    yamt 	if (fcp->isp_fwstate < FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) {
    393      1.3  mjacob 		if (isp_control(isp, ISPCTL_FCLINK_TEST, chan, tval) != 0) {
    394  1.3.4.1    yamt 			isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: linktest failed for channel %d", chan);
    395      1.1  mjacob 			return (-1);
    396      1.1  mjacob 		}
    397  1.3.4.1    yamt 		if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) {
    398  1.3.4.1    yamt 			isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready for channel %d", chan);
    399      1.1  mjacob 			return (-1);
    400      1.1  mjacob 		}
    401      1.1  mjacob 	}
    402      1.3  mjacob 
    403      1.3  mjacob 	if ((fcp->role & ISP_ROLE_INITIATOR) == 0) {
    404      1.1  mjacob 		return (0);
    405      1.1  mjacob 	}
    406      1.3  mjacob 
    407      1.3  mjacob 	if (isp_control(isp, ISPCTL_SCAN_LOOP, chan) != 0) {
    408  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan loop fails on channel %d", chan);
    409      1.1  mjacob 		return (LOOP_PDB_RCVD);
    410      1.1  mjacob 	}
    411      1.3  mjacob 	if (isp_control(isp, ISPCTL_SCAN_FABRIC, chan) != 0) {
    412  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan fabric fails on channel %d", chan);
    413      1.1  mjacob 		return (LOOP_LSCAN_DONE);
    414      1.1  mjacob 	}
    415      1.3  mjacob 	if (isp_control(isp, ISPCTL_PDB_SYNC, chan) != 0) {
    416  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: pdb_sync fails on channel %d", chan);
    417      1.1  mjacob 		return (LOOP_FSCAN_DONE);
    418      1.1  mjacob 	}
    419      1.1  mjacob 	if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) {
    420  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready again on channel %d", chan);
    421      1.1  mjacob 		return (-1);
    422      1.1  mjacob 	}
    423      1.1  mjacob 	return (0);
    424      1.1  mjacob }
    425      1.1  mjacob 
    426      1.1  mjacob /*
    427      1.3  mjacob  * Fibre Channel Support routines
    428      1.1  mjacob  */
    429      1.1  mjacob void
    430      1.3  mjacob isp_dump_portdb(ispsoftc_t *isp, int chan)
    431      1.1  mjacob {
    432      1.3  mjacob 	fcparam *fcp = FCPARAM(isp, chan);
    433      1.1  mjacob 	int i;
    434      1.1  mjacob 
    435      1.1  mjacob 	for (i = 0; i < MAX_FC_TARG; i++) {
    436      1.1  mjacob 		char mb[4];
    437      1.1  mjacob 		const char *dbs[8] = {
    438      1.1  mjacob 			"NIL ",
    439      1.1  mjacob 			"PROB",
    440      1.1  mjacob 			"DEAD",
    441      1.1  mjacob 			"CHGD",
    442      1.1  mjacob 			"NEW ",
    443      1.1  mjacob 			"PVLD",
    444      1.1  mjacob 			"ZOMB",
    445      1.1  mjacob 			"VLD "
    446      1.1  mjacob 		};
    447      1.1  mjacob 		const char *roles[4] = {
    448      1.1  mjacob 			" UNK", " TGT", " INI", "TINI"
    449      1.1  mjacob 		};
    450      1.1  mjacob 		fcportdb_t *lp = &fcp->portdb[i];
    451      1.1  mjacob 
    452  1.3.4.1    yamt 		if (lp->state == FC_PORTDB_STATE_NIL && lp->target_mode == 0) {
    453      1.1  mjacob 			continue;
    454      1.1  mjacob 		}
    455  1.3.4.1    yamt 		if (lp->dev_map_idx) {
    456  1.3.4.1    yamt 			ISP_SNPRINTF(mb, sizeof (mb), "%3d", ((int) lp->dev_map_idx) - 1);
    457      1.1  mjacob 		} else {
    458  1.3.4.1    yamt 			ISP_SNPRINTF(mb, sizeof (mb), "---");
    459      1.1  mjacob 		}
    460  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGALL, "Chan %d [%d]: hdl 0x%x %s al%d tgt %s %s 0x%06x =>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x",
    461  1.3.4.1    yamt 		    chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, roles[lp->roles], lp->portid, roles[lp->new_roles], lp->new_portid,
    462  1.3.4.1    yamt 		    (uint32_t) (lp->node_wwn >> 32), (uint32_t) (lp->node_wwn), (uint32_t) (lp->port_wwn >> 32), (uint32_t) (lp->port_wwn));
    463  1.3.4.1    yamt 	}
    464  1.3.4.1    yamt }
    465  1.3.4.1    yamt 
    466  1.3.4.1    yamt const char *
    467  1.3.4.1    yamt isp_fc_fw_statename(int state)
    468  1.3.4.1    yamt {
    469  1.3.4.1    yamt 	switch (state) {
    470  1.3.4.1    yamt 	case FW_CONFIG_WAIT:	return "Config Wait";
    471  1.3.4.1    yamt 	case FW_WAIT_AL_PA:	return "Waiting for AL_PA";
    472  1.3.4.1    yamt 	case FW_WAIT_LOGIN:	return "Wait Login";
    473  1.3.4.1    yamt 	case FW_READY:		return "Ready";
    474  1.3.4.1    yamt 	case FW_LOSS_OF_SYNC:	return "Loss Of Sync";
    475  1.3.4.1    yamt 	case FW_ERROR:		return "Error";
    476  1.3.4.1    yamt 	case FW_REINIT:		return "Re-Init";
    477  1.3.4.1    yamt 	case FW_NON_PART:	return "Nonparticipating";
    478  1.3.4.1    yamt 	default:		return "?????";
    479  1.3.4.1    yamt 	}
    480  1.3.4.1    yamt }
    481  1.3.4.1    yamt 
    482  1.3.4.1    yamt const char *
    483  1.3.4.1    yamt isp_fc_loop_statename(int state)
    484  1.3.4.1    yamt {
    485  1.3.4.1    yamt 	switch (state) {
    486  1.3.4.1    yamt 	case LOOP_NIL:                  return "NIL";
    487  1.3.4.1    yamt 	case LOOP_LIP_RCVD:             return "LIP Received";
    488  1.3.4.1    yamt 	case LOOP_PDB_RCVD:             return "PDB Received";
    489  1.3.4.1    yamt 	case LOOP_SCANNING_LOOP:        return "Scanning";
    490  1.3.4.1    yamt 	case LOOP_LSCAN_DONE:           return "Loop Scan Done";
    491  1.3.4.1    yamt 	case LOOP_SCANNING_FABRIC:      return "Scanning Fabric";
    492  1.3.4.1    yamt 	case LOOP_FSCAN_DONE:           return "Fabric Scan Done";
    493  1.3.4.1    yamt 	case LOOP_SYNCING_PDB:          return "Syncing PDB";
    494  1.3.4.1    yamt 	case LOOP_READY:                return "Ready";
    495  1.3.4.1    yamt 	default:                        return "?????";
    496  1.3.4.1    yamt 	}
    497  1.3.4.1    yamt }
    498  1.3.4.1    yamt 
    499  1.3.4.1    yamt const char *
    500  1.3.4.1    yamt isp_fc_toponame(fcparam *fcp)
    501  1.3.4.1    yamt {
    502  1.3.4.1    yamt 
    503  1.3.4.1    yamt 	if (fcp->isp_fwstate != FW_READY) {
    504  1.3.4.1    yamt 		return "Unavailable";
    505  1.3.4.1    yamt 	}
    506  1.3.4.1    yamt 	switch (fcp->isp_topo) {
    507  1.3.4.1    yamt 	case TOPO_NL_PORT:      return "Private Loop";
    508  1.3.4.1    yamt 	case TOPO_FL_PORT:      return "FL Port";
    509  1.3.4.1    yamt 	case TOPO_N_PORT:       return "N-Port to N-Port";
    510  1.3.4.1    yamt 	case TOPO_F_PORT:       return "F Port";
    511  1.3.4.1    yamt 	case TOPO_PTP_STUB:     return "F Port (no FLOGI_ACC response)";
    512  1.3.4.1    yamt 	default:                return "?????";
    513  1.3.4.1    yamt 	}
    514  1.3.4.1    yamt }
    515  1.3.4.1    yamt 
    516  1.3.4.1    yamt /*
    517  1.3.4.1    yamt  * Change Roles
    518  1.3.4.1    yamt  */
    519  1.3.4.1    yamt int
    520  1.3.4.1    yamt isp_fc_change_role(ispsoftc_t *isp, int chan, int new_role)
    521  1.3.4.1    yamt {
    522  1.3.4.1    yamt 	fcparam *fcp = FCPARAM(isp, chan);
    523  1.3.4.1    yamt 
    524  1.3.4.1    yamt 	if (chan >= isp->isp_nchan) {
    525  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGWARN, "%s: bad channel %d", __func__, chan);
    526  1.3.4.1    yamt 		return (ENXIO);
    527  1.3.4.1    yamt 	}
    528  1.3.4.1    yamt 	if (chan == 0) {
    529  1.3.4.1    yamt #ifdef	ISP_TARGET_MODE
    530  1.3.4.1    yamt 		isp_del_all_wwn_entries(isp, chan);
    531  1.3.4.1    yamt #endif
    532  1.3.4.1    yamt 		isp_clear_commands(isp);
    533  1.3.4.1    yamt 
    534  1.3.4.1    yamt 		isp_reset(isp, 0);
    535  1.3.4.1    yamt 		if (isp->isp_state != ISP_RESETSTATE) {
    536  1.3.4.1    yamt 			isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__);
    537  1.3.4.1    yamt 			return (EIO);
    538  1.3.4.1    yamt 		}
    539  1.3.4.1    yamt 		fcp->role = new_role;
    540  1.3.4.1    yamt 		isp_init(isp);
    541  1.3.4.1    yamt 		if (isp->isp_state != ISP_INITSTATE) {
    542  1.3.4.1    yamt 			isp_prt(isp, ISP_LOGERR, "%s: cannot init card", __func__);
    543  1.3.4.1    yamt 			return (EIO);
    544  1.3.4.1    yamt 		}
    545  1.3.4.1    yamt 		isp->isp_state = ISP_RUNSTATE;
    546  1.3.4.1    yamt 		return (0);
    547  1.3.4.1    yamt 	} else if (ISP_CAP_MULTI_ID(isp)) {
    548  1.3.4.1    yamt 		mbreg_t mbs;
    549  1.3.4.1    yamt 		vp_modify_t *vp;
    550  1.3.4.1    yamt 		uint8_t qe[QENTRY_LEN], *scp;
    551  1.3.4.1    yamt 
    552  1.3.4.1    yamt 		ISP_MEMZERO(qe, QENTRY_LEN);
    553  1.3.4.1    yamt 		/* Acquire Scratch */
    554  1.3.4.1    yamt 
    555  1.3.4.1    yamt 		if (FC_SCRATCH_ACQUIRE(isp, chan)) {
    556  1.3.4.1    yamt 			return (EBUSY);
    557  1.3.4.1    yamt 		}
    558  1.3.4.1    yamt 		scp = fcp->isp_scratch;
    559  1.3.4.1    yamt 
    560  1.3.4.1    yamt 		/*
    561  1.3.4.1    yamt 		 * Build a VP MODIFY command in memory
    562  1.3.4.1    yamt 		 */
    563  1.3.4.1    yamt 		vp = (vp_modify_t *) qe;
    564  1.3.4.1    yamt 		vp->vp_mod_hdr.rqs_entry_type = RQSTYPE_VP_MODIFY;
    565  1.3.4.1    yamt 		vp->vp_mod_hdr.rqs_entry_count = 1;
    566  1.3.4.1    yamt 		vp->vp_mod_cnt = 1;
    567  1.3.4.1    yamt 		vp->vp_mod_idx0 = chan;
    568  1.3.4.1    yamt 		vp->vp_mod_cmd = VP_MODIFY_ENA;
    569  1.3.4.1    yamt 		vp->vp_mod_ports[0].options = ICB2400_VPOPT_ENABLED;
    570  1.3.4.1    yamt 		if (new_role & ISP_ROLE_INITIATOR) {
    571  1.3.4.1    yamt 			vp->vp_mod_ports[0].options |= ICB2400_VPOPT_INI_ENABLE;
    572  1.3.4.1    yamt 		}
    573  1.3.4.1    yamt 		if ((new_role & ISP_ROLE_TARGET) == 0) {
    574  1.3.4.1    yamt 			vp->vp_mod_ports[0].options |= ICB2400_VPOPT_TGT_DISABLE;
    575  1.3.4.1    yamt 		}
    576  1.3.4.1    yamt 		MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwpn, fcp->isp_wwpn);
    577  1.3.4.1    yamt 		MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwnn, fcp->isp_wwnn);
    578  1.3.4.1    yamt 		isp_put_vp_modify(isp, vp, (vp_modify_t *) scp);
    579  1.3.4.1    yamt 
    580  1.3.4.1    yamt 		/*
    581  1.3.4.1    yamt 		 * Build a EXEC IOCB A64 command that points to the VP MODIFY command
    582  1.3.4.1    yamt 		 */
    583  1.3.4.1    yamt 		MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, 0);
    584  1.3.4.1    yamt 		mbs.param[1] = QENTRY_LEN;
    585  1.3.4.1    yamt 		mbs.param[2] = DMA_WD1(fcp->isp_scdma);
    586  1.3.4.1    yamt 		mbs.param[3] = DMA_WD0(fcp->isp_scdma);
    587  1.3.4.1    yamt 		mbs.param[6] = DMA_WD3(fcp->isp_scdma);
    588  1.3.4.1    yamt 		mbs.param[7] = DMA_WD2(fcp->isp_scdma);
    589  1.3.4.1    yamt 		MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN);
    590  1.3.4.1    yamt 		isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
    591  1.3.4.1    yamt 		if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
    592  1.3.4.1    yamt 			FC_SCRATCH_RELEASE(isp, chan);
    593  1.3.4.1    yamt 			return (EIO);
    594  1.3.4.1    yamt 		}
    595  1.3.4.1    yamt 		MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN);
    596  1.3.4.1    yamt 		isp_get_vp_modify(isp, (vp_modify_t *)&scp[QENTRY_LEN], vp);
    597  1.3.4.1    yamt 
    598  1.3.4.1    yamt #ifdef	ISP_TARGET_MODE
    599  1.3.4.1    yamt 		isp_del_all_wwn_entries(isp, chan);
    600  1.3.4.1    yamt #endif
    601  1.3.4.1    yamt 		/*
    602  1.3.4.1    yamt 		 * Release Scratch
    603  1.3.4.1    yamt 		 */
    604  1.3.4.1    yamt 		FC_SCRATCH_RELEASE(isp, chan);
    605  1.3.4.1    yamt 
    606  1.3.4.1    yamt 		if (vp->vp_mod_status != VP_STS_OK) {
    607  1.3.4.1    yamt 			isp_prt(isp, ISP_LOGERR, "%s: VP_MODIFY of Chan %d failed with status %d", __func__, chan, vp->vp_mod_status);
    608  1.3.4.1    yamt 			return (EIO);
    609  1.3.4.1    yamt 		}
    610  1.3.4.1    yamt 		fcp->role = new_role;
    611  1.3.4.1    yamt 		return (0);
    612  1.3.4.1    yamt 	} else {
    613  1.3.4.1    yamt 		return (EINVAL);
    614      1.1  mjacob 	}
    615      1.1  mjacob }
    616      1.1  mjacob 
    617      1.1  mjacob void
    618  1.3.4.1    yamt isp_clear_commands(ispsoftc_t *isp)
    619  1.3.4.1    yamt {
    620  1.3.4.1    yamt 	XS_T *xs;
    621  1.3.4.1    yamt 	uint32_t tmp, handle;
    622  1.3.4.1    yamt #ifdef	ISP_TARGET_MODE
    623  1.3.4.1    yamt 	isp_notify_t notify;
    624  1.3.4.1    yamt #endif
    625  1.3.4.1    yamt 
    626  1.3.4.1    yamt 	for (tmp = 0; isp->isp_xflist && tmp < isp->isp_maxcmds; tmp++) {
    627  1.3.4.1    yamt 		xs = isp->isp_xflist[tmp];
    628  1.3.4.1    yamt 		if (xs == NULL) {
    629  1.3.4.1    yamt 			continue;
    630  1.3.4.1    yamt 		}
    631  1.3.4.1    yamt 		handle = isp_find_handle(isp, xs);
    632  1.3.4.1    yamt 		if (handle == 0) {
    633  1.3.4.1    yamt 			continue;
    634  1.3.4.1    yamt 		}
    635  1.3.4.1    yamt 		if (XS_XFRLEN(xs)) {
    636  1.3.4.1    yamt 			ISP_DMAFREE(isp, xs, handle);
    637  1.3.4.1    yamt 			XS_SET_RESID(xs, XS_XFRLEN(xs));
    638  1.3.4.1    yamt 		} else {
    639  1.3.4.1    yamt 			XS_SET_RESID(xs, 0);
    640  1.3.4.1    yamt 		}
    641  1.3.4.1    yamt 		isp_destroy_handle(isp, handle);
    642  1.3.4.1    yamt 		XS_SETERR(xs, HBA_BUSRESET);
    643  1.3.4.1    yamt 		isp_done(xs);
    644  1.3.4.1    yamt 	}
    645  1.3.4.1    yamt #ifdef	ISP_TARGET_MODE
    646  1.3.4.1    yamt 	for (tmp = 0; isp->isp_tgtlist && tmp < isp->isp_maxcmds; tmp++) {
    647  1.3.4.1    yamt 		uint8_t local[QENTRY_LEN];
    648  1.3.4.1    yamt 
    649  1.3.4.1    yamt 		xs = isp->isp_tgtlist[tmp];
    650  1.3.4.1    yamt 		if (xs == NULL) {
    651  1.3.4.1    yamt 			continue;
    652  1.3.4.1    yamt 		}
    653  1.3.4.1    yamt 		handle = isp_find_tgt_handle(isp, xs);
    654  1.3.4.1    yamt 		if (handle == 0) {
    655  1.3.4.1    yamt 			continue;
    656  1.3.4.1    yamt 		}
    657  1.3.4.1    yamt 		ISP_DMAFREE(isp, xs, handle);
    658  1.3.4.1    yamt 
    659  1.3.4.1    yamt 		ISP_MEMZERO(local, QENTRY_LEN);
    660  1.3.4.1    yamt 		if (IS_24XX(isp)) {
    661  1.3.4.1    yamt 			ct7_entry_t *ctio = (ct7_entry_t *) local;
    662  1.3.4.1    yamt 			ctio->ct_syshandle = handle;
    663  1.3.4.1    yamt 			ctio->ct_nphdl = CT_HBA_RESET;
    664  1.3.4.1    yamt 			ctio->ct_header.rqs_entry_type = RQSTYPE_CTIO7;
    665  1.3.4.1    yamt 		} else if (IS_FC(isp)) {
    666  1.3.4.1    yamt 			ct2_entry_t *ctio = (ct2_entry_t *) local;
    667  1.3.4.1    yamt 			ctio->ct_syshandle = handle;
    668  1.3.4.1    yamt 			ctio->ct_status = CT_HBA_RESET;
    669  1.3.4.1    yamt 			ctio->ct_header.rqs_entry_type = RQSTYPE_CTIO2;
    670  1.3.4.1    yamt 		} else {
    671  1.3.4.1    yamt 			ct_entry_t *ctio = (ct_entry_t *) local;
    672  1.3.4.1    yamt 			ctio->ct_syshandle = handle & 0xffff;
    673  1.3.4.2    yamt 			ctio->ct_status = CT_HBA_RESET & 0xff;
    674  1.3.4.1    yamt 			ctio->ct_header.rqs_entry_type = RQSTYPE_CTIO;
    675  1.3.4.1    yamt 		}
    676  1.3.4.1    yamt 		isp_async(isp, ISPASYNC_TARGET_ACTION, local);
    677  1.3.4.1    yamt 	}
    678  1.3.4.1    yamt 	for (tmp = 0; tmp < isp->isp_nchan; tmp++) {
    679  1.3.4.1    yamt 		ISP_MEMZERO(&notify, sizeof (isp_notify_t));
    680  1.3.4.1    yamt 		notify.nt_ncode = NT_HBA_RESET;
    681  1.3.4.1    yamt 		notify.nt_hba = isp;
    682  1.3.4.1    yamt 		notify.nt_wwn = INI_ANY;
    683  1.3.4.1    yamt 		notify.nt_nphdl = NIL_HANDLE;
    684  1.3.4.1    yamt 		notify.nt_sid = PORT_ANY;
    685  1.3.4.1    yamt 		notify.nt_did = PORT_ANY;
    686  1.3.4.1    yamt 		notify.nt_tgt = TGT_ANY;
    687  1.3.4.1    yamt 		notify.nt_channel = tmp;
    688  1.3.4.1    yamt 		notify.nt_lun = LUN_ANY;
    689  1.3.4.1    yamt 		notify.nt_tagval = TAG_ANY;
    690  1.3.4.1    yamt 		isp_async(isp, ISPASYNC_TARGET_NOTIFY, &notify);
    691  1.3.4.1    yamt 	}
    692  1.3.4.1    yamt #endif
    693  1.3.4.1    yamt }
    694  1.3.4.1    yamt 
    695  1.3.4.1    yamt void
    696      1.1  mjacob isp_shutdown(ispsoftc_t *isp)
    697      1.1  mjacob {
    698      1.1  mjacob 	if (IS_FC(isp)) {
    699      1.1  mjacob 		if (IS_24XX(isp)) {
    700      1.1  mjacob 			ISP_WRITE(isp, BIU2400_ICR, 0);
    701      1.1  mjacob 			ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_PAUSE);
    702      1.1  mjacob 		} else {
    703      1.1  mjacob 			ISP_WRITE(isp, BIU_ICR, 0);
    704      1.1  mjacob 			ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
    705      1.1  mjacob 			ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
    706      1.1  mjacob 			ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
    707      1.1  mjacob 			ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
    708      1.1  mjacob 			ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
    709      1.1  mjacob 			ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
    710      1.1  mjacob 		}
    711      1.1  mjacob 	} else {
    712      1.1  mjacob 		ISP_WRITE(isp, BIU_ICR, 0);
    713      1.1  mjacob 		ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
    714      1.1  mjacob 	}
    715      1.1  mjacob }
    716      1.1  mjacob 
    717      1.1  mjacob /*
    718      1.1  mjacob  * Functions to move stuff to a form that the QLogic RISC engine understands
    719      1.1  mjacob  * and functions to move stuff back to a form the processor understands.
    720      1.1  mjacob  *
    721      1.1  mjacob  * Each platform is required to provide the 8, 16 and 32 bit
    722      1.1  mjacob  * swizzle and unswizzle macros (ISP_IOX{PUT|GET}_{8,16,32})
    723      1.1  mjacob  *
    724      1.1  mjacob  * The assumption is that swizzling and unswizzling is mostly done 'in place'
    725      1.1  mjacob  * (with a few exceptions for efficiency).
    726      1.1  mjacob  */
    727      1.1  mjacob 
    728  1.3.4.1    yamt #define	ISP_IS_SBUS(isp)	(ISP_SBUS_SUPPORTED && (isp)->isp_bustype == ISP_BT_SBUS)
    729      1.1  mjacob 
    730      1.1  mjacob #define	ASIZE(x)	(sizeof (x) / sizeof (x[0]))
    731      1.1  mjacob /*
    732      1.1  mjacob  * Swizzle/Copy Functions
    733      1.1  mjacob  */
    734      1.1  mjacob void
    735      1.1  mjacob isp_put_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
    736      1.1  mjacob {
    737      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
    738  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type, &hpdst->rqs_entry_count);
    739  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count, &hpdst->rqs_entry_type);
    740  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno, &hpdst->rqs_flags);
    741  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, hpsrc->rqs_flags, &hpdst->rqs_seqno);
    742  1.3.4.1    yamt 	} else {
    743  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type, &hpdst->rqs_entry_type);
    744  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count, &hpdst->rqs_entry_count);
    745  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, hpsrc->rqs_seqno, &hpdst->rqs_seqno);
    746  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, hpsrc->rqs_flags, &hpdst->rqs_flags);
    747      1.1  mjacob 	}
    748      1.1  mjacob }
    749      1.1  mjacob 
    750      1.1  mjacob void
    751      1.1  mjacob isp_get_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
    752      1.1  mjacob {
    753      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
    754  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type, hpdst->rqs_entry_count);
    755  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count, hpdst->rqs_entry_type);
    756  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno, hpdst->rqs_flags);
    757  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &hpsrc->rqs_flags, hpdst->rqs_seqno);
    758  1.3.4.1    yamt 	} else {
    759  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type, hpdst->rqs_entry_type);
    760  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count, hpdst->rqs_entry_count);
    761  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &hpsrc->rqs_seqno, hpdst->rqs_seqno);
    762  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &hpsrc->rqs_flags, hpdst->rqs_flags);
    763      1.1  mjacob 	}
    764      1.1  mjacob }
    765      1.1  mjacob 
    766      1.1  mjacob int
    767      1.1  mjacob isp_get_response_type(ispsoftc_t *isp, isphdr_t *hp)
    768      1.1  mjacob {
    769      1.1  mjacob 	uint8_t type;
    770      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
    771      1.1  mjacob 		ISP_IOXGET_8(isp, &hp->rqs_entry_count, type);
    772      1.1  mjacob 	} else {
    773      1.1  mjacob 		ISP_IOXGET_8(isp, &hp->rqs_entry_type, type);
    774      1.1  mjacob 	}
    775      1.1  mjacob 	return ((int)type);
    776      1.1  mjacob }
    777      1.1  mjacob 
    778      1.1  mjacob void
    779      1.1  mjacob isp_put_request(ispsoftc_t *isp, ispreq_t *rqsrc, ispreq_t *rqdst)
    780      1.1  mjacob {
    781      1.1  mjacob 	int i;
    782      1.1  mjacob 	isp_put_hdr(isp, &rqsrc->req_header, &rqdst->req_header);
    783      1.1  mjacob 	ISP_IOXPUT_32(isp, rqsrc->req_handle, &rqdst->req_handle);
    784      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
    785      1.1  mjacob 		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_target);
    786      1.1  mjacob 		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_lun_trn);
    787      1.1  mjacob 	} else {
    788      1.1  mjacob 		ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_lun_trn);
    789      1.1  mjacob 		ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_target);
    790      1.1  mjacob 	}
    791      1.1  mjacob 	ISP_IOXPUT_16(isp, rqsrc->req_cdblen, &rqdst->req_cdblen);
    792      1.1  mjacob 	ISP_IOXPUT_16(isp, rqsrc->req_flags, &rqdst->req_flags);
    793      1.1  mjacob 	ISP_IOXPUT_16(isp, rqsrc->req_time, &rqdst->req_time);
    794      1.1  mjacob 	ISP_IOXPUT_16(isp, rqsrc->req_seg_count, &rqdst->req_seg_count);
    795      1.1  mjacob 	for (i = 0; i < ASIZE(rqsrc->req_cdb); i++) {
    796      1.1  mjacob 		ISP_IOXPUT_8(isp, rqsrc->req_cdb[i], &rqdst->req_cdb[i]);
    797      1.1  mjacob 	}
    798      1.1  mjacob 	for (i = 0; i < ISP_RQDSEG; i++) {
    799  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_base, &rqdst->req_dataseg[i].ds_base);
    800  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_count, &rqdst->req_dataseg[i].ds_count);
    801      1.1  mjacob 	}
    802      1.1  mjacob }
    803      1.1  mjacob 
    804      1.1  mjacob void
    805      1.1  mjacob isp_put_marker(ispsoftc_t *isp, isp_marker_t *src, isp_marker_t *dst)
    806      1.1  mjacob {
    807      1.1  mjacob 	int i;
    808      1.1  mjacob 	isp_put_hdr(isp, &src->mrk_header, &dst->mrk_header);
    809      1.1  mjacob 	ISP_IOXPUT_32(isp, src->mrk_handle, &dst->mrk_handle);
    810      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
    811      1.1  mjacob 		ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_target);
    812      1.1  mjacob 		ISP_IOXPUT_8(isp, src->mrk_target, &dst->mrk_reserved0);
    813      1.1  mjacob 	} else {
    814      1.1  mjacob 		ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_reserved0);
    815      1.1  mjacob 		ISP_IOXPUT_8(isp, src->mrk_target, &dst->mrk_target);
    816      1.1  mjacob 	}
    817      1.1  mjacob 	ISP_IOXPUT_16(isp, src->mrk_modifier, &dst->mrk_modifier);
    818      1.1  mjacob 	ISP_IOXPUT_16(isp, src->mrk_flags, &dst->mrk_flags);
    819      1.1  mjacob 	ISP_IOXPUT_16(isp, src->mrk_lun, &dst->mrk_lun);
    820      1.1  mjacob 	for (i = 0; i < ASIZE(src->mrk_reserved1); i++) {
    821  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->mrk_reserved1[i], &dst->mrk_reserved1[i]);
    822      1.1  mjacob 	}
    823      1.1  mjacob }
    824      1.1  mjacob 
    825      1.1  mjacob void
    826  1.3.4.1    yamt isp_put_marker_24xx(ispsoftc_t *isp, isp_marker_24xx_t *src, isp_marker_24xx_t *dst)
    827      1.1  mjacob {
    828      1.1  mjacob 	int i;
    829      1.1  mjacob 	isp_put_hdr(isp, &src->mrk_header, &dst->mrk_header);
    830      1.1  mjacob 	ISP_IOXPUT_32(isp, src->mrk_handle, &dst->mrk_handle);
    831      1.1  mjacob 	ISP_IOXPUT_16(isp, src->mrk_nphdl, &dst->mrk_nphdl);
    832      1.1  mjacob 	ISP_IOXPUT_8(isp, src->mrk_modifier, &dst->mrk_modifier);
    833      1.1  mjacob 	ISP_IOXPUT_8(isp, src->mrk_reserved0, &dst->mrk_reserved0);
    834      1.1  mjacob 	ISP_IOXPUT_8(isp, src->mrk_reserved1, &dst->mrk_reserved1);
    835      1.1  mjacob 	ISP_IOXPUT_8(isp, src->mrk_vphdl, &dst->mrk_vphdl);
    836      1.1  mjacob 	ISP_IOXPUT_8(isp, src->mrk_reserved2, &dst->mrk_reserved2);
    837      1.1  mjacob 	for (i = 0; i < ASIZE(src->mrk_lun); i++) {
    838      1.1  mjacob 		ISP_IOXPUT_8(isp, src->mrk_lun[i], &dst->mrk_lun[i]);
    839      1.1  mjacob 	}
    840      1.1  mjacob 	for (i = 0; i < ASIZE(src->mrk_reserved3); i++) {
    841  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->mrk_reserved3[i], &dst->mrk_reserved3[i]);
    842      1.1  mjacob 	}
    843      1.1  mjacob }
    844      1.1  mjacob 
    845      1.1  mjacob void
    846      1.1  mjacob isp_put_request_t2(ispsoftc_t *isp, ispreqt2_t *src, ispreqt2_t *dst)
    847      1.1  mjacob {
    848      1.1  mjacob 	int i;
    849      1.1  mjacob 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
    850      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
    851      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
    852      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
    853      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
    854      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
    855      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
    856      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
    857      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
    858      1.1  mjacob 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
    859      1.1  mjacob 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
    860      1.1  mjacob 	}
    861      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
    862      1.1  mjacob 	for (i = 0; i < ISP_RQDSEG_T2; i++) {
    863  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base);
    864  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count);
    865      1.1  mjacob 	}
    866      1.1  mjacob }
    867      1.1  mjacob 
    868      1.1  mjacob void
    869      1.1  mjacob isp_put_request_t2e(ispsoftc_t *isp, ispreqt2e_t *src, ispreqt2e_t *dst)
    870      1.1  mjacob {
    871      1.1  mjacob 	int i;
    872      1.1  mjacob 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
    873      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
    874      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
    875      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
    876      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
    877      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
    878      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
    879      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
    880      1.1  mjacob 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
    881      1.1  mjacob 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
    882      1.1  mjacob 	}
    883      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
    884      1.1  mjacob 	for (i = 0; i < ISP_RQDSEG_T2; i++) {
    885  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base);
    886  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count);
    887      1.1  mjacob 	}
    888      1.1  mjacob }
    889      1.1  mjacob 
    890      1.1  mjacob void
    891      1.1  mjacob isp_put_request_t3(ispsoftc_t *isp, ispreqt3_t *src, ispreqt3_t *dst)
    892      1.1  mjacob {
    893      1.1  mjacob 	int i;
    894      1.1  mjacob 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
    895      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
    896      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
    897      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
    898      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
    899      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
    900      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
    901      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
    902      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
    903      1.1  mjacob 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
    904      1.1  mjacob 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
    905      1.1  mjacob 	}
    906      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
    907      1.1  mjacob 	for (i = 0; i < ISP_RQDSEG_T3; i++) {
    908  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base);
    909  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi, &dst->req_dataseg[i].ds_basehi);
    910  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count);
    911      1.1  mjacob 	}
    912      1.1  mjacob }
    913      1.1  mjacob 
    914      1.1  mjacob void
    915      1.1  mjacob isp_put_request_t3e(ispsoftc_t *isp, ispreqt3e_t *src, ispreqt3e_t *dst)
    916      1.1  mjacob {
    917      1.1  mjacob 	int i;
    918      1.1  mjacob 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
    919      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
    920      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
    921      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
    922      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
    923      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
    924      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
    925      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
    926      1.1  mjacob 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
    927      1.1  mjacob 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
    928      1.1  mjacob 	}
    929      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt);
    930      1.1  mjacob 	for (i = 0; i < ISP_RQDSEG_T3; i++) {
    931  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base);
    932  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi, &dst->req_dataseg[i].ds_basehi);
    933  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count);
    934      1.1  mjacob 	}
    935      1.1  mjacob }
    936      1.1  mjacob 
    937      1.1  mjacob void
    938      1.1  mjacob isp_put_extended_request(ispsoftc_t *isp, ispextreq_t *src, ispextreq_t *dst)
    939      1.1  mjacob {
    940      1.1  mjacob 	int i;
    941      1.1  mjacob 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
    942      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
    943      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
    944      1.1  mjacob 		ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_target);
    945      1.1  mjacob 		ISP_IOXPUT_8(isp, src->req_target, &dst->req_lun_trn);
    946      1.1  mjacob 	} else {
    947      1.1  mjacob 		ISP_IOXPUT_8(isp, src->req_lun_trn, &dst->req_lun_trn);
    948      1.1  mjacob 		ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
    949      1.1  mjacob 	}
    950      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_cdblen, &dst->req_cdblen);
    951      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags);
    952      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
    953      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
    954      1.1  mjacob 	for (i = 0; i < ASIZE(src->req_cdb); i++) {
    955      1.1  mjacob 		ISP_IOXPUT_8(isp, src->req_cdb[i], &dst->req_cdb[i]);
    956      1.1  mjacob 	}
    957      1.1  mjacob }
    958      1.1  mjacob 
    959      1.1  mjacob void
    960      1.1  mjacob isp_put_request_t7(ispsoftc_t *isp, ispreqt7_t *src, ispreqt7_t *dst)
    961      1.1  mjacob {
    962      1.1  mjacob 	int i;
    963      1.1  mjacob 	uint32_t *a, *b;
    964      1.1  mjacob 
    965      1.1  mjacob 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
    966      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_handle, &dst->req_handle);
    967      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_nphdl, &dst->req_nphdl);
    968      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
    969      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
    970      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
    971      1.1  mjacob 	a = (uint32_t *) src->req_lun;
    972      1.1  mjacob 	b = (uint32_t *) dst->req_lun;
    973      1.1  mjacob 	for (i = 0; i < (ASIZE(src->req_lun) >> 2); i++ ) {
    974      1.2  mjacob 		*b++ = ISP_SWAP32(isp, *a++);
    975      1.1  mjacob 	}
    976      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_alen_datadir, &dst->req_alen_datadir);
    977      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_task_management, &dst->req_task_management);
    978      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_task_attribute, &dst->req_task_attribute);
    979      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
    980      1.1  mjacob 	a = (uint32_t *) src->req_cdb;
    981      1.1  mjacob 	b = (uint32_t *) dst->req_cdb;
    982      1.2  mjacob 	for (i = 0; i < (ASIZE(src->req_cdb) >> 2); i++) {
    983      1.2  mjacob 		*b++ = ISP_SWAP32(isp, *a++);
    984      1.1  mjacob 	}
    985      1.1  mjacob 	ISP_IOXPUT_32(isp, src->req_dl, &dst->req_dl);
    986      1.1  mjacob 	ISP_IOXPUT_16(isp, src->req_tidlo, &dst->req_tidlo);
    987      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_tidhi, &dst->req_tidhi);
    988      1.1  mjacob 	ISP_IOXPUT_8(isp, src->req_vpidx, &dst->req_vpidx);
    989  1.3.4.1    yamt 	ISP_IOXPUT_32(isp, src->req_dataseg.ds_base, &dst->req_dataseg.ds_base);
    990  1.3.4.1    yamt 	ISP_IOXPUT_32(isp, src->req_dataseg.ds_basehi, &dst->req_dataseg.ds_basehi);
    991  1.3.4.1    yamt 	ISP_IOXPUT_32(isp, src->req_dataseg.ds_count, &dst->req_dataseg.ds_count);
    992      1.1  mjacob }
    993      1.1  mjacob 
    994      1.1  mjacob void
    995      1.3  mjacob isp_put_24xx_tmf(ispsoftc_t *isp, isp24xx_tmf_t *src, isp24xx_tmf_t *dst)
    996      1.3  mjacob {
    997      1.3  mjacob 	int i;
    998      1.3  mjacob 	uint32_t *a, *b;
    999      1.3  mjacob 
   1000      1.3  mjacob 	isp_put_hdr(isp, &src->tmf_header, &dst->tmf_header);
   1001      1.3  mjacob 	ISP_IOXPUT_32(isp, src->tmf_handle, &dst->tmf_handle);
   1002      1.3  mjacob 	ISP_IOXPUT_16(isp, src->tmf_nphdl, &dst->tmf_nphdl);
   1003      1.3  mjacob 	ISP_IOXPUT_16(isp, src->tmf_delay, &dst->tmf_delay);
   1004      1.3  mjacob 	ISP_IOXPUT_16(isp, src->tmf_timeout, &dst->tmf_timeout);
   1005      1.3  mjacob 	for (i = 0; i < ASIZE(src->tmf_reserved0); i++) {
   1006  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->tmf_reserved0[i], &dst->tmf_reserved0[i]);
   1007      1.3  mjacob 	}
   1008      1.3  mjacob 	a = (uint32_t *) src->tmf_lun;
   1009      1.3  mjacob 	b = (uint32_t *) dst->tmf_lun;
   1010      1.3  mjacob 	for (i = 0; i < (ASIZE(src->tmf_lun) >> 2); i++ ) {
   1011      1.3  mjacob 		*b++ = ISP_SWAP32(isp, *a++);
   1012      1.3  mjacob 	}
   1013      1.3  mjacob 	ISP_IOXPUT_32(isp, src->tmf_flags, &dst->tmf_flags);
   1014      1.3  mjacob 	for (i = 0; i < ASIZE(src->tmf_reserved1); i++) {
   1015  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->tmf_reserved1[i], &dst->tmf_reserved1[i]);
   1016      1.3  mjacob 	}
   1017      1.3  mjacob 	ISP_IOXPUT_16(isp, src->tmf_tidlo, &dst->tmf_tidlo);
   1018      1.3  mjacob 	ISP_IOXPUT_8(isp, src->tmf_tidhi, &dst->tmf_tidhi);
   1019      1.3  mjacob 	ISP_IOXPUT_8(isp, src->tmf_vpidx, &dst->tmf_vpidx);
   1020      1.3  mjacob 	for (i = 0; i < ASIZE(src->tmf_reserved2); i++) {
   1021  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->tmf_reserved2[i], &dst->tmf_reserved2[i]);
   1022      1.3  mjacob 	}
   1023      1.3  mjacob }
   1024      1.3  mjacob 
   1025      1.3  mjacob void
   1026      1.1  mjacob isp_put_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
   1027      1.1  mjacob {
   1028      1.1  mjacob 	int i;
   1029      1.1  mjacob 	isp_put_hdr(isp, &src->abrt_header, &dst->abrt_header);
   1030      1.1  mjacob 	ISP_IOXPUT_32(isp, src->abrt_handle, &dst->abrt_handle);
   1031      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abrt_nphdl, &dst->abrt_nphdl);
   1032      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abrt_options, &dst->abrt_options);
   1033      1.1  mjacob 	ISP_IOXPUT_32(isp, src->abrt_cmd_handle, &dst->abrt_cmd_handle);
   1034      1.1  mjacob 	for (i = 0; i < ASIZE(src->abrt_reserved); i++) {
   1035  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->abrt_reserved[i], &dst->abrt_reserved[i]);
   1036      1.1  mjacob 	}
   1037      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abrt_tidlo, &dst->abrt_tidlo);
   1038      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abrt_tidhi, &dst->abrt_tidhi);
   1039      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abrt_vpidx, &dst->abrt_vpidx);
   1040      1.1  mjacob 	for (i = 0; i < ASIZE(src->abrt_reserved1); i++) {
   1041  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->abrt_reserved1[i], &dst->abrt_reserved1[i]);
   1042      1.1  mjacob 	}
   1043      1.1  mjacob }
   1044      1.1  mjacob 
   1045      1.1  mjacob void
   1046      1.1  mjacob isp_put_cont_req(ispsoftc_t *isp, ispcontreq_t *src, ispcontreq_t *dst)
   1047      1.1  mjacob {
   1048      1.1  mjacob 	int i;
   1049      1.1  mjacob 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
   1050      1.1  mjacob 	for (i = 0; i < ISP_CDSEG; i++) {
   1051  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base);
   1052  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count);
   1053      1.1  mjacob 	}
   1054      1.1  mjacob }
   1055      1.1  mjacob 
   1056      1.1  mjacob void
   1057      1.1  mjacob isp_put_cont64_req(ispsoftc_t *isp, ispcontreq64_t *src, ispcontreq64_t *dst)
   1058      1.1  mjacob {
   1059      1.1  mjacob 	int i;
   1060      1.1  mjacob 	isp_put_hdr(isp, &src->req_header, &dst->req_header);
   1061      1.1  mjacob 	for (i = 0; i < ISP_CDSEG64; i++) {
   1062  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base);
   1063  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi, &dst->req_dataseg[i].ds_basehi);
   1064  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count);
   1065      1.1  mjacob 	}
   1066      1.1  mjacob }
   1067      1.1  mjacob 
   1068      1.1  mjacob void
   1069      1.1  mjacob isp_get_response(ispsoftc_t *isp, ispstatusreq_t *src, ispstatusreq_t *dst)
   1070      1.1  mjacob {
   1071      1.1  mjacob 	int i;
   1072      1.1  mjacob 	isp_get_hdr(isp, &src->req_header, &dst->req_header);
   1073      1.1  mjacob 	ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle);
   1074      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status);
   1075  1.3.4.1    yamt 	ISP_IOXGET_16(isp, &src->req_completion_status, dst->req_completion_status);
   1076      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags);
   1077      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_status_flags, dst->req_status_flags);
   1078      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_time, dst->req_time);
   1079      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_sense_len, dst->req_sense_len);
   1080      1.1  mjacob 	ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
   1081      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1082  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->req_response[i], dst->req_response[i]);
   1083      1.1  mjacob 	}
   1084      1.1  mjacob 	for (i = 0; i < 32; i++) {
   1085  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]);
   1086      1.1  mjacob 	}
   1087      1.1  mjacob }
   1088      1.1  mjacob 
   1089      1.1  mjacob void
   1090  1.3.4.1    yamt isp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src, isp24xx_statusreq_t *dst)
   1091      1.1  mjacob {
   1092      1.1  mjacob 	int i;
   1093      1.2  mjacob 	uint32_t *s, *d;
   1094      1.2  mjacob 
   1095      1.1  mjacob 	isp_get_hdr(isp, &src->req_header, &dst->req_header);
   1096      1.1  mjacob 	ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle);
   1097  1.3.4.1    yamt 	ISP_IOXGET_16(isp, &src->req_completion_status, dst->req_completion_status);
   1098      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_oxid, dst->req_oxid);
   1099      1.1  mjacob 	ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
   1100      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_reserved0, dst->req_reserved0);
   1101      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags);
   1102      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_reserved1, dst->req_reserved1);
   1103      1.1  mjacob 	ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status);
   1104      1.1  mjacob 	ISP_IOXGET_32(isp, &src->req_fcp_residual, dst->req_fcp_residual);
   1105      1.1  mjacob 	ISP_IOXGET_32(isp, &src->req_sense_len, dst->req_sense_len);
   1106      1.1  mjacob 	ISP_IOXGET_32(isp, &src->req_response_len, dst->req_response_len);
   1107      1.2  mjacob 	s = (uint32_t *)src->req_rsp_sense;
   1108      1.2  mjacob 	d = (uint32_t *)dst->req_rsp_sense;
   1109      1.2  mjacob 	for (i = 0; i < (ASIZE(src->req_rsp_sense) >> 2); i++) {
   1110      1.2  mjacob 		d[i] = ISP_SWAP32(isp, s[i]);
   1111      1.1  mjacob 	}
   1112      1.1  mjacob }
   1113      1.1  mjacob 
   1114      1.1  mjacob void
   1115      1.1  mjacob isp_get_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
   1116      1.1  mjacob {
   1117      1.1  mjacob 	int i;
   1118      1.1  mjacob 	isp_get_hdr(isp, &src->abrt_header, &dst->abrt_header);
   1119      1.1  mjacob 	ISP_IOXGET_32(isp, &src->abrt_handle, dst->abrt_handle);
   1120      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abrt_nphdl, dst->abrt_nphdl);
   1121      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abrt_options, dst->abrt_options);
   1122      1.1  mjacob 	ISP_IOXGET_32(isp, &src->abrt_cmd_handle, dst->abrt_cmd_handle);
   1123      1.2  mjacob 	for (i = 0; i < ASIZE(src->abrt_reserved); i++) {
   1124  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->abrt_reserved[i], dst->abrt_reserved[i]);
   1125      1.1  mjacob 	}
   1126      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abrt_tidlo, dst->abrt_tidlo);
   1127      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abrt_tidhi, dst->abrt_tidhi);
   1128      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abrt_vpidx, dst->abrt_vpidx);
   1129      1.2  mjacob 	for (i = 0; i < ASIZE(src->abrt_reserved1); i++) {
   1130  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->abrt_reserved1[i], dst->abrt_reserved1[i]);
   1131      1.1  mjacob 	}
   1132      1.1  mjacob }
   1133      1.1  mjacob 
   1134      1.1  mjacob 
   1135      1.1  mjacob void
   1136      1.1  mjacob isp_get_rio2(ispsoftc_t *isp, isp_rio2_t *r2src, isp_rio2_t *r2dst)
   1137      1.1  mjacob {
   1138      1.1  mjacob 	int i;
   1139      1.1  mjacob 	isp_get_hdr(isp, &r2src->req_header, &r2dst->req_header);
   1140      1.1  mjacob 	if (r2dst->req_header.rqs_seqno > 30) {
   1141      1.1  mjacob 		r2dst->req_header.rqs_seqno = 30;
   1142      1.1  mjacob 	}
   1143      1.1  mjacob 	for (i = 0; i < r2dst->req_header.rqs_seqno; i++) {
   1144  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &r2src->req_handles[i], r2dst->req_handles[i]);
   1145      1.1  mjacob 	}
   1146      1.1  mjacob 	while (i < 30) {
   1147      1.1  mjacob 		r2dst->req_handles[i++] = 0;
   1148      1.1  mjacob 	}
   1149      1.1  mjacob }
   1150      1.1  mjacob 
   1151      1.1  mjacob void
   1152      1.1  mjacob isp_put_icb(ispsoftc_t *isp, isp_icb_t *src, isp_icb_t *dst)
   1153      1.1  mjacob {
   1154      1.1  mjacob 	int i;
   1155      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   1156      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_version, &dst->icb_reserved0);
   1157      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_reserved0, &dst->icb_version);
   1158      1.1  mjacob 	} else {
   1159      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_version, &dst->icb_version);
   1160      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_reserved0, &dst->icb_reserved0);
   1161      1.1  mjacob 	}
   1162      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_fwoptions, &dst->icb_fwoptions);
   1163      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_maxfrmlen, &dst->icb_maxfrmlen);
   1164      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_maxalloc, &dst->icb_maxalloc);
   1165      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_execthrottle, &dst->icb_execthrottle);
   1166      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   1167      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_retry_count, &dst->icb_retry_delay);
   1168      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_retry_delay, &dst->icb_retry_count);
   1169      1.1  mjacob 	} else {
   1170      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_retry_count, &dst->icb_retry_count);
   1171      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_retry_delay, &dst->icb_retry_delay);
   1172      1.1  mjacob 	}
   1173      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1174      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_portname[i], &dst->icb_portname[i]);
   1175      1.1  mjacob 	}
   1176      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_hardaddr, &dst->icb_hardaddr);
   1177      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   1178      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_iqdevtype, &dst->icb_logintime);
   1179      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_logintime, &dst->icb_iqdevtype);
   1180      1.1  mjacob 	} else {
   1181      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_iqdevtype, &dst->icb_iqdevtype);
   1182      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_logintime, &dst->icb_logintime);
   1183      1.1  mjacob 	}
   1184      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1185      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_nodename[i], &dst->icb_nodename[i]);
   1186      1.1  mjacob 	}
   1187      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_rqstout, &dst->icb_rqstout);
   1188      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_rspnsin, &dst->icb_rspnsin);
   1189      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_rqstqlen, &dst->icb_rqstqlen);
   1190      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_rsltqlen, &dst->icb_rsltqlen);
   1191      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1192      1.1  mjacob 		ISP_IOXPUT_16(isp, src->icb_rqstaddr[i], &dst->icb_rqstaddr[i]);
   1193      1.1  mjacob 	}
   1194      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1195      1.1  mjacob 		ISP_IOXPUT_16(isp, src->icb_respaddr[i], &dst->icb_respaddr[i]);
   1196      1.1  mjacob 	}
   1197      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_lunenables, &dst->icb_lunenables);
   1198      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   1199      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_ccnt, &dst->icb_icnt);
   1200      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_icnt, &dst->icb_ccnt);
   1201      1.1  mjacob 	} else {
   1202      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_ccnt, &dst->icb_ccnt);
   1203      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_icnt, &dst->icb_icnt);
   1204      1.1  mjacob 	}
   1205      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_lunetimeout, &dst->icb_lunetimeout);
   1206      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_reserved1, &dst->icb_reserved1);
   1207      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_xfwoptions, &dst->icb_xfwoptions);
   1208      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   1209      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_racctimer, &dst->icb_idelaytimer);
   1210      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_idelaytimer, &dst->icb_racctimer);
   1211      1.1  mjacob 	} else {
   1212      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_racctimer, &dst->icb_racctimer);
   1213      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_idelaytimer, &dst->icb_idelaytimer);
   1214      1.1  mjacob 	}
   1215      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_zfwoptions, &dst->icb_zfwoptions);
   1216      1.1  mjacob }
   1217      1.1  mjacob 
   1218      1.1  mjacob void
   1219      1.1  mjacob isp_put_icb_2400(ispsoftc_t *isp, isp_icb_2400_t *src, isp_icb_2400_t *dst)
   1220      1.1  mjacob {
   1221      1.1  mjacob 	int i;
   1222      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_version, &dst->icb_version);
   1223      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_reserved0, &dst->icb_reserved0);
   1224      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_maxfrmlen, &dst->icb_maxfrmlen);
   1225      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_execthrottle, &dst->icb_execthrottle);
   1226      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_xchgcnt, &dst->icb_xchgcnt);
   1227      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_hardaddr, &dst->icb_hardaddr);
   1228      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1229      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_portname[i], &dst->icb_portname[i]);
   1230      1.1  mjacob 	}
   1231      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1232      1.1  mjacob 		ISP_IOXPUT_8(isp, src->icb_nodename[i], &dst->icb_nodename[i]);
   1233      1.1  mjacob 	}
   1234      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_rspnsin, &dst->icb_rspnsin);
   1235      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_rqstout, &dst->icb_rqstout);
   1236      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_retry_count, &dst->icb_retry_count);
   1237      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_priout, &dst->icb_priout);
   1238      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_rsltqlen, &dst->icb_rsltqlen);
   1239      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_rqstqlen, &dst->icb_rqstqlen);
   1240      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_ldn_nols, &dst->icb_ldn_nols);
   1241      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_prqstqlen, &dst->icb_prqstqlen);
   1242      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1243      1.1  mjacob 		ISP_IOXPUT_16(isp, src->icb_rqstaddr[i], &dst->icb_rqstaddr[i]);
   1244      1.1  mjacob 	}
   1245      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1246      1.1  mjacob 		ISP_IOXPUT_16(isp, src->icb_respaddr[i], &dst->icb_respaddr[i]);
   1247      1.1  mjacob 	}
   1248      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1249      1.1  mjacob 		ISP_IOXPUT_16(isp, src->icb_priaddr[i], &dst->icb_priaddr[i]);
   1250      1.1  mjacob 	}
   1251      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1252  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->icb_reserved1[i], &dst->icb_reserved1[i]);
   1253      1.1  mjacob 	}
   1254      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_atio_in, &dst->icb_atio_in);
   1255      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_atioqlen, &dst->icb_atioqlen);
   1256      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1257  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->icb_atioqaddr[i], &dst->icb_atioqaddr[i]);
   1258      1.1  mjacob 	}
   1259      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_idelaytimer, &dst->icb_idelaytimer);
   1260      1.1  mjacob 	ISP_IOXPUT_16(isp, src->icb_logintime, &dst->icb_logintime);
   1261      1.1  mjacob 	ISP_IOXPUT_32(isp, src->icb_fwoptions1, &dst->icb_fwoptions1);
   1262      1.1  mjacob 	ISP_IOXPUT_32(isp, src->icb_fwoptions2, &dst->icb_fwoptions2);
   1263      1.1  mjacob 	ISP_IOXPUT_32(isp, src->icb_fwoptions3, &dst->icb_fwoptions3);
   1264      1.1  mjacob 	for (i = 0; i < 12; i++) {
   1265  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->icb_reserved2[i], &dst->icb_reserved2[i]);
   1266      1.1  mjacob 	}
   1267      1.1  mjacob }
   1268      1.1  mjacob 
   1269      1.1  mjacob void
   1270      1.3  mjacob isp_put_icb_2400_vpinfo(ispsoftc_t *isp, isp_icb_2400_vpinfo_t *src, isp_icb_2400_vpinfo_t *dst)
   1271      1.3  mjacob {
   1272      1.3  mjacob 	ISP_IOXPUT_16(isp, src->vp_count, &dst->vp_count);
   1273      1.3  mjacob 	ISP_IOXPUT_16(isp, src->vp_global_options, &dst->vp_global_options);
   1274      1.3  mjacob }
   1275      1.3  mjacob 
   1276      1.3  mjacob void
   1277      1.3  mjacob isp_put_vp_port_info(ispsoftc_t *isp, vp_port_info_t *src, vp_port_info_t *dst)
   1278      1.3  mjacob {
   1279      1.3  mjacob 	int i;
   1280      1.3  mjacob 	ISP_IOXPUT_16(isp, src->vp_port_status, &dst->vp_port_status);
   1281      1.3  mjacob 	ISP_IOXPUT_8(isp, src->vp_port_options, &dst->vp_port_options);
   1282      1.3  mjacob 	ISP_IOXPUT_8(isp, src->vp_port_loopid, &dst->vp_port_loopid);
   1283      1.3  mjacob 	for (i = 0; i < 8; i++) {
   1284      1.3  mjacob 		ISP_IOXPUT_8(isp, src->vp_port_portname[i], &dst->vp_port_portname[i]);
   1285      1.3  mjacob 	}
   1286      1.3  mjacob 	for (i = 0; i < 8; i++) {
   1287      1.3  mjacob 		ISP_IOXPUT_8(isp, src->vp_port_nodename[i], &dst->vp_port_nodename[i]);
   1288      1.3  mjacob 	}
   1289      1.3  mjacob 	/* we never *put* portid_lo/portid_hi */
   1290      1.3  mjacob }
   1291      1.3  mjacob 
   1292      1.3  mjacob void
   1293      1.3  mjacob isp_get_vp_port_info(ispsoftc_t *isp, vp_port_info_t *src, vp_port_info_t *dst)
   1294      1.3  mjacob {
   1295      1.3  mjacob 	int i;
   1296      1.3  mjacob 	ISP_IOXGET_16(isp, &src->vp_port_status, dst->vp_port_status);
   1297      1.3  mjacob 	ISP_IOXGET_8(isp, &src->vp_port_options, dst->vp_port_options);
   1298      1.3  mjacob 	ISP_IOXGET_8(isp, &src->vp_port_loopid, dst->vp_port_loopid);
   1299      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_port_portname); i++) {
   1300      1.3  mjacob 		ISP_IOXGET_8(isp, &src->vp_port_portname[i], dst->vp_port_portname[i]);
   1301      1.3  mjacob 	}
   1302      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_port_nodename); i++) {
   1303      1.3  mjacob 		ISP_IOXGET_8(isp, &src->vp_port_nodename[i], dst->vp_port_nodename[i]);
   1304      1.3  mjacob 	}
   1305      1.3  mjacob 	ISP_IOXGET_16(isp, &src->vp_port_portid_lo, dst->vp_port_portid_lo);
   1306      1.3  mjacob 	ISP_IOXGET_16(isp, &src->vp_port_portid_hi, dst->vp_port_portid_hi);
   1307      1.3  mjacob }
   1308      1.3  mjacob 
   1309      1.3  mjacob void
   1310      1.3  mjacob isp_put_vp_ctrl_info(ispsoftc_t *isp, vp_ctrl_info_t *src, vp_ctrl_info_t *dst)
   1311      1.3  mjacob {
   1312      1.3  mjacob 	int i;
   1313      1.3  mjacob 	isp_put_hdr(isp, &src->vp_ctrl_hdr, &dst->vp_ctrl_hdr);
   1314      1.3  mjacob 	ISP_IOXPUT_32(isp, src->vp_ctrl_handle, &dst->vp_ctrl_handle);
   1315      1.3  mjacob 	ISP_IOXPUT_16(isp, src->vp_ctrl_index_fail, &dst->vp_ctrl_index_fail);
   1316      1.3  mjacob 	ISP_IOXPUT_16(isp, src->vp_ctrl_status, &dst->vp_ctrl_status);
   1317      1.3  mjacob 	ISP_IOXPUT_16(isp, src->vp_ctrl_command, &dst->vp_ctrl_command);
   1318      1.3  mjacob 	ISP_IOXPUT_16(isp, src->vp_ctrl_vp_count, &dst->vp_ctrl_vp_count);
   1319      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_ctrl_idmap); i++) {
   1320      1.3  mjacob 		ISP_IOXPUT_16(isp, src->vp_ctrl_idmap[i], &dst->vp_ctrl_idmap[i]);
   1321      1.3  mjacob 	}
   1322      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_ctrl_reserved); i++) {
   1323      1.3  mjacob 		ISP_IOXPUT_8(isp, src->vp_ctrl_idmap[i], &dst->vp_ctrl_idmap[i]);
   1324      1.3  mjacob 	}
   1325      1.3  mjacob }
   1326      1.3  mjacob 
   1327      1.3  mjacob void
   1328      1.3  mjacob isp_get_vp_ctrl_info(ispsoftc_t *isp, vp_ctrl_info_t *src, vp_ctrl_info_t *dst)
   1329      1.3  mjacob {
   1330      1.3  mjacob 	int i;
   1331      1.3  mjacob 	isp_get_hdr(isp, &src->vp_ctrl_hdr, &dst->vp_ctrl_hdr);
   1332      1.3  mjacob 	ISP_IOXGET_32(isp, &src->vp_ctrl_handle, dst->vp_ctrl_handle);
   1333      1.3  mjacob 	ISP_IOXGET_16(isp, &src->vp_ctrl_index_fail, dst->vp_ctrl_index_fail);
   1334      1.3  mjacob 	ISP_IOXGET_16(isp, &src->vp_ctrl_status, dst->vp_ctrl_status);
   1335      1.3  mjacob 	ISP_IOXGET_16(isp, &src->vp_ctrl_command, dst->vp_ctrl_command);
   1336      1.3  mjacob 	ISP_IOXGET_16(isp, &src->vp_ctrl_vp_count, dst->vp_ctrl_vp_count);
   1337      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_ctrl_idmap); i++) {
   1338      1.3  mjacob 		ISP_IOXGET_16(isp, &src->vp_ctrl_idmap[i], dst->vp_ctrl_idmap[i]);
   1339      1.3  mjacob 	}
   1340      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_ctrl_reserved); i++) {
   1341      1.3  mjacob 		ISP_IOXGET_8(isp, &src->vp_ctrl_reserved[i], dst->vp_ctrl_reserved[i]);
   1342      1.3  mjacob 	}
   1343      1.3  mjacob }
   1344      1.3  mjacob 
   1345      1.3  mjacob void
   1346      1.3  mjacob isp_put_vp_modify(ispsoftc_t *isp, vp_modify_t *src, vp_modify_t *dst)
   1347      1.3  mjacob {
   1348      1.3  mjacob 	int i, j;
   1349      1.3  mjacob 	isp_put_hdr(isp, &src->vp_mod_hdr, &dst->vp_mod_hdr);
   1350      1.3  mjacob 	ISP_IOXPUT_32(isp, src->vp_mod_hdl, &dst->vp_mod_hdl);
   1351      1.3  mjacob 	ISP_IOXPUT_16(isp, src->vp_mod_reserved0, &dst->vp_mod_reserved0);
   1352      1.3  mjacob 	ISP_IOXPUT_16(isp, src->vp_mod_status, &dst->vp_mod_status);
   1353      1.3  mjacob 	ISP_IOXPUT_8(isp, src->vp_mod_cmd, &dst->vp_mod_cmd);
   1354      1.3  mjacob 	ISP_IOXPUT_8(isp, src->vp_mod_cnt, &dst->vp_mod_cnt);
   1355      1.3  mjacob 	ISP_IOXPUT_8(isp, src->vp_mod_idx0, &dst->vp_mod_idx0);
   1356      1.3  mjacob 	ISP_IOXPUT_8(isp, src->vp_mod_idx1, &dst->vp_mod_idx1);
   1357      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_mod_ports); i++) {
   1358      1.3  mjacob 		ISP_IOXPUT_8(isp, src->vp_mod_ports[i].options, &dst->vp_mod_ports[i].options);
   1359      1.3  mjacob 		ISP_IOXPUT_8(isp, src->vp_mod_ports[i].loopid, &dst->vp_mod_ports[i].loopid);
   1360      1.3  mjacob 		ISP_IOXPUT_16(isp, src->vp_mod_ports[i].reserved1, &dst->vp_mod_ports[i].reserved1);
   1361      1.3  mjacob 		for (j = 0; j < ASIZE(src->vp_mod_ports[i].wwpn); j++) {
   1362      1.3  mjacob 			ISP_IOXPUT_8(isp, src->vp_mod_ports[i].wwpn[j], &dst->vp_mod_ports[i].wwpn[j]);
   1363      1.3  mjacob 		}
   1364      1.3  mjacob 		for (j = 0; j < ASIZE(src->vp_mod_ports[i].wwnn); j++) {
   1365      1.3  mjacob 			ISP_IOXPUT_8(isp, src->vp_mod_ports[i].wwnn[j], &dst->vp_mod_ports[i].wwnn[j]);
   1366      1.3  mjacob 		}
   1367      1.3  mjacob 	}
   1368      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_mod_reserved2); i++) {
   1369      1.3  mjacob 		ISP_IOXPUT_8(isp, src->vp_mod_reserved2[i], &dst->vp_mod_reserved2[i]);
   1370      1.3  mjacob 	}
   1371      1.3  mjacob }
   1372      1.3  mjacob 
   1373      1.3  mjacob void
   1374      1.3  mjacob isp_get_vp_modify(ispsoftc_t *isp, vp_modify_t *src, vp_modify_t *dst)
   1375      1.3  mjacob {
   1376      1.3  mjacob 	int i, j;
   1377      1.3  mjacob 	isp_get_hdr(isp, &src->vp_mod_hdr, &dst->vp_mod_hdr);
   1378      1.3  mjacob 	ISP_IOXGET_32(isp, &src->vp_mod_hdl, dst->vp_mod_hdl);
   1379      1.3  mjacob 	ISP_IOXGET_16(isp, &src->vp_mod_reserved0, dst->vp_mod_reserved0);
   1380      1.3  mjacob 	ISP_IOXGET_16(isp, &src->vp_mod_status, dst->vp_mod_status);
   1381      1.3  mjacob 	ISP_IOXGET_8(isp, &src->vp_mod_cmd, dst->vp_mod_cmd);
   1382      1.3  mjacob 	ISP_IOXGET_8(isp, &src->vp_mod_cnt, dst->vp_mod_cnt);
   1383      1.3  mjacob 	ISP_IOXGET_8(isp, &src->vp_mod_idx0, dst->vp_mod_idx0);
   1384      1.3  mjacob 	ISP_IOXGET_8(isp, &src->vp_mod_idx1, dst->vp_mod_idx1);
   1385      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_mod_ports); i++) {
   1386      1.3  mjacob 		ISP_IOXGET_8(isp, &src->vp_mod_ports[i].options, dst->vp_mod_ports[i].options);
   1387      1.3  mjacob 		ISP_IOXGET_8(isp, &src->vp_mod_ports[i].loopid, dst->vp_mod_ports[i].loopid);
   1388      1.3  mjacob 		ISP_IOXGET_16(isp, &src->vp_mod_ports[i].reserved1, dst->vp_mod_ports[i].reserved1);
   1389      1.3  mjacob 		for (j = 0; j < ASIZE(src->vp_mod_ports[i].wwpn); j++) {
   1390      1.3  mjacob 			ISP_IOXGET_8(isp, &src->vp_mod_ports[i].wwpn[j], dst->vp_mod_ports[i].wwpn[j]);
   1391      1.3  mjacob 		}
   1392      1.3  mjacob 		for (j = 0; j < ASIZE(src->vp_mod_ports[i].wwnn); j++) {
   1393      1.3  mjacob 			ISP_IOXGET_8(isp, &src->vp_mod_ports[i].wwnn[j], dst->vp_mod_ports[i].wwnn[j]);
   1394      1.3  mjacob 		}
   1395      1.3  mjacob 	}
   1396      1.3  mjacob 	for (i = 0; i < ASIZE(src->vp_mod_reserved2); i++) {
   1397      1.3  mjacob 		ISP_IOXGET_8(isp, &src->vp_mod_reserved2[i], dst->vp_mod_reserved2[i]);
   1398      1.3  mjacob 	}
   1399      1.3  mjacob }
   1400      1.3  mjacob 
   1401      1.3  mjacob void
   1402      1.1  mjacob isp_get_pdb_21xx(ispsoftc_t *isp, isp_pdb_21xx_t *src, isp_pdb_21xx_t *dst)
   1403      1.1  mjacob {
   1404      1.1  mjacob 	int i;
   1405      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_options, dst->pdb_options);
   1406      1.1  mjacob         ISP_IOXGET_8(isp, &src->pdb_mstate, dst->pdb_mstate);
   1407      1.1  mjacob         ISP_IOXGET_8(isp, &src->pdb_sstate, dst->pdb_sstate);
   1408      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1409  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i], dst->pdb_hardaddr_bits[i]);
   1410      1.1  mjacob 	}
   1411      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1412  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->pdb_portid_bits[i], dst->pdb_portid_bits[i]);
   1413      1.1  mjacob 	}
   1414      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1415      1.1  mjacob 		ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
   1416      1.1  mjacob 	}
   1417      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1418      1.1  mjacob 		ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
   1419      1.1  mjacob 	}
   1420      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_execthrottle, dst->pdb_execthrottle);
   1421      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_exec_count, dst->pdb_exec_count);
   1422      1.1  mjacob 	ISP_IOXGET_8(isp, &src->pdb_retry_count, dst->pdb_retry_count);
   1423      1.1  mjacob 	ISP_IOXGET_8(isp, &src->pdb_retry_delay, dst->pdb_retry_delay);
   1424      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_resalloc, dst->pdb_resalloc);
   1425      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_curalloc, dst->pdb_curalloc);
   1426      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_qhead, dst->pdb_qhead);
   1427      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_qtail, dst->pdb_qtail);
   1428      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_tl_next, dst->pdb_tl_next);
   1429      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_tl_last, dst->pdb_tl_last);
   1430      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_features, dst->pdb_features);
   1431      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_pconcurrnt, dst->pdb_pconcurrnt);
   1432      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_roi, dst->pdb_roi);
   1433      1.1  mjacob 	ISP_IOXGET_8(isp, &src->pdb_target, dst->pdb_target);
   1434      1.1  mjacob 	ISP_IOXGET_8(isp, &src->pdb_initiator, dst->pdb_initiator);
   1435      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_rdsiz, dst->pdb_rdsiz);
   1436      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_ncseq, dst->pdb_ncseq);
   1437      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_noseq, dst->pdb_noseq);
   1438      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_labrtflg, dst->pdb_labrtflg);
   1439      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_lstopflg, dst->pdb_lstopflg);
   1440      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_sqhead, dst->pdb_sqhead);
   1441      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_sqtail, dst->pdb_sqtail);
   1442      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_ptimer, dst->pdb_ptimer);
   1443      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_nxt_seqid, dst->pdb_nxt_seqid);
   1444      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_fcount, dst->pdb_fcount);
   1445      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_prli_len, dst->pdb_prli_len);
   1446      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
   1447      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
   1448      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_loopid, dst->pdb_loopid);
   1449      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_il_ptr, dst->pdb_il_ptr);
   1450      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_sl_ptr, dst->pdb_sl_ptr);
   1451      1.1  mjacob }
   1452      1.1  mjacob 
   1453      1.1  mjacob void
   1454      1.1  mjacob isp_get_pdb_24xx(ispsoftc_t *isp, isp_pdb_24xx_t *src, isp_pdb_24xx_t *dst)
   1455      1.1  mjacob {
   1456      1.1  mjacob 	int i;
   1457      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_flags, dst->pdb_flags);
   1458      1.1  mjacob         ISP_IOXGET_8(isp, &src->pdb_curstate, dst->pdb_curstate);
   1459      1.1  mjacob         ISP_IOXGET_8(isp, &src->pdb_laststate, dst->pdb_laststate);
   1460      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1461  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i], dst->pdb_hardaddr_bits[i]);
   1462      1.1  mjacob 	}
   1463      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1464  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->pdb_portid_bits[i], dst->pdb_portid_bits[i]);
   1465      1.1  mjacob 	}
   1466      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_retry_timer, dst->pdb_retry_timer);
   1467      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_handle, dst->pdb_handle);
   1468      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_rcv_dsize, dst->pdb_rcv_dsize);
   1469      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_reserved0, dst->pdb_reserved0);
   1470      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
   1471      1.1  mjacob 	ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
   1472      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1473      1.1  mjacob 		ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
   1474      1.1  mjacob 	}
   1475      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1476      1.1  mjacob 		ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
   1477      1.1  mjacob 	}
   1478      1.1  mjacob 	for (i = 0; i < 24; i++) {
   1479  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->pdb_reserved1[i], dst->pdb_reserved1[i]);
   1480      1.1  mjacob 	}
   1481      1.1  mjacob }
   1482      1.1  mjacob 
   1483      1.1  mjacob /*
   1484      1.1  mjacob  * PLOGI/LOGO IOCB canonicalization
   1485      1.1  mjacob  */
   1486      1.1  mjacob 
   1487      1.1  mjacob void
   1488      1.1  mjacob isp_get_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst)
   1489      1.1  mjacob {
   1490      1.1  mjacob 	int i;
   1491      1.1  mjacob 	isp_get_hdr(isp, &src->plogx_header, &dst->plogx_header);
   1492      1.1  mjacob 	ISP_IOXGET_32(isp, &src->plogx_handle, dst->plogx_handle);
   1493      1.1  mjacob 	ISP_IOXGET_16(isp, &src->plogx_status, dst->plogx_status);
   1494      1.1  mjacob 	ISP_IOXGET_16(isp, &src->plogx_nphdl, dst->plogx_nphdl);
   1495      1.1  mjacob 	ISP_IOXGET_16(isp, &src->plogx_flags, dst->plogx_flags);
   1496      1.1  mjacob 	ISP_IOXGET_16(isp, &src->plogx_vphdl, dst->plogx_vphdl);
   1497      1.1  mjacob 	ISP_IOXGET_16(isp, &src->plogx_portlo, dst->plogx_portlo);
   1498      1.1  mjacob 	ISP_IOXGET_16(isp, &src->plogx_rspsz_porthi, dst->plogx_rspsz_porthi);
   1499      1.1  mjacob 	for (i = 0; i < 11; i++) {
   1500  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->plogx_ioparm[i].lo16, dst->plogx_ioparm[i].lo16);
   1501  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->plogx_ioparm[i].hi16, dst->plogx_ioparm[i].hi16);
   1502      1.1  mjacob 	}
   1503      1.1  mjacob }
   1504      1.1  mjacob 
   1505      1.1  mjacob void
   1506      1.1  mjacob isp_put_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst)
   1507      1.1  mjacob {
   1508      1.1  mjacob 	int i;
   1509      1.1  mjacob 	isp_put_hdr(isp, &src->plogx_header, &dst->plogx_header);
   1510      1.1  mjacob 	ISP_IOXPUT_32(isp, src->plogx_handle, &dst->plogx_handle);
   1511      1.1  mjacob 	ISP_IOXPUT_16(isp, src->plogx_status, &dst->plogx_status);
   1512      1.1  mjacob 	ISP_IOXPUT_16(isp, src->plogx_nphdl, &dst->plogx_nphdl);
   1513      1.1  mjacob 	ISP_IOXPUT_16(isp, src->plogx_flags, &dst->plogx_flags);
   1514      1.1  mjacob 	ISP_IOXPUT_16(isp, src->plogx_vphdl, &dst->plogx_vphdl);
   1515      1.1  mjacob 	ISP_IOXPUT_16(isp, src->plogx_portlo, &dst->plogx_portlo);
   1516      1.1  mjacob 	ISP_IOXPUT_16(isp, src->plogx_rspsz_porthi, &dst->plogx_rspsz_porthi);
   1517      1.1  mjacob 	for (i = 0; i < 11; i++) {
   1518  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->plogx_ioparm[i].lo16, &dst->plogx_ioparm[i].lo16);
   1519  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->plogx_ioparm[i].hi16, &dst->plogx_ioparm[i].hi16);
   1520      1.1  mjacob 	}
   1521      1.1  mjacob }
   1522      1.1  mjacob 
   1523      1.1  mjacob /*
   1524      1.3  mjacob  * Report ID canonicalization
   1525      1.3  mjacob  */
   1526      1.3  mjacob void
   1527      1.3  mjacob isp_get_ridacq(ispsoftc_t *isp, isp_ridacq_t *src, isp_ridacq_t *dst)
   1528      1.3  mjacob {
   1529      1.3  mjacob 	int i;
   1530      1.3  mjacob 	isp_get_hdr(isp, &src->ridacq_hdr, &dst->ridacq_hdr);
   1531      1.3  mjacob 	ISP_IOXGET_32(isp, &src->ridacq_handle, dst->ridacq_handle);
   1532      1.3  mjacob 	ISP_IOXGET_16(isp, &src->ridacq_vp_port_lo, dst->ridacq_vp_port_lo);
   1533      1.3  mjacob 	ISP_IOXGET_8(isp, &src->ridacq_vp_port_hi, dst->ridacq_vp_port_hi);
   1534      1.3  mjacob 	ISP_IOXGET_8(isp, &src->ridacq_format, dst->ridacq_format);
   1535  1.3.4.1    yamt 	for (i = 0; i < sizeof (src->ridacq_map) / sizeof (src->ridacq_map[0]); i++) {
   1536      1.3  mjacob 		ISP_IOXGET_16(isp, &src->ridacq_map[i], dst->ridacq_map[i]);
   1537      1.3  mjacob 	}
   1538  1.3.4.1    yamt 	for (i = 0; i < sizeof (src->ridacq_reserved1) / sizeof (src->ridacq_reserved1[0]); i++) {
   1539  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->ridacq_reserved1[i], dst->ridacq_reserved1[i]);
   1540      1.3  mjacob 	}
   1541      1.3  mjacob 	if (dst->ridacq_format == 0) {
   1542  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_acquired, dst->un.type0.ridacq_vp_acquired);
   1543  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_setup, dst->un.type0.ridacq_vp_setup);
   1544  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->un.type0.ridacq_reserved0, dst->un.type0.ridacq_reserved0);
   1545      1.3  mjacob 	} else if (dst->ridacq_format == 1) {
   1546  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->un.type1.ridacq_vp_count, dst->un.type1.ridacq_vp_count);
   1547  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_index, dst->un.type1.ridacq_vp_index);
   1548  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_status, dst->un.type1.ridacq_vp_status);
   1549      1.3  mjacob 	} else {
   1550  1.3.4.1    yamt 		ISP_MEMZERO(&dst->un, sizeof (dst->un));
   1551      1.3  mjacob 	}
   1552      1.3  mjacob }
   1553      1.3  mjacob 
   1554      1.3  mjacob 
   1555      1.3  mjacob /*
   1556      1.1  mjacob  * CT Passthru canonicalization
   1557      1.1  mjacob  */
   1558      1.1  mjacob void
   1559      1.1  mjacob isp_get_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst)
   1560      1.1  mjacob {
   1561      1.1  mjacob 	int i;
   1562      1.1  mjacob 
   1563      1.1  mjacob 	isp_get_hdr(isp, &src->ctp_header, &dst->ctp_header);
   1564      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ctp_handle, dst->ctp_handle);
   1565      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ctp_status, dst->ctp_status);
   1566      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ctp_nphdl, dst->ctp_nphdl);
   1567      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ctp_cmd_cnt, dst->ctp_cmd_cnt);
   1568      1.3  mjacob 	ISP_IOXGET_8(isp, &src->ctp_vpidx, dst->ctp_vpidx);
   1569      1.3  mjacob 	ISP_IOXGET_8(isp, &src->ctp_reserved0, dst->ctp_reserved0);
   1570      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ctp_time, dst->ctp_time);
   1571      1.3  mjacob 	ISP_IOXGET_16(isp, &src->ctp_reserved1, dst->ctp_reserved1);
   1572      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ctp_rsp_cnt, dst->ctp_rsp_cnt);
   1573      1.1  mjacob 	for (i = 0; i < 5; i++) {
   1574  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->ctp_reserved2[i], dst->ctp_reserved2[i]);
   1575      1.1  mjacob 	}
   1576      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ctp_rsp_bcnt, dst->ctp_rsp_bcnt);
   1577      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ctp_cmd_bcnt, dst->ctp_cmd_bcnt);
   1578      1.1  mjacob 	for (i = 0; i < 2; i++) {
   1579  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_base, dst->ctp_dataseg[i].ds_base);
   1580  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_basehi, dst->ctp_dataseg[i].ds_basehi);
   1581  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_count, dst->ctp_dataseg[i].ds_count);
   1582      1.1  mjacob 	}
   1583      1.1  mjacob }
   1584      1.1  mjacob 
   1585      1.1  mjacob void
   1586      1.1  mjacob isp_get_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst)
   1587      1.1  mjacob {
   1588      1.1  mjacob 	int i;
   1589      1.1  mjacob 
   1590      1.1  mjacob 	isp_get_hdr(isp, &src->ms_header, &dst->ms_header);
   1591      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ms_handle, dst->ms_handle);
   1592      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ms_nphdl, dst->ms_nphdl);
   1593      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ms_status, dst->ms_status);
   1594      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ms_flags, dst->ms_flags);
   1595      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ms_reserved1, dst->ms_reserved1);
   1596      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ms_time, dst->ms_time);
   1597      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ms_cmd_cnt, dst->ms_cmd_cnt);
   1598      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ms_tot_cnt, dst->ms_tot_cnt);
   1599      1.1  mjacob 	ISP_IOXGET_8(isp, &src->ms_type, dst->ms_type);
   1600      1.1  mjacob 	ISP_IOXGET_8(isp, &src->ms_r_ctl, dst->ms_r_ctl);
   1601      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ms_rxid, dst->ms_rxid);
   1602      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ms_reserved2, dst->ms_reserved2);
   1603      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ms_rsp_bcnt, dst->ms_rsp_bcnt);
   1604      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ms_cmd_bcnt, dst->ms_cmd_bcnt);
   1605      1.1  mjacob 	for (i = 0; i < 2; i++) {
   1606  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_base, dst->ms_dataseg[i].ds_base);
   1607  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_basehi, dst->ms_dataseg[i].ds_basehi);
   1608  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_count, dst->ms_dataseg[i].ds_count);
   1609      1.1  mjacob 	}
   1610      1.1  mjacob }
   1611      1.1  mjacob 
   1612      1.1  mjacob void
   1613      1.1  mjacob isp_put_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst)
   1614      1.1  mjacob {
   1615      1.1  mjacob 	int i;
   1616      1.1  mjacob 
   1617      1.1  mjacob 	isp_put_hdr(isp, &src->ctp_header, &dst->ctp_header);
   1618      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ctp_handle, &dst->ctp_handle);
   1619      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ctp_status, &dst->ctp_status);
   1620      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ctp_nphdl, &dst->ctp_nphdl);
   1621      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ctp_cmd_cnt, &dst->ctp_cmd_cnt);
   1622      1.3  mjacob 	ISP_IOXPUT_8(isp, src->ctp_vpidx, &dst->ctp_vpidx);
   1623      1.3  mjacob 	ISP_IOXPUT_8(isp, src->ctp_reserved0, &dst->ctp_reserved0);
   1624      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ctp_time, &dst->ctp_time);
   1625      1.3  mjacob 	ISP_IOXPUT_16(isp, src->ctp_reserved1, &dst->ctp_reserved1);
   1626      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ctp_rsp_cnt, &dst->ctp_rsp_cnt);
   1627      1.1  mjacob 	for (i = 0; i < 5; i++) {
   1628  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->ctp_reserved2[i], &dst->ctp_reserved2[i]);
   1629      1.1  mjacob 	}
   1630      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ctp_rsp_bcnt, &dst->ctp_rsp_bcnt);
   1631      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ctp_cmd_bcnt, &dst->ctp_cmd_bcnt);
   1632      1.1  mjacob 	for (i = 0; i < 2; i++) {
   1633  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_base, &dst->ctp_dataseg[i].ds_base);
   1634  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_basehi, &dst->ctp_dataseg[i].ds_basehi);
   1635  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_count, &dst->ctp_dataseg[i].ds_count);
   1636      1.1  mjacob 	}
   1637      1.1  mjacob }
   1638      1.1  mjacob 
   1639      1.1  mjacob void
   1640      1.1  mjacob isp_put_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst)
   1641      1.1  mjacob {
   1642      1.1  mjacob 	int i;
   1643      1.1  mjacob 
   1644      1.1  mjacob 	isp_put_hdr(isp, &src->ms_header, &dst->ms_header);
   1645      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ms_handle, &dst->ms_handle);
   1646      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ms_nphdl, &dst->ms_nphdl);
   1647      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ms_status, &dst->ms_status);
   1648      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ms_flags, &dst->ms_flags);
   1649      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ms_reserved1, &dst->ms_reserved1);
   1650      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ms_time, &dst->ms_time);
   1651      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ms_cmd_cnt, &dst->ms_cmd_cnt);
   1652      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ms_tot_cnt, &dst->ms_tot_cnt);
   1653      1.1  mjacob 	ISP_IOXPUT_8(isp, src->ms_type, &dst->ms_type);
   1654      1.1  mjacob 	ISP_IOXPUT_8(isp, src->ms_r_ctl, &dst->ms_r_ctl);
   1655      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ms_rxid, &dst->ms_rxid);
   1656      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ms_reserved2, &dst->ms_reserved2);
   1657      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ms_rsp_bcnt, &dst->ms_rsp_bcnt);
   1658      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ms_cmd_bcnt, &dst->ms_cmd_bcnt);
   1659      1.1  mjacob 	for (i = 0; i < 2; i++) {
   1660  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_base, &dst->ms_dataseg[i].ds_base);
   1661  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_basehi, &dst->ms_dataseg[i].ds_basehi);
   1662  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_count, &dst->ms_dataseg[i].ds_count);
   1663      1.1  mjacob 	}
   1664      1.1  mjacob }
   1665      1.1  mjacob 
   1666      1.1  mjacob /*
   1667      1.1  mjacob  * Generic SNS request - not particularly useful since the per-command data
   1668      1.1  mjacob  * isn't always 16 bit words.
   1669      1.1  mjacob  */
   1670      1.1  mjacob void
   1671      1.1  mjacob isp_put_sns_request(ispsoftc_t *isp, sns_screq_t *src, sns_screq_t *dst)
   1672      1.1  mjacob {
   1673      1.1  mjacob 	int i, nw = (int) src->snscb_sblen;
   1674      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
   1675      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1676      1.1  mjacob 		ISP_IOXPUT_16(isp, src->snscb_addr[i], &dst->snscb_addr[i]);
   1677      1.1  mjacob 	}
   1678      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
   1679      1.1  mjacob 	for (i = 0; i < nw; i++) {
   1680      1.1  mjacob 		ISP_IOXPUT_16(isp, src->snscb_data[i], &dst->snscb_data[i]);
   1681      1.1  mjacob 	}
   1682      1.1  mjacob }
   1683      1.1  mjacob 
   1684      1.1  mjacob void
   1685  1.3.4.1    yamt isp_put_gid_ft_request(ispsoftc_t *isp, sns_gid_ft_req_t *src, sns_gid_ft_req_t *dst)
   1686      1.1  mjacob {
   1687      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
   1688      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
   1689      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
   1690      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
   1691      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
   1692      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
   1693      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
   1694      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
   1695      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
   1696      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2);
   1697      1.1  mjacob 	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
   1698      1.1  mjacob 	ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type);
   1699      1.1  mjacob }
   1700      1.1  mjacob 
   1701      1.1  mjacob void
   1702  1.3.4.1    yamt isp_put_gxn_id_request(ispsoftc_t *isp, sns_gxn_id_req_t *src, sns_gxn_id_req_t *dst)
   1703      1.1  mjacob {
   1704      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
   1705      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0);
   1706      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
   1707      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
   1708      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
   1709      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
   1710      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
   1711      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1);
   1712      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
   1713      1.1  mjacob 	ISP_IOXPUT_16(isp, src->snscb_reserved2, &dst->snscb_reserved2);
   1714      1.1  mjacob 	ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3);
   1715      1.1  mjacob 	ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid);
   1716      1.1  mjacob }
   1717      1.1  mjacob 
   1718      1.1  mjacob /*
   1719      1.1  mjacob  * Generic SNS response - not particularly useful since the per-command data
   1720      1.1  mjacob  * isn't always 16 bit words.
   1721      1.1  mjacob  */
   1722      1.1  mjacob void
   1723  1.3.4.1    yamt isp_get_sns_response(ispsoftc_t *isp, sns_scrsp_t *src, sns_scrsp_t *dst, int nwords)
   1724      1.1  mjacob {
   1725      1.1  mjacob 	int i;
   1726      1.1  mjacob 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
   1727      1.1  mjacob 	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
   1728      1.1  mjacob 	for (i = 0; i < 3; i++) {
   1729      1.1  mjacob 		ISP_IOXGET_8(isp, &src->snscb_port_id[i],
   1730      1.1  mjacob 		    dst->snscb_port_id[i]);
   1731      1.1  mjacob 	}
   1732      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1733      1.1  mjacob 		ISP_IOXGET_8(isp, &src->snscb_portname[i],
   1734      1.1  mjacob 		    dst->snscb_portname[i]);
   1735      1.1  mjacob 	}
   1736      1.1  mjacob 	for (i = 0; i < nwords; i++) {
   1737      1.1  mjacob 		ISP_IOXGET_16(isp, &src->snscb_data[i], dst->snscb_data[i]);
   1738      1.1  mjacob 	}
   1739      1.1  mjacob }
   1740      1.1  mjacob 
   1741      1.1  mjacob void
   1742  1.3.4.1    yamt isp_get_gid_ft_response(ispsoftc_t *isp, sns_gid_ft_rsp_t *src, sns_gid_ft_rsp_t *dst, int nwords)
   1743      1.1  mjacob {
   1744      1.1  mjacob 	int i;
   1745      1.1  mjacob 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
   1746      1.1  mjacob 	for (i = 0; i < nwords; i++) {
   1747      1.1  mjacob 		int j;
   1748  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->snscb_ports[i].control, dst->snscb_ports[i].control);
   1749      1.1  mjacob 		for (j = 0; j < 3; j++) {
   1750  1.3.4.1    yamt 			ISP_IOXGET_8(isp, &src->snscb_ports[i].portid[j], dst->snscb_ports[i].portid[j]);
   1751      1.1  mjacob 		}
   1752      1.1  mjacob 		if (dst->snscb_ports[i].control & 0x80) {
   1753      1.1  mjacob 			break;
   1754      1.1  mjacob 		}
   1755      1.1  mjacob 	}
   1756      1.1  mjacob }
   1757      1.1  mjacob 
   1758      1.1  mjacob void
   1759  1.3.4.1    yamt isp_get_gxn_id_response(ispsoftc_t *isp, sns_gxn_id_rsp_t *src, sns_gxn_id_rsp_t *dst)
   1760      1.1  mjacob {
   1761      1.1  mjacob 	int i;
   1762      1.1  mjacob 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
   1763  1.3.4.1    yamt 	for (i = 0; i < 8; i++) {
   1764      1.1  mjacob 		ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]);
   1765  1.3.4.1    yamt 	}
   1766      1.1  mjacob }
   1767      1.1  mjacob 
   1768      1.1  mjacob void
   1769  1.3.4.1    yamt isp_get_gff_id_response(ispsoftc_t *isp, sns_gff_id_rsp_t *src, sns_gff_id_rsp_t *dst)
   1770      1.1  mjacob {
   1771      1.1  mjacob 	int i;
   1772      1.1  mjacob 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
   1773      1.1  mjacob 	for (i = 0; i < 32; i++) {
   1774  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->snscb_fc4_features[i], dst->snscb_fc4_features[i]);
   1775      1.1  mjacob 	}
   1776      1.1  mjacob }
   1777      1.1  mjacob 
   1778      1.1  mjacob void
   1779  1.3.4.1    yamt isp_get_ga_nxt_response(ispsoftc_t *isp, sns_ga_nxt_rsp_t *src, sns_ga_nxt_rsp_t *dst)
   1780      1.1  mjacob {
   1781      1.1  mjacob 	int i;
   1782      1.1  mjacob 	isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
   1783      1.1  mjacob 	ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
   1784      1.1  mjacob 	for (i = 0; i < 3; i++) {
   1785  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->snscb_port_id[i], dst->snscb_port_id[i]);
   1786      1.1  mjacob 	}
   1787      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1788  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->snscb_portname[i], dst->snscb_portname[i]);
   1789      1.1  mjacob 	}
   1790      1.1  mjacob 	ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen);
   1791      1.1  mjacob 	for (i = 0; i < 255; i++) {
   1792      1.1  mjacob 		ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]);
   1793      1.1  mjacob 	}
   1794      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1795  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->snscb_nodename[i], dst->snscb_nodename[i]);
   1796      1.1  mjacob 	}
   1797      1.1  mjacob 	ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen);
   1798      1.1  mjacob 	for (i = 0; i < 255; i++) {
   1799      1.1  mjacob 		ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]);
   1800      1.1  mjacob 	}
   1801      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1802  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->snscb_ipassoc[i], dst->snscb_ipassoc[i]);
   1803      1.1  mjacob 	}
   1804      1.1  mjacob 	for (i = 0; i < 16; i++) {
   1805      1.1  mjacob 		ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]);
   1806      1.1  mjacob 	}
   1807      1.1  mjacob 	for (i = 0; i < 4; i++) {
   1808  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->snscb_svc_class[i], dst->snscb_svc_class[i]);
   1809      1.1  mjacob 	}
   1810      1.1  mjacob 	for (i = 0; i < 32; i++) {
   1811  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->snscb_fc4_types[i], dst->snscb_fc4_types[i]);
   1812      1.1  mjacob 	}
   1813      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1814      1.1  mjacob 		ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]);
   1815      1.1  mjacob 	}
   1816      1.1  mjacob 	ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved);
   1817      1.1  mjacob 	for (i = 0; i < 3; i++) {
   1818  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->snscb_hardaddr[i], dst->snscb_hardaddr[i]);
   1819      1.1  mjacob 	}
   1820      1.1  mjacob }
   1821      1.1  mjacob 
   1822      1.1  mjacob void
   1823      1.1  mjacob isp_get_els(ispsoftc_t *isp, els_t *src, els_t *dst)
   1824      1.1  mjacob {
   1825      1.1  mjacob 	int i;
   1826      1.1  mjacob 
   1827      1.1  mjacob 	isp_get_hdr(isp, &src->els_hdr, &dst->els_hdr);
   1828      1.1  mjacob 	ISP_IOXGET_32(isp, &src->els_handle, dst->els_handle);
   1829      1.1  mjacob 	ISP_IOXGET_16(isp, &src->els_status, dst->els_status);
   1830      1.1  mjacob 	ISP_IOXGET_16(isp, &src->els_nphdl, dst->els_nphdl);
   1831      1.1  mjacob 	ISP_IOXGET_16(isp, &src->els_xmit_dsd_count, dst->els_xmit_dsd_count);
   1832      1.1  mjacob 	ISP_IOXGET_8(isp, &src->els_vphdl, dst->els_vphdl);
   1833      1.1  mjacob 	ISP_IOXGET_8(isp, &src->els_sof, dst->els_sof);
   1834      1.1  mjacob 	ISP_IOXGET_32(isp, &src->els_rxid, dst->els_rxid);
   1835      1.1  mjacob 	ISP_IOXGET_16(isp, &src->els_recv_dsd_count, dst->els_recv_dsd_count);
   1836      1.1  mjacob 	ISP_IOXGET_8(isp, &src->els_opcode, dst->els_opcode);
   1837      1.1  mjacob 	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved1);
   1838      1.1  mjacob 	ISP_IOXGET_8(isp, &src->els_did_lo, dst->els_did_lo);
   1839      1.1  mjacob 	ISP_IOXGET_8(isp, &src->els_did_mid, dst->els_did_mid);
   1840      1.1  mjacob 	ISP_IOXGET_8(isp, &src->els_did_hi, dst->els_did_hi);
   1841      1.1  mjacob 	ISP_IOXGET_8(isp, &src->els_reserved2, dst->els_reserved2);
   1842      1.1  mjacob 	ISP_IOXGET_16(isp, &src->els_reserved3, dst->els_reserved3);
   1843      1.1  mjacob 	ISP_IOXGET_16(isp, &src->els_ctl_flags, dst->els_ctl_flags);
   1844      1.1  mjacob 	ISP_IOXGET_32(isp, &src->els_bytecnt, dst->els_bytecnt);
   1845      1.1  mjacob 	ISP_IOXGET_32(isp, &src->els_subcode1, dst->els_subcode1);
   1846      1.1  mjacob 	ISP_IOXGET_32(isp, &src->els_subcode2, dst->els_subcode2);
   1847      1.1  mjacob 	for (i = 0; i < 20; i++) {
   1848  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->els_reserved4[i], dst->els_reserved4[i]);
   1849      1.1  mjacob 	}
   1850      1.1  mjacob }
   1851      1.1  mjacob 
   1852      1.1  mjacob void
   1853      1.1  mjacob isp_put_els(ispsoftc_t *isp, els_t *src, els_t *dst)
   1854      1.1  mjacob {
   1855      1.1  mjacob 	isp_put_hdr(isp, &src->els_hdr, &dst->els_hdr);
   1856      1.1  mjacob 	ISP_IOXPUT_32(isp, src->els_handle, &dst->els_handle);
   1857      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_status, &dst->els_status);
   1858      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_nphdl, &dst->els_nphdl);
   1859      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_count, &dst->els_xmit_dsd_count);
   1860      1.1  mjacob 	ISP_IOXPUT_8(isp, src->els_vphdl, &dst->els_vphdl);
   1861      1.1  mjacob 	ISP_IOXPUT_8(isp, src->els_sof, &dst->els_sof);
   1862      1.1  mjacob 	ISP_IOXPUT_32(isp, src->els_rxid, &dst->els_rxid);
   1863      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_recv_dsd_count, &dst->els_recv_dsd_count);
   1864      1.1  mjacob 	ISP_IOXPUT_8(isp, src->els_opcode, &dst->els_opcode);
   1865      1.1  mjacob 	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved1);
   1866      1.1  mjacob 	ISP_IOXPUT_8(isp, src->els_did_lo, &dst->els_did_lo);
   1867      1.1  mjacob 	ISP_IOXPUT_8(isp, src->els_did_mid, &dst->els_did_mid);
   1868      1.1  mjacob 	ISP_IOXPUT_8(isp, src->els_did_hi, &dst->els_did_hi);
   1869      1.1  mjacob 	ISP_IOXPUT_8(isp, src->els_reserved2, &dst->els_reserved2);
   1870      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_reserved3, &dst->els_reserved3);
   1871      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_ctl_flags, &dst->els_ctl_flags);
   1872      1.1  mjacob 	ISP_IOXPUT_32(isp, src->els_recv_bytecnt, &dst->els_recv_bytecnt);
   1873      1.1  mjacob 	ISP_IOXPUT_32(isp, src->els_xmit_bytecnt, &dst->els_xmit_bytecnt);
   1874      1.1  mjacob 	ISP_IOXPUT_32(isp, src->els_xmit_dsd_length, &dst->els_xmit_dsd_length);
   1875      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a1500, &dst->els_xmit_dsd_a1500);
   1876      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a3116, &dst->els_xmit_dsd_a3116);
   1877      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a4732, &dst->els_xmit_dsd_a4732);
   1878      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_xmit_dsd_a6348, &dst->els_xmit_dsd_a6348);
   1879      1.1  mjacob 	ISP_IOXPUT_32(isp, src->els_recv_dsd_length, &dst->els_recv_dsd_length);
   1880      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_recv_dsd_a1500, &dst->els_recv_dsd_a1500);
   1881      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_recv_dsd_a3116, &dst->els_recv_dsd_a3116);
   1882      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_recv_dsd_a4732, &dst->els_recv_dsd_a4732);
   1883      1.1  mjacob 	ISP_IOXPUT_16(isp, src->els_recv_dsd_a6348, &dst->els_recv_dsd_a6348);
   1884      1.1  mjacob }
   1885      1.1  mjacob 
   1886      1.1  mjacob /*
   1887      1.1  mjacob  * FC Structure Canonicalization
   1888      1.1  mjacob  */
   1889      1.1  mjacob 
   1890      1.1  mjacob void
   1891      1.1  mjacob isp_get_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst)
   1892      1.1  mjacob {
   1893      1.1  mjacob         ISP_IOZGET_8(isp, &src->r_ctl, dst->r_ctl);
   1894      1.1  mjacob         ISP_IOZGET_8(isp, &src->d_id[0], dst->d_id[0]);
   1895      1.1  mjacob         ISP_IOZGET_8(isp, &src->d_id[1], dst->d_id[1]);
   1896      1.1  mjacob         ISP_IOZGET_8(isp, &src->d_id[2], dst->d_id[2]);
   1897      1.1  mjacob         ISP_IOZGET_8(isp, &src->cs_ctl, dst->cs_ctl);
   1898      1.1  mjacob         ISP_IOZGET_8(isp, &src->s_id[0], dst->s_id[0]);
   1899      1.1  mjacob         ISP_IOZGET_8(isp, &src->s_id[1], dst->s_id[1]);
   1900      1.1  mjacob         ISP_IOZGET_8(isp, &src->s_id[2], dst->s_id[2]);
   1901      1.1  mjacob         ISP_IOZGET_8(isp, &src->type, dst->type);
   1902  1.3.4.1    yamt         ISP_IOZGET_8(isp, &src->f_ctl[0], dst->f_ctl[0]);
   1903  1.3.4.1    yamt         ISP_IOZGET_8(isp, &src->f_ctl[1], dst->f_ctl[1]);
   1904  1.3.4.1    yamt         ISP_IOZGET_8(isp, &src->f_ctl[2], dst->f_ctl[2]);
   1905      1.1  mjacob         ISP_IOZGET_8(isp, &src->seq_id, dst->seq_id);
   1906      1.1  mjacob         ISP_IOZGET_8(isp, &src->df_ctl, dst->df_ctl);
   1907      1.1  mjacob         ISP_IOZGET_16(isp, &src->seq_cnt, dst->seq_cnt);
   1908  1.3.4.1    yamt         ISP_IOZGET_16(isp, &src->ox_id, dst->ox_id);
   1909  1.3.4.1    yamt         ISP_IOZGET_16(isp, &src->rx_id, dst->rx_id);
   1910      1.1  mjacob         ISP_IOZGET_32(isp, &src->parameter, dst->parameter);
   1911      1.1  mjacob }
   1912      1.1  mjacob 
   1913      1.1  mjacob void
   1914      1.1  mjacob isp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *dst)
   1915      1.1  mjacob {
   1916      1.1  mjacob 	int i;
   1917      1.1  mjacob 
   1918      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1919      1.1  mjacob 		ISP_IOZGET_8(isp, &src->fcp_cmnd_lun[i], dst->fcp_cmnd_lun[i]);
   1920      1.1  mjacob 	}
   1921      1.1  mjacob         ISP_IOZGET_8(isp, &src->fcp_cmnd_crn, dst->fcp_cmnd_crn);
   1922  1.3.4.1    yamt         ISP_IOZGET_8(isp, &src->fcp_cmnd_task_attribute, dst->fcp_cmnd_task_attribute);
   1923  1.3.4.1    yamt         ISP_IOZGET_8(isp, &src->fcp_cmnd_task_management, dst->fcp_cmnd_task_management);
   1924  1.3.4.1    yamt         ISP_IOZGET_8(isp, &src->fcp_cmnd_alen_datadir, dst->fcp_cmnd_alen_datadir);
   1925      1.1  mjacob 	for (i = 0; i < 16; i++) {
   1926  1.3.4.1    yamt 		ISP_IOZGET_8(isp, &src->cdb_dl.sf.fcp_cmnd_cdb[i], dst->cdb_dl.sf.fcp_cmnd_cdb[i]);
   1927      1.1  mjacob 	}
   1928  1.3.4.1    yamt 	ISP_IOZGET_32(isp, &src->cdb_dl.sf.fcp_cmnd_dl, dst->cdb_dl.sf.fcp_cmnd_dl);
   1929      1.1  mjacob }
   1930      1.1  mjacob 
   1931      1.1  mjacob void
   1932      1.1  mjacob isp_put_rft_id(ispsoftc_t *isp, rft_id_t *src, rft_id_t *dst)
   1933      1.1  mjacob {
   1934      1.1  mjacob 	int i;
   1935      1.1  mjacob 	isp_put_ct_hdr(isp, &src->rftid_hdr, &dst->rftid_hdr);
   1936      1.1  mjacob 	ISP_IOZPUT_8(isp, src->rftid_reserved, &dst->rftid_reserved);
   1937      1.1  mjacob 	for (i = 0; i < 3; i++) {
   1938      1.1  mjacob 		ISP_IOZPUT_8(isp, src->rftid_portid[i], &dst->rftid_portid[i]);
   1939      1.1  mjacob 	}
   1940      1.1  mjacob 	for (i = 0; i < 8; i++) {
   1941  1.3.4.1    yamt 		ISP_IOZPUT_32(isp, src->rftid_fc4types[i], &dst->rftid_fc4types[i]);
   1942      1.1  mjacob 	}
   1943      1.1  mjacob }
   1944      1.1  mjacob 
   1945      1.1  mjacob void
   1946      1.1  mjacob isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
   1947      1.1  mjacob {
   1948      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_revision, dst->ct_revision);
   1949      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_in_id[0], dst->ct_in_id[0]);
   1950      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_in_id[1], dst->ct_in_id[1]);
   1951      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_in_id[2], dst->ct_in_id[2]);
   1952      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_fcs_type, dst->ct_fcs_type);
   1953      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_fcs_subtype, dst->ct_fcs_subtype);
   1954      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_options, dst->ct_options);
   1955      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_reserved0, dst->ct_reserved0);
   1956      1.1  mjacob 	ISP_IOZGET_16(isp, &src->ct_cmd_resp, dst->ct_cmd_resp);
   1957      1.1  mjacob 	ISP_IOZGET_16(isp, &src->ct_bcnt_resid, dst->ct_bcnt_resid);
   1958      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_reserved1, dst->ct_reserved1);
   1959      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_reason, dst->ct_reason);
   1960      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_explanation, dst->ct_explanation);
   1961      1.1  mjacob 	ISP_IOZGET_8(isp, &src->ct_vunique, dst->ct_vunique);
   1962      1.1  mjacob }
   1963      1.1  mjacob 
   1964      1.1  mjacob void
   1965      1.1  mjacob isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
   1966      1.1  mjacob {
   1967      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_revision, &dst->ct_revision);
   1968      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_in_id[0], &dst->ct_in_id[0]);
   1969      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_in_id[1], &dst->ct_in_id[1]);
   1970      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_in_id[2], &dst->ct_in_id[2]);
   1971      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_fcs_type, &dst->ct_fcs_type);
   1972      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_fcs_subtype, &dst->ct_fcs_subtype);
   1973      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_options, &dst->ct_options);
   1974      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_reserved0, &dst->ct_reserved0);
   1975      1.1  mjacob 	ISP_IOZPUT_16(isp, src->ct_cmd_resp, &dst->ct_cmd_resp);
   1976      1.1  mjacob 	ISP_IOZPUT_16(isp, src->ct_bcnt_resid, &dst->ct_bcnt_resid);
   1977      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_reserved1, &dst->ct_reserved1);
   1978      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_reason, &dst->ct_reason);
   1979      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_explanation, &dst->ct_explanation);
   1980      1.1  mjacob 	ISP_IOZPUT_8(isp, src->ct_vunique, &dst->ct_vunique);
   1981      1.1  mjacob }
   1982      1.1  mjacob 
   1983      1.1  mjacob #ifdef	ISP_TARGET_MODE
   1984  1.3.4.1    yamt 
   1985  1.3.4.1    yamt /*
   1986  1.3.4.1    yamt  * Command shipping- finish off first queue entry and do dma mapping and
   1987  1.3.4.1    yamt  * additional segments as needed.
   1988  1.3.4.1    yamt  *
   1989  1.3.4.1    yamt  * Called with the first queue entry at least partially filled out.
   1990  1.3.4.1    yamt  */
   1991  1.3.4.1    yamt int
   1992  1.3.4.1    yamt isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir, void *snsptr, uint32_t snslen)
   1993  1.3.4.1    yamt {
   1994  1.3.4.1    yamt 	uint8_t storage[QENTRY_LEN], storage2[QENTRY_LEN];
   1995  1.3.4.1    yamt 	uint8_t type, nqe;
   1996  1.3.4.1    yamt 	uint32_t seg, curseg, seglim, nxt, nxtnxt;
   1997  1.3.4.1    yamt 	ispds_t *dsp = NULL;
   1998  1.3.4.1    yamt 	ispds64_t *dsp64 = NULL;
   1999  1.3.4.1    yamt 	void *qe0, *qe1, *sqe = NULL;
   2000  1.3.4.1    yamt 
   2001  1.3.4.1    yamt 	qe0 = isp_getrqentry(isp);
   2002  1.3.4.1    yamt 	if (qe0 == NULL) {
   2003  1.3.4.1    yamt 		return (CMD_EAGAIN);
   2004  1.3.4.1    yamt 	}
   2005  1.3.4.1    yamt 	nxt = ISP_NXT_QENTRY(isp->isp_reqidx, RQUEST_QUEUE_LEN(isp));
   2006  1.3.4.1    yamt 
   2007  1.3.4.1    yamt 	type = ((isphdr_t *)fqe)->rqs_entry_type;
   2008  1.3.4.1    yamt 	nqe = 1;
   2009  1.3.4.1    yamt 	seglim = 0;
   2010  1.3.4.1    yamt 
   2011  1.3.4.1    yamt 	/*
   2012  1.3.4.1    yamt 	 * If we have no data to transmit, just copy the first IOCB and start it up.
   2013  1.3.4.1    yamt 	 */
   2014  1.3.4.1    yamt 	if (ddir != ISP_NOXFR) {
   2015  1.3.4.1    yamt 		/*
   2016  1.3.4.1    yamt 		 * First, figure out how many pieces of data to transfer and what kind and how many we can put into the first queue entry.
   2017  1.3.4.1    yamt 		 */
   2018  1.3.4.1    yamt 		switch (type) {
   2019  1.3.4.1    yamt 		case RQSTYPE_CTIO:
   2020  1.3.4.1    yamt 			dsp = ((ct_entry_t *)fqe)->ct_dataseg;
   2021  1.3.4.1    yamt 			seglim = ISP_RQDSEG;
   2022  1.3.4.1    yamt 			break;
   2023  1.3.4.1    yamt 		case RQSTYPE_CTIO2:
   2024  1.3.4.1    yamt 		case RQSTYPE_CTIO3:
   2025  1.3.4.1    yamt 		{
   2026  1.3.4.1    yamt 			ct2_entry_t *ct = fqe, *ct2 = (ct2_entry_t *) storage2;
   2027  1.3.4.1    yamt 			uint16_t swd = ct->rsp.m0.ct_scsi_status & 0xff;
   2028  1.3.4.1    yamt 
   2029  1.3.4.1    yamt 			if ((ct->ct_flags & CT2_SENDSTATUS) && (swd || ct->ct_resid)) {
   2030  1.3.4.1    yamt 				memcpy(ct2, ct, QENTRY_LEN);
   2031  1.3.4.1    yamt 				/*
   2032  1.3.4.1    yamt 				 * Clear fields from first CTIO2 that now need to be cleared
   2033  1.3.4.1    yamt 				 */
   2034  1.3.4.1    yamt 				ct->ct_header.rqs_seqno = 0;
   2035  1.3.4.1    yamt 				ct->ct_flags &= ~(CT2_SENDSTATUS|CT2_CCINCR|CT2_FASTPOST);
   2036  1.3.4.1    yamt 				ct->ct_resid = 0;
   2037  1.3.4.1    yamt 				ct->ct_syshandle = 0;
   2038  1.3.4.1    yamt 				ct->rsp.m0.ct_scsi_status = 0;
   2039  1.3.4.1    yamt 
   2040  1.3.4.1    yamt 				/*
   2041  1.3.4.1    yamt 				 * Reset fields in the second CTIO2 as appropriate.
   2042  1.3.4.1    yamt 				 */
   2043  1.3.4.1    yamt 				ct2->ct_flags &= ~(CT2_FLAG_MMASK|CT2_DATAMASK|CT2_FASTPOST);
   2044  1.3.4.1    yamt 				ct2->ct_flags |= CT2_NO_DATA|CT2_FLAG_MODE1;
   2045  1.3.4.1    yamt 				ct2->ct_seg_count = 0;
   2046  1.3.4.1    yamt 				ct2->ct_reloff = 0;
   2047  1.3.4.1    yamt 				memset(&ct2->rsp, 0, sizeof (ct2->rsp));
   2048  1.3.4.1    yamt 				if (swd == SCSI_CHECK && snsptr && snslen) {
   2049  1.3.4.1    yamt 					ct2->rsp.m1.ct_senselen = min(snslen, MAXRESPLEN);
   2050  1.3.4.1    yamt 					memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_senselen);
   2051  1.3.4.1    yamt 					swd |= CT2_SNSLEN_VALID;
   2052  1.3.4.1    yamt 				}
   2053  1.3.4.1    yamt 				if (ct2->ct_resid > 0) {
   2054  1.3.4.1    yamt 					swd |= CT2_DATA_UNDER;
   2055  1.3.4.1    yamt 				} else if (ct2->ct_resid < 0) {
   2056  1.3.4.1    yamt 					swd |= CT2_DATA_OVER;
   2057  1.3.4.1    yamt 				}
   2058  1.3.4.1    yamt 				ct2->rsp.m1.ct_scsi_status = swd;
   2059  1.3.4.1    yamt 				sqe = storage2;
   2060  1.3.4.1    yamt 			}
   2061  1.3.4.1    yamt 			if (type == RQSTYPE_CTIO2) {
   2062  1.3.4.1    yamt 				dsp = ct->rsp.m0.u.ct_dataseg;
   2063  1.3.4.1    yamt 				seglim = ISP_RQDSEG_T2;
   2064  1.3.4.1    yamt 			} else {
   2065  1.3.4.1    yamt 				dsp64 = ct->rsp.m0.u.ct_dataseg64;
   2066  1.3.4.1    yamt 				seglim = ISP_RQDSEG_T3;
   2067  1.3.4.1    yamt 			}
   2068  1.3.4.1    yamt 			break;
   2069  1.3.4.1    yamt 		}
   2070  1.3.4.1    yamt 		case RQSTYPE_CTIO7:
   2071  1.3.4.1    yamt 		{
   2072  1.3.4.1    yamt 			ct7_entry_t *ct = fqe, *ct2 = (ct7_entry_t *)storage2;
   2073  1.3.4.1    yamt 			uint16_t swd = ct->ct_scsi_status & 0xff;
   2074  1.3.4.1    yamt 
   2075  1.3.4.1    yamt 			dsp64 = &ct->rsp.m0.ds;
   2076  1.3.4.1    yamt 			seglim = 1;
   2077  1.3.4.1    yamt 			if ((ct->ct_flags & CT7_SENDSTATUS) && (swd || ct->ct_resid)) {
   2078  1.3.4.1    yamt 				memcpy(ct2, ct, sizeof (ct7_entry_t));
   2079  1.3.4.1    yamt 
   2080  1.3.4.1    yamt 				/*
   2081  1.3.4.1    yamt 				 * Clear fields from first CTIO7 that now need to be cleared
   2082  1.3.4.1    yamt 				 */
   2083  1.3.4.1    yamt 				ct->ct_header.rqs_seqno = 0;
   2084  1.3.4.1    yamt 				ct->ct_flags &= ~CT7_SENDSTATUS;
   2085  1.3.4.1    yamt 				ct->ct_resid = 0;
   2086  1.3.4.1    yamt 				ct->ct_syshandle = 0;
   2087  1.3.4.1    yamt 				ct->ct_scsi_status = 0;
   2088  1.3.4.1    yamt 
   2089  1.3.4.1    yamt 				/*
   2090  1.3.4.1    yamt 				 * Reset fields in the second CTIO7 as appropriate.
   2091  1.3.4.1    yamt 				 */
   2092  1.3.4.1    yamt 				ct2->ct_flags &= ~(CT7_FLAG_MMASK|CT7_DATAMASK);
   2093  1.3.4.1    yamt 				ct2->ct_flags |= CT7_NO_DATA|CT7_NO_DATA|CT7_FLAG_MODE1;
   2094  1.3.4.1    yamt 				ct2->ct_seg_count = 0;
   2095  1.3.4.1    yamt 				memset(&ct2->rsp, 0, sizeof (ct2->rsp));
   2096  1.3.4.1    yamt 				if (swd == SCSI_CHECK && snsptr && snslen) {
   2097  1.3.4.1    yamt 					ct2->rsp.m1.ct_resplen = min(snslen, MAXRESPLEN_24XX);
   2098  1.3.4.1    yamt 					memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_resplen);
   2099  1.3.4.1    yamt 					swd |= (FCP_SNSLEN_VALID << 8);
   2100  1.3.4.1    yamt 				}
   2101  1.3.4.1    yamt 				if (ct2->ct_resid < 0) {
   2102  1.3.4.1    yamt 					swd |= (FCP_RESID_OVERFLOW << 8);
   2103  1.3.4.1    yamt 				} else if (ct2->ct_resid > 0) {
   2104  1.3.4.1    yamt 					swd |= (FCP_RESID_UNDERFLOW << 8);
   2105  1.3.4.1    yamt 				}
   2106  1.3.4.1    yamt 				ct2->ct_scsi_status = swd;
   2107  1.3.4.1    yamt 				sqe = storage2;
   2108  1.3.4.1    yamt 			}
   2109  1.3.4.1    yamt 			break;
   2110  1.3.4.1    yamt 		}
   2111  1.3.4.1    yamt 		default:
   2112  1.3.4.1    yamt 			return (CMD_COMPLETE);
   2113  1.3.4.1    yamt 		}
   2114  1.3.4.1    yamt 	}
   2115  1.3.4.1    yamt 
   2116  1.3.4.1    yamt 	/*
   2117  1.3.4.1    yamt 	 * Fill out the data transfer stuff in the first queue entry
   2118  1.3.4.1    yamt 	 */
   2119  1.3.4.1    yamt 	if (seglim > nsegs) {
   2120  1.3.4.1    yamt 		seglim = nsegs;
   2121  1.3.4.1    yamt 	}
   2122  1.3.4.1    yamt 
   2123  1.3.4.1    yamt 	for (seg = curseg = 0; curseg < seglim; curseg++) {
   2124  1.3.4.1    yamt 		if (dsp64) {
   2125  1.3.4.1    yamt 			XS_GET_DMA64_SEG(dsp64++, segp, seg++);
   2126  1.3.4.1    yamt 		} else {
   2127  1.3.4.1    yamt 			XS_GET_DMA_SEG(dsp++, segp, seg++);
   2128  1.3.4.1    yamt 		}
   2129  1.3.4.1    yamt 	}
   2130  1.3.4.1    yamt 
   2131  1.3.4.1    yamt 	/*
   2132  1.3.4.1    yamt 	 * First, if we are sending status with data and we have a non-zero
   2133  1.3.4.1    yamt 	 * status or non-zero residual, we have to make a synthetic extra CTIO
   2134  1.3.4.1    yamt 	 * that contains the status that we'll ship separately (FC cards only).
   2135  1.3.4.1    yamt 	 */
   2136  1.3.4.1    yamt 
   2137  1.3.4.1    yamt 	/*
   2138  1.3.4.1    yamt 	 * Second, start building additional continuation segments as needed.
   2139  1.3.4.1    yamt 	 */
   2140  1.3.4.1    yamt 	while (seg < nsegs) {
   2141  1.3.4.1    yamt 		nxtnxt = ISP_NXT_QENTRY(nxt, RQUEST_QUEUE_LEN(isp));
   2142  1.3.4.1    yamt 		if (nxtnxt == isp->isp_reqodx) {
   2143  1.3.4.1    yamt 			return (CMD_EAGAIN);
   2144  1.3.4.1    yamt 		}
   2145  1.3.4.1    yamt 		ISP_MEMZERO(storage, QENTRY_LEN);
   2146  1.3.4.1    yamt 		qe1 = ISP_QUEUE_ENTRY(isp->isp_rquest, nxt);
   2147  1.3.4.1    yamt 		nxt = nxtnxt;
   2148  1.3.4.1    yamt 		if (dsp64) {
   2149  1.3.4.1    yamt 			ispcontreq64_t *crq = (ispcontreq64_t *) storage;
   2150  1.3.4.1    yamt 			seglim = ISP_CDSEG64;
   2151  1.3.4.1    yamt 			crq->req_header.rqs_entry_type = RQSTYPE_A64_CONT;
   2152  1.3.4.1    yamt 			crq->req_header.rqs_entry_count = 1;
   2153  1.3.4.1    yamt 			dsp64 = crq->req_dataseg;
   2154  1.3.4.1    yamt 		} else {
   2155  1.3.4.1    yamt 			ispcontreq_t *crq = (ispcontreq_t *) storage;
   2156  1.3.4.1    yamt 			seglim = ISP_CDSEG;
   2157  1.3.4.1    yamt 			crq->req_header.rqs_entry_type = RQSTYPE_DATASEG;
   2158  1.3.4.1    yamt 			crq->req_header.rqs_entry_count = 1;
   2159  1.3.4.1    yamt 			dsp = crq->req_dataseg;
   2160  1.3.4.1    yamt 		}
   2161  1.3.4.1    yamt 		if (seg + seglim > nsegs) {
   2162  1.3.4.1    yamt 			seglim = nsegs - seg;
   2163  1.3.4.1    yamt 		}
   2164  1.3.4.1    yamt 		for (curseg = 0; curseg < seglim; curseg++) {
   2165  1.3.4.1    yamt 			if (dsp64) {
   2166  1.3.4.1    yamt 				XS_GET_DMA64_SEG(dsp64++, segp, seg++);
   2167  1.3.4.1    yamt 			} else {
   2168  1.3.4.1    yamt 				XS_GET_DMA_SEG(dsp++, segp, seg++);
   2169  1.3.4.1    yamt 			}
   2170  1.3.4.1    yamt 		}
   2171  1.3.4.1    yamt 		if (dsp64) {
   2172  1.3.4.1    yamt 			isp_put_cont64_req(isp, (ispcontreq64_t *)storage, qe1);
   2173  1.3.4.1    yamt 		} else {
   2174  1.3.4.1    yamt 			isp_put_cont_req(isp, (ispcontreq_t *)storage, qe1);
   2175  1.3.4.1    yamt 		}
   2176  1.3.4.1    yamt 		if (isp->isp_dblev & ISP_LOGTDEBUG1) {
   2177  1.3.4.1    yamt 			isp_print_bytes(isp, "additional queue entry", QENTRY_LEN, storage);
   2178  1.3.4.1    yamt 		}
   2179  1.3.4.1    yamt 		nqe++;
   2180  1.3.4.1    yamt         }
   2181  1.3.4.1    yamt 
   2182  1.3.4.1    yamt 	/*
   2183  1.3.4.1    yamt 	 * If we have a synthetic queue entry to complete things, do it here.
   2184  1.3.4.1    yamt 	 */
   2185  1.3.4.1    yamt 	if (sqe) {
   2186  1.3.4.1    yamt 		nxtnxt = ISP_NXT_QENTRY(nxt, RQUEST_QUEUE_LEN(isp));
   2187  1.3.4.1    yamt 		if (nxtnxt == isp->isp_reqodx) {
   2188  1.3.4.1    yamt 			return (CMD_EAGAIN);
   2189  1.3.4.1    yamt 		}
   2190  1.3.4.1    yamt 		qe1 = ISP_QUEUE_ENTRY(isp->isp_rquest, nxt);
   2191  1.3.4.1    yamt 		nxt = nxtnxt;
   2192  1.3.4.1    yamt 		if (type == RQSTYPE_CTIO7) {
   2193  1.3.4.1    yamt 			isp_put_ctio7(isp, sqe, qe1);
   2194  1.3.4.1    yamt 		} else {
   2195  1.3.4.1    yamt 			isp_put_ctio2(isp, sqe, qe1);
   2196  1.3.4.1    yamt 		}
   2197  1.3.4.1    yamt 		if (isp->isp_dblev & ISP_LOGTDEBUG1) {
   2198  1.3.4.1    yamt 			isp_print_bytes(isp, "synthetic final queue entry", QENTRY_LEN, storage2);
   2199  1.3.4.1    yamt 		}
   2200  1.3.4.1    yamt 	}
   2201  1.3.4.1    yamt 
   2202  1.3.4.1    yamt 	((isphdr_t *)fqe)->rqs_entry_count = nqe;
   2203  1.3.4.1    yamt 	switch (type) {
   2204  1.3.4.1    yamt 	case RQSTYPE_CTIO:
   2205  1.3.4.1    yamt 		((ct_entry_t *)fqe)->ct_seg_count = nsegs;
   2206  1.3.4.1    yamt 		isp_put_ctio(isp, fqe, qe0);
   2207  1.3.4.1    yamt 		break;
   2208  1.3.4.1    yamt 	case RQSTYPE_CTIO2:
   2209  1.3.4.1    yamt 	case RQSTYPE_CTIO3:
   2210  1.3.4.1    yamt 		((ct2_entry_t *)fqe)->ct_seg_count = nsegs;
   2211  1.3.4.1    yamt 		if (ISP_CAP_2KLOGIN(isp)) {
   2212  1.3.4.1    yamt 			isp_put_ctio2e(isp, fqe, qe0);
   2213  1.3.4.1    yamt 		} else {
   2214  1.3.4.1    yamt 			isp_put_ctio2(isp, fqe, qe0);
   2215  1.3.4.1    yamt 		}
   2216  1.3.4.1    yamt 		break;
   2217  1.3.4.1    yamt 	case RQSTYPE_CTIO7:
   2218  1.3.4.1    yamt 		((ct7_entry_t *)fqe)->ct_seg_count = nsegs;
   2219  1.3.4.1    yamt 		isp_put_ctio7(isp, fqe, qe0);
   2220  1.3.4.1    yamt 		break;
   2221  1.3.4.1    yamt 	default:
   2222  1.3.4.1    yamt 		return (CMD_COMPLETE);
   2223  1.3.4.1    yamt 	}
   2224  1.3.4.1    yamt 	if (isp->isp_dblev & ISP_LOGTDEBUG1) {
   2225  1.3.4.1    yamt 		isp_print_bytes(isp, "first queue entry", QENTRY_LEN, fqe);
   2226  1.3.4.1    yamt 	}
   2227  1.3.4.1    yamt 	ISP_ADD_REQUEST(isp, nxt);
   2228  1.3.4.1    yamt 	return (CMD_QUEUED);
   2229  1.3.4.1    yamt }
   2230  1.3.4.1    yamt 
   2231      1.1  mjacob int
   2232      1.1  mjacob isp_save_xs_tgt(ispsoftc_t *isp, void *xs, uint32_t *handlep)
   2233      1.1  mjacob {
   2234      1.1  mjacob 	int i;
   2235      1.1  mjacob 
   2236      1.1  mjacob 	for (i = 0; i < (int) isp->isp_maxcmds; i++) {
   2237      1.1  mjacob 		if (isp->isp_tgtlist[i] == NULL) {
   2238      1.1  mjacob 			break;
   2239      1.1  mjacob 		}
   2240      1.1  mjacob 	}
   2241      1.1  mjacob 	if (i == isp->isp_maxcmds) {
   2242      1.1  mjacob 		return (-1);
   2243      1.1  mjacob 	}
   2244      1.1  mjacob 	isp->isp_tgtlist[i] = xs;
   2245      1.1  mjacob 	*handlep = (i+1) | 0x8000;
   2246      1.1  mjacob 	return (0);
   2247      1.1  mjacob }
   2248      1.1  mjacob 
   2249      1.1  mjacob void *
   2250      1.1  mjacob isp_find_xs_tgt(ispsoftc_t *isp, uint32_t handle)
   2251      1.1  mjacob {
   2252  1.3.4.1    yamt 	if (handle == 0 || IS_TARGET_HANDLE(handle) == 0 || (handle & ISP_HANDLE_MASK) > isp->isp_maxcmds) {
   2253  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGERR, "bad handle %u in isp_find_xs_tgt", handle);
   2254      1.1  mjacob 		return (NULL);
   2255      1.1  mjacob 	} else {
   2256      1.1  mjacob 		return (isp->isp_tgtlist[(handle & ISP_HANDLE_MASK) - 1]);
   2257      1.1  mjacob 	}
   2258      1.1  mjacob }
   2259      1.1  mjacob 
   2260      1.1  mjacob uint32_t
   2261      1.1  mjacob isp_find_tgt_handle(ispsoftc_t *isp, void *xs)
   2262      1.1  mjacob {
   2263      1.1  mjacob 	int i;
   2264      1.1  mjacob 	if (xs != NULL) {
   2265      1.1  mjacob 		for (i = 0; i < isp->isp_maxcmds; i++) {
   2266      1.1  mjacob 			if (isp->isp_tgtlist[i] == xs) {
   2267  1.3.4.1    yamt 				uint32_t handle = i;
   2268  1.3.4.1    yamt 				handle += 1;
   2269  1.3.4.1    yamt 				handle &= ISP_HANDLE_MASK;
   2270  1.3.4.1    yamt 				handle |= 0x8000;
   2271  1.3.4.1    yamt 				return (handle);
   2272      1.1  mjacob 			}
   2273      1.1  mjacob 		}
   2274      1.1  mjacob 	}
   2275      1.1  mjacob 	return (0);
   2276      1.1  mjacob }
   2277      1.1  mjacob 
   2278      1.1  mjacob void
   2279      1.1  mjacob isp_destroy_tgt_handle(ispsoftc_t *isp, uint32_t handle)
   2280      1.1  mjacob {
   2281  1.3.4.1    yamt 	if (handle == 0 || IS_TARGET_HANDLE(handle) == 0 || (handle & ISP_HANDLE_MASK) > isp->isp_maxcmds) {
   2282  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGERR, "bad handle in isp_destroy_tgt_handle");
   2283      1.1  mjacob 	} else {
   2284      1.1  mjacob 		isp->isp_tgtlist[(handle & ISP_HANDLE_MASK) - 1] = NULL;
   2285      1.1  mjacob 	}
   2286      1.1  mjacob }
   2287      1.1  mjacob 
   2288  1.3.4.1    yamt /*
   2289  1.3.4.1    yamt  * Find target mode entries
   2290  1.3.4.1    yamt  */
   2291  1.3.4.1    yamt int
   2292  1.3.4.1    yamt isp_find_pdb_by_wwn(ispsoftc_t *isp, int chan, uint64_t wwn, fcportdb_t **lptr)
   2293  1.3.4.1    yamt {
   2294  1.3.4.1    yamt 	fcparam *fcp;
   2295  1.3.4.1    yamt 	int i;
   2296  1.3.4.1    yamt 
   2297  1.3.4.1    yamt 	if (chan < isp->isp_nchan) {
   2298  1.3.4.1    yamt 		fcp = FCPARAM(isp, chan);
   2299  1.3.4.1    yamt 		for (i = 0; i < MAX_FC_TARG; i++) {
   2300  1.3.4.1    yamt 			fcportdb_t *lp = &fcp->portdb[i];
   2301  1.3.4.1    yamt 
   2302  1.3.4.1    yamt 			if (lp->target_mode == 0) {
   2303  1.3.4.1    yamt 				continue;
   2304  1.3.4.1    yamt 			}
   2305  1.3.4.1    yamt 			if (lp->port_wwn == wwn) {
   2306  1.3.4.1    yamt 				*lptr = lp;
   2307  1.3.4.1    yamt 				return (1);
   2308  1.3.4.1    yamt 			}
   2309  1.3.4.1    yamt 		}
   2310  1.3.4.1    yamt 	}
   2311  1.3.4.1    yamt 	return (0);
   2312  1.3.4.1    yamt }
   2313  1.3.4.1    yamt 
   2314  1.3.4.1    yamt int
   2315  1.3.4.1    yamt isp_find_pdb_by_loopid(ispsoftc_t *isp, int chan, uint32_t loopid, fcportdb_t **lptr)
   2316  1.3.4.1    yamt {
   2317  1.3.4.1    yamt 	fcparam *fcp;
   2318  1.3.4.1    yamt 	int i;
   2319  1.3.4.1    yamt 
   2320  1.3.4.1    yamt 	if (chan < isp->isp_nchan) {
   2321  1.3.4.1    yamt 		fcp = FCPARAM(isp, chan);
   2322  1.3.4.1    yamt 		for (i = 0; i < MAX_FC_TARG; i++) {
   2323  1.3.4.1    yamt 			fcportdb_t *lp = &fcp->portdb[i];
   2324  1.3.4.1    yamt 
   2325  1.3.4.1    yamt 			if (lp->target_mode == 0) {
   2326  1.3.4.1    yamt 				continue;
   2327  1.3.4.1    yamt 			}
   2328  1.3.4.1    yamt 			if (lp->handle == loopid) {
   2329  1.3.4.1    yamt 				*lptr = lp;
   2330  1.3.4.1    yamt 				return (1);
   2331  1.3.4.1    yamt 			}
   2332  1.3.4.1    yamt 		}
   2333  1.3.4.1    yamt 	}
   2334  1.3.4.1    yamt 	return (0);
   2335  1.3.4.1    yamt }
   2336  1.3.4.1    yamt 
   2337  1.3.4.1    yamt int
   2338  1.3.4.1    yamt isp_find_pdb_by_sid(ispsoftc_t *isp, int chan, uint32_t sid, fcportdb_t **lptr)
   2339  1.3.4.1    yamt {
   2340  1.3.4.1    yamt 	fcparam *fcp;
   2341  1.3.4.1    yamt 	int i;
   2342  1.3.4.1    yamt 
   2343  1.3.4.1    yamt 	if (chan >= isp->isp_nchan) {
   2344  1.3.4.1    yamt 		return (0);
   2345  1.3.4.1    yamt 	}
   2346  1.3.4.1    yamt 
   2347  1.3.4.1    yamt 	fcp = FCPARAM(isp, chan);
   2348  1.3.4.1    yamt 	for (i = 0; i < MAX_FC_TARG; i++) {
   2349  1.3.4.1    yamt 		fcportdb_t *lp = &fcp->portdb[i];
   2350  1.3.4.1    yamt 
   2351  1.3.4.1    yamt 		if (lp->target_mode == 0) {
   2352  1.3.4.1    yamt 			continue;
   2353  1.3.4.1    yamt 		}
   2354  1.3.4.1    yamt 		if (lp->portid == sid) {
   2355  1.3.4.1    yamt 			*lptr = lp;
   2356  1.3.4.1    yamt 			return (1);
   2357  1.3.4.1    yamt 		}
   2358  1.3.4.1    yamt 	}
   2359  1.3.4.1    yamt 	return (0);
   2360  1.3.4.1    yamt }
   2361  1.3.4.1    yamt 
   2362  1.3.4.1    yamt void
   2363  1.3.4.1    yamt isp_find_chan_by_did(ispsoftc_t *isp, uint32_t did, uint16_t *cp)
   2364  1.3.4.1    yamt {
   2365  1.3.4.1    yamt 	uint16_t chan;
   2366  1.3.4.1    yamt 
   2367  1.3.4.1    yamt 	*cp = ISP_NOCHAN;
   2368  1.3.4.1    yamt 	for (chan = 0; chan < isp->isp_nchan; chan++) {
   2369  1.3.4.1    yamt 		fcparam *fcp = FCPARAM(isp, chan);
   2370  1.3.4.1    yamt 		if ((fcp->role & ISP_ROLE_TARGET) == 0 || fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) {
   2371  1.3.4.1    yamt 			continue;
   2372  1.3.4.1    yamt 		}
   2373  1.3.4.1    yamt 		if (fcp->isp_portid == did) {
   2374  1.3.4.1    yamt 			*cp = chan;
   2375  1.3.4.1    yamt 			break;
   2376  1.3.4.1    yamt 		}
   2377  1.3.4.1    yamt 	}
   2378  1.3.4.1    yamt }
   2379  1.3.4.1    yamt 
   2380  1.3.4.1    yamt /*
   2381  1.3.4.1    yamt  * Add an initiator device to the port database
   2382  1.3.4.1    yamt  */
   2383  1.3.4.1    yamt void
   2384  1.3.4.1    yamt isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id)
   2385  1.3.4.1    yamt {
   2386  1.3.4.1    yamt 	fcparam *fcp;
   2387  1.3.4.1    yamt 	fcportdb_t *lp;
   2388  1.3.4.1    yamt 	isp_notify_t nt;
   2389  1.3.4.1    yamt 	int i;
   2390  1.3.4.1    yamt 
   2391  1.3.4.1    yamt 	fcp = FCPARAM(isp, chan);
   2392  1.3.4.1    yamt 
   2393  1.3.4.1    yamt 	if (nphdl >= MAX_NPORT_HANDLE) {
   2394  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x",
   2395  1.3.4.1    yamt 		    __func__, chan, (unsigned long long) ini, nphdl, s_id);
   2396  1.3.4.1    yamt 		return;
   2397  1.3.4.1    yamt 	}
   2398  1.3.4.1    yamt 
   2399  1.3.4.1    yamt 	lp = NULL;
   2400  1.3.4.1    yamt 	if (fcp->isp_tgt_map[nphdl]) {
   2401  1.3.4.1    yamt 		lp = &fcp->portdb[fcp->isp_tgt_map[nphdl] - 1];
   2402  1.3.4.1    yamt 	} else {
   2403  1.3.4.1    yamt 		/*
   2404  1.3.4.1    yamt 		 * Make sure the addition of a new target mode entry doesn't duplicate entries
   2405  1.3.4.1    yamt 		 * with the same N-Port handles, the same portids or the same Port WWN.
   2406  1.3.4.1    yamt 		 */
   2407  1.3.4.1    yamt 		for (i = 0; i < MAX_FC_TARG; i++) {
   2408  1.3.4.1    yamt 			lp = &fcp->portdb[i];
   2409  1.3.4.1    yamt 			if (lp->target_mode == 0) {
   2410  1.3.4.1    yamt 				lp = NULL;
   2411  1.3.4.1    yamt 				continue;
   2412  1.3.4.1    yamt 			}
   2413  1.3.4.1    yamt 			if (lp->handle == nphdl) {
   2414  1.3.4.1    yamt 				break;
   2415  1.3.4.1    yamt 			}
   2416  1.3.4.1    yamt 			if (s_id != PORT_ANY && lp->portid == s_id) {
   2417  1.3.4.1    yamt 				break;
   2418  1.3.4.1    yamt 			}
   2419  1.3.4.1    yamt 			if (VALID_INI(ini) && lp->port_wwn == ini) {
   2420  1.3.4.1    yamt 				break;
   2421  1.3.4.1    yamt 			}
   2422  1.3.4.1    yamt 			lp = NULL;
   2423  1.3.4.1    yamt 		}
   2424  1.3.4.1    yamt 
   2425  1.3.4.1    yamt 	}
   2426  1.3.4.1    yamt 
   2427  1.3.4.1    yamt 	if (lp) {
   2428  1.3.4.1    yamt 		int something = 0;
   2429  1.3.4.1    yamt 		if (lp->handle != nphdl) {
   2430  1.3.4.1    yamt 			isp_prt(isp, ISP_LOGWARN, "%s: Chan %d attempt to re-enter N-port handle 0x%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x",
   2431  1.3.4.1    yamt 			    __func__, chan, nphdl, (unsigned long long)ini, s_id, (unsigned long long) lp->port_wwn, lp->handle, lp->portid);
   2432  1.3.4.1    yamt 			isp_dump_portdb(isp, chan);
   2433  1.3.4.1    yamt 			return;
   2434  1.3.4.1    yamt 		}
   2435  1.3.4.1    yamt 		if (s_id != PORT_NONE) {
   2436  1.3.4.1    yamt 			if (lp->portid == PORT_NONE) {
   2437  1.3.4.1    yamt 				lp->portid = s_id;
   2438  1.3.4.1    yamt 				isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets Port ID 0x%06x", __func__, chan, nphdl, s_id);
   2439  1.3.4.1    yamt 				something++;
   2440  1.3.4.1    yamt 			} else if (lp->portid != s_id) {
   2441  1.3.4.1    yamt 				isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x tries to change Port ID 0x%06x to 0x%06x", __func__, chan, nphdl,
   2442  1.3.4.1    yamt 				    lp->portid, s_id);
   2443  1.3.4.1    yamt 				isp_dump_portdb(isp, chan);
   2444  1.3.4.1    yamt 				return;
   2445  1.3.4.1    yamt 			}
   2446  1.3.4.1    yamt 		}
   2447  1.3.4.1    yamt 		if (VALID_INI(ini)) {
   2448  1.3.4.1    yamt 			if (!VALID_INI(lp->port_wwn)) {
   2449  1.3.4.1    yamt 				lp->port_wwn = ini;
   2450  1.3.4.1    yamt 				isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets WWN 0x%016llxx", __func__, chan, nphdl, (unsigned long long) ini);
   2451  1.3.4.1    yamt 				something++;
   2452  1.3.4.1    yamt 			} else if (lp->port_wwn != ini) {
   2453  1.3.4.1    yamt 				isp_prt(isp, ISP_LOGWARN, "%s: Chan %d N-port handle 0x%04x tries to change WWN 0x%016llx to 0x%016llx", __func__, chan, nphdl,
   2454  1.3.4.1    yamt 				    (unsigned long long) lp->port_wwn, (unsigned long long) ini);
   2455  1.3.4.1    yamt 				isp_dump_portdb(isp, chan);
   2456  1.3.4.1    yamt 				return;
   2457  1.3.4.1    yamt 			}
   2458  1.3.4.1    yamt 		}
   2459  1.3.4.1    yamt 
   2460  1.3.4.1    yamt 		if (!something) {
   2461  1.3.4.1    yamt 			isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x reentered", __func__, chan,
   2462  1.3.4.1    yamt 			    (unsigned long long) lp->port_wwn, lp->handle, lp->portid);
   2463  1.3.4.1    yamt 		}
   2464  1.3.4.1    yamt 		return;
   2465  1.3.4.1    yamt 	}
   2466  1.3.4.1    yamt 
   2467  1.3.4.1    yamt 	/*
   2468  1.3.4.1    yamt 	 * Find a new spot
   2469  1.3.4.1    yamt 	 */
   2470  1.3.4.1    yamt 	for (i = MAX_FC_TARG - 1; i >= 0; i--) {
   2471  1.3.4.1    yamt 		if (fcp->portdb[i].target_mode == 1) {
   2472  1.3.4.1    yamt 			continue;
   2473  1.3.4.1    yamt 		}
   2474  1.3.4.1    yamt 		if (fcp->portdb[i].state == FC_PORTDB_STATE_NIL) {
   2475  1.3.4.1    yamt 			break;
   2476  1.3.4.1    yamt 		}
   2477  1.3.4.1    yamt 	}
   2478  1.3.4.1    yamt 	if (i < 0) {
   2479  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x- no room in port database",
   2480  1.3.4.1    yamt 		    __func__, chan, (unsigned long long) ini, nphdl, s_id);
   2481  1.3.4.1    yamt 		return;
   2482  1.3.4.1    yamt 	}
   2483  1.3.4.1    yamt 
   2484  1.3.4.1    yamt 	lp = &fcp->portdb[i];
   2485  1.3.4.1    yamt 	ISP_MEMZERO(lp, sizeof (fcportdb_t));
   2486  1.3.4.1    yamt 	lp->target_mode = 1;
   2487  1.3.4.1    yamt 	lp->handle = nphdl;
   2488  1.3.4.1    yamt 	lp->portid = s_id;
   2489  1.3.4.1    yamt 	lp->port_wwn = ini;
   2490  1.3.4.1    yamt 	fcp->isp_tgt_map[nphdl] = i + 1;
   2491  1.3.4.1    yamt 
   2492  1.3.4.1    yamt 	isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d added", __func__, chan, (unsigned long long) ini, nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1);
   2493  1.3.4.1    yamt 
   2494  1.3.4.1    yamt 	ISP_MEMZERO(&nt, sizeof (nt));
   2495  1.3.4.1    yamt 	nt.nt_hba = isp;
   2496  1.3.4.1    yamt 	nt.nt_wwn = ini;
   2497  1.3.4.1    yamt 	nt.nt_tgt = FCPARAM(isp, chan)->isp_wwpn;
   2498  1.3.4.1    yamt 	nt.nt_sid = s_id;
   2499  1.3.4.1    yamt 	nt.nt_did = FCPARAM(isp, chan)->isp_portid;
   2500  1.3.4.1    yamt 	nt.nt_nphdl = nphdl;
   2501  1.3.4.1    yamt 	nt.nt_channel = chan;
   2502  1.3.4.1    yamt 	nt.nt_ncode = NT_ARRIVED;
   2503  1.3.4.1    yamt 	isp_async(isp, ISPASYNC_TARGET_NOTIFY, &nt);
   2504  1.3.4.1    yamt }
   2505  1.3.4.1    yamt 
   2506  1.3.4.1    yamt /*
   2507  1.3.4.1    yamt  * Remove a target device to the port database
   2508  1.3.4.1    yamt  */
   2509  1.3.4.1    yamt void
   2510  1.3.4.1    yamt isp_del_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id)
   2511  1.3.4.1    yamt {
   2512  1.3.4.1    yamt 	fcparam *fcp;
   2513  1.3.4.1    yamt 	isp_notify_t nt;
   2514  1.3.4.1    yamt 	fcportdb_t *lp;
   2515  1.3.4.1    yamt 
   2516  1.3.4.1    yamt 	if (nphdl >= MAX_NPORT_HANDLE) {
   2517  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x",
   2518  1.3.4.1    yamt 		    __func__, chan, (unsigned long long) ini, nphdl, s_id);
   2519  1.3.4.1    yamt 		return;
   2520  1.3.4.1    yamt 	}
   2521  1.3.4.1    yamt 
   2522  1.3.4.1    yamt 	fcp = FCPARAM(isp, chan);
   2523  1.3.4.1    yamt 	if (fcp->isp_tgt_map[nphdl] == 0) {
   2524  1.3.4.1    yamt 		lp = NULL;
   2525  1.3.4.1    yamt 	} else {
   2526  1.3.4.1    yamt 		lp = &fcp->portdb[fcp->isp_tgt_map[nphdl] - 1];
   2527  1.3.4.1    yamt 		if (lp->target_mode == 0) {
   2528  1.3.4.1    yamt 			lp = NULL;
   2529  1.3.4.1    yamt 		}
   2530  1.3.4.1    yamt 	}
   2531  1.3.4.1    yamt 	if (lp == NULL) {
   2532  1.3.4.1    yamt 		isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x cannot be found to be cleared",
   2533  1.3.4.1    yamt 		    __func__, chan, (unsigned long long) ini, nphdl, s_id);
   2534  1.3.4.1    yamt 		isp_dump_portdb(isp, chan);
   2535  1.3.4.1    yamt 		return;
   2536  1.3.4.1    yamt 	}
   2537  1.3.4.1    yamt 	isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d cleared",
   2538  1.3.4.1    yamt 	    __func__, chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid, fcp->isp_tgt_map[nphdl] - 1);
   2539  1.3.4.1    yamt 	fcp->isp_tgt_map[nphdl] = 0;
   2540  1.3.4.1    yamt 
   2541  1.3.4.1    yamt 	ISP_MEMZERO(&nt, sizeof (nt));
   2542  1.3.4.1    yamt 	nt.nt_hba = isp;
   2543  1.3.4.1    yamt 	nt.nt_wwn = lp->port_wwn;
   2544  1.3.4.1    yamt 	nt.nt_tgt = FCPARAM(isp, chan)->isp_wwpn;
   2545  1.3.4.1    yamt 	nt.nt_sid = lp->portid;
   2546  1.3.4.1    yamt 	nt.nt_did = FCPARAM(isp, chan)->isp_portid;
   2547  1.3.4.1    yamt 	nt.nt_nphdl = nphdl;
   2548  1.3.4.1    yamt 	nt.nt_channel = chan;
   2549  1.3.4.1    yamt 	nt.nt_ncode = NT_DEPARTED;
   2550  1.3.4.1    yamt 	isp_async(isp, ISPASYNC_TARGET_NOTIFY, &nt);
   2551  1.3.4.1    yamt }
   2552  1.3.4.1    yamt 
   2553  1.3.4.1    yamt void
   2554  1.3.4.1    yamt isp_del_all_wwn_entries(ispsoftc_t *isp, int chan)
   2555  1.3.4.1    yamt {
   2556  1.3.4.1    yamt 	fcparam *fcp;
   2557  1.3.4.1    yamt 	int i;
   2558  1.3.4.1    yamt 
   2559  1.3.4.1    yamt 	if (!IS_FC(isp)) {
   2560  1.3.4.1    yamt 		return;
   2561  1.3.4.1    yamt 	}
   2562  1.3.4.1    yamt 
   2563  1.3.4.1    yamt 	/*
   2564  1.3.4.1    yamt 	 * Handle iterations over all channels via recursion
   2565  1.3.4.1    yamt 	 */
   2566  1.3.4.1    yamt 	if (chan == ISP_NOCHAN) {
   2567  1.3.4.1    yamt 		for (chan = 0; chan < isp->isp_nchan; chan++) {
   2568  1.3.4.1    yamt 			isp_del_all_wwn_entries(isp, chan);
   2569  1.3.4.1    yamt 		}
   2570  1.3.4.1    yamt 		return;
   2571  1.3.4.1    yamt 	}
   2572  1.3.4.1    yamt 
   2573  1.3.4.1    yamt 	if (chan > isp->isp_nchan) {
   2574  1.3.4.1    yamt 		return;
   2575  1.3.4.1    yamt 	}
   2576  1.3.4.1    yamt 
   2577  1.3.4.1    yamt 	fcp = FCPARAM(isp, chan);
   2578  1.3.4.1    yamt 	if (fcp == NULL) {
   2579  1.3.4.1    yamt 		return;
   2580  1.3.4.1    yamt 	}
   2581  1.3.4.1    yamt 	for (i = 0; i < MAX_NPORT_HANDLE; i++) {
   2582  1.3.4.1    yamt 		if (fcp->isp_tgt_map[i]) {
   2583  1.3.4.1    yamt 			fcportdb_t *lp = &fcp->portdb[fcp->isp_tgt_map[i] - 1];
   2584  1.3.4.1    yamt 			isp_del_wwn_entry(isp, chan, lp->port_wwn, lp->handle, lp->portid);
   2585  1.3.4.1    yamt 		}
   2586  1.3.4.1    yamt 	}
   2587  1.3.4.1    yamt }
   2588  1.3.4.1    yamt 
   2589  1.3.4.1    yamt void
   2590  1.3.4.1    yamt isp_del_wwn_entries(ispsoftc_t *isp, isp_notify_t *mp)
   2591  1.3.4.1    yamt {
   2592  1.3.4.1    yamt 	fcportdb_t *lp;
   2593  1.3.4.1    yamt 
   2594  1.3.4.1    yamt 	/*
   2595  1.3.4.1    yamt 	 * Handle iterations over all channels via recursion
   2596  1.3.4.1    yamt 	 */
   2597  1.3.4.1    yamt 	if (mp->nt_channel == ISP_NOCHAN) {
   2598  1.3.4.1    yamt 		for (mp->nt_channel = 0; mp->nt_channel < isp->isp_nchan; mp->nt_channel++) {
   2599  1.3.4.1    yamt 			isp_del_wwn_entries(isp, mp);
   2600  1.3.4.1    yamt 		}
   2601  1.3.4.1    yamt 		mp->nt_channel = ISP_NOCHAN;
   2602  1.3.4.1    yamt 		return;
   2603  1.3.4.1    yamt 	}
   2604  1.3.4.1    yamt 
   2605  1.3.4.1    yamt 	/*
   2606  1.3.4.1    yamt 	 * We have an entry which is only partially identified.
   2607  1.3.4.1    yamt 	 *
   2608  1.3.4.1    yamt 	 * It's only known by WWN, N-Port handle, or Port ID.
   2609  1.3.4.1    yamt 	 * We need to find the actual entry so we can delete it.
   2610  1.3.4.1    yamt 	 */
   2611  1.3.4.1    yamt 	if (mp->nt_nphdl != NIL_HANDLE) {
   2612  1.3.4.1    yamt 		if (isp_find_pdb_by_loopid(isp, mp->nt_channel, mp->nt_nphdl, &lp)) {
   2613  1.3.4.1    yamt 			isp_del_wwn_entry(isp, mp->nt_channel, lp->port_wwn, lp->handle, lp->portid);
   2614  1.3.4.1    yamt 			return;
   2615  1.3.4.1    yamt 		}
   2616  1.3.4.1    yamt 	}
   2617  1.3.4.1    yamt 	if (mp->nt_wwn != INI_ANY) {
   2618  1.3.4.1    yamt 		if (isp_find_pdb_by_wwn(isp, mp->nt_channel, mp->nt_wwn, &lp)) {
   2619  1.3.4.1    yamt 			isp_del_wwn_entry(isp, mp->nt_channel, lp->port_wwn, lp->handle, lp->portid);
   2620  1.3.4.1    yamt 			return;
   2621  1.3.4.1    yamt 		}
   2622  1.3.4.1    yamt 	}
   2623  1.3.4.1    yamt 	if (mp->nt_sid != PORT_ANY && mp->nt_sid != PORT_NONE) {
   2624  1.3.4.1    yamt 		if (isp_find_pdb_by_sid(isp, mp->nt_channel, mp->nt_sid, &lp)) {
   2625  1.3.4.1    yamt 			isp_del_wwn_entry(isp, mp->nt_channel, lp->port_wwn, lp->handle, lp->portid);
   2626  1.3.4.1    yamt 			return;
   2627  1.3.4.1    yamt 		}
   2628  1.3.4.1    yamt 	}
   2629  1.3.4.1    yamt 	isp_prt(isp, ISP_LOGWARN, "%s: Chan %d unable to find entry to delete N-port handle 0x%04x initiator WWN 0x%016llx Port ID 0x%06x", __func__,
   2630  1.3.4.1    yamt 	    mp->nt_channel, mp->nt_nphdl, (unsigned long long) mp->nt_wwn, mp->nt_sid);
   2631  1.3.4.1    yamt }
   2632  1.3.4.1    yamt 
   2633      1.1  mjacob void
   2634      1.1  mjacob isp_put_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
   2635      1.1  mjacob {
   2636      1.1  mjacob 	int i;
   2637      1.1  mjacob 	isp_put_hdr(isp, &src->at_header, &dst->at_header);
   2638      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_reserved, &dst->at_reserved);
   2639      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_handle, &dst->at_handle);
   2640      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   2641      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_iid);
   2642      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_lun);
   2643      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_tgt);
   2644      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_cdblen);
   2645      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_status, &dst->at_scsi_status);
   2646      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_scsi_status, &dst->at_status);
   2647      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_type);
   2648      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_val);
   2649      1.1  mjacob 	} else {
   2650      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
   2651      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
   2652      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_cdblen);
   2653      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_tgt);
   2654      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_status, &dst->at_status);
   2655  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->at_scsi_status, &dst->at_scsi_status);
   2656      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_val);
   2657      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_type);
   2658      1.1  mjacob 	}
   2659      1.1  mjacob 	ISP_IOXPUT_32(isp, src->at_flags, &dst->at_flags);
   2660      1.1  mjacob 	for (i = 0; i < ATIO_CDBLEN; i++) {
   2661      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
   2662      1.1  mjacob 	}
   2663      1.1  mjacob 	for (i = 0; i < QLTM_SENSELEN; i++) {
   2664      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_sense[i], &dst->at_sense[i]);
   2665      1.1  mjacob 	}
   2666      1.1  mjacob }
   2667      1.1  mjacob 
   2668      1.1  mjacob void
   2669      1.1  mjacob isp_get_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst)
   2670      1.1  mjacob {
   2671      1.1  mjacob 	int i;
   2672      1.1  mjacob 	isp_get_hdr(isp, &src->at_header, &dst->at_header);
   2673      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_reserved, dst->at_reserved);
   2674      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_handle, dst->at_handle);
   2675      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   2676      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_lun, dst->at_iid);
   2677      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_iid, dst->at_lun);
   2678      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_tgt);
   2679      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_cdblen);
   2680      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_status, dst->at_scsi_status);
   2681      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_scsi_status, dst->at_status);
   2682      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_type);
   2683      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_val);
   2684      1.1  mjacob 	} else {
   2685      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
   2686      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
   2687      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_cdblen);
   2688      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_tgt, dst->at_tgt);
   2689      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_status, dst->at_status);
   2690  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->at_scsi_status, dst->at_scsi_status);
   2691      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_val);
   2692      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_type);
   2693      1.1  mjacob 	}
   2694      1.1  mjacob 	ISP_IOXGET_32(isp, &src->at_flags, dst->at_flags);
   2695      1.1  mjacob 	for (i = 0; i < ATIO_CDBLEN; i++) {
   2696      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
   2697      1.1  mjacob 	}
   2698      1.1  mjacob 	for (i = 0; i < QLTM_SENSELEN; i++) {
   2699      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_sense[i], dst->at_sense[i]);
   2700      1.1  mjacob 	}
   2701      1.1  mjacob }
   2702      1.1  mjacob 
   2703      1.1  mjacob void
   2704      1.1  mjacob isp_put_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
   2705      1.1  mjacob {
   2706      1.1  mjacob 	int i;
   2707      1.1  mjacob 	isp_put_hdr(isp, &src->at_header, &dst->at_header);
   2708      1.1  mjacob 	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
   2709      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_lun, &dst->at_lun);
   2710      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_iid, &dst->at_iid);
   2711      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
   2712      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
   2713      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
   2714      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
   2715      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
   2716      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
   2717      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
   2718      1.1  mjacob 	for (i = 0; i < ATIO2_CDBLEN; i++) {
   2719      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
   2720      1.1  mjacob 	}
   2721      1.1  mjacob 	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
   2722      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
   2723      1.1  mjacob 	for (i = 0; i < 4; i++) {
   2724      1.1  mjacob 		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
   2725      1.1  mjacob 	}
   2726      1.1  mjacob 	for (i = 0; i < 6; i++) {
   2727  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->at_reserved2[i], &dst->at_reserved2[i]);
   2728      1.1  mjacob 	}
   2729      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
   2730      1.1  mjacob }
   2731      1.1  mjacob 
   2732      1.1  mjacob void
   2733      1.1  mjacob isp_put_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
   2734      1.1  mjacob {
   2735      1.1  mjacob 	int i;
   2736      1.1  mjacob 	isp_put_hdr(isp, &src->at_header, &dst->at_header);
   2737      1.1  mjacob 	ISP_IOXPUT_32(isp, src->at_reserved, &dst->at_reserved);
   2738      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_iid, &dst->at_iid);
   2739      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_rxid, &dst->at_rxid);
   2740      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_flags, &dst->at_flags);
   2741      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_status, &dst->at_status);
   2742      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_crn, &dst->at_crn);
   2743      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_taskcodes, &dst->at_taskcodes);
   2744      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_taskflags, &dst->at_taskflags);
   2745      1.1  mjacob 	ISP_IOXPUT_8(isp, src->at_execodes, &dst->at_execodes);
   2746      1.1  mjacob 	for (i = 0; i < ATIO2_CDBLEN; i++) {
   2747      1.1  mjacob 		ISP_IOXPUT_8(isp, src->at_cdb[i], &dst->at_cdb[i]);
   2748      1.1  mjacob 	}
   2749      1.1  mjacob 	ISP_IOXPUT_32(isp, src->at_datalen, &dst->at_datalen);
   2750      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_scclun, &dst->at_scclun);
   2751      1.1  mjacob 	for (i = 0; i < 4; i++) {
   2752      1.1  mjacob 		ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]);
   2753      1.1  mjacob 	}
   2754      1.1  mjacob 	for (i = 0; i < 6; i++) {
   2755  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->at_reserved2[i], &dst->at_reserved2[i]);
   2756      1.1  mjacob 	}
   2757      1.1  mjacob 	ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid);
   2758      1.1  mjacob }
   2759      1.1  mjacob 
   2760      1.1  mjacob void
   2761      1.1  mjacob isp_get_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst)
   2762      1.1  mjacob {
   2763      1.1  mjacob 	int i;
   2764      1.1  mjacob 	isp_get_hdr(isp, &src->at_header, &dst->at_header);
   2765      1.1  mjacob 	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
   2766      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_lun, dst->at_lun);
   2767      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_iid, dst->at_iid);
   2768      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
   2769      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
   2770      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
   2771      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
   2772      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
   2773      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
   2774      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
   2775      1.1  mjacob 	for (i = 0; i < ATIO2_CDBLEN; i++) {
   2776      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
   2777      1.1  mjacob 	}
   2778      1.1  mjacob 	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
   2779      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
   2780      1.1  mjacob 	for (i = 0; i < 4; i++) {
   2781      1.1  mjacob 		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
   2782      1.1  mjacob 	}
   2783      1.1  mjacob 	for (i = 0; i < 6; i++) {
   2784  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->at_reserved2[i], dst->at_reserved2[i]);
   2785      1.1  mjacob 	}
   2786      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
   2787      1.1  mjacob }
   2788      1.1  mjacob 
   2789      1.1  mjacob void
   2790      1.1  mjacob isp_get_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst)
   2791      1.1  mjacob {
   2792      1.1  mjacob 	int i;
   2793      1.1  mjacob 	isp_get_hdr(isp, &src->at_header, &dst->at_header);
   2794      1.1  mjacob 	ISP_IOXGET_32(isp, &src->at_reserved, dst->at_reserved);
   2795      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_iid, dst->at_iid);
   2796      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_rxid, dst->at_rxid);
   2797      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_flags, dst->at_flags);
   2798      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_status, dst->at_status);
   2799      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_crn, dst->at_crn);
   2800      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_taskcodes, dst->at_taskcodes);
   2801      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_taskflags, dst->at_taskflags);
   2802      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_execodes, dst->at_execodes);
   2803      1.1  mjacob 	for (i = 0; i < ATIO2_CDBLEN; i++) {
   2804      1.1  mjacob 		ISP_IOXGET_8(isp, &src->at_cdb[i], dst->at_cdb[i]);
   2805      1.1  mjacob 	}
   2806      1.1  mjacob 	ISP_IOXGET_32(isp, &src->at_datalen, dst->at_datalen);
   2807      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_scclun, dst->at_scclun);
   2808      1.1  mjacob 	for (i = 0; i < 4; i++) {
   2809      1.1  mjacob 		ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]);
   2810      1.1  mjacob 	}
   2811      1.1  mjacob 	for (i = 0; i < 6; i++) {
   2812  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->at_reserved2[i], dst->at_reserved2[i]);
   2813      1.1  mjacob 	}
   2814      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid);
   2815      1.1  mjacob }
   2816      1.1  mjacob 
   2817      1.1  mjacob void
   2818      1.1  mjacob isp_get_atio7(ispsoftc_t *isp, at7_entry_t *src, at7_entry_t *dst)
   2819      1.1  mjacob {
   2820      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_type, dst->at_type);
   2821      1.1  mjacob 	ISP_IOXGET_8(isp, &src->at_count, dst->at_count);
   2822      1.1  mjacob 	ISP_IOXGET_16(isp, &src->at_ta_len, dst->at_ta_len);
   2823      1.1  mjacob 	ISP_IOXGET_32(isp, &src->at_rxid, dst->at_rxid);
   2824      1.1  mjacob 	isp_get_fc_hdr(isp, &src->at_hdr, &dst->at_hdr);
   2825      1.1  mjacob 	isp_get_fcp_cmnd_iu(isp, &src->at_cmnd, &dst->at_cmnd);
   2826      1.1  mjacob }
   2827      1.1  mjacob 
   2828      1.1  mjacob void
   2829      1.1  mjacob isp_put_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
   2830      1.1  mjacob {
   2831      1.1  mjacob 	int i;
   2832      1.1  mjacob 	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
   2833      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_syshandle, &dst->ct_syshandle);
   2834      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_fwhandle, &dst->ct_fwhandle);
   2835      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   2836      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_lun);
   2837      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_iid);
   2838      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_reserved2);
   2839      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_tgt);
   2840      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_scsi_status);
   2841      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_scsi_status, &dst->ct_status);
   2842      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_val);
   2843      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_type);
   2844      1.1  mjacob 	} else {
   2845      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
   2846      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
   2847      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_tgt, &dst->ct_tgt);
   2848      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_reserved2, &dst->ct_reserved2);
   2849      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_scsi_status,
   2850      1.1  mjacob 		    &dst->ct_scsi_status);
   2851      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_status, &dst->ct_status);
   2852      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_tag_type, &dst->ct_tag_type);
   2853      1.1  mjacob 		ISP_IOXPUT_8(isp, src->ct_tag_val, &dst->ct_tag_val);
   2854      1.1  mjacob 	}
   2855      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_flags, &dst->ct_flags);
   2856      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_xfrlen, &dst->ct_xfrlen);
   2857      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
   2858      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
   2859      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
   2860      1.1  mjacob 	for (i = 0; i < ISP_RQDSEG; i++) {
   2861  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_base, &dst->ct_dataseg[i].ds_base);
   2862  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_count, &dst->ct_dataseg[i].ds_count);
   2863      1.1  mjacob 	}
   2864      1.1  mjacob }
   2865      1.1  mjacob 
   2866      1.1  mjacob void
   2867      1.1  mjacob isp_get_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst)
   2868      1.1  mjacob {
   2869      1.1  mjacob 	int i;
   2870      1.1  mjacob 	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
   2871      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_syshandle, dst->ct_syshandle);
   2872      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_fwhandle, dst->ct_fwhandle);
   2873      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   2874      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_iid);
   2875      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_lun);
   2876      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_tgt);
   2877      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_reserved2);
   2878      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_scsi_status);
   2879      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_scsi_status, dst->ct_status);
   2880      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_type);
   2881      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_val);
   2882      1.1  mjacob 	} else {
   2883      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
   2884      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
   2885      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_reserved2);
   2886      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_tgt);
   2887      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_status, dst->ct_status);
   2888  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->ct_scsi_status, dst->ct_scsi_status);
   2889      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_val);
   2890      1.1  mjacob 		ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_type);
   2891      1.1  mjacob 	}
   2892      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_flags, dst->ct_flags);
   2893      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_xfrlen, dst->ct_xfrlen);
   2894      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
   2895      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
   2896      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
   2897      1.1  mjacob 	for (i = 0; i < ISP_RQDSEG; i++) {
   2898  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->ct_dataseg[i].ds_base, dst->ct_dataseg[i].ds_base);
   2899  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->ct_dataseg[i].ds_count, dst->ct_dataseg[i].ds_count);
   2900      1.1  mjacob 	}
   2901      1.1  mjacob }
   2902      1.1  mjacob 
   2903      1.1  mjacob void
   2904      1.1  mjacob isp_put_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
   2905      1.1  mjacob {
   2906      1.1  mjacob 	int i;
   2907      1.1  mjacob 	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
   2908      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
   2909      1.1  mjacob 	ISP_IOXPUT_8(isp, src->ct_lun, &dst->ct_lun);
   2910      1.1  mjacob 	ISP_IOXPUT_8(isp, src->ct_iid, &dst->ct_iid);
   2911      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
   2912      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
   2913      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
   2914      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
   2915      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
   2916      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
   2917      1.1  mjacob 	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
   2918  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0._reserved, &dst->rsp.m0._reserved);
   2919  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2, &dst->rsp.m0._reserved2);
   2920  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status, &dst->rsp.m0.ct_scsi_status);
   2921  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen, &dst->rsp.m0.ct_xfrlen);
   2922      1.1  mjacob 		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
   2923      1.1  mjacob 			for (i = 0; i < ISP_RQDSEG_T2; i++) {
   2924  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg[i].ds_base, &dst->rsp.m0.u.ct_dataseg[i].ds_base);
   2925  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg[i].ds_count, &dst->rsp.m0.u.ct_dataseg[i].ds_count);
   2926      1.1  mjacob 			}
   2927      1.1  mjacob 		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
   2928      1.1  mjacob 			for (i = 0; i < ISP_RQDSEG_T3; i++) {
   2929  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_base, &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
   2930  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_basehi, &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
   2931  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_count, &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
   2932      1.1  mjacob 			}
   2933      1.1  mjacob 		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
   2934  1.3.4.1    yamt 			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type, &dst->rsp.m0.u.ct_dslist.ds_type); ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment,
   2935      1.1  mjacob 			    &dst->rsp.m0.u.ct_dslist.ds_segment);
   2936  1.3.4.1    yamt 			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base, &dst->rsp.m0.u.ct_dslist.ds_base);
   2937      1.1  mjacob 		}
   2938      1.1  mjacob 	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
   2939  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1._reserved, &dst->rsp.m1._reserved);
   2940  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2, &dst->rsp.m1._reserved2);
   2941  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen, &dst->rsp.m1.ct_senselen);
   2942  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status, &dst->rsp.m1.ct_scsi_status);
   2943  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen, &dst->rsp.m1.ct_resplen);
   2944      1.1  mjacob 		for (i = 0; i < MAXRESPLEN; i++) {
   2945  1.3.4.1    yamt 			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i], &dst->rsp.m1.ct_resp[i]);
   2946      1.1  mjacob 		}
   2947      1.1  mjacob 	} else {
   2948  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2._reserved, &dst->rsp.m2._reserved);
   2949  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2);
   2950  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3);
   2951  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
   2952  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
   2953  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
   2954      1.1  mjacob 	}
   2955      1.1  mjacob }
   2956      1.1  mjacob 
   2957      1.1  mjacob void
   2958      1.1  mjacob isp_put_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
   2959      1.1  mjacob {
   2960      1.1  mjacob 	int i;
   2961      1.1  mjacob 	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
   2962      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
   2963      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_iid, &dst->ct_iid);
   2964      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_rxid, &dst->ct_rxid);
   2965      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
   2966      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
   2967      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
   2968      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
   2969      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff);
   2970      1.1  mjacob 	if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
   2971  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0._reserved, &dst->rsp.m0._reserved);
   2972  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m0._reserved2, &dst->rsp.m0._reserved2);
   2973  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status, &dst->rsp.m0.ct_scsi_status);
   2974  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen, &dst->rsp.m0.ct_xfrlen);
   2975      1.1  mjacob 		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
   2976      1.1  mjacob 			for (i = 0; i < ISP_RQDSEG_T2; i++) {
   2977  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg[i].ds_base, &dst->rsp.m0.u.ct_dataseg[i].ds_base);
   2978  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg[i].ds_count, &dst->rsp.m0.u.ct_dataseg[i].ds_count);
   2979      1.1  mjacob 			}
   2980      1.1  mjacob 		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
   2981      1.1  mjacob 			for (i = 0; i < ISP_RQDSEG_T3; i++) {
   2982  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_base, &dst->rsp.m0.u.ct_dataseg64[i].ds_base);
   2983  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_basehi, &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
   2984  1.3.4.1    yamt 				ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_count, &dst->rsp.m0.u.ct_dataseg64[i].ds_count);
   2985      1.1  mjacob 			}
   2986      1.1  mjacob 		} else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
   2987  1.3.4.1    yamt 			ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type, &dst->rsp.m0.u.ct_dslist.ds_type);
   2988  1.3.4.1    yamt 			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment, &dst->rsp.m0.u.ct_dslist.ds_segment);
   2989  1.3.4.1    yamt 			ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base, &dst->rsp.m0.u.ct_dslist.ds_base);
   2990      1.1  mjacob 		}
   2991      1.1  mjacob 	} else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
   2992  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1._reserved, &dst->rsp.m1._reserved);
   2993  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1._reserved2, &dst->rsp.m1._reserved2);
   2994  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen, &dst->rsp.m1.ct_senselen);
   2995  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status, &dst->rsp.m1.ct_scsi_status);
   2996  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen, &dst->rsp.m1.ct_resplen);
   2997      1.1  mjacob 		for (i = 0; i < MAXRESPLEN; i++) {
   2998  1.3.4.1    yamt 			ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i], &dst->rsp.m1.ct_resp[i]);
   2999      1.1  mjacob 		}
   3000      1.1  mjacob 	} else {
   3001  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2._reserved, &dst->rsp.m2._reserved);
   3002  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2);
   3003  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3);
   3004  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
   3005  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
   3006  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
   3007      1.1  mjacob 	}
   3008      1.1  mjacob }
   3009      1.1  mjacob 
   3010      1.1  mjacob void
   3011      1.1  mjacob isp_put_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
   3012      1.1  mjacob {
   3013      1.1  mjacob 	int i;
   3014      1.1  mjacob 
   3015      1.1  mjacob 	isp_put_hdr(isp, &src->ct_header, &dst->ct_header);
   3016      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_syshandle, &dst->ct_syshandle);
   3017      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_nphdl, &dst->ct_nphdl);
   3018      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout);
   3019      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count);
   3020  1.3.4.1    yamt 	ISP_IOXPUT_8(isp, src->ct_vpidx, &dst->ct_vpidx);
   3021      1.1  mjacob 	ISP_IOXPUT_8(isp, src->ct_xflags, &dst->ct_xflags);
   3022      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_iid_lo, &dst->ct_iid_lo);
   3023      1.1  mjacob 	ISP_IOXPUT_8(isp, src->ct_iid_hi, &dst->ct_iid_hi);
   3024      1.1  mjacob 	ISP_IOXPUT_8(isp, src->ct_reserved, &dst->ct_reserved);
   3025      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_rxid, &dst->ct_rxid);
   3026      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_senselen, &dst->ct_senselen);
   3027      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_flags, &dst->ct_flags);
   3028      1.1  mjacob 	ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid);
   3029      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_oxid, &dst->ct_oxid);
   3030      1.1  mjacob 	ISP_IOXPUT_16(isp, src->ct_scsi_status, &dst->ct_scsi_status);
   3031      1.1  mjacob 	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
   3032      1.1  mjacob 		ISP_IOXPUT_32(isp, src->rsp.m0.reloff, &dst->rsp.m0.reloff);
   3033  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0.reserved0, &dst->rsp.m0.reserved0);
   3034  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen, &dst->rsp.m0.ct_xfrlen);
   3035  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0.reserved1, &dst->rsp.m0.reserved1);
   3036  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_base, &dst->rsp.m0.ds.ds_base);
   3037  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_basehi, &dst->rsp.m0.ds.ds_basehi);
   3038  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_count, &dst->rsp.m0.ds.ds_count);
   3039      1.1  mjacob 	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
   3040      1.3  mjacob 		uint32_t *a, *b;
   3041      1.3  mjacob 
   3042  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen, &dst->rsp.m1.ct_resplen);
   3043      1.1  mjacob 		ISP_IOXPUT_16(isp, src->rsp.m1.reserved, &dst->rsp.m1.reserved);
   3044      1.3  mjacob 		a = (uint32_t *) src->rsp.m1.ct_resp;
   3045      1.3  mjacob 		b = (uint32_t *) dst->rsp.m1.ct_resp;
   3046      1.3  mjacob 		for (i = 0; i < (ASIZE(src->rsp.m1.ct_resp) >> 2); i++) {
   3047      1.3  mjacob 			*b++ = ISP_SWAP32(isp, *a++);
   3048      1.1  mjacob 		}
   3049      1.1  mjacob 	} else {
   3050  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.reserved0, &dst->rsp.m2.reserved0);
   3051  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
   3052  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.reserved1, &dst->rsp.m2.reserved1);
   3053  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
   3054  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
   3055  1.3.4.1    yamt 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
   3056      1.1  mjacob 	}
   3057      1.1  mjacob }
   3058      1.1  mjacob 
   3059      1.1  mjacob 
   3060      1.1  mjacob void
   3061      1.1  mjacob isp_get_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
   3062      1.1  mjacob {
   3063      1.1  mjacob 	int i;
   3064      1.1  mjacob 
   3065      1.1  mjacob 	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
   3066      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
   3067      1.1  mjacob 	ISP_IOXGET_8(isp, &src->ct_lun, dst->ct_lun);
   3068      1.1  mjacob 	ISP_IOXGET_8(isp, &src->ct_iid, dst->ct_iid);
   3069      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
   3070      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
   3071      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
   3072      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
   3073      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
   3074      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
   3075      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
   3076      1.1  mjacob 	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
   3077  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0._reserved, dst->rsp.m0._reserved);
   3078  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2, dst->rsp.m0._reserved2);
   3079  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status, dst->rsp.m0.ct_scsi_status);
   3080  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen, dst->rsp.m0.ct_xfrlen);
   3081      1.1  mjacob 		if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
   3082      1.1  mjacob 			for (i = 0; i < ISP_RQDSEG_T2; i++) {
   3083  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg[i].ds_base, dst->rsp.m0.u.ct_dataseg[i].ds_base);
   3084  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg[i].ds_count, dst->rsp.m0.u.ct_dataseg[i].ds_count);
   3085      1.1  mjacob 			}
   3086      1.1  mjacob 		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
   3087      1.1  mjacob 			for (i = 0; i < ISP_RQDSEG_T3; i++) {
   3088  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_base, dst->rsp.m0.u.ct_dataseg64[i].ds_base);
   3089  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_basehi, dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
   3090  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_count, dst->rsp.m0.u.ct_dataseg64[i].ds_count);
   3091      1.1  mjacob 			}
   3092      1.1  mjacob 		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
   3093  1.3.4.1    yamt 			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type, dst->rsp.m0.u.ct_dslist.ds_type);
   3094  1.3.4.1    yamt 			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment, dst->rsp.m0.u.ct_dslist.ds_segment);
   3095  1.3.4.1    yamt 			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base, dst->rsp.m0.u.ct_dslist.ds_base);
   3096      1.1  mjacob 		}
   3097      1.1  mjacob 	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
   3098  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1._reserved, dst->rsp.m1._reserved);
   3099  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2, dst->rsp.m1._reserved2);
   3100  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen, dst->rsp.m1.ct_senselen);
   3101  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status, dst->rsp.m1.ct_scsi_status);
   3102  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen, dst->rsp.m1.ct_resplen);
   3103      1.1  mjacob 		for (i = 0; i < MAXRESPLEN; i++) {
   3104  1.3.4.1    yamt 			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i], dst->rsp.m1.ct_resp[i]);
   3105      1.1  mjacob 		}
   3106      1.1  mjacob 	} else {
   3107  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2._reserved, dst->rsp.m2._reserved);
   3108  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2);
   3109  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3);
   3110  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen);
   3111  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
   3112  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
   3113      1.1  mjacob 	}
   3114      1.1  mjacob }
   3115      1.1  mjacob 
   3116      1.1  mjacob void
   3117      1.1  mjacob isp_get_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
   3118      1.1  mjacob {
   3119      1.1  mjacob 	int i;
   3120      1.1  mjacob 
   3121      1.1  mjacob 	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
   3122      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
   3123      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_iid, dst->ct_iid);
   3124      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_rxid, dst->ct_rxid);
   3125      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
   3126      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_status, dst->ct_status);
   3127      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
   3128      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
   3129      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff);
   3130      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
   3131      1.1  mjacob 	if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
   3132  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0._reserved, dst->rsp.m0._reserved);
   3133  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m0._reserved2, dst->rsp.m0._reserved2);
   3134  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status, dst->rsp.m0.ct_scsi_status);
   3135  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen, dst->rsp.m0.ct_xfrlen);
   3136      1.1  mjacob 		if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
   3137      1.1  mjacob 			for (i = 0; i < ISP_RQDSEG_T2; i++) {
   3138  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg[i].ds_base, dst->rsp.m0.u.ct_dataseg[i].ds_base);
   3139  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg[i].ds_count, dst->rsp.m0.u.ct_dataseg[i].ds_count);
   3140      1.1  mjacob 			}
   3141      1.1  mjacob 		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
   3142      1.1  mjacob 			for (i = 0; i < ISP_RQDSEG_T3; i++) {
   3143  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_base, dst->rsp.m0.u.ct_dataseg64[i].ds_base);
   3144  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_basehi, dst->rsp.m0.u.ct_dataseg64[i].ds_basehi);
   3145  1.3.4.1    yamt 				ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_count, dst->rsp.m0.u.ct_dataseg64[i].ds_count);
   3146      1.1  mjacob 			}
   3147      1.1  mjacob 		} else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
   3148  1.3.4.1    yamt 			ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type, dst->rsp.m0.u.ct_dslist.ds_type);
   3149  1.3.4.1    yamt 			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment, dst->rsp.m0.u.ct_dslist.ds_segment);
   3150  1.3.4.1    yamt 			ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base, dst->rsp.m0.u.ct_dslist.ds_base);
   3151      1.1  mjacob 		}
   3152      1.1  mjacob 	} else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
   3153  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1._reserved, dst->rsp.m1._reserved);
   3154  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1._reserved2, dst->rsp.m1._reserved2);
   3155  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen, dst->rsp.m1.ct_senselen);
   3156  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status, dst->rsp.m1.ct_scsi_status);
   3157  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen, dst->rsp.m1.ct_resplen);
   3158      1.1  mjacob 		for (i = 0; i < MAXRESPLEN; i++) {
   3159  1.3.4.1    yamt 			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i], dst->rsp.m1.ct_resp[i]);
   3160      1.1  mjacob 		}
   3161      1.1  mjacob 	} else {
   3162  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2._reserved, dst->rsp.m2._reserved);
   3163  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2);
   3164  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3);
   3165  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen);
   3166  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
   3167  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
   3168      1.1  mjacob 	}
   3169      1.1  mjacob }
   3170      1.1  mjacob 
   3171      1.1  mjacob void
   3172      1.1  mjacob isp_get_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
   3173      1.1  mjacob {
   3174      1.1  mjacob 	int i;
   3175      1.1  mjacob 
   3176      1.1  mjacob 	isp_get_hdr(isp, &src->ct_header, &dst->ct_header);
   3177      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_syshandle, dst->ct_syshandle);
   3178      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_nphdl, dst->ct_nphdl);
   3179      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout);
   3180      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count);
   3181  1.3.4.1    yamt 	ISP_IOXGET_8(isp, &src->ct_vpidx, dst->ct_vpidx);
   3182      1.1  mjacob 	ISP_IOXGET_8(isp, &src->ct_xflags, dst->ct_xflags);
   3183      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_iid_lo, dst->ct_iid_lo);
   3184      1.1  mjacob 	ISP_IOXGET_8(isp, &src->ct_iid_hi, dst->ct_iid_hi);
   3185      1.1  mjacob 	ISP_IOXGET_8(isp, &src->ct_reserved, dst->ct_reserved);
   3186      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_rxid, dst->ct_rxid);
   3187      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_senselen, dst->ct_senselen);
   3188      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_flags, dst->ct_flags);
   3189      1.1  mjacob 	ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid);
   3190      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_oxid, dst->ct_oxid);
   3191      1.1  mjacob 	ISP_IOXGET_16(isp, &src->ct_scsi_status, dst->ct_scsi_status);
   3192      1.1  mjacob 	if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) {
   3193      1.1  mjacob 		ISP_IOXGET_32(isp, &src->rsp.m0.reloff, dst->rsp.m0.reloff);
   3194  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0.reserved0, dst->rsp.m0.reserved0);
   3195  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen, dst->rsp.m0.ct_xfrlen);
   3196  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0.reserved1, dst->rsp.m0.reserved1);
   3197  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_base, dst->rsp.m0.ds.ds_base);
   3198  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_basehi, dst->rsp.m0.ds.ds_basehi);
   3199  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_count, dst->rsp.m0.ds.ds_count);
   3200      1.1  mjacob 	} else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) {
   3201      1.3  mjacob 		uint32_t *a, *b;
   3202      1.3  mjacob 
   3203  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen, dst->rsp.m1.ct_resplen);
   3204      1.1  mjacob 		ISP_IOXGET_16(isp, &src->rsp.m1.reserved, dst->rsp.m1.reserved);
   3205      1.3  mjacob 		a = (uint32_t *) src->rsp.m1.ct_resp;
   3206      1.3  mjacob 		b = (uint32_t *) dst->rsp.m1.ct_resp;
   3207      1.1  mjacob 		for (i = 0; i < MAXRESPLEN_24XX; i++) {
   3208  1.3.4.1    yamt 			ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i], dst->rsp.m1.ct_resp[i]);
   3209      1.1  mjacob 		}
   3210      1.3  mjacob 		for (i = 0; i < (ASIZE(src->rsp.m1.ct_resp) >> 2); i++) {
   3211      1.3  mjacob 			*b++ = ISP_SWAP32(isp, *a++);
   3212      1.3  mjacob 		}
   3213      1.1  mjacob 	} else {
   3214  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.reserved0, dst->rsp.m2.reserved0);
   3215  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen);
   3216  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.reserved1, dst->rsp.m2.reserved1);
   3217  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
   3218  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
   3219  1.3.4.1    yamt 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
   3220      1.1  mjacob 	}
   3221      1.1  mjacob }
   3222      1.1  mjacob 
   3223      1.1  mjacob void
   3224      1.1  mjacob isp_put_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
   3225      1.1  mjacob {
   3226      1.1  mjacob 	int i;
   3227      1.1  mjacob 	isp_put_hdr(isp, &lesrc->le_header, &ledst->le_header);
   3228      1.1  mjacob 	ISP_IOXPUT_32(isp, lesrc->le_reserved, &ledst->le_reserved);
   3229      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   3230      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_rsvd);
   3231      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_lun);
   3232      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_tgt);
   3233      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_ops);
   3234      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_reserved2);
   3235      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_status);
   3236      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_in_count);
   3237      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_cmd_count);
   3238      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb7len);
   3239      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb6len);
   3240      1.1  mjacob 	} else {
   3241      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_lun);
   3242      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_rsvd);
   3243      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_ops);
   3244      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_tgt);
   3245      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_status);
   3246      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_reserved2);
   3247      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_cmd_count);
   3248      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_in_count);
   3249      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb6len);
   3250      1.1  mjacob 		ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb7len);
   3251      1.1  mjacob 	}
   3252      1.1  mjacob 	ISP_IOXPUT_32(isp, lesrc->le_flags, &ledst->le_flags);
   3253      1.1  mjacob 	ISP_IOXPUT_16(isp, lesrc->le_timeout, &ledst->le_timeout);
   3254      1.1  mjacob 	for (i = 0; i < 20; i++) {
   3255  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, lesrc->le_reserved3[i], &ledst->le_reserved3[i]);
   3256      1.1  mjacob 	}
   3257      1.1  mjacob }
   3258      1.1  mjacob 
   3259      1.1  mjacob void
   3260      1.1  mjacob isp_get_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
   3261      1.1  mjacob {
   3262      1.1  mjacob 	int i;
   3263      1.1  mjacob 	isp_get_hdr(isp, &lesrc->le_header, &ledst->le_header);
   3264      1.1  mjacob 	ISP_IOXGET_32(isp, &lesrc->le_reserved, ledst->le_reserved);
   3265      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   3266      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_rsvd);
   3267      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_lun);
   3268      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_tgt);
   3269      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_ops);
   3270      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_reserved2);
   3271      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_status);
   3272      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_in_count);
   3273      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_cmd_count);
   3274      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb7len);
   3275      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb6len);
   3276      1.1  mjacob 	} else {
   3277      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_lun);
   3278      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_rsvd);
   3279      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_ops);
   3280      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_tgt);
   3281      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_status);
   3282      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_reserved2);
   3283      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_cmd_count);
   3284      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_in_count);
   3285      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb6len);
   3286      1.1  mjacob 		ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb7len);
   3287      1.1  mjacob 	}
   3288      1.1  mjacob 	ISP_IOXGET_32(isp, &lesrc->le_flags, ledst->le_flags);
   3289      1.1  mjacob 	ISP_IOXGET_16(isp, &lesrc->le_timeout, ledst->le_timeout);
   3290      1.1  mjacob 	for (i = 0; i < 20; i++) {
   3291  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &lesrc->le_reserved3[i], ledst->le_reserved3[i]);
   3292      1.1  mjacob 	}
   3293      1.1  mjacob }
   3294      1.1  mjacob 
   3295      1.1  mjacob void
   3296      1.1  mjacob isp_put_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
   3297      1.1  mjacob {
   3298      1.1  mjacob 	int i;
   3299      1.1  mjacob 	isp_put_hdr(isp, &src->in_header, &dst->in_header);
   3300      1.1  mjacob 	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
   3301      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   3302      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_iid);
   3303      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_lun);
   3304      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_tgt);
   3305      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_reserved2);
   3306      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_status, &dst->in_rsvd2);
   3307      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_status);
   3308      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_type);
   3309      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_val);
   3310      1.1  mjacob 	} else {
   3311      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
   3312      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
   3313      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_reserved2, &dst->in_reserved2);
   3314      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_tgt, &dst->in_tgt);
   3315      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_status, &dst->in_status);
   3316      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_rsvd2, &dst->in_rsvd2);
   3317      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_tag_val, &dst->in_tag_val);
   3318      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_tag_type, &dst->in_tag_type);
   3319      1.1  mjacob 	}
   3320      1.1  mjacob 	ISP_IOXPUT_32(isp, src->in_flags, &dst->in_flags);
   3321      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
   3322      1.1  mjacob 	for (i = 0; i < IN_MSGLEN; i++) {
   3323      1.1  mjacob 		ISP_IOXPUT_8(isp, src->in_msg[i], &dst->in_msg[i]);
   3324      1.1  mjacob 	}
   3325      1.1  mjacob 	for (i = 0; i < IN_RSVDLEN; i++) {
   3326  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->in_reserved3[i], &dst->in_reserved3[i]);
   3327      1.1  mjacob 	}
   3328      1.1  mjacob 	for (i = 0; i < QLTM_SENSELEN; i++) {
   3329  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->in_sense[i], &dst->in_sense[i]);
   3330      1.1  mjacob 	}
   3331      1.1  mjacob }
   3332      1.1  mjacob 
   3333      1.1  mjacob void
   3334      1.1  mjacob isp_get_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst)
   3335      1.1  mjacob {
   3336      1.1  mjacob 	int i;
   3337      1.1  mjacob 	isp_get_hdr(isp, &src->in_header, &dst->in_header);
   3338      1.1  mjacob 	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
   3339      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   3340      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_lun, dst->in_iid);
   3341      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_iid, dst->in_lun);
   3342      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_tgt);
   3343      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_reserved2);
   3344      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_status, dst->in_rsvd2);
   3345      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_status);
   3346      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_type);
   3347      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_val);
   3348      1.1  mjacob 	} else {
   3349      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
   3350      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
   3351      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_reserved2, dst->in_reserved2);
   3352      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_tgt, dst->in_tgt);
   3353      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_status, dst->in_status);
   3354      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_rsvd2, dst->in_rsvd2);
   3355      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_tag_val, dst->in_tag_val);
   3356      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_tag_type, dst->in_tag_type);
   3357      1.1  mjacob 	}
   3358      1.1  mjacob 	ISP_IOXGET_32(isp, &src->in_flags, dst->in_flags);
   3359      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
   3360      1.1  mjacob 	for (i = 0; i < IN_MSGLEN; i++) {
   3361      1.1  mjacob 		ISP_IOXGET_8(isp, &src->in_msg[i], dst->in_msg[i]);
   3362      1.1  mjacob 	}
   3363      1.1  mjacob 	for (i = 0; i < IN_RSVDLEN; i++) {
   3364  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->in_reserved3[i], dst->in_reserved3[i]);
   3365      1.1  mjacob 	}
   3366      1.1  mjacob 	for (i = 0; i < QLTM_SENSELEN; i++) {
   3367  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->in_sense[i], dst->in_sense[i]);
   3368      1.1  mjacob 	}
   3369      1.1  mjacob }
   3370      1.1  mjacob 
   3371      1.1  mjacob void
   3372  1.3.4.1    yamt isp_put_notify_fc(ispsoftc_t *isp, in_fcentry_t *src, in_fcentry_t *dst)
   3373      1.1  mjacob {
   3374      1.1  mjacob 	isp_put_hdr(isp, &src->in_header, &dst->in_header);
   3375      1.1  mjacob 	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
   3376      1.1  mjacob 	ISP_IOXPUT_8(isp, src->in_lun, &dst->in_lun);
   3377      1.1  mjacob 	ISP_IOXPUT_8(isp, src->in_iid, &dst->in_iid);
   3378      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
   3379      1.1  mjacob 	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
   3380      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
   3381      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
   3382      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
   3383      1.1  mjacob }
   3384      1.1  mjacob 
   3385      1.1  mjacob void
   3386  1.3.4.1    yamt isp_put_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src, in_fcentry_e_t *dst)
   3387      1.1  mjacob {
   3388      1.1  mjacob 	isp_put_hdr(isp, &src->in_header, &dst->in_header);
   3389      1.1  mjacob 	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
   3390      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_iid, &dst->in_iid);
   3391      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_scclun, &dst->in_scclun);
   3392      1.1  mjacob 	ISP_IOXPUT_32(isp, src->in_reserved2, &dst->in_reserved2);
   3393      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
   3394      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_task_flags, &dst->in_task_flags);
   3395      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_seqid, &dst->in_seqid);
   3396      1.1  mjacob }
   3397      1.1  mjacob 
   3398      1.1  mjacob void
   3399  1.3.4.1    yamt isp_put_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src, in_fcentry_24xx_t *dst)
   3400      1.1  mjacob {
   3401      1.1  mjacob 	int i;
   3402      1.1  mjacob 
   3403      1.1  mjacob 	isp_put_hdr(isp, &src->in_header, &dst->in_header);
   3404      1.1  mjacob 	ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved);
   3405      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_nphdl, &dst->in_nphdl);
   3406      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_reserved1, &dst->in_reserved1);
   3407      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_flags, &dst->in_flags);
   3408      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_srr_rxid, &dst->in_srr_rxid);
   3409      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
   3410      1.1  mjacob 	ISP_IOXPUT_8(isp, src->in_status_subcode, &dst->in_status_subcode);
   3411      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_reserved2, &dst->in_reserved2);
   3412      1.1  mjacob 	ISP_IOXPUT_32(isp, src->in_rxid, &dst->in_rxid);
   3413      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_srr_reloff_hi, &dst->in_srr_reloff_hi);
   3414      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_srr_reloff_lo, &dst->in_srr_reloff_lo);
   3415      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_srr_iu, &dst->in_srr_iu);
   3416      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_srr_oxid, &dst->in_srr_oxid);
   3417      1.3  mjacob 	ISP_IOXPUT_16(isp, src->in_nport_id_hi, &dst->in_nport_id_hi);
   3418      1.3  mjacob 	ISP_IOXPUT_8(isp, src->in_nport_id_lo, &dst->in_nport_id_lo);
   3419      1.3  mjacob 	ISP_IOXPUT_8(isp, src->in_reserved3, &dst->in_reserved3);
   3420      1.3  mjacob 	ISP_IOXPUT_16(isp, src->in_np_handle, &dst->in_np_handle);
   3421      1.3  mjacob 	for (i = 0; i < ASIZE(src->in_reserved4); i++) {
   3422      1.3  mjacob 		ISP_IOXPUT_8(isp, src->in_reserved4[i], &dst->in_reserved4[i]);
   3423      1.1  mjacob 	}
   3424      1.3  mjacob 	ISP_IOXPUT_8(isp, src->in_reserved5, &dst->in_reserved5);
   3425  1.3.4.1    yamt 	ISP_IOXPUT_8(isp, src->in_vpidx, &dst->in_vpidx);
   3426      1.3  mjacob 	ISP_IOXPUT_32(isp, src->in_reserved6, &dst->in_reserved6);
   3427      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_portid_lo, &dst->in_portid_lo);
   3428      1.1  mjacob 	ISP_IOXPUT_8(isp, src->in_portid_hi, &dst->in_portid_hi);
   3429      1.3  mjacob 	ISP_IOXPUT_8(isp, src->in_reserved7, &dst->in_reserved7);
   3430      1.3  mjacob 	ISP_IOXPUT_16(isp, src->in_reserved8, &dst->in_reserved8);
   3431      1.1  mjacob 	ISP_IOXPUT_16(isp, src->in_oxid, &dst->in_oxid);
   3432      1.1  mjacob }
   3433      1.1  mjacob 
   3434      1.1  mjacob void
   3435  1.3.4.1    yamt isp_get_notify_fc(ispsoftc_t *isp, in_fcentry_t *src, in_fcentry_t *dst)
   3436      1.1  mjacob {
   3437      1.1  mjacob 	isp_get_hdr(isp, &src->in_header, &dst->in_header);
   3438      1.1  mjacob 	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
   3439      1.1  mjacob 	ISP_IOXGET_8(isp, &src->in_lun, dst->in_lun);
   3440      1.1  mjacob 	ISP_IOXGET_8(isp, &src->in_iid, dst->in_iid);
   3441      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
   3442      1.1  mjacob 	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
   3443      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
   3444      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
   3445      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
   3446      1.1  mjacob }
   3447      1.1  mjacob 
   3448      1.1  mjacob void
   3449  1.3.4.1    yamt isp_get_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src, in_fcentry_e_t *dst)
   3450      1.1  mjacob {
   3451      1.1  mjacob 	isp_get_hdr(isp, &src->in_header, &dst->in_header);
   3452      1.1  mjacob 	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
   3453      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_iid, dst->in_iid);
   3454      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_scclun, dst->in_scclun);
   3455      1.1  mjacob 	ISP_IOXGET_32(isp, &src->in_reserved2, dst->in_reserved2);
   3456      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
   3457      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_task_flags, dst->in_task_flags);
   3458      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_seqid, dst->in_seqid);
   3459      1.1  mjacob }
   3460      1.1  mjacob 
   3461      1.1  mjacob void
   3462  1.3.4.1    yamt isp_get_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src, in_fcentry_24xx_t *dst)
   3463      1.1  mjacob {
   3464      1.1  mjacob 	int i;
   3465      1.1  mjacob 
   3466      1.1  mjacob 	isp_get_hdr(isp, &src->in_header, &dst->in_header);
   3467      1.1  mjacob 	ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved);
   3468      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_nphdl, dst->in_nphdl);
   3469      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_reserved1, dst->in_reserved1);
   3470      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_flags, dst->in_flags);
   3471      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_srr_rxid, dst->in_srr_rxid);
   3472      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
   3473      1.1  mjacob 	ISP_IOXGET_8(isp, &src->in_status_subcode, dst->in_status_subcode);
   3474      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_reserved2, dst->in_reserved2);
   3475      1.1  mjacob 	ISP_IOXGET_32(isp, &src->in_rxid, dst->in_rxid);
   3476      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_srr_reloff_hi, dst->in_srr_reloff_hi);
   3477      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_srr_reloff_lo, dst->in_srr_reloff_lo);
   3478      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_srr_iu, dst->in_srr_iu);
   3479      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_srr_oxid, dst->in_srr_oxid);
   3480      1.3  mjacob 	ISP_IOXGET_16(isp, &src->in_nport_id_hi, dst->in_nport_id_hi);
   3481      1.3  mjacob 	ISP_IOXGET_8(isp, &src->in_nport_id_lo, dst->in_nport_id_lo);
   3482      1.3  mjacob 	ISP_IOXGET_8(isp, &src->in_reserved3, dst->in_reserved3);
   3483      1.3  mjacob 	ISP_IOXGET_16(isp, &src->in_np_handle, dst->in_np_handle);
   3484      1.3  mjacob 	for (i = 0; i < ASIZE(src->in_reserved4); i++) {
   3485      1.3  mjacob 		ISP_IOXGET_8(isp, &src->in_reserved4[i], dst->in_reserved4[i]);
   3486      1.1  mjacob 	}
   3487      1.3  mjacob 	ISP_IOXGET_8(isp, &src->in_reserved5, dst->in_reserved5);
   3488  1.3.4.1    yamt 	ISP_IOXGET_8(isp, &src->in_vpidx, dst->in_vpidx);
   3489      1.3  mjacob 	ISP_IOXGET_32(isp, &src->in_reserved6, dst->in_reserved6);
   3490      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_portid_lo, dst->in_portid_lo);
   3491      1.1  mjacob 	ISP_IOXGET_8(isp, &src->in_portid_hi, dst->in_portid_hi);
   3492      1.3  mjacob 	ISP_IOXGET_8(isp, &src->in_reserved7, dst->in_reserved7);
   3493      1.3  mjacob 	ISP_IOXGET_16(isp, &src->in_reserved8, dst->in_reserved8);
   3494      1.1  mjacob 	ISP_IOXGET_16(isp, &src->in_oxid, dst->in_oxid);
   3495      1.1  mjacob }
   3496      1.1  mjacob 
   3497      1.1  mjacob void
   3498      1.1  mjacob isp_put_notify_ack(ispsoftc_t *isp, na_entry_t *src,  na_entry_t *dst)
   3499      1.1  mjacob {
   3500      1.1  mjacob 	int i;
   3501      1.1  mjacob 	isp_put_hdr(isp, &src->na_header, &dst->na_header);
   3502      1.1  mjacob 	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
   3503      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   3504      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_iid);
   3505      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_lun);
   3506      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_status, &dst->na_event);
   3507      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_event, &dst->na_status);
   3508      1.1  mjacob 	} else {
   3509      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_lun, &dst->na_lun);
   3510      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
   3511      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_status, &dst->na_status);
   3512      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_event, &dst->na_event);
   3513      1.1  mjacob 	}
   3514      1.1  mjacob 	ISP_IOXPUT_32(isp, src->na_flags, &dst->na_flags);
   3515      1.1  mjacob 	for (i = 0; i < NA_RSVDLEN; i++) {
   3516  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->na_reserved3[i], &dst->na_reserved3[i]);
   3517      1.1  mjacob 	}
   3518      1.1  mjacob }
   3519      1.1  mjacob 
   3520      1.1  mjacob void
   3521      1.1  mjacob isp_get_notify_ack(ispsoftc_t *isp, na_entry_t *src, na_entry_t *dst)
   3522      1.1  mjacob {
   3523      1.1  mjacob 	int i;
   3524      1.1  mjacob 	isp_get_hdr(isp, &src->na_header, &dst->na_header);
   3525      1.1  mjacob 	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
   3526      1.1  mjacob 	if (ISP_IS_SBUS(isp)) {
   3527      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_lun, dst->na_iid);
   3528      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_iid, dst->na_lun);
   3529      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_status, dst->na_event);
   3530      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_event, dst->na_status);
   3531      1.1  mjacob 	} else {
   3532      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_lun, dst->na_lun);
   3533      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
   3534      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_status, dst->na_status);
   3535      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_event, dst->na_event);
   3536      1.1  mjacob 	}
   3537      1.1  mjacob 	ISP_IOXGET_32(isp, &src->na_flags, dst->na_flags);
   3538      1.1  mjacob 	for (i = 0; i < NA_RSVDLEN; i++) {
   3539  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->na_reserved3[i], dst->na_reserved3[i]);
   3540      1.1  mjacob 	}
   3541      1.1  mjacob }
   3542      1.1  mjacob 
   3543      1.1  mjacob void
   3544  1.3.4.1    yamt isp_put_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src, na_fcentry_t *dst)
   3545      1.1  mjacob {
   3546      1.1  mjacob 	int i;
   3547      1.1  mjacob 	isp_put_hdr(isp, &src->na_header, &dst->na_header);
   3548      1.1  mjacob 	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
   3549      1.1  mjacob 	ISP_IOXPUT_8(isp, src->na_reserved1, &dst->na_reserved1);
   3550      1.1  mjacob 	ISP_IOXPUT_8(isp, src->na_iid, &dst->na_iid);
   3551      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
   3552      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
   3553      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
   3554      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
   3555      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
   3556      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
   3557      1.1  mjacob 	for (i = 0; i < NA2_RSVDLEN; i++) {
   3558  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->na_reserved3[i], &dst->na_reserved3[i]);
   3559      1.1  mjacob 	}
   3560      1.1  mjacob }
   3561      1.1  mjacob 
   3562      1.1  mjacob void
   3563  1.3.4.1    yamt isp_put_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src, na_fcentry_e_t *dst)
   3564      1.1  mjacob {
   3565      1.1  mjacob 	int i;
   3566      1.1  mjacob 	isp_put_hdr(isp, &src->na_header, &dst->na_header);
   3567      1.1  mjacob 	ISP_IOXPUT_32(isp, src->na_reserved, &dst->na_reserved);
   3568      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_iid, &dst->na_iid);
   3569      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_response, &dst->na_response);
   3570      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
   3571      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
   3572      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
   3573      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags);
   3574      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid);
   3575      1.1  mjacob 	for (i = 0; i < NA2_RSVDLEN; i++) {
   3576  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->na_reserved3[i], &dst->na_reserved3[i]);
   3577      1.1  mjacob 	}
   3578      1.1  mjacob }
   3579      1.1  mjacob 
   3580      1.1  mjacob void
   3581  1.3.4.1    yamt isp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src, na_fcentry_24xx_t *dst)
   3582      1.1  mjacob {
   3583      1.1  mjacob 	int i;
   3584      1.1  mjacob 
   3585      1.1  mjacob 	isp_put_hdr(isp, &src->na_header, &dst->na_header);
   3586      1.1  mjacob 	ISP_IOXPUT_32(isp, src->na_handle, &dst->na_handle);
   3587      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_nphdl, &dst->na_nphdl);
   3588      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_reserved1, &dst->na_reserved1);
   3589      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_flags, &dst->na_flags);
   3590      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_srr_rxid, &dst->na_srr_rxid);
   3591      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
   3592      1.1  mjacob 	ISP_IOXPUT_8(isp, src->na_status_subcode, &dst->na_status_subcode);
   3593      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
   3594      1.1  mjacob 	ISP_IOXPUT_32(isp, src->na_rxid, &dst->na_rxid);
   3595      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_srr_reloff_hi, &dst->na_srr_reloff_hi);
   3596      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_srr_reloff_lo, &dst->na_srr_reloff_lo);
   3597      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_srr_iu, &dst->na_srr_iu);
   3598      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_srr_flags, &dst->na_srr_flags);
   3599      1.1  mjacob 	for (i = 0; i < 18; i++) {
   3600      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_reserved3[i], &dst->na_reserved3[i]);
   3601      1.1  mjacob 	}
   3602      1.1  mjacob 	ISP_IOXPUT_8(isp, src->na_reserved4, &dst->na_reserved4);
   3603  1.3.4.1    yamt 	ISP_IOXPUT_8(isp, src->na_vpidx, &dst->na_vpidx);
   3604  1.3.4.1    yamt 	ISP_IOXPUT_8(isp, src->na_srr_reject_vunique, &dst->na_srr_reject_vunique);
   3605  1.3.4.1    yamt 	ISP_IOXPUT_8(isp, src->na_srr_reject_explanation, &dst->na_srr_reject_explanation);
   3606      1.1  mjacob 	ISP_IOXPUT_8(isp, src->na_srr_reject_code, &dst->na_srr_reject_code);
   3607      1.1  mjacob 	ISP_IOXPUT_8(isp, src->na_reserved5, &dst->na_reserved5);
   3608      1.1  mjacob 	for (i = 0; i < 6; i++) {
   3609      1.1  mjacob 		ISP_IOXPUT_8(isp, src->na_reserved6[i], &dst->na_reserved6[i]);
   3610      1.1  mjacob 	}
   3611      1.1  mjacob 	ISP_IOXPUT_16(isp, src->na_oxid, &dst->na_oxid);
   3612      1.1  mjacob }
   3613      1.1  mjacob 
   3614      1.1  mjacob void
   3615  1.3.4.1    yamt isp_get_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src, na_fcentry_t *dst)
   3616      1.1  mjacob {
   3617      1.1  mjacob 	int i;
   3618      1.1  mjacob 	isp_get_hdr(isp, &src->na_header, &dst->na_header);
   3619      1.1  mjacob 	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
   3620      1.1  mjacob 	ISP_IOXGET_8(isp, &src->na_reserved1, dst->na_reserved1);
   3621      1.1  mjacob 	ISP_IOXGET_8(isp, &src->na_iid, dst->na_iid);
   3622      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
   3623      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
   3624      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
   3625      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
   3626      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
   3627      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
   3628      1.1  mjacob 	for (i = 0; i < NA2_RSVDLEN; i++) {
   3629  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->na_reserved3[i], dst->na_reserved3[i]);
   3630      1.1  mjacob 	}
   3631      1.1  mjacob }
   3632      1.1  mjacob 
   3633      1.1  mjacob void
   3634  1.3.4.1    yamt isp_get_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src, na_fcentry_e_t *dst)
   3635      1.1  mjacob {
   3636      1.1  mjacob 	int i;
   3637      1.1  mjacob 	isp_get_hdr(isp, &src->na_header, &dst->na_header);
   3638      1.1  mjacob 	ISP_IOXGET_32(isp, &src->na_reserved, dst->na_reserved);
   3639      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_iid, dst->na_iid);
   3640      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_response, dst->na_response);
   3641      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
   3642      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
   3643      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
   3644      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags);
   3645      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid);
   3646      1.1  mjacob 	for (i = 0; i < NA2_RSVDLEN; i++) {
   3647  1.3.4.1    yamt 		ISP_IOXGET_16(isp, &src->na_reserved3[i], dst->na_reserved3[i]);
   3648      1.1  mjacob 	}
   3649      1.1  mjacob }
   3650      1.1  mjacob 
   3651      1.1  mjacob void
   3652  1.3.4.1    yamt isp_get_notify_ack_24xx(ispsoftc_t *isp, na_fcentry_24xx_t *src, na_fcentry_24xx_t *dst)
   3653      1.1  mjacob {
   3654      1.1  mjacob 	int i;
   3655      1.1  mjacob 
   3656      1.1  mjacob 	isp_get_hdr(isp, &src->na_header, &dst->na_header);
   3657      1.1  mjacob 	ISP_IOXGET_32(isp, &src->na_handle, dst->na_handle);
   3658      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_nphdl, dst->na_nphdl);
   3659      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_reserved1, dst->na_reserved1);
   3660      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_flags, dst->na_flags);
   3661      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_srr_rxid, dst->na_srr_rxid);
   3662      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
   3663      1.1  mjacob 	ISP_IOXGET_8(isp, &src->na_status_subcode, dst->na_status_subcode);
   3664      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
   3665      1.1  mjacob 	ISP_IOXGET_32(isp, &src->na_rxid, dst->na_rxid);
   3666      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_srr_reloff_hi, dst->na_srr_reloff_hi);
   3667      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_srr_reloff_lo, dst->na_srr_reloff_lo);
   3668      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_srr_iu, dst->na_srr_iu);
   3669      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_srr_flags, dst->na_srr_flags);
   3670      1.1  mjacob 	for (i = 0; i < 18; i++) {
   3671      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_reserved3[i], dst->na_reserved3[i]);
   3672      1.1  mjacob 	}
   3673      1.1  mjacob 	ISP_IOXGET_8(isp, &src->na_reserved4, dst->na_reserved4);
   3674  1.3.4.1    yamt 	ISP_IOXGET_8(isp, &src->na_vpidx, dst->na_vpidx);
   3675  1.3.4.1    yamt 	ISP_IOXGET_8(isp, &src->na_srr_reject_vunique, dst->na_srr_reject_vunique);
   3676  1.3.4.1    yamt 	ISP_IOXGET_8(isp, &src->na_srr_reject_explanation, dst->na_srr_reject_explanation);
   3677      1.1  mjacob 	ISP_IOXGET_8(isp, &src->na_srr_reject_code, dst->na_srr_reject_code);
   3678      1.1  mjacob 	ISP_IOXGET_8(isp, &src->na_reserved5, dst->na_reserved5);
   3679      1.1  mjacob 	for (i = 0; i < 6; i++) {
   3680      1.1  mjacob 		ISP_IOXGET_8(isp, &src->na_reserved6[i], dst->na_reserved6[i]);
   3681      1.1  mjacob 	}
   3682      1.1  mjacob 	ISP_IOXGET_16(isp, &src->na_oxid, dst->na_oxid);
   3683      1.1  mjacob }
   3684      1.1  mjacob 
   3685      1.1  mjacob void
   3686      1.1  mjacob isp_get_abts(ispsoftc_t *isp, abts_t *src, abts_t *dst)
   3687      1.1  mjacob {
   3688      1.1  mjacob 	int i;
   3689      1.1  mjacob 
   3690      1.1  mjacob 	isp_get_hdr(isp, &src->abts_header, &dst->abts_header);
   3691      1.1  mjacob 	for (i = 0; i < 6; i++) {
   3692  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->abts_reserved0[i], dst->abts_reserved0[i]);
   3693      1.1  mjacob 	}
   3694      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_nphdl, dst->abts_nphdl);
   3695      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_reserved1, dst->abts_reserved1);
   3696      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_sof, dst->abts_sof);
   3697      1.1  mjacob 	ISP_IOXGET_32(isp, &src->abts_rxid_abts, dst->abts_rxid_abts);
   3698      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_did_lo, dst->abts_did_lo);
   3699      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_did_hi, dst->abts_did_hi);
   3700      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_r_ctl, dst->abts_r_ctl);
   3701      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_sid_lo, dst->abts_sid_lo);
   3702      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_sid_hi, dst->abts_sid_hi);
   3703      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_cs_ctl, dst->abts_cs_ctl);
   3704      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_fs_ctl, dst->abts_fs_ctl);
   3705      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_f_ctl, dst->abts_f_ctl);
   3706      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_type, dst->abts_type);
   3707      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_seq_cnt, dst->abts_seq_cnt);
   3708      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_df_ctl, dst->abts_df_ctl);
   3709      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_seq_id, dst->abts_seq_id);
   3710      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rx_id, dst->abts_rx_id);
   3711      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_ox_id, dst->abts_ox_id);
   3712      1.1  mjacob 	ISP_IOXGET_32(isp, &src->abts_param, dst->abts_param);
   3713      1.1  mjacob 	for (i = 0; i < 16; i++) {
   3714  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->abts_reserved2[i], dst->abts_reserved2[i]);
   3715      1.1  mjacob 	}
   3716      1.1  mjacob 	ISP_IOXGET_32(isp, &src->abts_rxid_task, dst->abts_rxid_task);
   3717      1.1  mjacob }
   3718      1.1  mjacob 
   3719      1.1  mjacob void
   3720      1.1  mjacob isp_put_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
   3721      1.1  mjacob {
   3722      1.1  mjacob 	int i;
   3723      1.1  mjacob 
   3724      1.1  mjacob 	isp_put_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
   3725      1.1  mjacob 	ISP_IOXPUT_32(isp, src->abts_rsp_handle, &dst->abts_rsp_handle);
   3726      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_status, &dst->abts_rsp_status);
   3727      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_nphdl, &dst->abts_rsp_nphdl);
   3728      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_ctl_flags, &dst->abts_rsp_ctl_flags);
   3729      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_sof, &dst->abts_rsp_sof);
   3730      1.1  mjacob 	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_abts, &dst->abts_rsp_rxid_abts);
   3731      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_did_lo, &dst->abts_rsp_did_lo);
   3732      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abts_rsp_did_hi, &dst->abts_rsp_did_hi);
   3733      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abts_rsp_r_ctl, &dst->abts_rsp_r_ctl);
   3734      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_sid_lo, &dst->abts_rsp_sid_lo);
   3735      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abts_rsp_sid_hi, &dst->abts_rsp_sid_hi);
   3736      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abts_rsp_cs_ctl, &dst->abts_rsp_cs_ctl);
   3737      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_f_ctl_lo, &dst->abts_rsp_f_ctl_lo);
   3738      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abts_rsp_f_ctl_hi, &dst->abts_rsp_f_ctl_hi);
   3739      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abts_rsp_type, &dst->abts_rsp_type);
   3740      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_seq_cnt, &dst->abts_rsp_seq_cnt);
   3741      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abts_rsp_df_ctl, &dst->abts_rsp_df_ctl);
   3742      1.1  mjacob 	ISP_IOXPUT_8(isp, src->abts_rsp_seq_id, &dst->abts_rsp_seq_id);
   3743      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_rx_id, &dst->abts_rsp_rx_id);
   3744      1.1  mjacob 	ISP_IOXPUT_16(isp, src->abts_rsp_ox_id, &dst->abts_rsp_ox_id);
   3745      1.1  mjacob 	ISP_IOXPUT_32(isp, src->abts_rsp_param, &dst->abts_rsp_param);
   3746      1.1  mjacob 	if (src->abts_rsp_r_ctl == BA_ACC) {
   3747  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.reserved, &dst->abts_rsp_payload.ba_acc.reserved);
   3748  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.last_seq_id, &dst->abts_rsp_payload.ba_acc.last_seq_id);
   3749  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.seq_id_valid, &dst->abts_rsp_payload.ba_acc.seq_id_valid);
   3750  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_rx_id, &dst->abts_rsp_payload.ba_acc.aborted_rx_id);
   3751  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_ox_id, &dst->abts_rsp_payload.ba_acc.aborted_ox_id);
   3752  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.high_seq_cnt, &dst->abts_rsp_payload.ba_acc.high_seq_cnt);
   3753  1.3.4.1    yamt 		ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.low_seq_cnt, &dst->abts_rsp_payload.ba_acc.low_seq_cnt);
   3754      1.1  mjacob 		for (i = 0; i < 4; i++) {
   3755  1.3.4.1    yamt 			ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.reserved2[i], &dst->abts_rsp_payload.ba_acc.reserved2[i]);
   3756      1.1  mjacob 		}
   3757      1.1  mjacob 	} else if (src->abts_rsp_r_ctl == BA_RJT) {
   3758  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.vendor_unique, &dst->abts_rsp_payload.ba_rjt.vendor_unique);
   3759  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.explanation, &dst->abts_rsp_payload.ba_rjt.explanation);
   3760  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reason, &dst->abts_rsp_payload.ba_rjt.reason);
   3761  1.3.4.1    yamt 		ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reserved, &dst->abts_rsp_payload.ba_rjt.reserved);
   3762      1.1  mjacob 		for (i = 0; i < 12; i++) {
   3763  1.3.4.1    yamt 			ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_rjt.reserved2[i], &dst->abts_rsp_payload.ba_rjt.reserved2[i]);
   3764      1.1  mjacob 		}
   3765      1.1  mjacob 	} else {
   3766      1.1  mjacob 		for (i = 0; i < 16; i++) {
   3767  1.3.4.1    yamt 			ISP_IOXPUT_8(isp, src->abts_rsp_payload.reserved[i], &dst->abts_rsp_payload.reserved[i]);
   3768      1.1  mjacob 		}
   3769      1.1  mjacob 	}
   3770      1.1  mjacob 	ISP_IOXPUT_32(isp, src->abts_rsp_rxid_task, &dst->abts_rsp_rxid_task);
   3771      1.1  mjacob }
   3772      1.1  mjacob 
   3773      1.1  mjacob void
   3774      1.1  mjacob isp_get_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst)
   3775      1.1  mjacob {
   3776      1.1  mjacob 	int i;
   3777      1.1  mjacob 
   3778      1.1  mjacob 	isp_get_hdr(isp, &src->abts_rsp_header, &dst->abts_rsp_header);
   3779      1.1  mjacob 	ISP_IOXGET_32(isp, &src->abts_rsp_handle, dst->abts_rsp_handle);
   3780      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_status, dst->abts_rsp_status);
   3781      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_nphdl, dst->abts_rsp_nphdl);
   3782      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_ctl_flags, dst->abts_rsp_ctl_flags);
   3783      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_sof, dst->abts_rsp_sof);
   3784      1.1  mjacob 	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_abts, dst->abts_rsp_rxid_abts);
   3785      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_did_lo, dst->abts_rsp_did_lo);
   3786      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_rsp_did_hi, dst->abts_rsp_did_hi);
   3787      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_rsp_r_ctl, dst->abts_rsp_r_ctl);
   3788      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_sid_lo, dst->abts_rsp_sid_lo);
   3789      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_rsp_sid_hi, dst->abts_rsp_sid_hi);
   3790      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_rsp_cs_ctl, dst->abts_rsp_cs_ctl);
   3791      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_f_ctl_lo, dst->abts_rsp_f_ctl_lo);
   3792      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_rsp_f_ctl_hi, dst->abts_rsp_f_ctl_hi);
   3793      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_rsp_type, dst->abts_rsp_type);
   3794      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_seq_cnt, dst->abts_rsp_seq_cnt);
   3795      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_rsp_df_ctl, dst->abts_rsp_df_ctl);
   3796      1.1  mjacob 	ISP_IOXGET_8(isp, &src->abts_rsp_seq_id, dst->abts_rsp_seq_id);
   3797      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_rx_id, dst->abts_rsp_rx_id);
   3798      1.1  mjacob 	ISP_IOXGET_16(isp, &src->abts_rsp_ox_id, dst->abts_rsp_ox_id);
   3799      1.1  mjacob 	ISP_IOXGET_32(isp, &src->abts_rsp_param, dst->abts_rsp_param);
   3800      1.1  mjacob 	for (i = 0; i < 8; i++) {
   3801  1.3.4.1    yamt 		ISP_IOXGET_8(isp, &src->abts_rsp_payload.rsp.reserved[i], dst->abts_rsp_payload.rsp.reserved[i]);
   3802      1.1  mjacob 	}
   3803  1.3.4.1    yamt 	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode1, dst->abts_rsp_payload.rsp.subcode1);
   3804  1.3.4.1    yamt 	ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode2, dst->abts_rsp_payload.rsp.subcode2);
   3805      1.1  mjacob 	ISP_IOXGET_32(isp, &src->abts_rsp_rxid_task, dst->abts_rsp_rxid_task);
   3806      1.1  mjacob }
   3807      1.1  mjacob #endif	/* ISP_TARGET_MODE */
   3808      1.1  mjacob /*
   3809      1.1  mjacob  * vim:ts=8:sw=8
   3810      1.1  mjacob  */
   3811