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