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