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