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