diff options
author | James Smart <james.smart@emulex.com> | 2010-10-22 11:07:09 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-10-26 11:42:29 -0400 |
commit | f0d9bccc9084b8fe86fa2830a434259d140679c9 (patch) | |
tree | 954f22fe1d98ed82ccc2d37fd1586155619d850d | |
parent | 5989b8d4dc0367a8c07cd1545dbad590a6de989d (diff) |
[SCSI] lpfc 8.3.18: Add new WQE support
- Add new WQE fields as defined by new SLI interface to support new hardware.
Signed-off-by: Alex Iannicelli <alex.iannicelli@emulex.com>
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
-rw-r--r-- | drivers/scsi/lpfc/lpfc_els.c | 9 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_hw4.h | 167 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_sli.c | 228 |
3 files changed, 197 insertions, 207 deletions
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index e61b57df241b..884f4d321799 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c | |||
@@ -177,15 +177,18 @@ lpfc_prep_els_iocb(struct lpfc_vport *vport, uint8_t expectRsp, | |||
177 | (elscmd == ELS_CMD_LOGO))) | 177 | (elscmd == ELS_CMD_LOGO))) |
178 | switch (elscmd) { | 178 | switch (elscmd) { |
179 | case ELS_CMD_FLOGI: | 179 | case ELS_CMD_FLOGI: |
180 | elsiocb->iocb_flag |= ((ELS_ID_FLOGI << LPFC_FIP_ELS_ID_SHIFT) | 180 | elsiocb->iocb_flag |= |
181 | ((LPFC_ELS_ID_FLOGI << LPFC_FIP_ELS_ID_SHIFT) | ||
181 | & LPFC_FIP_ELS_ID_MASK); | 182 | & LPFC_FIP_ELS_ID_MASK); |
182 | break; | 183 | break; |
183 | case ELS_CMD_FDISC: | 184 | case ELS_CMD_FDISC: |
184 | elsiocb->iocb_flag |= ((ELS_ID_FDISC << LPFC_FIP_ELS_ID_SHIFT) | 185 | elsiocb->iocb_flag |= |
186 | ((LPFC_ELS_ID_FDISC << LPFC_FIP_ELS_ID_SHIFT) | ||
185 | & LPFC_FIP_ELS_ID_MASK); | 187 | & LPFC_FIP_ELS_ID_MASK); |
186 | break; | 188 | break; |
187 | case ELS_CMD_LOGO: | 189 | case ELS_CMD_LOGO: |
188 | elsiocb->iocb_flag |= ((ELS_ID_LOGO << LPFC_FIP_ELS_ID_SHIFT) | 190 | elsiocb->iocb_flag |= |
191 | ((LPFC_ELS_ID_LOGO << LPFC_FIP_ELS_ID_SHIFT) | ||
189 | & LPFC_FIP_ELS_ID_MASK); | 192 | & LPFC_FIP_ELS_ID_MASK); |
190 | break; | 193 | break; |
191 | } | 194 | } |
diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h index bbdcf96800f6..6e4bc34e1d0d 100644 --- a/drivers/scsi/lpfc/lpfc_hw4.h +++ b/drivers/scsi/lpfc/lpfc_hw4.h | |||
@@ -424,79 +424,6 @@ struct lpfc_rcqe { | |||
424 | #define FCOE_SOFn3 0x36 | 424 | #define FCOE_SOFn3 0x36 |
425 | }; | 425 | }; |
426 | 426 | ||
427 | struct lpfc_wqe_generic{ | ||
428 | struct ulp_bde64 bde; | ||
429 | uint32_t word3; | ||
430 | uint32_t word4; | ||
431 | uint32_t word5; | ||
432 | uint32_t word6; | ||
433 | #define lpfc_wqe_gen_context_SHIFT 16 | ||
434 | #define lpfc_wqe_gen_context_MASK 0x0000FFFF | ||
435 | #define lpfc_wqe_gen_context_WORD word6 | ||
436 | #define lpfc_wqe_gen_xri_SHIFT 0 | ||
437 | #define lpfc_wqe_gen_xri_MASK 0x0000FFFF | ||
438 | #define lpfc_wqe_gen_xri_WORD word6 | ||
439 | uint32_t word7; | ||
440 | #define lpfc_wqe_gen_lnk_SHIFT 23 | ||
441 | #define lpfc_wqe_gen_lnk_MASK 0x00000001 | ||
442 | #define lpfc_wqe_gen_lnk_WORD word7 | ||
443 | #define lpfc_wqe_gen_erp_SHIFT 22 | ||
444 | #define lpfc_wqe_gen_erp_MASK 0x00000001 | ||
445 | #define lpfc_wqe_gen_erp_WORD word7 | ||
446 | #define lpfc_wqe_gen_pu_SHIFT 20 | ||
447 | #define lpfc_wqe_gen_pu_MASK 0x00000003 | ||
448 | #define lpfc_wqe_gen_pu_WORD word7 | ||
449 | #define lpfc_wqe_gen_class_SHIFT 16 | ||
450 | #define lpfc_wqe_gen_class_MASK 0x00000007 | ||
451 | #define lpfc_wqe_gen_class_WORD word7 | ||
452 | #define lpfc_wqe_gen_command_SHIFT 8 | ||
453 | #define lpfc_wqe_gen_command_MASK 0x000000FF | ||
454 | #define lpfc_wqe_gen_command_WORD word7 | ||
455 | #define lpfc_wqe_gen_status_SHIFT 4 | ||
456 | #define lpfc_wqe_gen_status_MASK 0x0000000F | ||
457 | #define lpfc_wqe_gen_status_WORD word7 | ||
458 | #define lpfc_wqe_gen_ct_SHIFT 2 | ||
459 | #define lpfc_wqe_gen_ct_MASK 0x00000003 | ||
460 | #define lpfc_wqe_gen_ct_WORD word7 | ||
461 | uint32_t abort_tag; | ||
462 | uint32_t word9; | ||
463 | #define lpfc_wqe_gen_request_tag_SHIFT 0 | ||
464 | #define lpfc_wqe_gen_request_tag_MASK 0x0000FFFF | ||
465 | #define lpfc_wqe_gen_request_tag_WORD word9 | ||
466 | uint32_t word10; | ||
467 | #define lpfc_wqe_gen_ccp_SHIFT 24 | ||
468 | #define lpfc_wqe_gen_ccp_MASK 0x000000FF | ||
469 | #define lpfc_wqe_gen_ccp_WORD word10 | ||
470 | #define lpfc_wqe_gen_ccpe_SHIFT 23 | ||
471 | #define lpfc_wqe_gen_ccpe_MASK 0x00000001 | ||
472 | #define lpfc_wqe_gen_ccpe_WORD word10 | ||
473 | #define lpfc_wqe_gen_pv_SHIFT 19 | ||
474 | #define lpfc_wqe_gen_pv_MASK 0x00000001 | ||
475 | #define lpfc_wqe_gen_pv_WORD word10 | ||
476 | #define lpfc_wqe_gen_pri_SHIFT 16 | ||
477 | #define lpfc_wqe_gen_pri_MASK 0x00000007 | ||
478 | #define lpfc_wqe_gen_pri_WORD word10 | ||
479 | uint32_t word11; | ||
480 | #define lpfc_wqe_gen_cq_id_SHIFT 16 | ||
481 | #define lpfc_wqe_gen_cq_id_MASK 0x0000FFFF | ||
482 | #define lpfc_wqe_gen_cq_id_WORD word11 | ||
483 | #define LPFC_WQE_CQ_ID_DEFAULT 0xffff | ||
484 | #define lpfc_wqe_gen_wqec_SHIFT 7 | ||
485 | #define lpfc_wqe_gen_wqec_MASK 0x00000001 | ||
486 | #define lpfc_wqe_gen_wqec_WORD word11 | ||
487 | #define ELS_ID_FLOGI 3 | ||
488 | #define ELS_ID_FDISC 2 | ||
489 | #define ELS_ID_LOGO 1 | ||
490 | #define ELS_ID_DEFAULT 0 | ||
491 | #define lpfc_wqe_gen_els_id_SHIFT 4 | ||
492 | #define lpfc_wqe_gen_els_id_MASK 0x00000003 | ||
493 | #define lpfc_wqe_gen_els_id_WORD word11 | ||
494 | #define lpfc_wqe_gen_cmd_type_SHIFT 0 | ||
495 | #define lpfc_wqe_gen_cmd_type_MASK 0x0000000F | ||
496 | #define lpfc_wqe_gen_cmd_type_WORD word11 | ||
497 | uint32_t payload[4]; | ||
498 | }; | ||
499 | |||
500 | struct lpfc_rqe { | 427 | struct lpfc_rqe { |
501 | uint32_t address_hi; | 428 | uint32_t address_hi; |
502 | uint32_t address_lo; | 429 | uint32_t address_lo; |
@@ -2279,9 +2206,36 @@ struct wqe_common { | |||
2279 | #define wqe_reqtag_MASK 0x0000FFFF | 2206 | #define wqe_reqtag_MASK 0x0000FFFF |
2280 | #define wqe_reqtag_WORD word9 | 2207 | #define wqe_reqtag_WORD word9 |
2281 | #define wqe_rcvoxid_SHIFT 16 | 2208 | #define wqe_rcvoxid_SHIFT 16 |
2282 | #define wqe_rcvoxid_MASK 0x0000FFFF | 2209 | #define wqe_rcvoxid_MASK 0x0000FFFF |
2283 | #define wqe_rcvoxid_WORD word9 | 2210 | #define wqe_rcvoxid_WORD word9 |
2284 | uint32_t word10; | 2211 | uint32_t word10; |
2212 | #define wqe_ebde_cnt_SHIFT 0 | ||
2213 | #define wqe_ebde_cnt_MASK 0x00000007 | ||
2214 | #define wqe_ebde_cnt_WORD word10 | ||
2215 | #define wqe_lenloc_SHIFT 7 | ||
2216 | #define wqe_lenloc_MASK 0x00000003 | ||
2217 | #define wqe_lenloc_WORD word10 | ||
2218 | #define LPFC_WQE_LENLOC_NONE 0 | ||
2219 | #define LPFC_WQE_LENLOC_WORD3 1 | ||
2220 | #define LPFC_WQE_LENLOC_WORD12 2 | ||
2221 | #define LPFC_WQE_LENLOC_WORD4 3 | ||
2222 | #define wqe_qosd_SHIFT 9 | ||
2223 | #define wqe_qosd_MASK 0x00000001 | ||
2224 | #define wqe_qosd_WORD word10 | ||
2225 | #define wqe_xbl_SHIFT 11 | ||
2226 | #define wqe_xbl_MASK 0x00000001 | ||
2227 | #define wqe_xbl_WORD word10 | ||
2228 | #define wqe_iod_SHIFT 13 | ||
2229 | #define wqe_iod_MASK 0x00000001 | ||
2230 | #define wqe_iod_WORD word10 | ||
2231 | #define LPFC_WQE_IOD_WRITE 0 | ||
2232 | #define LPFC_WQE_IOD_READ 1 | ||
2233 | #define wqe_dbde_SHIFT 14 | ||
2234 | #define wqe_dbde_MASK 0x00000001 | ||
2235 | #define wqe_dbde_WORD word10 | ||
2236 | #define wqe_wqes_SHIFT 15 | ||
2237 | #define wqe_wqes_MASK 0x00000001 | ||
2238 | #define wqe_wqes_WORD word10 | ||
2285 | #define wqe_pri_SHIFT 16 | 2239 | #define wqe_pri_SHIFT 16 |
2286 | #define wqe_pri_MASK 0x00000007 | 2240 | #define wqe_pri_MASK 0x00000007 |
2287 | #define wqe_pri_WORD word10 | 2241 | #define wqe_pri_WORD word10 |
@@ -2295,18 +2249,26 @@ struct wqe_common { | |||
2295 | #define wqe_ccpe_MASK 0x00000001 | 2249 | #define wqe_ccpe_MASK 0x00000001 |
2296 | #define wqe_ccpe_WORD word10 | 2250 | #define wqe_ccpe_WORD word10 |
2297 | #define wqe_ccp_SHIFT 24 | 2251 | #define wqe_ccp_SHIFT 24 |
2298 | #define wqe_ccp_MASK 0x000000ff | 2252 | #define wqe_ccp_MASK 0x000000ff |
2299 | #define wqe_ccp_WORD word10 | 2253 | #define wqe_ccp_WORD word10 |
2300 | uint32_t word11; | 2254 | uint32_t word11; |
2301 | #define wqe_cmd_type_SHIFT 0 | 2255 | #define wqe_cmd_type_SHIFT 0 |
2302 | #define wqe_cmd_type_MASK 0x0000000f | 2256 | #define wqe_cmd_type_MASK 0x0000000f |
2303 | #define wqe_cmd_type_WORD word11 | 2257 | #define wqe_cmd_type_WORD word11 |
2304 | #define wqe_wqec_SHIFT 7 | 2258 | #define wqe_els_id_SHIFT 4 |
2305 | #define wqe_wqec_MASK 0x00000001 | 2259 | #define wqe_els_id_MASK 0x00000003 |
2306 | #define wqe_wqec_WORD word11 | 2260 | #define wqe_els_id_WORD word11 |
2307 | #define wqe_cqid_SHIFT 16 | 2261 | #define LPFC_ELS_ID_FLOGI 3 |
2308 | #define wqe_cqid_MASK 0x0000ffff | 2262 | #define LPFC_ELS_ID_FDISC 2 |
2309 | #define wqe_cqid_WORD word11 | 2263 | #define LPFC_ELS_ID_LOGO 1 |
2264 | #define LPFC_ELS_ID_DEFAULT 0 | ||
2265 | #define wqe_wqec_SHIFT 7 | ||
2266 | #define wqe_wqec_MASK 0x00000001 | ||
2267 | #define wqe_wqec_WORD word11 | ||
2268 | #define wqe_cqid_SHIFT 16 | ||
2269 | #define wqe_cqid_MASK 0x0000ffff | ||
2270 | #define wqe_cqid_WORD word11 | ||
2271 | #define LPFC_WQE_CQ_ID_DEFAULT 0xffff | ||
2310 | }; | 2272 | }; |
2311 | 2273 | ||
2312 | struct wqe_did { | 2274 | struct wqe_did { |
@@ -2325,6 +2287,15 @@ struct wqe_did { | |||
2325 | #define wqe_xmit_bls_xo_WORD word5 | 2287 | #define wqe_xmit_bls_xo_WORD word5 |
2326 | }; | 2288 | }; |
2327 | 2289 | ||
2290 | struct lpfc_wqe_generic{ | ||
2291 | struct ulp_bde64 bde; | ||
2292 | uint32_t word3; | ||
2293 | uint32_t word4; | ||
2294 | uint32_t word5; | ||
2295 | struct wqe_common wqe_com; | ||
2296 | uint32_t payload[4]; | ||
2297 | }; | ||
2298 | |||
2328 | struct els_request64_wqe { | 2299 | struct els_request64_wqe { |
2329 | struct ulp_bde64 bde; | 2300 | struct ulp_bde64 bde; |
2330 | uint32_t payload_len; | 2301 | uint32_t payload_len; |
@@ -2356,9 +2327,9 @@ struct els_request64_wqe { | |||
2356 | 2327 | ||
2357 | struct xmit_els_rsp64_wqe { | 2328 | struct xmit_els_rsp64_wqe { |
2358 | struct ulp_bde64 bde; | 2329 | struct ulp_bde64 bde; |
2359 | uint32_t rsvd3; | 2330 | uint32_t response_payload_len; |
2360 | uint32_t rsvd4; | 2331 | uint32_t rsvd4; |
2361 | struct wqe_did wqe_dest; | 2332 | struct wqe_did wqe_dest; |
2362 | struct wqe_common wqe_com; /* words 6-11 */ | 2333 | struct wqe_common wqe_com; /* words 6-11 */ |
2363 | uint32_t rsvd_12_15[4]; | 2334 | uint32_t rsvd_12_15[4]; |
2364 | }; | 2335 | }; |
@@ -2427,7 +2398,7 @@ struct wqe_rctl_dfctl { | |||
2427 | 2398 | ||
2428 | struct xmit_seq64_wqe { | 2399 | struct xmit_seq64_wqe { |
2429 | struct ulp_bde64 bde; | 2400 | struct ulp_bde64 bde; |
2430 | uint32_t paylaod_offset; | 2401 | uint32_t rsvd3; |
2431 | uint32_t relative_offset; | 2402 | uint32_t relative_offset; |
2432 | struct wqe_rctl_dfctl wge_ctl; | 2403 | struct wqe_rctl_dfctl wge_ctl; |
2433 | struct wqe_common wqe_com; /* words 6-11 */ | 2404 | struct wqe_common wqe_com; /* words 6-11 */ |
@@ -2437,7 +2408,7 @@ struct xmit_seq64_wqe { | |||
2437 | }; | 2408 | }; |
2438 | struct xmit_bcast64_wqe { | 2409 | struct xmit_bcast64_wqe { |
2439 | struct ulp_bde64 bde; | 2410 | struct ulp_bde64 bde; |
2440 | uint32_t paylaod_len; | 2411 | uint32_t seq_payload_len; |
2441 | uint32_t rsvd4; | 2412 | uint32_t rsvd4; |
2442 | struct wqe_rctl_dfctl wge_ctl; /* word 5 */ | 2413 | struct wqe_rctl_dfctl wge_ctl; /* word 5 */ |
2443 | struct wqe_common wqe_com; /* words 6-11 */ | 2414 | struct wqe_common wqe_com; /* words 6-11 */ |
@@ -2446,8 +2417,8 @@ struct xmit_bcast64_wqe { | |||
2446 | 2417 | ||
2447 | struct gen_req64_wqe { | 2418 | struct gen_req64_wqe { |
2448 | struct ulp_bde64 bde; | 2419 | struct ulp_bde64 bde; |
2449 | uint32_t command_len; | 2420 | uint32_t request_payload_len; |
2450 | uint32_t payload_len; | 2421 | uint32_t relative_offset; |
2451 | struct wqe_rctl_dfctl wge_ctl; /* word 5 */ | 2422 | struct wqe_rctl_dfctl wge_ctl; /* word 5 */ |
2452 | struct wqe_common wqe_com; /* words 6-11 */ | 2423 | struct wqe_common wqe_com; /* words 6-11 */ |
2453 | uint32_t rsvd_12_15[4]; | 2424 | uint32_t rsvd_12_15[4]; |
@@ -2480,7 +2451,7 @@ struct abort_cmd_wqe { | |||
2480 | 2451 | ||
2481 | struct fcp_iwrite64_wqe { | 2452 | struct fcp_iwrite64_wqe { |
2482 | struct ulp_bde64 bde; | 2453 | struct ulp_bde64 bde; |
2483 | uint32_t payload_len; | 2454 | uint32_t payload_offset_len; |
2484 | uint32_t total_xfer_len; | 2455 | uint32_t total_xfer_len; |
2485 | uint32_t initial_xfer_len; | 2456 | uint32_t initial_xfer_len; |
2486 | struct wqe_common wqe_com; /* words 6-11 */ | 2457 | struct wqe_common wqe_com; /* words 6-11 */ |
@@ -2489,7 +2460,7 @@ struct fcp_iwrite64_wqe { | |||
2489 | 2460 | ||
2490 | struct fcp_iread64_wqe { | 2461 | struct fcp_iread64_wqe { |
2491 | struct ulp_bde64 bde; | 2462 | struct ulp_bde64 bde; |
2492 | uint32_t payload_len; /* word 3 */ | 2463 | uint32_t payload_offset_len; /* word 3 */ |
2493 | uint32_t total_xfer_len; /* word 4 */ | 2464 | uint32_t total_xfer_len; /* word 4 */ |
2494 | uint32_t rsrvd5; /* word 5 */ | 2465 | uint32_t rsrvd5; /* word 5 */ |
2495 | struct wqe_common wqe_com; /* words 6-11 */ | 2466 | struct wqe_common wqe_com; /* words 6-11 */ |
@@ -2497,10 +2468,12 @@ struct fcp_iread64_wqe { | |||
2497 | }; | 2468 | }; |
2498 | 2469 | ||
2499 | struct fcp_icmnd64_wqe { | 2470 | struct fcp_icmnd64_wqe { |
2500 | struct ulp_bde64 bde; /* words 0-2 */ | 2471 | struct ulp_bde64 bde; /* words 0-2 */ |
2501 | uint32_t rsrvd[3]; /* words 3-5 */ | 2472 | uint32_t rsrvd3; /* word 3 */ |
2473 | uint32_t rsrvd4; /* word 4 */ | ||
2474 | uint32_t rsrvd5; /* word 5 */ | ||
2502 | struct wqe_common wqe_com; /* words 6-11 */ | 2475 | struct wqe_common wqe_com; /* words 6-11 */ |
2503 | uint32_t rsvd_12_15[4]; /* word 12-15 */ | 2476 | uint32_t rsvd_12_15[4]; /* word 12-15 */ |
2504 | }; | 2477 | }; |
2505 | 2478 | ||
2506 | 2479 | ||
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c index ce4145377efd..554efa6623f4 100644 --- a/drivers/scsi/lpfc/lpfc_sli.c +++ b/drivers/scsi/lpfc/lpfc_sli.c | |||
@@ -95,7 +95,7 @@ lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe *wqe) | |||
95 | return -ENOMEM; | 95 | return -ENOMEM; |
96 | /* set consumption flag every once in a while */ | 96 | /* set consumption flag every once in a while */ |
97 | if (!((q->host_index + 1) % LPFC_RELEASE_NOTIFICATION_INTERVAL)) | 97 | if (!((q->host_index + 1) % LPFC_RELEASE_NOTIFICATION_INTERVAL)) |
98 | bf_set(lpfc_wqe_gen_wqec, &wqe->generic, 1); | 98 | bf_set(wqe_wqec, &wqe->generic.wqe_com, 1); |
99 | 99 | ||
100 | lpfc_sli_pcimem_bcopy(wqe, temp_wqe, q->entry_size); | 100 | lpfc_sli_pcimem_bcopy(wqe, temp_wqe, q->entry_size); |
101 | 101 | ||
@@ -5965,7 +5965,7 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq, | |||
5965 | uint16_t abrt_iotag; | 5965 | uint16_t abrt_iotag; |
5966 | struct lpfc_iocbq *abrtiocbq; | 5966 | struct lpfc_iocbq *abrtiocbq; |
5967 | struct ulp_bde64 *bpl = NULL; | 5967 | struct ulp_bde64 *bpl = NULL; |
5968 | uint32_t els_id = ELS_ID_DEFAULT; | 5968 | uint32_t els_id = LPFC_ELS_ID_DEFAULT; |
5969 | int numBdes, i; | 5969 | int numBdes, i; |
5970 | struct ulp_bde64 bde; | 5970 | struct ulp_bde64 bde; |
5971 | 5971 | ||
@@ -5982,7 +5982,7 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq, | |||
5982 | memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe)); | 5982 | memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe)); |
5983 | abort_tag = (uint32_t) iocbq->iotag; | 5983 | abort_tag = (uint32_t) iocbq->iotag; |
5984 | xritag = iocbq->sli4_xritag; | 5984 | xritag = iocbq->sli4_xritag; |
5985 | wqe->words[7] = 0; /* The ct field has moved so reset */ | 5985 | wqe->generic.wqe_com.word7 = 0; /* The ct field has moved so reset */ |
5986 | /* words0-2 bpl convert bde */ | 5986 | /* words0-2 bpl convert bde */ |
5987 | if (iocbq->iocb.un.genreq64.bdl.bdeFlags == BUFF_TYPE_BLP_64) { | 5987 | if (iocbq->iocb.un.genreq64.bdl.bdeFlags == BUFF_TYPE_BLP_64) { |
5988 | numBdes = iocbq->iocb.un.genreq64.bdl.bdeSize / | 5988 | numBdes = iocbq->iocb.un.genreq64.bdl.bdeSize / |
@@ -6033,109 +6033,117 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq, | |||
6033 | * contains the FCFI and remote N_Port_ID is | 6033 | * contains the FCFI and remote N_Port_ID is |
6034 | * in word 5. | 6034 | * in word 5. |
6035 | */ | 6035 | */ |
6036 | |||
6037 | ct = ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l); | 6036 | ct = ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l); |
6038 | bf_set(lpfc_wqe_gen_context, &wqe->generic, | 6037 | bf_set(wqe_ctxt_tag, &wqe->els_req.wqe_com, |
6039 | iocbq->iocb.ulpContext); | 6038 | iocbq->iocb.ulpContext); |
6040 | 6039 | bf_set(wqe_ct, &wqe->els_req.wqe_com, ct); | |
6041 | bf_set(lpfc_wqe_gen_ct, &wqe->generic, ct); | 6040 | bf_set(wqe_pu, &wqe->els_req.wqe_com, 0); |
6042 | bf_set(lpfc_wqe_gen_pu, &wqe->generic, 0); | ||
6043 | /* CCP CCPE PV PRI in word10 were set in the memcpy */ | 6041 | /* CCP CCPE PV PRI in word10 were set in the memcpy */ |
6044 | |||
6045 | if (command_type == ELS_COMMAND_FIP) { | 6042 | if (command_type == ELS_COMMAND_FIP) { |
6046 | els_id = ((iocbq->iocb_flag & LPFC_FIP_ELS_ID_MASK) | 6043 | els_id = ((iocbq->iocb_flag & LPFC_FIP_ELS_ID_MASK) |
6047 | >> LPFC_FIP_ELS_ID_SHIFT); | 6044 | >> LPFC_FIP_ELS_ID_SHIFT); |
6048 | } | 6045 | } |
6049 | bf_set(lpfc_wqe_gen_els_id, &wqe->generic, els_id); | 6046 | bf_set(wqe_els_id, &wqe->els_req.wqe_com, els_id); |
6050 | 6047 | bf_set(wqe_dbde, &wqe->els_req.wqe_com, 1); | |
6048 | bf_set(wqe_iod, &wqe->els_req.wqe_com, LPFC_WQE_IOD_READ); | ||
6049 | bf_set(wqe_qosd, &wqe->els_req.wqe_com, 1); | ||
6050 | bf_set(wqe_lenloc, &wqe->els_req.wqe_com, LPFC_WQE_LENLOC_NONE); | ||
6051 | bf_set(wqe_ebde_cnt, &wqe->els_req.wqe_com, 0); | ||
6051 | break; | 6052 | break; |
6052 | case CMD_XMIT_SEQUENCE64_CX: | 6053 | case CMD_XMIT_SEQUENCE64_CX: |
6053 | bf_set(lpfc_wqe_gen_context, &wqe->generic, | 6054 | bf_set(wqe_ctxt_tag, &wqe->xmit_sequence.wqe_com, |
6054 | iocbq->iocb.un.ulpWord[3]); | 6055 | iocbq->iocb.un.ulpWord[3]); |
6055 | wqe->generic.word3 = 0; | 6056 | bf_set(wqe_rcvoxid, &wqe->xmit_sequence.wqe_com, |
6056 | bf_set(wqe_rcvoxid, &wqe->generic, iocbq->iocb.ulpContext); | 6057 | iocbq->iocb.ulpContext); |
6057 | /* The entire sequence is transmitted for this IOCB */ | 6058 | /* The entire sequence is transmitted for this IOCB */ |
6058 | xmit_len = total_len; | 6059 | xmit_len = total_len; |
6059 | cmnd = CMD_XMIT_SEQUENCE64_CR; | 6060 | cmnd = CMD_XMIT_SEQUENCE64_CR; |
6060 | case CMD_XMIT_SEQUENCE64_CR: | 6061 | case CMD_XMIT_SEQUENCE64_CR: |
6061 | /* word3 iocb=io_tag32 wqe=payload_offset */ | 6062 | /* word3 iocb=io_tag32 wqe=reserved */ |
6062 | /* payload offset used for multilpe outstanding | 6063 | wqe->xmit_sequence.rsvd3 = 0; |
6063 | * sequences on the same exchange | ||
6064 | */ | ||
6065 | wqe->words[3] = 0; | ||
6066 | /* word4 relative_offset memcpy */ | 6064 | /* word4 relative_offset memcpy */ |
6067 | /* word5 r_ctl/df_ctl memcpy */ | 6065 | /* word5 r_ctl/df_ctl memcpy */ |
6068 | bf_set(lpfc_wqe_gen_pu, &wqe->generic, 0); | 6066 | bf_set(wqe_pu, &wqe->xmit_sequence.wqe_com, 0); |
6067 | bf_set(wqe_dbde, &wqe->xmit_sequence.wqe_com, 1); | ||
6068 | bf_set(wqe_iod, &wqe->xmit_sequence.wqe_com, | ||
6069 | LPFC_WQE_IOD_WRITE); | ||
6070 | bf_set(wqe_lenloc, &wqe->xmit_sequence.wqe_com, | ||
6071 | LPFC_WQE_LENLOC_WORD12); | ||
6072 | bf_set(wqe_ebde_cnt, &wqe->xmit_sequence.wqe_com, 0); | ||
6069 | wqe->xmit_sequence.xmit_len = xmit_len; | 6073 | wqe->xmit_sequence.xmit_len = xmit_len; |
6070 | command_type = OTHER_COMMAND; | 6074 | command_type = OTHER_COMMAND; |
6071 | break; | 6075 | break; |
6072 | case CMD_XMIT_BCAST64_CN: | 6076 | case CMD_XMIT_BCAST64_CN: |
6073 | /* word3 iocb=iotag32 wqe=payload_len */ | 6077 | /* word3 iocb=iotag32 wqe=seq_payload_len */ |
6074 | wqe->words[3] = 0; /* no definition for this in wqe */ | 6078 | wqe->xmit_bcast64.seq_payload_len = xmit_len; |
6075 | /* word4 iocb=rsvd wqe=rsvd */ | 6079 | /* word4 iocb=rsvd wqe=rsvd */ |
6076 | /* word5 iocb=rctl/type/df_ctl wqe=rctl/type/df_ctl memcpy */ | 6080 | /* word5 iocb=rctl/type/df_ctl wqe=rctl/type/df_ctl memcpy */ |
6077 | /* word6 iocb=ctxt_tag/io_tag wqe=ctxt_tag/xri */ | 6081 | /* word6 iocb=ctxt_tag/io_tag wqe=ctxt_tag/xri */ |
6078 | bf_set(lpfc_wqe_gen_ct, &wqe->generic, | 6082 | bf_set(wqe_ct, &wqe->xmit_bcast64.wqe_com, |
6079 | ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l)); | 6083 | ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l)); |
6084 | bf_set(wqe_dbde, &wqe->xmit_bcast64.wqe_com, 1); | ||
6085 | bf_set(wqe_iod, &wqe->xmit_bcast64.wqe_com, LPFC_WQE_IOD_WRITE); | ||
6086 | bf_set(wqe_lenloc, &wqe->xmit_bcast64.wqe_com, | ||
6087 | LPFC_WQE_LENLOC_WORD3); | ||
6088 | bf_set(wqe_ebde_cnt, &wqe->xmit_bcast64.wqe_com, 0); | ||
6080 | break; | 6089 | break; |
6081 | case CMD_FCP_IWRITE64_CR: | 6090 | case CMD_FCP_IWRITE64_CR: |
6082 | command_type = FCP_COMMAND_DATA_OUT; | 6091 | command_type = FCP_COMMAND_DATA_OUT; |
6083 | /* The struct for wqe fcp_iwrite has 3 fields that are somewhat | 6092 | /* word3 iocb=iotag wqe=payload_offset_len */ |
6084 | * confusing. | 6093 | /* Add the FCP_CMD and FCP_RSP sizes to get the offset */ |
6085 | * word3 is payload_len: byte offset to the sgl entry for the | 6094 | wqe->fcp_iwrite.payload_offset_len = |
6086 | * fcp_command. | 6095 | xmit_len + sizeof(struct fcp_rsp); |
6087 | * word4 is total xfer len, same as the IOCB->ulpParameter. | 6096 | /* word4 iocb=parameter wqe=total_xfer_length memcpy */ |
6088 | * word5 is initial xfer len 0 = wait for xfer-ready | 6097 | /* word5 iocb=initial_xfer_len wqe=initial_xfer_len memcpy */ |
6089 | */ | 6098 | bf_set(wqe_erp, &wqe->fcp_iwrite.wqe_com, |
6090 | 6099 | iocbq->iocb.ulpFCP2Rcvy); | |
6091 | /* Always wait for xfer-ready before sending data */ | 6100 | bf_set(wqe_lnk, &wqe->fcp_iwrite.wqe_com, iocbq->iocb.ulpXS); |
6092 | wqe->fcp_iwrite.initial_xfer_len = 0; | 6101 | /* Always open the exchange */ |
6093 | /* word 4 (xfer length) should have been set on the memcpy */ | 6102 | bf_set(wqe_xc, &wqe->fcp_iwrite.wqe_com, 0); |
6094 | 6103 | bf_set(wqe_dbde, &wqe->fcp_iwrite.wqe_com, 1); | |
6095 | /* allow write to fall through to read */ | 6104 | bf_set(wqe_iod, &wqe->fcp_iwrite.wqe_com, LPFC_WQE_IOD_WRITE); |
6105 | bf_set(wqe_lenloc, &wqe->fcp_iwrite.wqe_com, | ||
6106 | LPFC_WQE_LENLOC_WORD4); | ||
6107 | bf_set(wqe_ebde_cnt, &wqe->fcp_iwrite.wqe_com, 0); | ||
6108 | bf_set(wqe_pu, &wqe->fcp_iwrite.wqe_com, iocbq->iocb.ulpPU); | ||
6109 | break; | ||
6096 | case CMD_FCP_IREAD64_CR: | 6110 | case CMD_FCP_IREAD64_CR: |
6097 | /* FCP_CMD is always the 1st sgl entry */ | 6111 | /* word3 iocb=iotag wqe=payload_offset_len */ |
6098 | wqe->fcp_iread.payload_len = | 6112 | /* Add the FCP_CMD and FCP_RSP sizes to get the offset */ |
6113 | wqe->fcp_iread.payload_offset_len = | ||
6099 | xmit_len + sizeof(struct fcp_rsp); | 6114 | xmit_len + sizeof(struct fcp_rsp); |
6100 | 6115 | /* word4 iocb=parameter wqe=total_xfer_length memcpy */ | |
6101 | /* word 4 (xfer length) should have been set on the memcpy */ | 6116 | /* word5 iocb=initial_xfer_len wqe=initial_xfer_len memcpy */ |
6102 | 6117 | bf_set(wqe_erp, &wqe->fcp_iread.wqe_com, | |
6103 | bf_set(lpfc_wqe_gen_erp, &wqe->generic, | 6118 | iocbq->iocb.ulpFCP2Rcvy); |
6104 | iocbq->iocb.ulpFCP2Rcvy); | 6119 | bf_set(wqe_lnk, &wqe->fcp_iread.wqe_com, iocbq->iocb.ulpXS); |
6105 | bf_set(lpfc_wqe_gen_lnk, &wqe->generic, iocbq->iocb.ulpXS); | ||
6106 | /* The XC bit and the XS bit are similar. The driver never | ||
6107 | * tracked whether or not the exchange was previouslly open. | ||
6108 | * XC = Exchange create, 0 is create. 1 is already open. | ||
6109 | * XS = link cmd: 1 do not close the exchange after command. | ||
6110 | * XS = 0 close exchange when command completes. | ||
6111 | * The only time we would not set the XC bit is when the XS bit | ||
6112 | * is set and we are sending our 2nd or greater command on | ||
6113 | * this exchange. | ||
6114 | */ | ||
6115 | /* Always open the exchange */ | 6120 | /* Always open the exchange */ |
6116 | bf_set(wqe_xc, &wqe->fcp_iread.wqe_com, 0); | 6121 | bf_set(wqe_xc, &wqe->fcp_iread.wqe_com, 0); |
6117 | 6122 | bf_set(wqe_dbde, &wqe->fcp_iread.wqe_com, 1); | |
6118 | wqe->words[10] &= 0xffff0000; /* zero out ebde count */ | 6123 | bf_set(wqe_iod, &wqe->fcp_iread.wqe_com, LPFC_WQE_IOD_READ); |
6119 | bf_set(lpfc_wqe_gen_pu, &wqe->generic, iocbq->iocb.ulpPU); | 6124 | bf_set(wqe_lenloc, &wqe->fcp_iread.wqe_com, |
6120 | break; | 6125 | LPFC_WQE_LENLOC_WORD4); |
6126 | bf_set(wqe_ebde_cnt, &wqe->fcp_iread.wqe_com, 0); | ||
6127 | bf_set(wqe_pu, &wqe->fcp_iread.wqe_com, iocbq->iocb.ulpPU); | ||
6128 | break; | ||
6121 | case CMD_FCP_ICMND64_CR: | 6129 | case CMD_FCP_ICMND64_CR: |
6130 | /* word3 iocb=IO_TAG wqe=reserved */ | ||
6131 | wqe->fcp_icmd.rsrvd3 = 0; | ||
6132 | bf_set(wqe_pu, &wqe->fcp_icmd.wqe_com, 0); | ||
6122 | /* Always open the exchange */ | 6133 | /* Always open the exchange */ |
6123 | bf_set(wqe_xc, &wqe->fcp_iread.wqe_com, 0); | 6134 | bf_set(wqe_xc, &wqe->fcp_icmd.wqe_com, 0); |
6124 | 6135 | bf_set(wqe_dbde, &wqe->fcp_icmd.wqe_com, 1); | |
6125 | wqe->words[4] = 0; | 6136 | bf_set(wqe_iod, &wqe->fcp_icmd.wqe_com, LPFC_WQE_IOD_WRITE); |
6126 | wqe->words[10] &= 0xffff0000; /* zero out ebde count */ | 6137 | bf_set(wqe_qosd, &wqe->fcp_icmd.wqe_com, 1); |
6127 | bf_set(lpfc_wqe_gen_pu, &wqe->generic, 0); | 6138 | bf_set(wqe_lenloc, &wqe->fcp_icmd.wqe_com, |
6139 | LPFC_WQE_LENLOC_NONE); | ||
6140 | bf_set(wqe_ebde_cnt, &wqe->fcp_icmd.wqe_com, 0); | ||
6128 | break; | 6141 | break; |
6129 | case CMD_GEN_REQUEST64_CR: | 6142 | case CMD_GEN_REQUEST64_CR: |
6130 | /* word3 command length is described as byte offset to the | 6143 | /* word3 iocb=IO_TAG wqe=request_payload_len */ |
6131 | * rsp_data. Would always be 16, sizeof(struct sli4_sge) | 6144 | wqe->gen_req.request_payload_len = xmit_len; |
6132 | * sgl[0] = cmnd | 6145 | /* word4 iocb=parameter wqe=relative_offset memcpy */ |
6133 | * sgl[1] = rsp. | 6146 | /* word5 [rctl, type, df_ctl, la] copied in memcpy */ |
6134 | * | ||
6135 | */ | ||
6136 | wqe->gen_req.command_len = xmit_len; | ||
6137 | /* Word4 parameter copied in the memcpy */ | ||
6138 | /* Word5 [rctl, type, df_ctl, la] copied in memcpy */ | ||
6139 | /* word6 context tag copied in memcpy */ | 6147 | /* word6 context tag copied in memcpy */ |
6140 | if (iocbq->iocb.ulpCt_h || iocbq->iocb.ulpCt_l) { | 6148 | if (iocbq->iocb.ulpCt_h || iocbq->iocb.ulpCt_l) { |
6141 | ct = ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l); | 6149 | ct = ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l); |
@@ -6144,31 +6152,39 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq, | |||
6144 | ct, iocbq->iocb.ulpCommand); | 6152 | ct, iocbq->iocb.ulpCommand); |
6145 | return IOCB_ERROR; | 6153 | return IOCB_ERROR; |
6146 | } | 6154 | } |
6147 | bf_set(lpfc_wqe_gen_ct, &wqe->generic, 0); | 6155 | bf_set(wqe_ct, &wqe->gen_req.wqe_com, 0); |
6148 | bf_set(wqe_tmo, &wqe->gen_req.wqe_com, | 6156 | bf_set(wqe_tmo, &wqe->gen_req.wqe_com, iocbq->iocb.ulpTimeout); |
6149 | iocbq->iocb.ulpTimeout); | 6157 | bf_set(wqe_pu, &wqe->gen_req.wqe_com, iocbq->iocb.ulpPU); |
6150 | 6158 | bf_set(wqe_dbde, &wqe->gen_req.wqe_com, 1); | |
6151 | bf_set(lpfc_wqe_gen_pu, &wqe->generic, iocbq->iocb.ulpPU); | 6159 | bf_set(wqe_iod, &wqe->gen_req.wqe_com, LPFC_WQE_IOD_READ); |
6160 | bf_set(wqe_qosd, &wqe->gen_req.wqe_com, 1); | ||
6161 | bf_set(wqe_lenloc, &wqe->gen_req.wqe_com, LPFC_WQE_LENLOC_NONE); | ||
6162 | bf_set(wqe_ebde_cnt, &wqe->gen_req.wqe_com, 0); | ||
6152 | command_type = OTHER_COMMAND; | 6163 | command_type = OTHER_COMMAND; |
6153 | break; | 6164 | break; |
6154 | case CMD_XMIT_ELS_RSP64_CX: | 6165 | case CMD_XMIT_ELS_RSP64_CX: |
6155 | /* words0-2 BDE memcpy */ | 6166 | /* words0-2 BDE memcpy */ |
6156 | /* word3 iocb=iotag32 wqe=rsvd */ | 6167 | /* word3 iocb=iotag32 wqe=response_payload_len */ |
6157 | wqe->words[3] = 0; | 6168 | wqe->xmit_els_rsp.response_payload_len = xmit_len; |
6158 | /* word4 iocb=did wge=rsvd. */ | 6169 | /* word4 iocb=did wge=rsvd. */ |
6159 | wqe->words[4] = 0; | 6170 | wqe->xmit_els_rsp.rsvd4 = 0; |
6160 | /* word5 iocb=rsvd wge=did */ | 6171 | /* word5 iocb=rsvd wge=did */ |
6161 | bf_set(wqe_els_did, &wqe->xmit_els_rsp.wqe_dest, | 6172 | bf_set(wqe_els_did, &wqe->xmit_els_rsp.wqe_dest, |
6162 | iocbq->iocb.un.elsreq64.remoteID); | 6173 | iocbq->iocb.un.elsreq64.remoteID); |
6163 | 6174 | bf_set(wqe_ct, &wqe->xmit_els_rsp.wqe_com, | |
6164 | bf_set(lpfc_wqe_gen_ct, &wqe->generic, | 6175 | ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l)); |
6165 | ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l)); | 6176 | bf_set(wqe_pu, &wqe->xmit_els_rsp.wqe_com, iocbq->iocb.ulpPU); |
6166 | 6177 | bf_set(wqe_rcvoxid, &wqe->xmit_els_rsp.wqe_com, | |
6167 | bf_set(lpfc_wqe_gen_pu, &wqe->generic, iocbq->iocb.ulpPU); | 6178 | iocbq->iocb.ulpContext); |
6168 | bf_set(wqe_rcvoxid, &wqe->generic, iocbq->iocb.ulpContext); | ||
6169 | if (!iocbq->iocb.ulpCt_h && iocbq->iocb.ulpCt_l) | 6179 | if (!iocbq->iocb.ulpCt_h && iocbq->iocb.ulpCt_l) |
6170 | bf_set(lpfc_wqe_gen_context, &wqe->generic, | 6180 | bf_set(wqe_ctxt_tag, &wqe->xmit_els_rsp.wqe_com, |
6171 | iocbq->vport->vpi + phba->vpi_base); | 6181 | iocbq->vport->vpi + phba->vpi_base); |
6182 | bf_set(wqe_dbde, &wqe->xmit_els_rsp.wqe_com, 1); | ||
6183 | bf_set(wqe_iod, &wqe->xmit_els_rsp.wqe_com, LPFC_WQE_IOD_WRITE); | ||
6184 | bf_set(wqe_qosd, &wqe->xmit_els_rsp.wqe_com, 1); | ||
6185 | bf_set(wqe_lenloc, &wqe->xmit_els_rsp.wqe_com, | ||
6186 | LPFC_WQE_LENLOC_WORD3); | ||
6187 | bf_set(wqe_ebde_cnt, &wqe->xmit_els_rsp.wqe_com, 0); | ||
6172 | command_type = OTHER_COMMAND; | 6188 | command_type = OTHER_COMMAND; |
6173 | break; | 6189 | break; |
6174 | case CMD_CLOSE_XRI_CN: | 6190 | case CMD_CLOSE_XRI_CN: |
@@ -6193,15 +6209,19 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq, | |||
6193 | else | 6209 | else |
6194 | bf_set(abort_cmd_ia, &wqe->abort_cmd, 0); | 6210 | bf_set(abort_cmd_ia, &wqe->abort_cmd, 0); |
6195 | bf_set(abort_cmd_criteria, &wqe->abort_cmd, T_XRI_TAG); | 6211 | bf_set(abort_cmd_criteria, &wqe->abort_cmd, T_XRI_TAG); |
6196 | wqe->words[5] = 0; | 6212 | /* word5 iocb=CONTEXT_TAG|IO_TAG wqe=reserved */ |
6197 | bf_set(lpfc_wqe_gen_ct, &wqe->generic, | 6213 | wqe->abort_cmd.rsrvd5 = 0; |
6214 | bf_set(wqe_ct, &wqe->abort_cmd.wqe_com, | ||
6198 | ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l)); | 6215 | ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l)); |
6199 | abort_tag = iocbq->iocb.un.acxri.abortIoTag; | 6216 | abort_tag = iocbq->iocb.un.acxri.abortIoTag; |
6200 | /* | 6217 | /* |
6201 | * The abort handler will send us CMD_ABORT_XRI_CN or | 6218 | * The abort handler will send us CMD_ABORT_XRI_CN or |
6202 | * CMD_CLOSE_XRI_CN and the fw only accepts CMD_ABORT_XRI_CX | 6219 | * CMD_CLOSE_XRI_CN and the fw only accepts CMD_ABORT_XRI_CX |
6203 | */ | 6220 | */ |
6204 | bf_set(lpfc_wqe_gen_command, &wqe->generic, CMD_ABORT_XRI_CX); | 6221 | bf_set(wqe_cmnd, &wqe->abort_cmd.wqe_com, CMD_ABORT_XRI_CX); |
6222 | bf_set(wqe_qosd, &wqe->abort_cmd.wqe_com, 1); | ||
6223 | bf_set(wqe_lenloc, &wqe->abort_cmd.wqe_com, | ||
6224 | LPFC_WQE_LENLOC_NONE); | ||
6205 | cmnd = CMD_ABORT_XRI_CX; | 6225 | cmnd = CMD_ABORT_XRI_CX; |
6206 | command_type = OTHER_COMMAND; | 6226 | command_type = OTHER_COMMAND; |
6207 | xritag = 0; | 6227 | xritag = 0; |
@@ -6235,18 +6255,14 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq, | |||
6235 | bf_set(wqe_xmit_bls_pt, &wqe->xmit_bls_rsp.wqe_dest, 0x1); | 6255 | bf_set(wqe_xmit_bls_pt, &wqe->xmit_bls_rsp.wqe_dest, 0x1); |
6236 | bf_set(wqe_ctxt_tag, &wqe->xmit_bls_rsp.wqe_com, | 6256 | bf_set(wqe_ctxt_tag, &wqe->xmit_bls_rsp.wqe_com, |
6237 | iocbq->iocb.ulpContext); | 6257 | iocbq->iocb.ulpContext); |
6258 | bf_set(wqe_qosd, &wqe->xmit_bls_rsp.wqe_com, 1); | ||
6259 | bf_set(wqe_lenloc, &wqe->xmit_bls_rsp.wqe_com, | ||
6260 | LPFC_WQE_LENLOC_NONE); | ||
6238 | /* Overwrite the pre-set comnd type with OTHER_COMMAND */ | 6261 | /* Overwrite the pre-set comnd type with OTHER_COMMAND */ |
6239 | command_type = OTHER_COMMAND; | 6262 | command_type = OTHER_COMMAND; |
6240 | break; | 6263 | break; |
6241 | case CMD_XRI_ABORTED_CX: | 6264 | case CMD_XRI_ABORTED_CX: |
6242 | case CMD_CREATE_XRI_CR: /* Do we expect to use this? */ | 6265 | case CMD_CREATE_XRI_CR: /* Do we expect to use this? */ |
6243 | /* words0-2 are all 0's no bde */ | ||
6244 | /* word3 and word4 are rsvrd */ | ||
6245 | wqe->words[3] = 0; | ||
6246 | wqe->words[4] = 0; | ||
6247 | /* word5 iocb=rsvd wge=did */ | ||
6248 | /* There is no remote port id in the IOCB? */ | ||
6249 | /* Let this fall through and fail */ | ||
6250 | case CMD_IOCB_FCP_IBIDIR64_CR: /* bidirectional xfer */ | 6266 | case CMD_IOCB_FCP_IBIDIR64_CR: /* bidirectional xfer */ |
6251 | case CMD_FCP_TSEND64_CX: /* Target mode send xfer-ready */ | 6267 | case CMD_FCP_TSEND64_CX: /* Target mode send xfer-ready */ |
6252 | case CMD_FCP_TRSP64_CX: /* Target mode rcv */ | 6268 | case CMD_FCP_TRSP64_CX: /* Target mode rcv */ |
@@ -6257,16 +6273,14 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq, | |||
6257 | iocbq->iocb.ulpCommand); | 6273 | iocbq->iocb.ulpCommand); |
6258 | return IOCB_ERROR; | 6274 | return IOCB_ERROR; |
6259 | break; | 6275 | break; |
6260 | |||
6261 | } | 6276 | } |
6262 | bf_set(lpfc_wqe_gen_xri, &wqe->generic, xritag); | 6277 | bf_set(wqe_xri_tag, &wqe->generic.wqe_com, xritag); |
6263 | bf_set(lpfc_wqe_gen_request_tag, &wqe->generic, iocbq->iotag); | 6278 | bf_set(wqe_reqtag, &wqe->generic.wqe_com, iocbq->iotag); |
6264 | wqe->generic.abort_tag = abort_tag; | 6279 | wqe->generic.wqe_com.abort_tag = abort_tag; |
6265 | bf_set(lpfc_wqe_gen_cmd_type, &wqe->generic, command_type); | 6280 | bf_set(wqe_cmd_type, &wqe->generic.wqe_com, command_type); |
6266 | bf_set(lpfc_wqe_gen_command, &wqe->generic, cmnd); | 6281 | bf_set(wqe_cmnd, &wqe->generic.wqe_com, cmnd); |
6267 | bf_set(lpfc_wqe_gen_class, &wqe->generic, iocbq->iocb.ulpClass); | 6282 | bf_set(wqe_class, &wqe->generic.wqe_com, iocbq->iocb.ulpClass); |
6268 | bf_set(lpfc_wqe_gen_cq_id, &wqe->generic, LPFC_WQE_CQ_ID_DEFAULT); | 6283 | bf_set(wqe_cqid, &wqe->generic.wqe_com, LPFC_WQE_CQ_ID_DEFAULT); |
6269 | |||
6270 | return 0; | 6284 | return 0; |
6271 | } | 6285 | } |
6272 | 6286 | ||