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