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
933 if (phba->link_state == LPFC_HBA_ERROR || in lpfc_bsg_ct_unsol_event()
934 (!(phba->sli.sli_flag & LPFC_SLI_ACTIVE))) in lpfc_bsg_ct_unsol_event()
937 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) in lpfc_bsg_ct_unsol_event()
942 dmabuf = lpfc_sli_ringpostbuf_get(phba, pring, dma_addr); in lpfc_bsg_ct_unsol_event()
950 if (!(phba->sli3_options & LPFC_SLI3_HBQ_ENABLED)) in lpfc_bsg_ct_unsol_event()
951 lpfc_sli_ringpostbuf_put(phba, pring, dmabuf); in lpfc_bsg_ct_unsol_event()
953 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
954 list_for_each_entry(evt, &phba->ct_ev_waiters, node) { in lpfc_bsg_ct_unsol_event()
960 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
963 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
965 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_ct_unsol_event()
971 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) { in lpfc_bsg_ct_unsol_event()
985 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_ct_unsol_event()
990 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
992 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
998 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) { in lpfc_bsg_ct_unsol_event()
1003 if (phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1025 dmabuf = lpfc_sli_ringpostbuf_get(phba, in lpfc_bsg_ct_unsol_event()
1029 lpfc_printf_log(phba, KERN_ERR, in lpfc_bsg_ct_unsol_event()
1035 spin_lock_irqsave(&phba->ct_ev_lock, in lpfc_bsg_ct_unsol_event()
1039 &phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1046 !(phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1048 lpfc_sli_ringpostbuf_put(phba, pring, in lpfc_bsg_ct_unsol_event()
1053 if (phba->sli_rev < in lpfc_bsg_ct_unsol_event()
1055 diag_cmd_data_free(phba, in lpfc_bsg_ct_unsol_event()
1060 if ((phba->sli_rev == in lpfc_bsg_ct_unsol_event()
1062 (phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1065 lpfc_in_buf_free(phba, in lpfc_bsg_ct_unsol_event()
1068 lpfc_post_buffer(phba, in lpfc_bsg_ct_unsol_event()
1074 if (!(phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1076 lpfc_post_buffer(phba, in lpfc_bsg_ct_unsol_event()
1085 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1086 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_bsg_ct_unsol_event()
1087 evt_dat->immed_dat = phba->ctx_idx; in lpfc_bsg_ct_unsol_event()
1088 phba->ctx_idx = (phba->ctx_idx + 1) % LPFC_CT_CTX_MAX; in lpfc_bsg_ct_unsol_event()
1090 if (phba->ct_ctx[evt_dat->immed_dat].valid == in lpfc_bsg_ct_unsol_event()
1092 lpfc_printf_log(phba, KERN_WARNING, LOG_ELS, in lpfc_bsg_ct_unsol_event()
1095 "sid:x%x\n", phba->ctx_idx, in lpfc_bsg_ct_unsol_event()
1096 phba->ct_ctx[ in lpfc_bsg_ct_unsol_event()
1098 phba->ct_ctx[ in lpfc_bsg_ct_unsol_event()
1100 phba->ct_ctx[evt_dat->immed_dat].rxid = in lpfc_bsg_ct_unsol_event()
1102 phba->ct_ctx[evt_dat->immed_dat].oxid = in lpfc_bsg_ct_unsol_event()
1104 phba->ct_ctx[evt_dat->immed_dat].SID = in lpfc_bsg_ct_unsol_event()
1106 phba->ct_ctx[evt_dat->immed_dat].valid = UNSOL_VALID; in lpfc_bsg_ct_unsol_event()
1130 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1132 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1135 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1140 if ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_bsg_ct_unsol_event()
1159 lpfc_bsg_ct_unsol_abort(struct lpfc_hba *phba, struct hbq_dmabuf *dmabuf) in lpfc_bsg_ct_unsol_abort() argument
1173 if (phba->ct_ctx[ctx_idx].valid != UNSOL_VALID) in lpfc_bsg_ct_unsol_abort()
1175 if (phba->ct_ctx[ctx_idx].rxid != rxid) in lpfc_bsg_ct_unsol_abort()
1177 if (phba->ct_ctx[ctx_idx].oxid != oxid) in lpfc_bsg_ct_unsol_abort()
1179 if (phba->ct_ctx[ctx_idx].SID != sid) in lpfc_bsg_ct_unsol_abort()
1181 phba->ct_ctx[ctx_idx].valid = UNSOL_INVALID; in lpfc_bsg_ct_unsol_abort()
1195 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_hba_set_event() local
1205 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_set_event()
1216 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1217 list_for_each_entry(evt, &phba->ct_ev_waiters, node) { in lpfc_bsg_hba_set_event()
1225 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1227 if (&evt->node == &phba->ct_ev_waiters) { in lpfc_bsg_hba_set_event()
1231 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_set_event()
1239 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_set_event()
1249 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1250 list_add(&evt->node, &phba->ct_ev_waiters); in lpfc_bsg_hba_set_event()
1253 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1256 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1260 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1279 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_hba_get_event() local
1289 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_get_event()
1301 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1302 list_for_each_entry_safe(evt, evt_next, &phba->ct_ev_waiters, node) { in lpfc_bsg_hba_get_event()
1314 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1327 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_get_event()
1348 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1350 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1380 lpfc_issue_ct_rsp_cmp(struct lpfc_hba *phba, in lpfc_issue_ct_rsp_cmp() argument
1395 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_issue_ct_rsp_cmp()
1401 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_issue_ct_rsp_cmp()
1404 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_issue_ct_rsp_cmp()
1406 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_issue_ct_rsp_cmp()
1437 lpfc_free_bsg_buffers(phba, cmp); in lpfc_issue_ct_rsp_cmp()
1438 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_issue_ct_rsp_cmp()
1440 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_issue_ct_rsp_cmp()
1462 lpfc_issue_ct_rsp(struct lpfc_hba *phba, struct fc_bsg_job *job, uint32_t tag, in lpfc_issue_ct_rsp() argument
1477 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_issue_ct_rsp()
1484 ctiocb = lpfc_sli_get_iocbq(phba); in lpfc_issue_ct_rsp()
1506 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_issue_ct_rsp()
1508 if (phba->ct_ctx[tag].valid != UNSOL_VALID) { in lpfc_issue_ct_rsp()
1512 icmd->ulpContext = phba->ct_ctx[tag].rxid; in lpfc_issue_ct_rsp()
1513 icmd->unsli3.rcvsli3.ox_id = phba->ct_ctx[tag].oxid; in lpfc_issue_ct_rsp()
1514 ndlp = lpfc_findnode_did(phba->pport, phba->ct_ctx[tag].SID); in lpfc_issue_ct_rsp()
1516 lpfc_printf_log(phba, KERN_WARNING, LOG_ELS, in lpfc_issue_ct_rsp()
1519 phba->ct_ctx[tag].SID); in lpfc_issue_ct_rsp()
1539 phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_issue_ct_rsp()
1542 phba->ct_ctx[tag].valid = UNSOL_INVALID; in lpfc_issue_ct_rsp()
1546 icmd->ulpTimeout = phba->fc_ratov * 2; in lpfc_issue_ct_rsp()
1549 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, in lpfc_issue_ct_rsp()
1551 icmd->ulpContext, icmd->ulpIoTag, tag, phba->link_state); in lpfc_issue_ct_rsp()
1555 ctiocb->vport = phba->pport; in lpfc_issue_ct_rsp()
1569 if (phba->cfg_poll & DISABLE_FCP_RING_INT) { in lpfc_issue_ct_rsp()
1570 if (lpfc_readl(phba->HCregaddr, &creg_val)) { in lpfc_issue_ct_rsp()
1575 writel(creg_val, phba->HCregaddr); in lpfc_issue_ct_rsp()
1576 readl(phba->HCregaddr); /* flush */ in lpfc_issue_ct_rsp()
1579 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, ctiocb, 0); in lpfc_issue_ct_rsp()
1582 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_issue_ct_rsp()
1588 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_issue_ct_rsp()
1596 lpfc_sli_release_iocbq(phba, ctiocb); in lpfc_issue_ct_rsp()
1611 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_send_mgmt_rsp() local
1636 bmp->virt = lpfc_mbuf_alloc(phba, 0, &bmp->phys); in lpfc_bsg_send_mgmt_rsp()
1645 cmp = lpfc_alloc_bsg_buffers(phba, job->request_payload.payload_len, in lpfc_bsg_send_mgmt_rsp()
1654 rc = lpfc_issue_ct_rsp(phba, job, tag, cmp, bmp, bpl_entries); in lpfc_bsg_send_mgmt_rsp()
1661 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_send_mgmt_rsp()
1665 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_send_mgmt_rsp()
1682 lpfc_bsg_diag_mode_enter(struct lpfc_hba *phba) in lpfc_bsg_diag_mode_enter() argument
1690 psli = &phba->sli; in lpfc_bsg_diag_mode_enter()
1698 if ((phba->link_state == LPFC_HBA_ERROR) || in lpfc_bsg_diag_mode_enter()
1703 vports = lpfc_create_vport_work_array(phba); in lpfc_bsg_diag_mode_enter()
1705 for (i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) { in lpfc_bsg_diag_mode_enter()
1709 lpfc_destroy_vport_work_array(phba, vports); in lpfc_bsg_diag_mode_enter()
1711 shost = lpfc_shost_from_vport(phba->pport); in lpfc_bsg_diag_mode_enter()
1731 lpfc_bsg_diag_mode_exit(struct lpfc_hba *phba) in lpfc_bsg_diag_mode_exit() argument
1737 vports = lpfc_create_vport_work_array(phba); in lpfc_bsg_diag_mode_exit()
1739 for (i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) { in lpfc_bsg_diag_mode_exit()
1743 lpfc_destroy_vport_work_array(phba, vports); in lpfc_bsg_diag_mode_exit()
1745 shost = lpfc_shost_from_vport(phba->pport); in lpfc_bsg_diag_mode_exit()
1765 lpfc_sli3_bsg_diag_loopback_mode(struct lpfc_hba *phba, struct fc_bsg_job *job) in lpfc_sli3_bsg_diag_loopback_mode() argument
1780 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli3_bsg_diag_loopback_mode()
1790 rc = lpfc_bsg_diag_mode_enter(phba); in lpfc_sli3_bsg_diag_loopback_mode()
1800 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli3_bsg_diag_loopback_mode()
1809 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, LPFC_MBOX_TMO); in lpfc_sli3_bsg_diag_loopback_mode()
1814 while (phba->link_state != LPFC_LINK_DOWN) { in lpfc_sli3_bsg_diag_loopback_mode()
1832 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, in lpfc_sli3_bsg_diag_loopback_mode()
1838 spin_lock_irq(&phba->hbalock); in lpfc_sli3_bsg_diag_loopback_mode()
1839 phba->link_flag |= LS_LOOPBACK_MODE; in lpfc_sli3_bsg_diag_loopback_mode()
1840 spin_unlock_irq(&phba->hbalock); in lpfc_sli3_bsg_diag_loopback_mode()
1845 while (phba->link_state != LPFC_HBA_READY) { in lpfc_sli3_bsg_diag_loopback_mode()
1859 lpfc_bsg_diag_mode_exit(phba); in lpfc_sli3_bsg_diag_loopback_mode()
1865 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli3_bsg_diag_loopback_mode()
1885 lpfc_sli4_bsg_set_link_diag_state(struct lpfc_hba *phba, uint32_t diag) in lpfc_sli4_bsg_set_link_diag_state() argument
1892 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_bsg_set_link_diag_state()
1898 alloc_len = lpfc_sli4_config(phba, pmboxq, LPFC_MBOX_SUBSYSTEM_FCOE, in lpfc_sli4_bsg_set_link_diag_state()
1905 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_set_link_diag_state()
1907 diag, phba->sli4_hba.lnk_info.lnk_tp, in lpfc_sli4_bsg_set_link_diag_state()
1908 phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_set_link_diag_state()
1914 phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_set_link_diag_state()
1916 phba->sli4_hba.lnk_info.lnk_tp); in lpfc_sli4_bsg_set_link_diag_state()
1924 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, LPFC_MBOX_TMO); in lpfc_sli4_bsg_set_link_diag_state()
1933 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_set_link_diag_state()
1946 lpfc_sli4_bsg_set_internal_loopback(struct lpfc_hba *phba) in lpfc_sli4_bsg_set_internal_loopback() argument
1953 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_bsg_set_internal_loopback()
1958 alloc_len = lpfc_sli4_config(phba, pmboxq, LPFC_MBOX_SUBSYSTEM_FCOE, in lpfc_sli4_bsg_set_internal_loopback()
1962 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_set_internal_loopback()
1967 &link_diag_loopback->u.req, phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_set_internal_loopback()
1969 &link_diag_loopback->u.req, phba->sli4_hba.lnk_info.lnk_tp); in lpfc_sli4_bsg_set_internal_loopback()
1973 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, LPFC_MBOX_TMO); in lpfc_sli4_bsg_set_internal_loopback()
1975 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_set_internal_loopback()
1982 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_set_internal_loopback()
1994 lpfc_sli4_diag_fcport_reg_setup(struct lpfc_hba *phba) in lpfc_sli4_diag_fcport_reg_setup() argument
1998 if (phba->pport->fc_flag & FC_VFI_REGISTERED) { in lpfc_sli4_diag_fcport_reg_setup()
1999 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_diag_fcport_reg_setup()
2002 phba->pport->fc_myDID, phba->fcf.fcfi, in lpfc_sli4_diag_fcport_reg_setup()
2003 phba->sli4_hba.vfi_ids[phba->pport->vfi], in lpfc_sli4_diag_fcport_reg_setup()
2004 phba->vpi_ids[phba->pport->vpi]); in lpfc_sli4_diag_fcport_reg_setup()
2007 rc = lpfc_issue_reg_vfi(phba->pport); in lpfc_sli4_diag_fcport_reg_setup()
2020 lpfc_sli4_bsg_diag_loopback_mode(struct lpfc_hba *phba, struct fc_bsg_job *job) in lpfc_sli4_bsg_diag_loopback_mode() argument
2031 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2041 rc = lpfc_bsg_diag_mode_enter(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2046 spin_lock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2047 phba->link_flag |= LS_LOOPBACK_MODE; in lpfc_sli4_bsg_diag_loopback_mode()
2048 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2051 rc = lpfc_selective_reset(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2056 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2063 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 1); in lpfc_sli4_bsg_diag_loopback_mode()
2065 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2073 while (phba->link_state != LPFC_LINK_DOWN) { in lpfc_sli4_bsg_diag_loopback_mode()
2076 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2086 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2090 rc = lpfc_sli4_bsg_set_internal_loopback(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2092 rc = lpfc_hba_init_link_fc_topology(phba, in lpfc_sli4_bsg_diag_loopback_mode()
2097 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2107 while (phba->link_state < LPFC_LINK_UP) { in lpfc_sli4_bsg_diag_loopback_mode()
2110 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2123 phba->pport->fc_myDID = 1; in lpfc_sli4_bsg_diag_loopback_mode()
2124 rc = lpfc_sli4_diag_fcport_reg_setup(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2132 while (phba->link_state != LPFC_HBA_READY) { in lpfc_sli4_bsg_diag_loopback_mode()
2135 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2148 spin_lock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2149 phba->link_flag &= ~LS_LOOPBACK_MODE; in lpfc_sli4_bsg_diag_loopback_mode()
2150 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2152 lpfc_bsg_diag_mode_exit(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2175 struct lpfc_hba *phba; in lpfc_bsg_diag_loopback_mode() local
2184 phba = vport->phba; in lpfc_bsg_diag_loopback_mode()
2185 if (!phba) in lpfc_bsg_diag_loopback_mode()
2188 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_bsg_diag_loopback_mode()
2189 rc = lpfc_sli3_bsg_diag_loopback_mode(phba, job); in lpfc_bsg_diag_loopback_mode()
2190 else if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) == in lpfc_bsg_diag_loopback_mode()
2192 rc = lpfc_sli4_bsg_diag_loopback_mode(phba, job); in lpfc_bsg_diag_loopback_mode()
2211 struct lpfc_hba *phba; in lpfc_sli4_bsg_diag_mode_end() local
2222 phba = vport->phba; in lpfc_sli4_bsg_diag_mode_end()
2223 if (!phba) in lpfc_sli4_bsg_diag_mode_end()
2226 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_sli4_bsg_diag_mode_end()
2228 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_sli4_bsg_diag_mode_end()
2233 spin_lock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_mode_end()
2234 phba->link_flag &= ~LS_LOOPBACK_MODE; in lpfc_sli4_bsg_diag_mode_end()
2235 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_mode_end()
2240 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 0); in lpfc_sli4_bsg_diag_mode_end()
2242 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_diag_mode_end()
2250 while (phba->link_state != LPFC_LINK_DOWN) { in lpfc_sli4_bsg_diag_mode_end()
2252 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_mode_end()
2263 rc = lpfc_selective_reset(phba); in lpfc_sli4_bsg_diag_mode_end()
2264 phba->pport->fc_myDID = 0; in lpfc_sli4_bsg_diag_mode_end()
2287 struct lpfc_hba *phba; in lpfc_sli4_bsg_link_diag_test() local
2307 phba = vport->phba; in lpfc_sli4_bsg_link_diag_test()
2308 if (!phba) { in lpfc_sli4_bsg_link_diag_test()
2313 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_sli4_bsg_link_diag_test()
2317 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_sli4_bsg_link_diag_test()
2325 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_link_diag_test()
2335 rc = lpfc_bsg_diag_mode_enter(phba); in lpfc_sli4_bsg_link_diag_test()
2342 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 1); in lpfc_sli4_bsg_link_diag_test()
2347 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_bsg_link_diag_test()
2355 alloc_len = lpfc_sli4_config(phba, pmboxq, LPFC_MBOX_SUBSYSTEM_FCOE, in lpfc_sli4_bsg_link_diag_test()
2364 phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_link_diag_test()
2366 phba->sli4_hba.lnk_info.lnk_tp); in lpfc_sli4_bsg_link_diag_test()
2376 mbxstatus = lpfc_sli_issue_mbox(phba, pmboxq, MBX_POLL); in lpfc_sli4_bsg_link_diag_test()
2383 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_sli4_bsg_link_diag_test()
2394 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_link_diag_test()
2409 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 0); in lpfc_sli4_bsg_link_diag_test()
2412 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_link_diag_test()
2414 lpfc_bsg_diag_mode_exit(phba); in lpfc_sli4_bsg_link_diag_test()
2433 static int lpfcdiag_loop_self_reg(struct lpfc_hba *phba, uint16_t *rpi) in lpfcdiag_loop_self_reg() argument
2439 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfcdiag_loop_self_reg()
2443 if (phba->sli_rev < LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2444 status = lpfc_reg_rpi(phba, 0, phba->pport->fc_myDID, in lpfcdiag_loop_self_reg()
2445 (uint8_t *)&phba->pport->fc_sparam, in lpfcdiag_loop_self_reg()
2448 *rpi = lpfc_sli4_alloc_rpi(phba); in lpfcdiag_loop_self_reg()
2449 status = lpfc_reg_rpi(phba, phba->pport->vpi, in lpfcdiag_loop_self_reg()
2450 phba->pport->fc_myDID, in lpfcdiag_loop_self_reg()
2451 (uint8_t *)&phba->pport->fc_sparam, in lpfcdiag_loop_self_reg()
2456 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2457 if (phba->sli_rev == LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2458 lpfc_sli4_free_rpi(phba, *rpi); in lpfcdiag_loop_self_reg()
2465 status = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfcdiag_loop_self_reg()
2468 lpfc_mbuf_free(phba, dmabuff->virt, dmabuff->phys); in lpfcdiag_loop_self_reg()
2471 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2472 if (phba->sli_rev == LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2473 lpfc_sli4_free_rpi(phba, *rpi); in lpfcdiag_loop_self_reg()
2477 if (phba->sli_rev < LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2480 lpfc_mbuf_free(phba, dmabuff->virt, dmabuff->phys); in lpfcdiag_loop_self_reg()
2482 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2493 static int lpfcdiag_loop_self_unreg(struct lpfc_hba *phba, uint16_t rpi) in lpfcdiag_loop_self_unreg() argument
2499 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfcdiag_loop_self_unreg()
2503 if (phba->sli_rev < LPFC_SLI_REV4) in lpfcdiag_loop_self_unreg()
2504 lpfc_unreg_login(phba, 0, rpi, mbox); in lpfcdiag_loop_self_unreg()
2506 lpfc_unreg_login(phba, phba->pport->vpi, in lpfcdiag_loop_self_unreg()
2507 phba->sli4_hba.rpi_ids[rpi], mbox); in lpfcdiag_loop_self_unreg()
2509 status = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfcdiag_loop_self_unreg()
2513 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_unreg()
2516 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_unreg()
2517 if (phba->sli_rev == LPFC_SLI_REV4) in lpfcdiag_loop_self_unreg()
2518 lpfc_sli4_free_rpi(phba, rpi); in lpfcdiag_loop_self_unreg()
2534 static int lpfcdiag_loop_get_xri(struct lpfc_hba *phba, uint16_t rpi, in lpfcdiag_loop_get_xri() argument
2555 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2556 list_add(&evt->node, &phba->ct_ev_waiters); in lpfcdiag_loop_get_xri()
2558 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2560 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_get_xri()
2561 rspiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_get_xri()
2565 dmabuf->virt = lpfc_mbuf_alloc(phba, 0, &dmabuf->phys); in lpfcdiag_loop_get_xri()
2620 cmdiocbq->vport = phba->pport; in lpfcdiag_loop_get_xri()
2623 iocb_stat = lpfc_sli_issue_iocb_wait(phba, LPFC_ELS_RING, cmdiocbq, in lpfcdiag_loop_get_xri()
2625 (phba->fc_ratov * 2) in lpfcdiag_loop_get_xri()
2638 ((phba->fc_ratov * 2) + LPFC_DRVR_TIMEOUT))); in lpfcdiag_loop_get_xri()
2642 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2644 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2652 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2655 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2659 lpfc_mbuf_free(phba, dmabuf->virt, dmabuf->phys); in lpfcdiag_loop_get_xri()
2664 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfcdiag_loop_get_xri()
2666 lpfc_sli_release_iocbq(phba, rspiocbq); in lpfcdiag_loop_get_xri()
2678 lpfc_bsg_dma_page_alloc(struct lpfc_hba *phba) in lpfc_bsg_dma_page_alloc() argument
2681 struct pci_dev *pcidev = phba->pcidev; in lpfc_bsg_dma_page_alloc()
2711 lpfc_bsg_dma_page_free(struct lpfc_hba *phba, struct lpfc_dmabuf *dmabuf) in lpfc_bsg_dma_page_free() argument
2713 struct pci_dev *pcidev = phba->pcidev; in lpfc_bsg_dma_page_free()
2734 lpfc_bsg_dma_page_list_free(struct lpfc_hba *phba, in lpfc_bsg_dma_page_list_free() argument
2744 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_dma_page_list_free()
2761 diag_cmd_data_alloc(struct lpfc_hba *phba, in diag_cmd_data_alloc() argument
2770 pcidev = phba->pcidev; in diag_cmd_data_alloc()
2805 pci_dma_sync_single_for_device(phba->pcidev, in diag_cmd_data_alloc()
2830 diag_cmd_data_free(phba, mlist); in diag_cmd_data_alloc()
2843 static int lpfcdiag_loop_post_rxbufs(struct lpfc_hba *phba, uint16_t rxxri, in lpfcdiag_loop_post_rxbufs() argument
2846 struct lpfc_sli *psli = &phba->sli; in lpfcdiag_loop_post_rxbufs()
2861 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_post_rxbufs()
2864 rxbmp->virt = lpfc_mbuf_alloc(phba, 0, &rxbmp->phys); in lpfcdiag_loop_post_rxbufs()
2868 rxbuffer = diag_cmd_data_alloc(phba, rxbpl, len, 0); in lpfcdiag_loop_post_rxbufs()
2890 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) { in lpfcdiag_loop_post_rxbufs()
2891 mp[i]->buffer_tag = lpfc_sli_get_buffer_tag(phba); in lpfcdiag_loop_post_rxbufs()
2922 iocb_stat = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, in lpfcdiag_loop_post_rxbufs()
2925 diag_cmd_data_free(phba, in lpfcdiag_loop_post_rxbufs()
2928 diag_cmd_data_free(phba, in lpfcdiag_loop_post_rxbufs()
2935 lpfc_sli_ringpostbuf_put(phba, pring, mp[0]); in lpfcdiag_loop_post_rxbufs()
2937 lpfc_sli_ringpostbuf_put(phba, pring, mp[1]); in lpfcdiag_loop_post_rxbufs()
2942 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_post_rxbufs()
2958 lpfc_mbuf_free(phba, rxbmp->virt, rxbmp->phys); in lpfcdiag_loop_post_rxbufs()
2963 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfcdiag_loop_post_rxbufs()
2990 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_diag_loopback_run() local
2994 struct lpfc_sli *psli = &phba->sli; in lpfc_bsg_diag_loopback_run()
3022 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3037 if ((phba->link_state == LPFC_HBA_ERROR) || in lpfc_bsg_diag_loopback_run()
3044 if (!lpfc_is_link_up(phba) || !(phba->link_flag & LS_LOOPBACK_MODE)) { in lpfc_bsg_diag_loopback_run()
3084 rc = lpfcdiag_loop_self_reg(phba, &rpi); in lpfc_bsg_diag_loopback_run()
3088 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_bsg_diag_loopback_run()
3089 rc = lpfcdiag_loop_get_xri(phba, rpi, &txxri, &rxxri); in lpfc_bsg_diag_loopback_run()
3091 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3095 rc = lpfcdiag_loop_post_rxbufs(phba, rxxri, full_size); in lpfc_bsg_diag_loopback_run()
3097 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3104 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3109 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3110 list_add(&evt->node, &phba->ct_ev_waiters); in lpfc_bsg_diag_loopback_run()
3112 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3114 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfc_bsg_diag_loopback_run()
3115 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_bsg_diag_loopback_run()
3116 rspiocbq = lpfc_sli_get_iocbq(phba); in lpfc_bsg_diag_loopback_run()
3120 txbmp->virt = lpfc_mbuf_alloc(phba, 0, &txbmp->phys); in lpfc_bsg_diag_loopback_run()
3124 txbuffer = diag_cmd_data_alloc(phba, in lpfc_bsg_diag_loopback_run()
3133 if ((phba->sli_rev < LPFC_SLI_REV4) && !rspiocbq) { in lpfc_bsg_diag_loopback_run()
3139 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_bsg_diag_loopback_run()
3187 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_bsg_diag_loopback_run()
3191 cmd->un.ulpWord[3] = phba->sli4_hba.rpi_ids[rpi]; in lpfc_bsg_diag_loopback_run()
3198 cmdiocbq->vport = phba->pport; in lpfc_bsg_diag_loopback_run()
3200 iocb_stat = lpfc_sli_issue_iocb_wait(phba, LPFC_ELS_RING, cmdiocbq, in lpfc_bsg_diag_loopback_run()
3201 rspiocbq, (phba->fc_ratov * 2) + in lpfc_bsg_diag_loopback_run()
3205 ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_bsg_diag_loopback_run()
3207 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3218 ((phba->fc_ratov * 2) + LPFC_DRVR_TIMEOUT))); in lpfc_bsg_diag_loopback_run()
3222 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3226 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3230 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3233 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3254 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3256 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3259 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3262 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_diag_loopback_run()
3265 lpfc_sli_release_iocbq(phba, rspiocbq); in lpfc_bsg_diag_loopback_run()
3270 diag_cmd_data_free(phba, txbuffer); in lpfc_bsg_diag_loopback_run()
3271 lpfc_mbuf_free(phba, txbmp->virt, txbmp->phys); in lpfc_bsg_diag_loopback_run()
3295 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_get_dfc_rev() local
3302 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_get_dfc_rev()
3317 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_get_dfc_rev()
3345 lpfc_bsg_issue_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_mbox_cmpl() argument
3365 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_cmpl()
3371 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_cmpl()
3384 mempool_free(dd_data->context_un.mbox.pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_mbox_cmpl()
3385 lpfc_bsg_dma_page_free(phba, dd_data->context_un.mbox.dmabuffers); in lpfc_bsg_issue_mbox_cmpl()
3406 static int lpfc_bsg_check_cmd_access(struct lpfc_hba *phba, in lpfc_bsg_check_cmd_access() argument
3424 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_check_cmd_access()
3460 lpfc_printf_log(phba, KERN_INFO, LOG_INIT, in lpfc_bsg_check_cmd_access()
3466 phba->wait_4_mlo_maint_flg = 1; in lpfc_bsg_check_cmd_access()
3468 spin_lock_irq(&phba->hbalock); in lpfc_bsg_check_cmd_access()
3469 phba->link_flag &= ~LS_LOOPBACK_MODE; in lpfc_bsg_check_cmd_access()
3470 spin_unlock_irq(&phba->hbalock); in lpfc_bsg_check_cmd_access()
3471 phba->fc_topology = LPFC_TOPOLOGY_PT_PT; in lpfc_bsg_check_cmd_access()
3480 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_check_cmd_access()
3497 lpfc_bsg_mbox_ext_session_reset(struct lpfc_hba *phba) in lpfc_bsg_mbox_ext_session_reset() argument
3499 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_IDLE) in lpfc_bsg_mbox_ext_session_reset()
3503 lpfc_bsg_dma_page_list_free(phba, in lpfc_bsg_mbox_ext_session_reset()
3504 &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_mbox_ext_session_reset()
3505 lpfc_bsg_dma_page_free(phba, phba->mbox_ext_buf_ctx.mbx_dmabuf); in lpfc_bsg_mbox_ext_session_reset()
3507 memset((char *)&phba->mbox_ext_buf_ctx, 0, in lpfc_bsg_mbox_ext_session_reset()
3509 INIT_LIST_HEAD(&phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_mbox_ext_session_reset()
3523 lpfc_bsg_issue_mbox_ext_handle_job(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_mbox_ext_handle_job() argument
3538 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_ext_handle_job()
3544 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_ext_handle_job()
3556 dmabuf = phba->mbox_ext_buf_ctx.mbx_dmabuf; in lpfc_bsg_issue_mbox_ext_handle_job()
3579 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_issue_mbox_ext_handle_job()
3582 phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_issue_mbox_ext_handle_job()
3583 phba->mbox_ext_buf_ctx.mboxType, size); in lpfc_bsg_issue_mbox_ext_handle_job()
3584 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, in lpfc_bsg_issue_mbox_ext_handle_job()
3585 phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_issue_mbox_ext_handle_job()
3586 phba->mbox_ext_buf_ctx.mboxType, in lpfc_bsg_issue_mbox_ext_handle_job()
3588 phba->mbox_ext_buf_ctx.mbx_dmabuf, 0); in lpfc_bsg_issue_mbox_ext_handle_job()
3590 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_issue_mbox_ext_handle_job()
3593 phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_issue_mbox_ext_handle_job()
3594 phba->mbox_ext_buf_ctx.mboxType, rc); in lpfc_bsg_issue_mbox_ext_handle_job()
3599 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_DONE; in lpfc_bsg_issue_mbox_ext_handle_job()
3613 lpfc_bsg_issue_read_mbox_ext_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_read_mbox_ext_cmpl() argument
3617 job = lpfc_bsg_issue_mbox_ext_handle_job(phba, pmboxq); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3623 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_issue_read_mbox_ext_cmpl()
3626 phba->mbox_ext_buf_ctx.state, pmboxq->u.mb.mbxStatus); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3628 if (pmboxq->u.mb.mbxStatus || phba->mbox_ext_buf_ctx.numBuf == 1) in lpfc_bsg_issue_read_mbox_ext_cmpl()
3629 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3632 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3650 lpfc_bsg_issue_write_mbox_ext_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_write_mbox_ext_cmpl() argument
3654 job = lpfc_bsg_issue_mbox_ext_handle_job(phba, pmboxq); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3660 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_issue_write_mbox_ext_cmpl()
3663 phba->mbox_ext_buf_ctx.state, pmboxq->u.mb.mbxStatus); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3666 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3667 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3677 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
3696 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3713 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3734 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3753 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3780 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
3805 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3813 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3818 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_bsg_sli_cfg_read_cmd_ext()
3826 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3834 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3840 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_rd, dma_mbox, in lpfc_bsg_sli_cfg_read_cmd_ext()
3850 ext_dmabuf = lpfc_bsg_dma_page_alloc(phba); in lpfc_bsg_sli_cfg_read_cmd_ext()
3856 &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_sli_cfg_read_cmd_ext()
3868 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_sli_cfg_read_cmd_ext()
3876 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, 0, dmabuf, dmabuf); in lpfc_bsg_sli_cfg_read_cmd_ext()
3882 &phba->mbox_ext_buf_ctx.ext_dmabuf_list, list) { in lpfc_bsg_sli_cfg_read_cmd_ext()
3883 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, in lpfc_bsg_sli_cfg_read_cmd_ext()
3891 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_rd, dma_mbox, in lpfc_bsg_sli_cfg_read_cmd_ext()
3899 pmboxq->vport = phba->pport; in lpfc_bsg_sli_cfg_read_cmd_ext()
3902 phba->mbox_ext_buf_ctx.nembType = nemb_tp; in lpfc_bsg_sli_cfg_read_cmd_ext()
3903 phba->mbox_ext_buf_ctx.mboxType = mbox_rd; in lpfc_bsg_sli_cfg_read_cmd_ext()
3904 phba->mbox_ext_buf_ctx.numBuf = ext_buf_cnt; in lpfc_bsg_sli_cfg_read_cmd_ext()
3905 phba->mbox_ext_buf_ctx.mbxTag = mbox_req->extMboxTag; in lpfc_bsg_sli_cfg_read_cmd_ext()
3906 phba->mbox_ext_buf_ctx.seqNum = mbox_req->extSeqNum; in lpfc_bsg_sli_cfg_read_cmd_ext()
3907 phba->mbox_ext_buf_ctx.mbx_dmabuf = dmabuf; in lpfc_bsg_sli_cfg_read_cmd_ext()
3921 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_PORT; in lpfc_bsg_sli_cfg_read_cmd_ext()
3935 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_sli_cfg_read_cmd_ext()
3937 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3942 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3949 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_sli_cfg_read_cmd_ext()
3950 lpfc_bsg_dma_page_list_free(phba, in lpfc_bsg_sli_cfg_read_cmd_ext()
3951 &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_sli_cfg_read_cmd_ext()
3953 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_IDLE; in lpfc_bsg_sli_cfg_read_cmd_ext()
3967 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
3990 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
3997 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4002 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_bsg_sli_cfg_write_cmd_ext()
4008 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4015 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4021 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_wr, dma_mbox, in lpfc_bsg_sli_cfg_write_cmd_ext()
4028 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, 0, dmabuf, dmabuf); in lpfc_bsg_sli_cfg_write_cmd_ext()
4031 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_wr, dma_mbox, in lpfc_bsg_sli_cfg_write_cmd_ext()
4037 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4042 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4050 phba->mbox_ext_buf_ctx.nembType = nemb_tp; in lpfc_bsg_sli_cfg_write_cmd_ext()
4051 phba->mbox_ext_buf_ctx.mboxType = mbox_wr; in lpfc_bsg_sli_cfg_write_cmd_ext()
4052 phba->mbox_ext_buf_ctx.numBuf = ext_buf_cnt; in lpfc_bsg_sli_cfg_write_cmd_ext()
4053 phba->mbox_ext_buf_ctx.mbxTag = mbox_req->extMboxTag; in lpfc_bsg_sli_cfg_write_cmd_ext()
4054 phba->mbox_ext_buf_ctx.seqNum = mbox_req->extSeqNum; in lpfc_bsg_sli_cfg_write_cmd_ext()
4055 phba->mbox_ext_buf_ctx.mbx_dmabuf = dmabuf; in lpfc_bsg_sli_cfg_write_cmd_ext()
4066 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_sli_cfg_write_cmd_ext()
4076 pmboxq->vport = phba->pport; in lpfc_bsg_sli_cfg_write_cmd_ext()
4091 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_PORT; in lpfc_bsg_sli_cfg_write_cmd_ext()
4092 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_sli_cfg_write_cmd_ext()
4094 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4099 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4114 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_sli_cfg_write_cmd_ext()
4131 lpfc_bsg_handle_sli_cfg_mbox(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_handle_sli_cfg_mbox() argument
4140 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_HOST; in lpfc_bsg_handle_sli_cfg_mbox()
4154 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4158 rc = lpfc_bsg_sli_cfg_read_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4164 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4168 rc = lpfc_bsg_sli_cfg_write_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4172 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4184 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4188 rc = lpfc_bsg_sli_cfg_read_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4192 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4200 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4215 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4219 rc = lpfc_bsg_sli_cfg_read_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4223 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4227 rc = lpfc_bsg_sli_cfg_write_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4231 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4239 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4249 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_IDLE; in lpfc_bsg_handle_sli_cfg_mbox()
4262 lpfc_bsg_mbox_ext_abort(struct lpfc_hba *phba) in lpfc_bsg_mbox_ext_abort() argument
4264 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_PORT) in lpfc_bsg_mbox_ext_abort()
4265 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_ABTS; in lpfc_bsg_mbox_ext_abort()
4267 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_mbox_ext_abort()
4280 lpfc_bsg_read_ebuf_get(struct lpfc_hba *phba, struct fc_bsg_job *job) in lpfc_bsg_read_ebuf_get() argument
4288 index = phba->mbox_ext_buf_ctx.seqNum; in lpfc_bsg_read_ebuf_get()
4289 phba->mbox_ext_buf_ctx.seqNum++; in lpfc_bsg_read_ebuf_get()
4292 phba->mbox_ext_buf_ctx.mbx_dmabuf->virt; in lpfc_bsg_read_ebuf_get()
4294 if (phba->mbox_ext_buf_ctx.nembType == nemb_mse) { in lpfc_bsg_read_ebuf_get()
4297 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_read_ebuf_get()
4303 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_read_ebuf_get()
4307 if (list_empty(&phba->mbox_ext_buf_ctx.ext_dmabuf_list)) in lpfc_bsg_read_ebuf_get()
4309 dmabuf = list_first_entry(&phba->mbox_ext_buf_ctx.ext_dmabuf_list, in lpfc_bsg_read_ebuf_get()
4314 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_read_ebuf_get()
4324 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_read_ebuf_get()
4326 if (phba->mbox_ext_buf_ctx.seqNum == phba->mbox_ext_buf_ctx.numBuf) { in lpfc_bsg_read_ebuf_get()
4327 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_read_ebuf_get()
4330 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_read_ebuf_get()
4348 lpfc_bsg_write_ebuf_set(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_write_ebuf_set() argument
4361 index = phba->mbox_ext_buf_ctx.seqNum; in lpfc_bsg_write_ebuf_set()
4362 phba->mbox_ext_buf_ctx.seqNum++; in lpfc_bsg_write_ebuf_set()
4363 nemb_tp = phba->mbox_ext_buf_ctx.nembType; in lpfc_bsg_write_ebuf_set()
4366 phba->mbox_ext_buf_ctx.mbx_dmabuf->virt; in lpfc_bsg_write_ebuf_set()
4380 if (phba->mbox_ext_buf_ctx.nembType == nemb_mse) { in lpfc_bsg_write_ebuf_set()
4381 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4384 phba->mbox_ext_buf_ctx.seqNum, size); in lpfc_bsg_write_ebuf_set()
4387 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4390 phba->mbox_ext_buf_ctx.seqNum, size); in lpfc_bsg_write_ebuf_set()
4395 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, index, in lpfc_bsg_write_ebuf_set()
4396 phba->mbox_ext_buf_ctx.mbx_dmabuf, in lpfc_bsg_write_ebuf_set()
4398 list_add_tail(&dmabuf->list, &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_write_ebuf_set()
4401 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_write_ebuf_set()
4405 if (phba->mbox_ext_buf_ctx.seqNum == phba->mbox_ext_buf_ctx.numBuf) { in lpfc_bsg_write_ebuf_set()
4406 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4409 phba->mbox_ext_buf_ctx.numBuf); in lpfc_bsg_write_ebuf_set()
4411 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_write_ebuf_set()
4417 pbuf = (uint8_t *)phba->mbox_ext_buf_ctx.mbx_dmabuf->virt; in lpfc_bsg_write_ebuf_set()
4421 pmboxq->vport = phba->pport; in lpfc_bsg_write_ebuf_set()
4435 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_PORT; in lpfc_bsg_write_ebuf_set()
4437 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_write_ebuf_set()
4439 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4444 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4457 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_write_ebuf_set()
4473 lpfc_bsg_handle_sli_cfg_ebuf(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_handle_sli_cfg_ebuf() argument
4478 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ebuf()
4480 phba->mbox_ext_buf_ctx.mboxType); in lpfc_bsg_handle_sli_cfg_ebuf()
4482 if (phba->mbox_ext_buf_ctx.mboxType == mbox_rd) { in lpfc_bsg_handle_sli_cfg_ebuf()
4483 if (phba->mbox_ext_buf_ctx.state != LPFC_BSG_MBOX_DONE) { in lpfc_bsg_handle_sli_cfg_ebuf()
4484 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ebuf()
4487 phba->mbox_ext_buf_ctx.state); in lpfc_bsg_handle_sli_cfg_ebuf()
4488 lpfc_bsg_mbox_ext_abort(phba); in lpfc_bsg_handle_sli_cfg_ebuf()
4491 rc = lpfc_bsg_read_ebuf_get(phba, job); in lpfc_bsg_handle_sli_cfg_ebuf()
4493 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_handle_sli_cfg_ebuf()
4495 if (phba->mbox_ext_buf_ctx.state != LPFC_BSG_MBOX_HOST) { in lpfc_bsg_handle_sli_cfg_ebuf()
4496 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ebuf()
4499 phba->mbox_ext_buf_ctx.state); in lpfc_bsg_handle_sli_cfg_ebuf()
4500 lpfc_bsg_mbox_ext_abort(phba); in lpfc_bsg_handle_sli_cfg_ebuf()
4503 rc = lpfc_bsg_write_ebuf_set(phba, job, dmabuf); in lpfc_bsg_handle_sli_cfg_ebuf()
4518 lpfc_bsg_handle_sli_cfg_ext(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_handle_sli_cfg_ext() argument
4532 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_IDLE) { in lpfc_bsg_handle_sli_cfg_ext()
4534 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ext()
4538 rc = lpfc_bsg_handle_sli_cfg_mbox(phba, job, dmabuf); in lpfc_bsg_handle_sli_cfg_ext()
4549 if (mbox_req->extMboxTag != phba->mbox_ext_buf_ctx.mbxTag) in lpfc_bsg_handle_sli_cfg_ext()
4551 if (mbox_req->extSeqNum > phba->mbox_ext_buf_ctx.numBuf) in lpfc_bsg_handle_sli_cfg_ext()
4553 if (mbox_req->extSeqNum != phba->mbox_ext_buf_ctx.seqNum + 1) in lpfc_bsg_handle_sli_cfg_ext()
4556 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ext()
4559 phba->mbox_ext_buf_ctx.state, mbox_req->extMboxTag, in lpfc_bsg_handle_sli_cfg_ext()
4561 rc = lpfc_bsg_handle_sli_cfg_ebuf(phba, job, dmabuf); in lpfc_bsg_handle_sli_cfg_ext()
4566 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ext()
4570 phba->mbox_ext_buf_ctx.state, in lpfc_bsg_handle_sli_cfg_ext()
4571 phba->mbox_ext_buf_ctx.numBuf, in lpfc_bsg_handle_sli_cfg_ext()
4572 phba->mbox_ext_buf_ctx.mbxTag, in lpfc_bsg_handle_sli_cfg_ext()
4573 phba->mbox_ext_buf_ctx.seqNum, in lpfc_bsg_handle_sli_cfg_ext()
4576 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_handle_sli_cfg_ext()
4595 lpfc_bsg_issue_mbox(struct lpfc_hba *phba, struct fc_bsg_job *job, in lpfc_bsg_issue_mbox() argument
4630 if (phba->sli.sli_flag & LPFC_BLOCK_MGMT_IO) { in lpfc_bsg_issue_mbox()
4645 dmabuf = lpfc_bsg_dma_page_alloc(phba); in lpfc_bsg_issue_mbox()
4658 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_bsg_issue_mbox()
4659 rc = lpfc_bsg_handle_sli_cfg_ext(phba, job, dmabuf); in lpfc_bsg_issue_mbox()
4667 rc = lpfc_bsg_check_cmd_access(phba, (MAILBOX_t *)pmbx, vport); in lpfc_bsg_issue_mbox()
4674 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_issue_mbox()
4680 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_issue_mbox()
4695 if (phba->pport->stopped && in lpfc_bsg_issue_mbox()
4700 lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX, in lpfc_bsg_issue_mbox()
4763 } else if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_bsg_issue_mbox()
4851 (!(phba->sli.sli_flag & LPFC_SLI_ACTIVE))) { in lpfc_bsg_issue_mbox()
4852 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_POLL); in lpfc_bsg_issue_mbox()
4869 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_issue_mbox()
4876 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_mbox()
4877 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_issue_mbox()
4892 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_mbox_cmd() local
4900 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_mbox_cmd()
4913 rc = lpfc_bsg_issue_mbox(phba, job, vport); in lpfc_bsg_mbox_cmd()
4950 lpfc_bsg_menlo_cmd_cmp(struct lpfc_hba *phba, in lpfc_bsg_menlo_cmd_cmp() argument
4972 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_menlo_cmd_cmp()
4978 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_menlo_cmd_cmp()
5016 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_menlo_cmd_cmp()
5017 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_menlo_cmd_cmp()
5018 lpfc_free_bsg_buffers(phba, rmp); in lpfc_bsg_menlo_cmd_cmp()
5019 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_menlo_cmd_cmp()
5046 struct lpfc_hba *phba = vport->phba; in lpfc_menlo_cmd() local
5064 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5073 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5080 if (!(phba->menlo_flag & HBA_MENLO_SUPPORT)) { in lpfc_menlo_cmd()
5081 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5097 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5109 bmp->virt = lpfc_mbuf_alloc(phba, 0, &bmp->phys); in lpfc_menlo_cmd()
5119 cmp = lpfc_alloc_bsg_buffers(phba, job->request_payload.payload_len, in lpfc_menlo_cmd()
5130 rmp = lpfc_alloc_bsg_buffers(phba, job->reply_payload.payload_len, 0, in lpfc_menlo_cmd()
5137 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfc_menlo_cmd()
5159 cmdiocbq->vport = phba->pport; in lpfc_menlo_cmd()
5184 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, in lpfc_menlo_cmd()
5189 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_menlo_cmd()
5192 lpfc_free_bsg_buffers(phba, rmp); in lpfc_menlo_cmd()
5194 lpfc_free_bsg_buffers(phba, cmp); in lpfc_menlo_cmd()
5197 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_menlo_cmd()
5304 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_timeout() local
5306 struct lpfc_sli_ring *pring = &phba->sli.ring[LPFC_ELS_RING]; in lpfc_bsg_timeout()
5322 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5328 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5339 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5341 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_timeout()
5344 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_timeout()
5355 lpfc_sli_issue_abort_iotag(phba, pring, cmdiocb); in lpfc_bsg_timeout()
5356 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_timeout()
5358 lpfc_sli_cancel_iocbs(phba, &completions, in lpfc_bsg_timeout()
5365 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5371 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_PORT) in lpfc_bsg_timeout()
5372 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_ABTS; in lpfc_bsg_timeout()
5373 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5381 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5383 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_timeout()
5392 lpfc_sli_issue_abort_iotag(phba, pring, cmdiocb); in lpfc_bsg_timeout()
5393 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_timeout()
5395 lpfc_sli_cancel_iocbs(phba, &completions, in lpfc_bsg_timeout()
5401 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()