Lines Matching defs:iocbq
94 lpfc_get_iocb_from_iocbq(struct lpfc_iocbq *iocbq)
96 return &iocbq->iocb;
794 struct lpfc_iocbq * iocbq = NULL;
798 list_remove_head(lpfc_iocb_list, iocbq, struct lpfc_iocbq, list);
799 if (iocbq)
803 return iocbq;
1119 * @piocbq: Pointer to the iocbq.
1195 * @piocbq: Pointer to the iocbq.
1232 struct lpfc_iocbq * iocbq = NULL;
1236 iocbq = __lpfc_sli_get_iocbq(phba);
1238 return iocbq;
1244 * @iocbq: Pointer to driver iocb object.
1261 __lpfc_sli_release_iocbq_s4(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1268 if (iocbq->sli4_xritag == NO_XRI)
1271 sglq = __lpfc_clear_active_sglq(phba, iocbq->sli4_lxritag);
1275 if (iocbq->iocb_flag & LPFC_IO_NVMET) {
1288 if ((iocbq->iocb_flag & LPFC_EXCHANGE_BUSY) &&
1316 memset((char *)iocbq + start_clean, 0, sizeof(*iocbq) - start_clean);
1317 iocbq->sli4_lxritag = NO_XRI;
1318 iocbq->sli4_xritag = NO_XRI;
1319 iocbq->iocb_flag &= ~(LPFC_IO_NVME | LPFC_IO_NVMET |
1321 list_add_tail(&iocbq->list, &phba->lpfc_iocb_list);
1328 * @iocbq: Pointer to driver iocb object.
1337 __lpfc_sli_release_iocbq_s3(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1344 memset((char*)iocbq + start_clean, 0, sizeof(*iocbq) - start_clean);
1345 iocbq->sli4_xritag = NO_XRI;
1346 list_add_tail(&iocbq->list, &phba->lpfc_iocb_list);
1352 * @iocbq: Pointer to driver iocb object.
1360 __lpfc_sli_release_iocbq(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1364 phba->__lpfc_sli_release_iocbq(phba, iocbq);
1371 * @iocbq: Pointer to driver iocb object.
1377 lpfc_sli_release_iocbq(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1385 __lpfc_sli_release_iocbq(phba, iocbq);
1706 * @iocbq: Pointer to driver iocb object.
1716 lpfc_sli_next_iotag(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1728 psli->iocbq_lookup[iotag] = iocbq;
1730 iocbq->iotag = iotag;
1747 psli->iocbq_lookup[iotag] = iocbq;
1749 iocbq->iotag = iotag;
1762 psli->iocbq_lookup[iotag] = iocbq;
1764 iocbq->iotag = iotag;
2793 * @piocb: pointer to the iocbq struct representing the sequence starting
2910 * @saveq: Pointer to the iocbq struct representing the sequence starting frame.
2975 struct lpfc_iocbq *iocbq;
3043 list_for_each_entry(iocbq, &saveq->list, list) {
3044 irsp = &(iocbq->iocb);
3046 iocbq->context2 = lpfc_sli_get_buff(phba, pring,
3048 if (!iocbq->context2)
3058 iocbq->context3 = lpfc_sli_get_buff(phba, pring,
3060 if (!iocbq->context3)
3078 list_for_each_entry(iocbq, &pring->iocb_continue_saveq, clist) {
3079 if (iocbq->iocb.unsli3.rcvsli3.ox_id ==
3081 list_add_tail(&saveq->list, &iocbq->list);
3090 list_del_init(&iocbq->clist);
3091 saveq = iocbq;
7761 /* We allocate an iocbq for every receive context SGL.
7787 /* Each lpfc_io_buf job structure has an iocbq element.
9506 * @iocbq: Pointer to command iocb.
9518 lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
9540 if (iocbq->iocb_flag & LPFC_IO_FCP)
9542 else if (fip && (iocbq->iocb_flag & LPFC_FIP_ELS_ID_MASK))
9550 memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe));
9555 abort_tag = (uint32_t) iocbq->iotag;
9556 xritag = iocbq->sli4_xritag;
9558 if (iocbq->iocb.un.genreq64.bdl.bdeFlags == BUFF_TYPE_BLP_64) {
9559 numBdes = iocbq->iocb.un.genreq64.bdl.bdeSize /
9562 ((struct lpfc_dmabuf *)iocbq->context3)->virt;
9580 xmit_len = iocbq->iocb.un.fcpi64.bdl.bdeSize;
9582 iocbq->iocb.ulpIoTag = iocbq->iotag;
9583 cmnd = iocbq->iocb.ulpCommand;
9585 switch (iocbq->iocb.ulpCommand) {
9587 if (iocbq->iocb_flag & LPFC_IO_LIBDFC)
9588 ndlp = iocbq->context_un.ndlp;
9590 ndlp = (struct lpfc_nodelist *)iocbq->context1;
9591 if (!iocbq->iocb.ulpLe) {
9595 iocbq->iocb.ulpCommand);
9602 iocbq->iocb.ulpTimeout);
9607 ct = ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l);
9609 iocbq->iocb.ulpContext);
9614 els_id = ((iocbq->iocb_flag & LPFC_FIP_ELS_ID_MASK)
9617 iocbq->context2)->virt);
9630 iocbq->vport->fc_myDID);
9637 phba->vpi_ids[iocbq->vport->vpi]);
9638 } else if (pcmd && iocbq->context1) {
9656 iocbq->iocb.un.ulpWord[3]);
9658 iocbq->iocb.unsli3.rcvsli3.ox_id);
9687 ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l));
9705 iocbq->iocb.ulpFCP2Rcvy);
9706 bf_set(wqe_lnk, &wqe->fcp_iwrite.wqe_com, iocbq->iocb.ulpXS);
9711 bf_set(wqe_pu, &wqe->fcp_iwrite.wqe_com, iocbq->iocb.ulpPU);
9713 if (iocbq->iocb_flag & LPFC_IO_OAS) {
9716 if (iocbq->priority) {
9718 (iocbq->priority << 1));
9740 lpfc_cmd = iocbq->context1;
9769 iocbq->iocb.ulpFCP2Rcvy);
9770 bf_set(wqe_lnk, &wqe->fcp_iread.wqe_com, iocbq->iocb.ulpXS);
9775 bf_set(wqe_pu, &wqe->fcp_iread.wqe_com, iocbq->iocb.ulpPU);
9777 if (iocbq->iocb_flag & LPFC_IO_OAS) {
9780 if (iocbq->priority) {
9782 (iocbq->priority << 1));
9804 lpfc_cmd = iocbq->context1;
9839 iocbq->iocb.ulpFCP2Rcvy);
9840 if (iocbq->iocb_flag & LPFC_IO_OAS) {
9843 if (iocbq->priority) {
9845 (iocbq->priority << 1));
9861 lpfc_cmd = iocbq->context1;
9885 numBdes = iocbq->iocb.un.genreq64.bdl.bdeSize /
9898 if (iocbq->iocb.ulpCt_h || iocbq->iocb.ulpCt_l) {
9899 ct = ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l);
9902 ct, iocbq->iocb.ulpCommand);
9906 bf_set(wqe_tmo, &wqe->gen_req.wqe_com, iocbq->iocb.ulpTimeout);
9907 bf_set(wqe_pu, &wqe->gen_req.wqe_com, iocbq->iocb.ulpPU);
9917 ndlp = (struct lpfc_nodelist *)iocbq->context1;
9925 iocbq->iocb.un.xseq64.xmit_els_remoteID);
9930 if (iocbq->vport->fc_flag & FC_PT2PT) {
9933 iocbq->vport->fc_myDID);
9934 if (iocbq->vport->fc_myDID == Fabric_DID) {
9941 ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l));
9942 bf_set(wqe_pu, &wqe->xmit_els_rsp.wqe_com, iocbq->iocb.ulpPU);
9944 iocbq->iocb.unsli3.rcvsli3.ox_id);
9945 if (!iocbq->iocb.ulpCt_h && iocbq->iocb.ulpCt_l)
9947 phba->vpi_ids[iocbq->vport->vpi]);
9957 iocbq->context2)->virt);
9961 iocbq->vport->fc_myDID);
9973 abrt_iotag = iocbq->iocb.un.acxri.abortContextTag;
9980 if ((iocbq->iocb.ulpCommand == CMD_CLOSE_XRI_CN) || fip)
9993 ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l));
9994 abort_tag = iocbq->iocb.un.acxri.abortIoTag;
10008 ndlp = (struct lpfc_nodelist *)iocbq->context1;
10011 * iocbq from scratch.
10016 bf_get(lpfc_abts_oxid, &iocbq->iocb.un.bls_rsp));
10017 if (bf_get(lpfc_abts_orig, &iocbq->iocb.un.bls_rsp) ==
10024 iocbq->sli4_xritag);
10031 bf_get(lpfc_abts_rxid, &iocbq->iocb.un.bls_rsp));
10040 iocbq->iocb.ulpContext);
10049 if (iocbq->iocb.un.xseq64.w5.hcsw.Rctl == FC_RCTL_BA_RJT) {
10051 bf_get(lpfc_vndr_code, &iocbq->iocb.un.bls_rsp));
10053 bf_get(lpfc_rsn_expln, &iocbq->iocb.un.bls_rsp));
10055 bf_get(lpfc_rsn_code, &iocbq->iocb.un.bls_rsp));
10070 bf_set(wqe_reqtag, &wqe->generic.wqe_com, iocbq->iotag);
10081 iocbq->iocb.ulpCommand);
10086 if (iocbq->iocb_flag & LPFC_IO_DIF_PASS)
10088 else if (iocbq->iocb_flag & LPFC_IO_DIF_STRIP)
10090 else if (iocbq->iocb_flag & LPFC_IO_DIF_INSERT)
10092 iocbq->iocb_flag &= ~(LPFC_IO_DIF_PASS | LPFC_IO_DIF_STRIP |
10095 bf_set(wqe_reqtag, &wqe->generic.wqe_com, iocbq->iotag);
10099 bf_set(wqe_class, &wqe->generic.wqe_com, iocbq->iocb.ulpClass);
10403 * @iocbq: Pointer to iocb object.
10415 struct lpfc_iocbq *iocbq)
10422 vpi = iocbq->iocb.un.asyncstat.sub_ctxt_tag;
10423 rpi = iocbq->iocb.ulpContext;
10428 vpi, rpi, iocbq->iocb.ulpStatus);
10437 if (iocbq->iocb.ulpStatus == IOSTAT_LOCAL_REJECT)
10445 iocbq->iocb.ulpContext, iocbq->iocb.ulpStatus,
10496 * @iocbq: Pointer to iocb object.
10507 struct lpfc_sli_ring * pring, struct lpfc_iocbq * iocbq)
10515 icmd = &iocbq->iocb;
10544 lpfc_sli_abts_err_handler(phba, iocbq);
11573 * @iocbq: Pointer to driver iocb object.
11594 lpfc_sli_validate_fcp_iocb(struct lpfc_iocbq *iocbq, struct lpfc_vport *vport,
11602 if (iocbq->vport != vport)
11605 if (!(iocbq->iocb_flag & LPFC_IO_FCP) ||
11606 !(iocbq->iocb_flag & LPFC_IO_ON_TXCMPLQ) ||
11607 iocbq->iocb_flag & LPFC_DRIVER_ABORTED)
11610 icmd = &iocbq->iocb;
11615 lpfc_cmd = container_of(iocbq, struct lpfc_io_buf, cur_iocbq);
11668 struct lpfc_iocbq *iocbq;
11673 iocbq = phba->sli.iocbq_lookup[i];
11675 if (lpfc_sli_validate_fcp_iocb (iocbq, vport, tgt_id, lun_id,
11736 struct lpfc_iocbq *iocbq;
11748 iocbq = phba->sli.iocbq_lookup[i];
11750 if (lpfc_sli_validate_fcp_iocb(iocbq, vport, tgt_id, lun_id,
11755 * If the iocbq is already being aborted, don't take a second
11758 if (iocbq->iocb_flag & LPFC_DRIVER_ABORTED)
11769 iocbq->iocb_flag |= LPFC_DRIVER_ABORTED;
11771 cmd = &iocbq->iocb;
11775 abtsiocb->iocb.un.acxri.abortIoTag = iocbq->sli4_xritag;
11783 abtsiocb->hba_wqidx = iocbq->hba_wqidx;
11784 if (iocbq->iocb_flag & LPFC_IO_FCP)
11786 if (iocbq->iocb_flag & LPFC_IO_FOF)
11797 pring_s4 = lpfc_sli4_calc_ring(phba, iocbq);
11845 struct lpfc_iocbq *iocbq;
11861 iocbq = phba->sli.iocbq_lookup[i];
11863 if (lpfc_sli_validate_fcp_iocb(iocbq, vport, tgt_id, lun_id,
11868 lpfc_cmd = container_of(iocbq, struct lpfc_io_buf, cur_iocbq);
11878 phba->sli4_hba.hdwq[iocbq->hba_wqidx].io_wq->pring;
11888 * If the iocbq is already being aborted, don't take a second
11891 if ((iocbq->iocb_flag & LPFC_DRIVER_ABORTED) ||
11892 !(iocbq->iocb_flag & LPFC_IO_ON_TXCMPLQ)) {
11908 icmd = &iocbq->iocb;
11913 iocbq->sli4_xritag;
11921 abtsiocbq->hba_wqidx = iocbq->hba_wqidx;
11922 if (iocbq->iocb_flag & LPFC_IO_FCP)
11924 if (iocbq->iocb_flag & LPFC_IO_FOF)
11942 iocbq->iocb_flag |= LPFC_DRIVER_ABORTED;
11996 * just free the iocbq.
12069 * function shall free the iocbq structure. If more clean up is
12073 * free the iocbq structure (if iocb_cmpl == NULL) or execute the
12117 * If the caller has provided a response iocbq buffer, then context2
13143 * This routine transfers the fields of a command iocbq to a response iocbq
13144 * by copying all the IOCB fields from command iocbq and transferring the
13253 * lpfc_sli4_els_wcqe_to_rspiocbq - Get response iocbq from els wcqe
16893 * that is in the iocbq structure. The xritag is assigned during iocbq
17842 * @cmd_iocbq: pointer to the command iocbq structure.
17843 * @rsp_iocbq: pointer to the response iocbq structure.
18137 * a list of iocbq structures to describe the sequence. This iocbq list will be
18139 * returns a pointer to the first iocbq in the list. If the function is unable
18140 * to allocate an iocbq then it throw out the received frames that were not
18141 * able to be described and return a pointer to the first iocbq. If unable to
18149 struct lpfc_iocbq *first_iocbq, *iocbq;
18162 /* Get an iocbq struct to fill in. */
18181 /* iocbq is prepped for internal consumption. Physical vpi. */
18201 iocbq = first_iocbq;
18207 if (!iocbq) {
18211 if (!iocbq->context3) {
18212 iocbq->context3 = d_buf;
18213 iocbq->iocb.ulpBdeCount++;
18219 &iocbq->iocb.unsli3.sli3Words[4];
18225 iocbq->iocb.unsli3.rcvsli3.acc_len += len;
18228 iocbq = lpfc_sli_get_iocbq(vport->phba);
18229 if (!iocbq) {
18243 iocbq->context2 = d_buf;
18244 iocbq->context3 = NULL;
18245 iocbq->iocb.ulpBdeCount = 1;
18247 iocbq->iocb.un.cont64[0].tus.f.bdeSize =
18250 iocbq->iocb.un.cont64[0].tus.f.bdeSize = len;
18253 iocbq->iocb.unsli3.rcvsli3.acc_len = tot_len;
18255 iocbq->iocb.un.rcvels.remoteID = sid;
18256 list_add_tail(&iocbq->list, &first_iocbq->list);
18271 struct lpfc_iocbq *iocbq, *curr_iocb, *next_iocb;
18275 iocbq = lpfc_prep_seq(vport, seq_dmabuf);
18276 if (!iocbq) {
18286 iocbq, fc_hdr->fh_r_ctl,
18298 &iocbq->list, list) {
18302 lpfc_sli_release_iocbq(phba, iocbq);
18324 struct lpfc_iocbq *iocbq = NULL;
18335 iocbq = lpfc_sli_get_iocbq(phba);
18336 if (!iocbq) {
18361 iocbq->iocb.un.xseq64.bdl.addrHigh = putPaddrHigh(pcmd->phys);
18362 iocbq->iocb.un.xseq64.bdl.addrLow = putPaddrLow(pcmd->phys);
18363 iocbq->iocb.un.xseq64.bdl.bdeFlags = BUFF_TYPE_BDE_64;
18364 iocbq->iocb.un.xseq64.bdl.bdeSize = frame_len;
18366 iocbq->context2 = pcmd;
18367 iocbq->vport = vport;
18368 iocbq->iocb_flag &= ~LPFC_FIP_ELS_ID_MASK;
18369 iocbq->iocb_flag |= LPFC_USE_FCPWQIDX;
18375 wqe = (union lpfc_wqe *)&iocbq->iocb;
18385 iocbq->iocb.ulpCommand = CMD_SEND_FRAME;
18386 iocbq->iocb.ulpLe = 1;
18387 iocbq->iocb_cmpl = lpfc_sli4_mds_loopback_cmpl;
18388 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, iocbq, 0);
18401 if (iocbq)
18402 lpfc_sli_release_iocbq(phba, iocbq);