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