Lines Matching refs:phba

135 lpfc_free_bsg_buffers(struct lpfc_hba *phba, struct lpfc_dmabuf *mlist)  in lpfc_free_bsg_buffers()  argument
142 lpfc_mbuf_free(phba, mlast->virt, mlast->phys); in lpfc_free_bsg_buffers()
146 lpfc_mbuf_free(phba, mlist->virt, mlist->phys); in lpfc_free_bsg_buffers()
153 lpfc_alloc_bsg_buffers(struct lpfc_hba *phba, unsigned int size, in lpfc_alloc_bsg_buffers() argument
175 lpfc_free_bsg_buffers(phba, mlist); in lpfc_alloc_bsg_buffers()
180 mp->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &(mp->phys)); in lpfc_alloc_bsg_buffers()
185 lpfc_free_bsg_buffers(phba, mlist); in lpfc_alloc_bsg_buffers()
295 lpfc_bsg_send_mgmt_cmd_cmp(struct lpfc_hba *phba, in lpfc_bsg_send_mgmt_cmd_cmp() argument
312 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_send_mgmt_cmd_cmp()
318 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_send_mgmt_cmd_cmp()
321 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_send_mgmt_cmd_cmp()
323 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_send_mgmt_cmd_cmp()
359 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_send_mgmt_cmd_cmp()
360 lpfc_free_bsg_buffers(phba, rmp); in lpfc_bsg_send_mgmt_cmd_cmp()
361 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_send_mgmt_cmd_cmp()
363 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_send_mgmt_cmd_cmp()
384 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_send_mgmt_cmd() local
406 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_send_mgmt_cmd()
422 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfc_bsg_send_mgmt_cmd()
435 bmp->virt = lpfc_mbuf_alloc(phba, 0, &bmp->phys); in lpfc_bsg_send_mgmt_cmd()
445 cmp = lpfc_alloc_bsg_buffers(phba, job->request_payload.payload_len, in lpfc_bsg_send_mgmt_cmd()
456 rmp = lpfc_alloc_bsg_buffers(phba, job->reply_payload.payload_len, 0, in lpfc_bsg_send_mgmt_cmd()
478 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_bsg_send_mgmt_cmd()
479 cmd->ulpContext = phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_bsg_send_mgmt_cmd()
481 cmdiocbq->vport = phba->pport; in lpfc_bsg_send_mgmt_cmd()
484 timeout = phba->fc_ratov * 2; in lpfc_bsg_send_mgmt_cmd()
499 if (phba->cfg_poll & DISABLE_FCP_RING_INT) { in lpfc_bsg_send_mgmt_cmd()
500 if (lpfc_readl(phba->HCregaddr, &creg_val)) { in lpfc_bsg_send_mgmt_cmd()
505 writel(creg_val, phba->HCregaddr); in lpfc_bsg_send_mgmt_cmd()
506 readl(phba->HCregaddr); /* flush */ in lpfc_bsg_send_mgmt_cmd()
509 iocb_stat = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, 0); in lpfc_bsg_send_mgmt_cmd()
512 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_send_mgmt_cmd()
518 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_send_mgmt_cmd()
530 lpfc_free_bsg_buffers(phba, rmp); in lpfc_bsg_send_mgmt_cmd()
532 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_send_mgmt_cmd()
535 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_send_mgmt_cmd()
538 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_send_mgmt_cmd()
568 lpfc_bsg_rport_els_cmp(struct lpfc_hba *phba, in lpfc_bsg_rport_els_cmp() argument
588 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_rport_els_cmp()
594 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_rport_els_cmp()
597 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_rport_els_cmp()
599 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_rport_els_cmp()
634 lpfc_els_free_iocb(phba, cmdiocbq); in lpfc_bsg_rport_els_cmp()
654 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_rport_els() local
681 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_rport_els()
717 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_bsg_rport_els()
718 cmdiocbq->iocb.ulpContext = phba->sli4_hba.rpi_ids[rpi]; in lpfc_bsg_rport_els()
732 if (phba->cfg_poll & DISABLE_FCP_RING_INT) { in lpfc_bsg_rport_els()
733 if (lpfc_readl(phba->HCregaddr, &creg_val)) { in lpfc_bsg_rport_els()
738 writel(creg_val, phba->HCregaddr); in lpfc_bsg_rport_els()
739 readl(phba->HCregaddr); /* flush */ in lpfc_bsg_rport_els()
742 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, 0); in lpfc_bsg_rport_els()
745 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_rport_els()
751 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_rport_els()
764 lpfc_els_free_iocb(phba, cmdiocbq); in lpfc_bsg_rport_els()
866 diag_cmd_data_free(struct lpfc_hba *phba, struct lpfc_dmabufext *mlist) in diag_cmd_data_free() argument
872 if ((!mlist) || (!lpfc_is_link_up(phba) && in diag_cmd_data_free()
873 (phba->link_flag & LS_LOOPBACK_MODE))) { in diag_cmd_data_free()
877 pcidev = phba->pcidev; in diag_cmd_data_free()
902 lpfc_bsg_ct_unsol_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, in lpfc_bsg_ct_unsol_event() argument
932 if (phba->link_state == LPFC_HBA_ERROR || in lpfc_bsg_ct_unsol_event()
933 (!(phba->sli.sli_flag & LPFC_SLI_ACTIVE))) in lpfc_bsg_ct_unsol_event()
936 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) in lpfc_bsg_ct_unsol_event()
941 dmabuf = lpfc_sli_ringpostbuf_get(phba, pring, dma_addr); in lpfc_bsg_ct_unsol_event()
948 if (!(phba->sli3_options & LPFC_SLI3_HBQ_ENABLED)) in lpfc_bsg_ct_unsol_event()
949 lpfc_sli_ringpostbuf_put(phba, pring, dmabuf); in lpfc_bsg_ct_unsol_event()
951 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
952 list_for_each_entry(evt, &phba->ct_ev_waiters, node) { in lpfc_bsg_ct_unsol_event()
958 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
961 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
963 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_ct_unsol_event()
969 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) { in lpfc_bsg_ct_unsol_event()
983 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_ct_unsol_event()
988 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
990 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
996 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) { in lpfc_bsg_ct_unsol_event()
1001 if (phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1023 dmabuf = lpfc_sli_ringpostbuf_get(phba, in lpfc_bsg_ct_unsol_event()
1027 lpfc_printf_log(phba, KERN_ERR, in lpfc_bsg_ct_unsol_event()
1033 spin_lock_irqsave(&phba->ct_ev_lock, in lpfc_bsg_ct_unsol_event()
1037 &phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1044 !(phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1046 lpfc_sli_ringpostbuf_put(phba, pring, in lpfc_bsg_ct_unsol_event()
1051 if (phba->sli_rev < in lpfc_bsg_ct_unsol_event()
1053 diag_cmd_data_free(phba, in lpfc_bsg_ct_unsol_event()
1058 if ((phba->sli_rev == in lpfc_bsg_ct_unsol_event()
1060 (phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1063 lpfc_in_buf_free(phba, in lpfc_bsg_ct_unsol_event()
1066 lpfc_post_buffer(phba, in lpfc_bsg_ct_unsol_event()
1072 if (!(phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1074 lpfc_post_buffer(phba, in lpfc_bsg_ct_unsol_event()
1083 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1084 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_bsg_ct_unsol_event()
1085 evt_dat->immed_dat = phba->ctx_idx; in lpfc_bsg_ct_unsol_event()
1086 phba->ctx_idx = (phba->ctx_idx + 1) % LPFC_CT_CTX_MAX; in lpfc_bsg_ct_unsol_event()
1088 if (phba->ct_ctx[evt_dat->immed_dat].valid == in lpfc_bsg_ct_unsol_event()
1090 lpfc_printf_log(phba, KERN_WARNING, LOG_ELS, in lpfc_bsg_ct_unsol_event()
1093 "sid:x%x\n", phba->ctx_idx, in lpfc_bsg_ct_unsol_event()
1094 phba->ct_ctx[ in lpfc_bsg_ct_unsol_event()
1096 phba->ct_ctx[ in lpfc_bsg_ct_unsol_event()
1098 phba->ct_ctx[evt_dat->immed_dat].rxid = in lpfc_bsg_ct_unsol_event()
1100 phba->ct_ctx[evt_dat->immed_dat].oxid = in lpfc_bsg_ct_unsol_event()
1102 phba->ct_ctx[evt_dat->immed_dat].SID = in lpfc_bsg_ct_unsol_event()
1104 phba->ct_ctx[evt_dat->immed_dat].valid = UNSOL_VALID; in lpfc_bsg_ct_unsol_event()
1128 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1130 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1133 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1138 if ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_bsg_ct_unsol_event()
1157 lpfc_bsg_ct_unsol_abort(struct lpfc_hba *phba, struct hbq_dmabuf *dmabuf) in lpfc_bsg_ct_unsol_abort() argument
1171 if (phba->ct_ctx[ctx_idx].valid != UNSOL_VALID) in lpfc_bsg_ct_unsol_abort()
1173 if (phba->ct_ctx[ctx_idx].rxid != rxid) in lpfc_bsg_ct_unsol_abort()
1175 if (phba->ct_ctx[ctx_idx].oxid != oxid) in lpfc_bsg_ct_unsol_abort()
1177 if (phba->ct_ctx[ctx_idx].SID != sid) in lpfc_bsg_ct_unsol_abort()
1179 phba->ct_ctx[ctx_idx].valid = UNSOL_INVALID; in lpfc_bsg_ct_unsol_abort()
1193 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_hba_set_event() local
1203 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_set_event()
1214 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1215 list_for_each_entry(evt, &phba->ct_ev_waiters, node) { in lpfc_bsg_hba_set_event()
1223 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1225 if (&evt->node == &phba->ct_ev_waiters) { in lpfc_bsg_hba_set_event()
1229 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_set_event()
1237 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_set_event()
1247 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1248 list_add(&evt->node, &phba->ct_ev_waiters); in lpfc_bsg_hba_set_event()
1251 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1254 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1258 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1277 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_hba_get_event() local
1287 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_get_event()
1299 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1300 list_for_each_entry_safe(evt, evt_next, &phba->ct_ev_waiters, node) { in lpfc_bsg_hba_get_event()
1312 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1325 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_get_event()
1346 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1348 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1378 lpfc_issue_ct_rsp_cmp(struct lpfc_hba *phba, in lpfc_issue_ct_rsp_cmp() argument
1393 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_issue_ct_rsp_cmp()
1399 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_issue_ct_rsp_cmp()
1402 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_issue_ct_rsp_cmp()
1404 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_issue_ct_rsp_cmp()
1435 lpfc_free_bsg_buffers(phba, cmp); in lpfc_issue_ct_rsp_cmp()
1436 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_issue_ct_rsp_cmp()
1438 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_issue_ct_rsp_cmp()
1460 lpfc_issue_ct_rsp(struct lpfc_hba *phba, struct fc_bsg_job *job, uint32_t tag, in lpfc_issue_ct_rsp() argument
1475 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_issue_ct_rsp()
1482 ctiocb = lpfc_sli_get_iocbq(phba); in lpfc_issue_ct_rsp()
1504 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_issue_ct_rsp()
1506 if (phba->ct_ctx[tag].valid != UNSOL_VALID) { in lpfc_issue_ct_rsp()
1510 icmd->ulpContext = phba->ct_ctx[tag].rxid; in lpfc_issue_ct_rsp()
1511 icmd->unsli3.rcvsli3.ox_id = phba->ct_ctx[tag].oxid; in lpfc_issue_ct_rsp()
1512 ndlp = lpfc_findnode_did(phba->pport, phba->ct_ctx[tag].SID); in lpfc_issue_ct_rsp()
1514 lpfc_printf_log(phba, KERN_WARNING, LOG_ELS, in lpfc_issue_ct_rsp()
1517 phba->ct_ctx[tag].SID); in lpfc_issue_ct_rsp()
1537 phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_issue_ct_rsp()
1540 phba->ct_ctx[tag].valid = UNSOL_INVALID; in lpfc_issue_ct_rsp()
1544 icmd->ulpTimeout = phba->fc_ratov * 2; in lpfc_issue_ct_rsp()
1547 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, in lpfc_issue_ct_rsp()
1549 icmd->ulpContext, icmd->ulpIoTag, tag, phba->link_state); in lpfc_issue_ct_rsp()
1553 ctiocb->vport = phba->pport; in lpfc_issue_ct_rsp()
1567 if (phba->cfg_poll & DISABLE_FCP_RING_INT) { in lpfc_issue_ct_rsp()
1568 if (lpfc_readl(phba->HCregaddr, &creg_val)) { in lpfc_issue_ct_rsp()
1573 writel(creg_val, phba->HCregaddr); in lpfc_issue_ct_rsp()
1574 readl(phba->HCregaddr); /* flush */ in lpfc_issue_ct_rsp()
1577 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, ctiocb, 0); in lpfc_issue_ct_rsp()
1580 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_issue_ct_rsp()
1586 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_issue_ct_rsp()
1594 lpfc_sli_release_iocbq(phba, ctiocb); in lpfc_issue_ct_rsp()
1609 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_send_mgmt_rsp() local
1634 bmp->virt = lpfc_mbuf_alloc(phba, 0, &bmp->phys); in lpfc_bsg_send_mgmt_rsp()
1643 cmp = lpfc_alloc_bsg_buffers(phba, job->request_payload.payload_len, in lpfc_bsg_send_mgmt_rsp()
1652 rc = lpfc_issue_ct_rsp(phba, job, tag, cmp, bmp, bpl_entries); in lpfc_bsg_send_mgmt_rsp()
1659 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_send_mgmt_rsp()
1663 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_send_mgmt_rsp()
1680 lpfc_bsg_diag_mode_enter(struct lpfc_hba *phba) in lpfc_bsg_diag_mode_enter() argument
1688 psli = &phba->sli; in lpfc_bsg_diag_mode_enter()
1696 if ((phba->link_state == LPFC_HBA_ERROR) || in lpfc_bsg_diag_mode_enter()
1701 vports = lpfc_create_vport_work_array(phba); in lpfc_bsg_diag_mode_enter()
1703 for (i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) { in lpfc_bsg_diag_mode_enter()
1707 lpfc_destroy_vport_work_array(phba, vports); in lpfc_bsg_diag_mode_enter()
1709 shost = lpfc_shost_from_vport(phba->pport); in lpfc_bsg_diag_mode_enter()
1729 lpfc_bsg_diag_mode_exit(struct lpfc_hba *phba) in lpfc_bsg_diag_mode_exit() argument
1735 vports = lpfc_create_vport_work_array(phba); in lpfc_bsg_diag_mode_exit()
1737 for (i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) { in lpfc_bsg_diag_mode_exit()
1741 lpfc_destroy_vport_work_array(phba, vports); in lpfc_bsg_diag_mode_exit()
1743 shost = lpfc_shost_from_vport(phba->pport); in lpfc_bsg_diag_mode_exit()
1763 lpfc_sli3_bsg_diag_loopback_mode(struct lpfc_hba *phba, struct fc_bsg_job *job) in lpfc_sli3_bsg_diag_loopback_mode() argument
1778 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli3_bsg_diag_loopback_mode()
1788 rc = lpfc_bsg_diag_mode_enter(phba); in lpfc_sli3_bsg_diag_loopback_mode()
1798 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli3_bsg_diag_loopback_mode()
1807 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, LPFC_MBOX_TMO); in lpfc_sli3_bsg_diag_loopback_mode()
1812 while (phba->link_state != LPFC_LINK_DOWN) { in lpfc_sli3_bsg_diag_loopback_mode()
1830 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, in lpfc_sli3_bsg_diag_loopback_mode()
1836 spin_lock_irq(&phba->hbalock); in lpfc_sli3_bsg_diag_loopback_mode()
1837 phba->link_flag |= LS_LOOPBACK_MODE; in lpfc_sli3_bsg_diag_loopback_mode()
1838 spin_unlock_irq(&phba->hbalock); in lpfc_sli3_bsg_diag_loopback_mode()
1843 while (phba->link_state != LPFC_HBA_READY) { in lpfc_sli3_bsg_diag_loopback_mode()
1857 lpfc_bsg_diag_mode_exit(phba); in lpfc_sli3_bsg_diag_loopback_mode()
1863 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli3_bsg_diag_loopback_mode()
1883 lpfc_sli4_bsg_set_link_diag_state(struct lpfc_hba *phba, uint32_t diag) in lpfc_sli4_bsg_set_link_diag_state() argument
1890 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_bsg_set_link_diag_state()
1896 alloc_len = lpfc_sli4_config(phba, pmboxq, LPFC_MBOX_SUBSYSTEM_FCOE, in lpfc_sli4_bsg_set_link_diag_state()
1903 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_set_link_diag_state()
1905 diag, phba->sli4_hba.lnk_info.lnk_tp, in lpfc_sli4_bsg_set_link_diag_state()
1906 phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_set_link_diag_state()
1912 phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_set_link_diag_state()
1914 phba->sli4_hba.lnk_info.lnk_tp); in lpfc_sli4_bsg_set_link_diag_state()
1922 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, LPFC_MBOX_TMO); in lpfc_sli4_bsg_set_link_diag_state()
1931 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_set_link_diag_state()
1944 lpfc_sli4_bsg_set_internal_loopback(struct lpfc_hba *phba) in lpfc_sli4_bsg_set_internal_loopback() argument
1951 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_bsg_set_internal_loopback()
1956 alloc_len = lpfc_sli4_config(phba, pmboxq, LPFC_MBOX_SUBSYSTEM_FCOE, in lpfc_sli4_bsg_set_internal_loopback()
1960 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_set_internal_loopback()
1965 &link_diag_loopback->u.req, phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_set_internal_loopback()
1967 &link_diag_loopback->u.req, phba->sli4_hba.lnk_info.lnk_tp); in lpfc_sli4_bsg_set_internal_loopback()
1971 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, LPFC_MBOX_TMO); in lpfc_sli4_bsg_set_internal_loopback()
1973 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_set_internal_loopback()
1980 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_set_internal_loopback()
1992 lpfc_sli4_diag_fcport_reg_setup(struct lpfc_hba *phba) in lpfc_sli4_diag_fcport_reg_setup() argument
1996 if (phba->pport->fc_flag & FC_VFI_REGISTERED) { in lpfc_sli4_diag_fcport_reg_setup()
1997 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_diag_fcport_reg_setup()
2000 phba->pport->fc_myDID, phba->fcf.fcfi, in lpfc_sli4_diag_fcport_reg_setup()
2001 phba->sli4_hba.vfi_ids[phba->pport->vfi], in lpfc_sli4_diag_fcport_reg_setup()
2002 phba->vpi_ids[phba->pport->vpi]); in lpfc_sli4_diag_fcport_reg_setup()
2005 rc = lpfc_issue_reg_vfi(phba->pport); in lpfc_sli4_diag_fcport_reg_setup()
2018 lpfc_sli4_bsg_diag_loopback_mode(struct lpfc_hba *phba, struct fc_bsg_job *job) in lpfc_sli4_bsg_diag_loopback_mode() argument
2029 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2039 rc = lpfc_bsg_diag_mode_enter(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2044 spin_lock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2045 phba->link_flag |= LS_LOOPBACK_MODE; in lpfc_sli4_bsg_diag_loopback_mode()
2046 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2049 rc = lpfc_selective_reset(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2054 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2061 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 1); in lpfc_sli4_bsg_diag_loopback_mode()
2063 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2071 while (phba->link_state != LPFC_LINK_DOWN) { in lpfc_sli4_bsg_diag_loopback_mode()
2074 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2084 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2088 rc = lpfc_sli4_bsg_set_internal_loopback(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2090 rc = lpfc_hba_init_link_fc_topology(phba, in lpfc_sli4_bsg_diag_loopback_mode()
2095 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2105 while (phba->link_state < LPFC_LINK_UP) { in lpfc_sli4_bsg_diag_loopback_mode()
2108 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2121 phba->pport->fc_myDID = 1; in lpfc_sli4_bsg_diag_loopback_mode()
2122 rc = lpfc_sli4_diag_fcport_reg_setup(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2130 while (phba->link_state != LPFC_HBA_READY) { in lpfc_sli4_bsg_diag_loopback_mode()
2133 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2146 spin_lock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2147 phba->link_flag &= ~LS_LOOPBACK_MODE; in lpfc_sli4_bsg_diag_loopback_mode()
2148 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2150 lpfc_bsg_diag_mode_exit(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2173 struct lpfc_hba *phba; in lpfc_bsg_diag_loopback_mode() local
2182 phba = vport->phba; in lpfc_bsg_diag_loopback_mode()
2183 if (!phba) in lpfc_bsg_diag_loopback_mode()
2186 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_bsg_diag_loopback_mode()
2187 rc = lpfc_sli3_bsg_diag_loopback_mode(phba, job); in lpfc_bsg_diag_loopback_mode()
2188 else if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) == in lpfc_bsg_diag_loopback_mode()
2190 rc = lpfc_sli4_bsg_diag_loopback_mode(phba, job); in lpfc_bsg_diag_loopback_mode()
2209 struct lpfc_hba *phba; in lpfc_sli4_bsg_diag_mode_end() local
2220 phba = vport->phba; in lpfc_sli4_bsg_diag_mode_end()
2221 if (!phba) in lpfc_sli4_bsg_diag_mode_end()
2224 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_sli4_bsg_diag_mode_end()
2226 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_sli4_bsg_diag_mode_end()
2231 spin_lock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_mode_end()
2232 phba->link_flag &= ~LS_LOOPBACK_MODE; in lpfc_sli4_bsg_diag_mode_end()
2233 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_mode_end()
2238 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 0); in lpfc_sli4_bsg_diag_mode_end()
2240 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_diag_mode_end()
2248 while (phba->link_state != LPFC_LINK_DOWN) { in lpfc_sli4_bsg_diag_mode_end()
2250 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_mode_end()
2261 rc = lpfc_selective_reset(phba); in lpfc_sli4_bsg_diag_mode_end()
2262 phba->pport->fc_myDID = 0; in lpfc_sli4_bsg_diag_mode_end()
2285 struct lpfc_hba *phba; in lpfc_sli4_bsg_link_diag_test() local
2305 phba = vport->phba; in lpfc_sli4_bsg_link_diag_test()
2306 if (!phba) { in lpfc_sli4_bsg_link_diag_test()
2311 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_sli4_bsg_link_diag_test()
2315 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_sli4_bsg_link_diag_test()
2323 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_link_diag_test()
2333 rc = lpfc_bsg_diag_mode_enter(phba); in lpfc_sli4_bsg_link_diag_test()
2340 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 1); in lpfc_sli4_bsg_link_diag_test()
2345 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_bsg_link_diag_test()
2353 alloc_len = lpfc_sli4_config(phba, pmboxq, LPFC_MBOX_SUBSYSTEM_FCOE, in lpfc_sli4_bsg_link_diag_test()
2362 phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_link_diag_test()
2364 phba->sli4_hba.lnk_info.lnk_tp); in lpfc_sli4_bsg_link_diag_test()
2374 mbxstatus = lpfc_sli_issue_mbox(phba, pmboxq, MBX_POLL); in lpfc_sli4_bsg_link_diag_test()
2381 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_sli4_bsg_link_diag_test()
2392 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_link_diag_test()
2407 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 0); in lpfc_sli4_bsg_link_diag_test()
2410 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_link_diag_test()
2412 lpfc_bsg_diag_mode_exit(phba); in lpfc_sli4_bsg_link_diag_test()
2431 static int lpfcdiag_loop_self_reg(struct lpfc_hba *phba, uint16_t *rpi) in lpfcdiag_loop_self_reg() argument
2437 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfcdiag_loop_self_reg()
2441 if (phba->sli_rev < LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2442 status = lpfc_reg_rpi(phba, 0, phba->pport->fc_myDID, in lpfcdiag_loop_self_reg()
2443 (uint8_t *)&phba->pport->fc_sparam, in lpfcdiag_loop_self_reg()
2446 *rpi = lpfc_sli4_alloc_rpi(phba); in lpfcdiag_loop_self_reg()
2447 status = lpfc_reg_rpi(phba, phba->pport->vpi, in lpfcdiag_loop_self_reg()
2448 phba->pport->fc_myDID, in lpfcdiag_loop_self_reg()
2449 (uint8_t *)&phba->pport->fc_sparam, in lpfcdiag_loop_self_reg()
2454 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2455 if (phba->sli_rev == LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2456 lpfc_sli4_free_rpi(phba, *rpi); in lpfcdiag_loop_self_reg()
2463 status = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfcdiag_loop_self_reg()
2466 lpfc_mbuf_free(phba, dmabuff->virt, dmabuff->phys); in lpfcdiag_loop_self_reg()
2469 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2470 if (phba->sli_rev == LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2471 lpfc_sli4_free_rpi(phba, *rpi); in lpfcdiag_loop_self_reg()
2475 if (phba->sli_rev < LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2478 lpfc_mbuf_free(phba, dmabuff->virt, dmabuff->phys); in lpfcdiag_loop_self_reg()
2480 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2491 static int lpfcdiag_loop_self_unreg(struct lpfc_hba *phba, uint16_t rpi) in lpfcdiag_loop_self_unreg() argument
2497 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfcdiag_loop_self_unreg()
2501 if (phba->sli_rev < LPFC_SLI_REV4) in lpfcdiag_loop_self_unreg()
2502 lpfc_unreg_login(phba, 0, rpi, mbox); in lpfcdiag_loop_self_unreg()
2504 lpfc_unreg_login(phba, phba->pport->vpi, in lpfcdiag_loop_self_unreg()
2505 phba->sli4_hba.rpi_ids[rpi], mbox); in lpfcdiag_loop_self_unreg()
2507 status = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfcdiag_loop_self_unreg()
2511 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_unreg()
2514 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_unreg()
2515 if (phba->sli_rev == LPFC_SLI_REV4) in lpfcdiag_loop_self_unreg()
2516 lpfc_sli4_free_rpi(phba, rpi); in lpfcdiag_loop_self_unreg()
2532 static int lpfcdiag_loop_get_xri(struct lpfc_hba *phba, uint16_t rpi, in lpfcdiag_loop_get_xri() argument
2553 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2554 list_add(&evt->node, &phba->ct_ev_waiters); in lpfcdiag_loop_get_xri()
2556 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2558 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_get_xri()
2559 rspiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_get_xri()
2563 dmabuf->virt = lpfc_mbuf_alloc(phba, 0, &dmabuf->phys); in lpfcdiag_loop_get_xri()
2618 cmdiocbq->vport = phba->pport; in lpfcdiag_loop_get_xri()
2621 iocb_stat = lpfc_sli_issue_iocb_wait(phba, LPFC_ELS_RING, cmdiocbq, in lpfcdiag_loop_get_xri()
2623 (phba->fc_ratov * 2) in lpfcdiag_loop_get_xri()
2636 ((phba->fc_ratov * 2) + LPFC_DRVR_TIMEOUT))); in lpfcdiag_loop_get_xri()
2640 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2642 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2650 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2653 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2657 lpfc_mbuf_free(phba, dmabuf->virt, dmabuf->phys); in lpfcdiag_loop_get_xri()
2662 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfcdiag_loop_get_xri()
2664 lpfc_sli_release_iocbq(phba, rspiocbq); in lpfcdiag_loop_get_xri()
2676 lpfc_bsg_dma_page_alloc(struct lpfc_hba *phba) in lpfc_bsg_dma_page_alloc() argument
2679 struct pci_dev *pcidev = phba->pcidev; in lpfc_bsg_dma_page_alloc()
2709 lpfc_bsg_dma_page_free(struct lpfc_hba *phba, struct lpfc_dmabuf *dmabuf) in lpfc_bsg_dma_page_free() argument
2711 struct pci_dev *pcidev = phba->pcidev; in lpfc_bsg_dma_page_free()
2732 lpfc_bsg_dma_page_list_free(struct lpfc_hba *phba, in lpfc_bsg_dma_page_list_free() argument
2742 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_dma_page_list_free()
2759 diag_cmd_data_alloc(struct lpfc_hba *phba, in diag_cmd_data_alloc() argument
2768 pcidev = phba->pcidev; in diag_cmd_data_alloc()
2803 pci_dma_sync_single_for_device(phba->pcidev, in diag_cmd_data_alloc()
2828 diag_cmd_data_free(phba, mlist); in diag_cmd_data_alloc()
2841 static int lpfcdiag_loop_post_rxbufs(struct lpfc_hba *phba, uint16_t rxxri, in lpfcdiag_loop_post_rxbufs() argument
2844 struct lpfc_sli *psli = &phba->sli; in lpfcdiag_loop_post_rxbufs()
2859 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_post_rxbufs()
2862 rxbmp->virt = lpfc_mbuf_alloc(phba, 0, &rxbmp->phys); in lpfcdiag_loop_post_rxbufs()
2866 rxbuffer = diag_cmd_data_alloc(phba, rxbpl, len, 0); in lpfcdiag_loop_post_rxbufs()
2888 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) { in lpfcdiag_loop_post_rxbufs()
2889 mp[i]->buffer_tag = lpfc_sli_get_buffer_tag(phba); in lpfcdiag_loop_post_rxbufs()
2920 iocb_stat = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, in lpfcdiag_loop_post_rxbufs()
2923 diag_cmd_data_free(phba, in lpfcdiag_loop_post_rxbufs()
2926 diag_cmd_data_free(phba, in lpfcdiag_loop_post_rxbufs()
2933 lpfc_sli_ringpostbuf_put(phba, pring, mp[0]); in lpfcdiag_loop_post_rxbufs()
2935 lpfc_sli_ringpostbuf_put(phba, pring, mp[1]); in lpfcdiag_loop_post_rxbufs()
2940 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_post_rxbufs()
2956 lpfc_mbuf_free(phba, rxbmp->virt, rxbmp->phys); in lpfcdiag_loop_post_rxbufs()
2961 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfcdiag_loop_post_rxbufs()
2988 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_diag_loopback_run() local
2991 struct lpfc_sli *psli = &phba->sli; in lpfc_bsg_diag_loopback_run()
3019 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3032 if ((phba->link_state == LPFC_HBA_ERROR) || in lpfc_bsg_diag_loopback_run()
3039 if (!lpfc_is_link_up(phba) || !(phba->link_flag & LS_LOOPBACK_MODE)) { in lpfc_bsg_diag_loopback_run()
3079 rc = lpfcdiag_loop_self_reg(phba, &rpi); in lpfc_bsg_diag_loopback_run()
3083 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_bsg_diag_loopback_run()
3084 rc = lpfcdiag_loop_get_xri(phba, rpi, &txxri, &rxxri); in lpfc_bsg_diag_loopback_run()
3086 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3090 rc = lpfcdiag_loop_post_rxbufs(phba, rxxri, full_size); in lpfc_bsg_diag_loopback_run()
3092 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3099 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3104 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3105 list_add(&evt->node, &phba->ct_ev_waiters); in lpfc_bsg_diag_loopback_run()
3107 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3109 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfc_bsg_diag_loopback_run()
3110 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_bsg_diag_loopback_run()
3111 rspiocbq = lpfc_sli_get_iocbq(phba); in lpfc_bsg_diag_loopback_run()
3115 txbmp->virt = lpfc_mbuf_alloc(phba, 0, &txbmp->phys); in lpfc_bsg_diag_loopback_run()
3119 txbuffer = diag_cmd_data_alloc(phba, in lpfc_bsg_diag_loopback_run()
3128 if ((phba->sli_rev < LPFC_SLI_REV4) && !rspiocbq) { in lpfc_bsg_diag_loopback_run()
3134 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_bsg_diag_loopback_run()
3182 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_bsg_diag_loopback_run()
3186 cmd->un.ulpWord[3] = phba->sli4_hba.rpi_ids[rpi]; in lpfc_bsg_diag_loopback_run()
3193 cmdiocbq->vport = phba->pport; in lpfc_bsg_diag_loopback_run()
3195 iocb_stat = lpfc_sli_issue_iocb_wait(phba, LPFC_ELS_RING, cmdiocbq, in lpfc_bsg_diag_loopback_run()
3196 rspiocbq, (phba->fc_ratov * 2) + in lpfc_bsg_diag_loopback_run()
3200 ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_bsg_diag_loopback_run()
3202 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3213 ((phba->fc_ratov * 2) + LPFC_DRVR_TIMEOUT))); in lpfc_bsg_diag_loopback_run()
3217 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3221 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3225 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3228 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3249 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3251 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3254 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3257 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_diag_loopback_run()
3260 lpfc_sli_release_iocbq(phba, rspiocbq); in lpfc_bsg_diag_loopback_run()
3265 diag_cmd_data_free(phba, txbuffer); in lpfc_bsg_diag_loopback_run()
3266 lpfc_mbuf_free(phba, txbmp->virt, txbmp->phys); in lpfc_bsg_diag_loopback_run()
3290 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_get_dfc_rev() local
3296 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_get_dfc_rev()
3308 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_get_dfc_rev()
3336 lpfc_bsg_issue_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_mbox_cmpl() argument
3356 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_cmpl()
3362 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_cmpl()
3375 mempool_free(dd_data->context_un.mbox.pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_mbox_cmpl()
3376 lpfc_bsg_dma_page_free(phba, dd_data->context_un.mbox.dmabuffers); in lpfc_bsg_issue_mbox_cmpl()
3397 static int lpfc_bsg_check_cmd_access(struct lpfc_hba *phba, in lpfc_bsg_check_cmd_access() argument
3415 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_check_cmd_access()
3451 lpfc_printf_log(phba, KERN_INFO, LOG_INIT, in lpfc_bsg_check_cmd_access()
3457 phba->wait_4_mlo_maint_flg = 1; in lpfc_bsg_check_cmd_access()
3459 spin_lock_irq(&phba->hbalock); in lpfc_bsg_check_cmd_access()
3460 phba->link_flag &= ~LS_LOOPBACK_MODE; in lpfc_bsg_check_cmd_access()
3461 spin_unlock_irq(&phba->hbalock); in lpfc_bsg_check_cmd_access()
3462 phba->fc_topology = LPFC_TOPOLOGY_PT_PT; in lpfc_bsg_check_cmd_access()
3471 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_check_cmd_access()
3488 lpfc_bsg_mbox_ext_session_reset(struct lpfc_hba *phba) in lpfc_bsg_mbox_ext_session_reset() argument
3490 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_IDLE) in lpfc_bsg_mbox_ext_session_reset()
3494 lpfc_bsg_dma_page_list_free(phba, in lpfc_bsg_mbox_ext_session_reset()
3495 &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_mbox_ext_session_reset()
3496 lpfc_bsg_dma_page_free(phba, phba->mbox_ext_buf_ctx.mbx_dmabuf); in lpfc_bsg_mbox_ext_session_reset()
3498 memset((char *)&phba->mbox_ext_buf_ctx, 0, in lpfc_bsg_mbox_ext_session_reset()
3500 INIT_LIST_HEAD(&phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_mbox_ext_session_reset()
3514 lpfc_bsg_issue_mbox_ext_handle_job(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_mbox_ext_handle_job() argument
3529 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_ext_handle_job()
3535 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_ext_handle_job()
3547 dmabuf = phba->mbox_ext_buf_ctx.mbx_dmabuf; in lpfc_bsg_issue_mbox_ext_handle_job()
3570 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_issue_mbox_ext_handle_job()
3573 phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_issue_mbox_ext_handle_job()
3574 phba->mbox_ext_buf_ctx.mboxType, size); in lpfc_bsg_issue_mbox_ext_handle_job()
3575 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, in lpfc_bsg_issue_mbox_ext_handle_job()
3576 phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_issue_mbox_ext_handle_job()
3577 phba->mbox_ext_buf_ctx.mboxType, in lpfc_bsg_issue_mbox_ext_handle_job()
3579 phba->mbox_ext_buf_ctx.mbx_dmabuf, 0); in lpfc_bsg_issue_mbox_ext_handle_job()
3581 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_issue_mbox_ext_handle_job()
3584 phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_issue_mbox_ext_handle_job()
3585 phba->mbox_ext_buf_ctx.mboxType, rc); in lpfc_bsg_issue_mbox_ext_handle_job()
3590 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_DONE; in lpfc_bsg_issue_mbox_ext_handle_job()
3604 lpfc_bsg_issue_read_mbox_ext_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_read_mbox_ext_cmpl() argument
3608 job = lpfc_bsg_issue_mbox_ext_handle_job(phba, pmboxq); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3614 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_issue_read_mbox_ext_cmpl()
3617 phba->mbox_ext_buf_ctx.state, pmboxq->u.mb.mbxStatus); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3619 if (pmboxq->u.mb.mbxStatus || phba->mbox_ext_buf_ctx.numBuf == 1) in lpfc_bsg_issue_read_mbox_ext_cmpl()
3620 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3623 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3641 lpfc_bsg_issue_write_mbox_ext_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_write_mbox_ext_cmpl() argument
3645 job = lpfc_bsg_issue_mbox_ext_handle_job(phba, pmboxq); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3651 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_issue_write_mbox_ext_cmpl()
3654 phba->mbox_ext_buf_ctx.state, pmboxq->u.mb.mbxStatus); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3657 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3658 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3668 lpfc_bsg_sli_cfg_dma_desc_setup(struct lpfc_hba *phba, enum nemb_type nemb_tp, in lpfc_bsg_sli_cfg_dma_desc_setup() argument
3687 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3704 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3725 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3744 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3771 lpfc_bsg_sli_cfg_read_cmd_ext(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_sli_cfg_read_cmd_ext() argument
3796 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3804 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3809 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_bsg_sli_cfg_read_cmd_ext()
3817 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3825 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3831 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_rd, dma_mbox, in lpfc_bsg_sli_cfg_read_cmd_ext()
3841 ext_dmabuf = lpfc_bsg_dma_page_alloc(phba); in lpfc_bsg_sli_cfg_read_cmd_ext()
3847 &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_sli_cfg_read_cmd_ext()
3859 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_sli_cfg_read_cmd_ext()
3867 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, 0, dmabuf, dmabuf); in lpfc_bsg_sli_cfg_read_cmd_ext()
3873 &phba->mbox_ext_buf_ctx.ext_dmabuf_list, list) { in lpfc_bsg_sli_cfg_read_cmd_ext()
3874 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, in lpfc_bsg_sli_cfg_read_cmd_ext()
3882 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_rd, dma_mbox, in lpfc_bsg_sli_cfg_read_cmd_ext()
3890 pmboxq->vport = phba->pport; in lpfc_bsg_sli_cfg_read_cmd_ext()
3893 phba->mbox_ext_buf_ctx.nembType = nemb_tp; in lpfc_bsg_sli_cfg_read_cmd_ext()
3894 phba->mbox_ext_buf_ctx.mboxType = mbox_rd; in lpfc_bsg_sli_cfg_read_cmd_ext()
3895 phba->mbox_ext_buf_ctx.numBuf = ext_buf_cnt; in lpfc_bsg_sli_cfg_read_cmd_ext()
3896 phba->mbox_ext_buf_ctx.mbxTag = mbox_req->extMboxTag; in lpfc_bsg_sli_cfg_read_cmd_ext()
3897 phba->mbox_ext_buf_ctx.seqNum = mbox_req->extSeqNum; in lpfc_bsg_sli_cfg_read_cmd_ext()
3898 phba->mbox_ext_buf_ctx.mbx_dmabuf = dmabuf; in lpfc_bsg_sli_cfg_read_cmd_ext()
3912 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_PORT; in lpfc_bsg_sli_cfg_read_cmd_ext()
3926 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_sli_cfg_read_cmd_ext()
3928 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3933 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3940 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_sli_cfg_read_cmd_ext()
3941 lpfc_bsg_dma_page_list_free(phba, in lpfc_bsg_sli_cfg_read_cmd_ext()
3942 &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_sli_cfg_read_cmd_ext()
3944 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_IDLE; in lpfc_bsg_sli_cfg_read_cmd_ext()
3958 lpfc_bsg_sli_cfg_write_cmd_ext(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_sli_cfg_write_cmd_ext() argument
3981 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
3988 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
3993 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_bsg_sli_cfg_write_cmd_ext()
3999 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4006 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4012 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_wr, dma_mbox, in lpfc_bsg_sli_cfg_write_cmd_ext()
4019 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, 0, dmabuf, dmabuf); in lpfc_bsg_sli_cfg_write_cmd_ext()
4022 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_wr, dma_mbox, in lpfc_bsg_sli_cfg_write_cmd_ext()
4028 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4033 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4041 phba->mbox_ext_buf_ctx.nembType = nemb_tp; in lpfc_bsg_sli_cfg_write_cmd_ext()
4042 phba->mbox_ext_buf_ctx.mboxType = mbox_wr; in lpfc_bsg_sli_cfg_write_cmd_ext()
4043 phba->mbox_ext_buf_ctx.numBuf = ext_buf_cnt; in lpfc_bsg_sli_cfg_write_cmd_ext()
4044 phba->mbox_ext_buf_ctx.mbxTag = mbox_req->extMboxTag; in lpfc_bsg_sli_cfg_write_cmd_ext()
4045 phba->mbox_ext_buf_ctx.seqNum = mbox_req->extSeqNum; in lpfc_bsg_sli_cfg_write_cmd_ext()
4046 phba->mbox_ext_buf_ctx.mbx_dmabuf = dmabuf; in lpfc_bsg_sli_cfg_write_cmd_ext()
4057 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_sli_cfg_write_cmd_ext()
4067 pmboxq->vport = phba->pport; in lpfc_bsg_sli_cfg_write_cmd_ext()
4082 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_PORT; in lpfc_bsg_sli_cfg_write_cmd_ext()
4083 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_sli_cfg_write_cmd_ext()
4085 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4090 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4105 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_sli_cfg_write_cmd_ext()
4122 lpfc_bsg_handle_sli_cfg_mbox(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_handle_sli_cfg_mbox() argument
4131 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_HOST; in lpfc_bsg_handle_sli_cfg_mbox()
4145 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4149 rc = lpfc_bsg_sli_cfg_read_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4155 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4159 rc = lpfc_bsg_sli_cfg_write_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4163 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4175 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4179 rc = lpfc_bsg_sli_cfg_read_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4183 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4191 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4206 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4210 rc = lpfc_bsg_sli_cfg_read_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4214 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4218 rc = lpfc_bsg_sli_cfg_write_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4222 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4230 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4240 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_IDLE; in lpfc_bsg_handle_sli_cfg_mbox()
4253 lpfc_bsg_mbox_ext_abort(struct lpfc_hba *phba) in lpfc_bsg_mbox_ext_abort() argument
4255 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_PORT) in lpfc_bsg_mbox_ext_abort()
4256 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_ABTS; in lpfc_bsg_mbox_ext_abort()
4258 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_mbox_ext_abort()
4271 lpfc_bsg_read_ebuf_get(struct lpfc_hba *phba, struct fc_bsg_job *job) in lpfc_bsg_read_ebuf_get() argument
4279 index = phba->mbox_ext_buf_ctx.seqNum; in lpfc_bsg_read_ebuf_get()
4280 phba->mbox_ext_buf_ctx.seqNum++; in lpfc_bsg_read_ebuf_get()
4283 phba->mbox_ext_buf_ctx.mbx_dmabuf->virt; in lpfc_bsg_read_ebuf_get()
4285 if (phba->mbox_ext_buf_ctx.nembType == nemb_mse) { in lpfc_bsg_read_ebuf_get()
4288 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_read_ebuf_get()
4294 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_read_ebuf_get()
4298 if (list_empty(&phba->mbox_ext_buf_ctx.ext_dmabuf_list)) in lpfc_bsg_read_ebuf_get()
4300 dmabuf = list_first_entry(&phba->mbox_ext_buf_ctx.ext_dmabuf_list, in lpfc_bsg_read_ebuf_get()
4305 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_read_ebuf_get()
4315 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_read_ebuf_get()
4317 if (phba->mbox_ext_buf_ctx.seqNum == phba->mbox_ext_buf_ctx.numBuf) { in lpfc_bsg_read_ebuf_get()
4318 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_read_ebuf_get()
4321 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_read_ebuf_get()
4339 lpfc_bsg_write_ebuf_set(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_write_ebuf_set() argument
4351 index = phba->mbox_ext_buf_ctx.seqNum; in lpfc_bsg_write_ebuf_set()
4352 phba->mbox_ext_buf_ctx.seqNum++; in lpfc_bsg_write_ebuf_set()
4353 nemb_tp = phba->mbox_ext_buf_ctx.nembType; in lpfc_bsg_write_ebuf_set()
4367 if (phba->mbox_ext_buf_ctx.nembType == nemb_mse) { in lpfc_bsg_write_ebuf_set()
4368 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4371 phba->mbox_ext_buf_ctx.seqNum, size); in lpfc_bsg_write_ebuf_set()
4374 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4377 phba->mbox_ext_buf_ctx.seqNum, size); in lpfc_bsg_write_ebuf_set()
4382 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, index, in lpfc_bsg_write_ebuf_set()
4383 phba->mbox_ext_buf_ctx.mbx_dmabuf, in lpfc_bsg_write_ebuf_set()
4385 list_add_tail(&dmabuf->list, &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_write_ebuf_set()
4388 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_write_ebuf_set()
4392 if (phba->mbox_ext_buf_ctx.seqNum == phba->mbox_ext_buf_ctx.numBuf) { in lpfc_bsg_write_ebuf_set()
4393 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4396 phba->mbox_ext_buf_ctx.numBuf); in lpfc_bsg_write_ebuf_set()
4398 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_write_ebuf_set()
4404 pbuf = (uint8_t *)phba->mbox_ext_buf_ctx.mbx_dmabuf->virt; in lpfc_bsg_write_ebuf_set()
4408 pmboxq->vport = phba->pport; in lpfc_bsg_write_ebuf_set()
4422 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_PORT; in lpfc_bsg_write_ebuf_set()
4424 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_write_ebuf_set()
4426 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4431 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4444 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_write_ebuf_set()
4460 lpfc_bsg_handle_sli_cfg_ebuf(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_handle_sli_cfg_ebuf() argument
4465 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ebuf()
4467 phba->mbox_ext_buf_ctx.mboxType); in lpfc_bsg_handle_sli_cfg_ebuf()
4469 if (phba->mbox_ext_buf_ctx.mboxType == mbox_rd) { in lpfc_bsg_handle_sli_cfg_ebuf()
4470 if (phba->mbox_ext_buf_ctx.state != LPFC_BSG_MBOX_DONE) { in lpfc_bsg_handle_sli_cfg_ebuf()
4471 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ebuf()
4474 phba->mbox_ext_buf_ctx.state); in lpfc_bsg_handle_sli_cfg_ebuf()
4475 lpfc_bsg_mbox_ext_abort(phba); in lpfc_bsg_handle_sli_cfg_ebuf()
4478 rc = lpfc_bsg_read_ebuf_get(phba, job); in lpfc_bsg_handle_sli_cfg_ebuf()
4480 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_handle_sli_cfg_ebuf()
4482 if (phba->mbox_ext_buf_ctx.state != LPFC_BSG_MBOX_HOST) { in lpfc_bsg_handle_sli_cfg_ebuf()
4483 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ebuf()
4486 phba->mbox_ext_buf_ctx.state); in lpfc_bsg_handle_sli_cfg_ebuf()
4487 lpfc_bsg_mbox_ext_abort(phba); in lpfc_bsg_handle_sli_cfg_ebuf()
4490 rc = lpfc_bsg_write_ebuf_set(phba, job, dmabuf); in lpfc_bsg_handle_sli_cfg_ebuf()
4505 lpfc_bsg_handle_sli_cfg_ext(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_handle_sli_cfg_ext() argument
4519 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_IDLE) { in lpfc_bsg_handle_sli_cfg_ext()
4521 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ext()
4525 rc = lpfc_bsg_handle_sli_cfg_mbox(phba, job, dmabuf); in lpfc_bsg_handle_sli_cfg_ext()
4536 if (mbox_req->extMboxTag != phba->mbox_ext_buf_ctx.mbxTag) in lpfc_bsg_handle_sli_cfg_ext()
4538 if (mbox_req->extSeqNum > phba->mbox_ext_buf_ctx.numBuf) in lpfc_bsg_handle_sli_cfg_ext()
4540 if (mbox_req->extSeqNum != phba->mbox_ext_buf_ctx.seqNum + 1) in lpfc_bsg_handle_sli_cfg_ext()
4543 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ext()
4546 phba->mbox_ext_buf_ctx.state, mbox_req->extMboxTag, in lpfc_bsg_handle_sli_cfg_ext()
4548 rc = lpfc_bsg_handle_sli_cfg_ebuf(phba, job, dmabuf); in lpfc_bsg_handle_sli_cfg_ext()
4553 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ext()
4557 phba->mbox_ext_buf_ctx.state, in lpfc_bsg_handle_sli_cfg_ext()
4558 phba->mbox_ext_buf_ctx.numBuf, in lpfc_bsg_handle_sli_cfg_ext()
4559 phba->mbox_ext_buf_ctx.mbxTag, in lpfc_bsg_handle_sli_cfg_ext()
4560 phba->mbox_ext_buf_ctx.seqNum, in lpfc_bsg_handle_sli_cfg_ext()
4563 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_handle_sli_cfg_ext()
4582 lpfc_bsg_issue_mbox(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_issue_mbox() argument
4616 if (phba->sli.sli_flag & LPFC_BLOCK_MGMT_IO) { in lpfc_bsg_issue_mbox()
4631 dmabuf = lpfc_bsg_dma_page_alloc(phba); in lpfc_bsg_issue_mbox()
4644 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_bsg_issue_mbox()
4645 rc = lpfc_bsg_handle_sli_cfg_ext(phba, job, dmabuf); in lpfc_bsg_issue_mbox()
4653 rc = lpfc_bsg_check_cmd_access(phba, (MAILBOX_t *)pmbx, vport); in lpfc_bsg_issue_mbox()
4660 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_issue_mbox()
4666 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_issue_mbox()
4681 if (phba->pport->stopped && in lpfc_bsg_issue_mbox()
4686 lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX, in lpfc_bsg_issue_mbox()
4749 } else if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_bsg_issue_mbox()
4835 (!(phba->sli.sli_flag & LPFC_SLI_ACTIVE))) { in lpfc_bsg_issue_mbox()
4836 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_POLL); in lpfc_bsg_issue_mbox()
4853 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_issue_mbox()
4860 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_mbox()
4861 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_issue_mbox()
4876 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_mbox_cmd() local
4884 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_mbox_cmd()
4897 rc = lpfc_bsg_issue_mbox(phba, job, vport); in lpfc_bsg_mbox_cmd()
4934 lpfc_bsg_menlo_cmd_cmp(struct lpfc_hba *phba, in lpfc_bsg_menlo_cmd_cmp() argument
4956 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_menlo_cmd_cmp()
4962 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_menlo_cmd_cmp()
5000 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_menlo_cmd_cmp()
5001 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_menlo_cmd_cmp()
5002 lpfc_free_bsg_buffers(phba, rmp); in lpfc_bsg_menlo_cmd_cmp()
5003 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_menlo_cmd_cmp()
5030 struct lpfc_hba *phba = vport->phba; in lpfc_menlo_cmd() local
5047 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5056 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5063 if (!(phba->menlo_flag & HBA_MENLO_SUPPORT)) { in lpfc_menlo_cmd()
5064 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5077 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5089 bmp->virt = lpfc_mbuf_alloc(phba, 0, &bmp->phys); in lpfc_menlo_cmd()
5099 cmp = lpfc_alloc_bsg_buffers(phba, job->request_payload.payload_len, in lpfc_menlo_cmd()
5110 rmp = lpfc_alloc_bsg_buffers(phba, job->reply_payload.payload_len, 0, in lpfc_menlo_cmd()
5117 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfc_menlo_cmd()
5139 cmdiocbq->vport = phba->pport; in lpfc_menlo_cmd()
5164 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, in lpfc_menlo_cmd()
5169 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_menlo_cmd()
5172 lpfc_free_bsg_buffers(phba, rmp); in lpfc_menlo_cmd()
5174 lpfc_free_bsg_buffers(phba, cmp); in lpfc_menlo_cmd()
5177 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_menlo_cmd()
5284 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_timeout() local
5286 struct lpfc_sli_ring *pring = &phba->sli.ring[LPFC_ELS_RING]; in lpfc_bsg_timeout()
5302 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5308 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5319 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5321 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_timeout()
5324 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_timeout()
5335 lpfc_sli_issue_abort_iotag(phba, pring, cmdiocb); in lpfc_bsg_timeout()
5336 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_timeout()
5338 lpfc_sli_cancel_iocbs(phba, &completions, in lpfc_bsg_timeout()
5345 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5351 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_PORT) in lpfc_bsg_timeout()
5352 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_ABTS; in lpfc_bsg_timeout()
5353 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5361 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5363 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_timeout()
5372 lpfc_sli_issue_abort_iotag(phba, pring, cmdiocb); in lpfc_bsg_timeout()
5373 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_timeout()
5375 lpfc_sli_cancel_iocbs(phba, &completions, in lpfc_bsg_timeout()
5381 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()