Lines Matching refs:phba

139 lpfc_free_bsg_buffers(struct lpfc_hba *phba, struct lpfc_dmabuf *mlist)  in lpfc_free_bsg_buffers()  argument
146 lpfc_mbuf_free(phba, mlast->virt, mlast->phys); in lpfc_free_bsg_buffers()
150 lpfc_mbuf_free(phba, mlist->virt, mlist->phys); in lpfc_free_bsg_buffers()
157 lpfc_alloc_bsg_buffers(struct lpfc_hba *phba, unsigned int size, in lpfc_alloc_bsg_buffers() argument
179 lpfc_free_bsg_buffers(phba, mlist); in lpfc_alloc_bsg_buffers()
184 mp->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &(mp->phys)); in lpfc_alloc_bsg_buffers()
189 lpfc_free_bsg_buffers(phba, mlist); in lpfc_alloc_bsg_buffers()
299 lpfc_bsg_send_mgmt_cmd_cmp(struct lpfc_hba *phba, in lpfc_bsg_send_mgmt_cmd_cmp() argument
317 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_send_mgmt_cmd_cmp()
324 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_send_mgmt_cmd_cmp()
327 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_send_mgmt_cmd_cmp()
329 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_send_mgmt_cmd_cmp()
365 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_send_mgmt_cmd_cmp()
366 lpfc_free_bsg_buffers(phba, rmp); in lpfc_bsg_send_mgmt_cmd_cmp()
367 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_send_mgmt_cmd_cmp()
369 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_send_mgmt_cmd_cmp()
391 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_send_mgmt_cmd() local
414 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_send_mgmt_cmd()
430 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfc_bsg_send_mgmt_cmd()
443 bmp->virt = lpfc_mbuf_alloc(phba, 0, &bmp->phys); in lpfc_bsg_send_mgmt_cmd()
453 cmp = lpfc_alloc_bsg_buffers(phba, job->request_payload.payload_len, in lpfc_bsg_send_mgmt_cmd()
464 rmp = lpfc_alloc_bsg_buffers(phba, job->reply_payload.payload_len, 0, in lpfc_bsg_send_mgmt_cmd()
486 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_bsg_send_mgmt_cmd()
487 cmd->ulpContext = phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_bsg_send_mgmt_cmd()
489 cmdiocbq->vport = phba->pport; in lpfc_bsg_send_mgmt_cmd()
492 timeout = phba->fc_ratov * 2; in lpfc_bsg_send_mgmt_cmd()
507 if (phba->cfg_poll & DISABLE_FCP_RING_INT) { in lpfc_bsg_send_mgmt_cmd()
508 if (lpfc_readl(phba->HCregaddr, &creg_val)) { in lpfc_bsg_send_mgmt_cmd()
513 writel(creg_val, phba->HCregaddr); in lpfc_bsg_send_mgmt_cmd()
514 readl(phba->HCregaddr); /* flush */ in lpfc_bsg_send_mgmt_cmd()
517 iocb_stat = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, 0); in lpfc_bsg_send_mgmt_cmd()
520 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_send_mgmt_cmd()
526 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_send_mgmt_cmd()
538 lpfc_free_bsg_buffers(phba, rmp); in lpfc_bsg_send_mgmt_cmd()
540 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_send_mgmt_cmd()
543 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_send_mgmt_cmd()
546 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_send_mgmt_cmd()
576 lpfc_bsg_rport_els_cmp(struct lpfc_hba *phba, in lpfc_bsg_rport_els_cmp() argument
597 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_rport_els_cmp()
604 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_rport_els_cmp()
607 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_rport_els_cmp()
609 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_rport_els_cmp()
644 lpfc_els_free_iocb(phba, cmdiocbq); in lpfc_bsg_rport_els_cmp()
665 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_rport_els() local
694 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_rport_els()
730 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_bsg_rport_els()
731 cmdiocbq->iocb.ulpContext = phba->sli4_hba.rpi_ids[rpi]; in lpfc_bsg_rport_els()
745 if (phba->cfg_poll & DISABLE_FCP_RING_INT) { in lpfc_bsg_rport_els()
746 if (lpfc_readl(phba->HCregaddr, &creg_val)) { in lpfc_bsg_rport_els()
751 writel(creg_val, phba->HCregaddr); in lpfc_bsg_rport_els()
752 readl(phba->HCregaddr); /* flush */ in lpfc_bsg_rport_els()
755 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, 0); in lpfc_bsg_rport_els()
758 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_rport_els()
764 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_rport_els()
777 lpfc_els_free_iocb(phba, cmdiocbq); in lpfc_bsg_rport_els()
879 diag_cmd_data_free(struct lpfc_hba *phba, struct lpfc_dmabufext *mlist) in diag_cmd_data_free() argument
885 if ((!mlist) || (!lpfc_is_link_up(phba) && in diag_cmd_data_free()
886 (phba->link_flag & LS_LOOPBACK_MODE))) { in diag_cmd_data_free()
890 pcidev = phba->pcidev; in diag_cmd_data_free()
915 lpfc_bsg_ct_unsol_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, in lpfc_bsg_ct_unsol_event() argument
946 if (phba->link_state == LPFC_HBA_ERROR || in lpfc_bsg_ct_unsol_event()
947 (!(phba->sli.sli_flag & LPFC_SLI_ACTIVE))) in lpfc_bsg_ct_unsol_event()
950 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) in lpfc_bsg_ct_unsol_event()
955 dmabuf = lpfc_sli_ringpostbuf_get(phba, pring, dma_addr); in lpfc_bsg_ct_unsol_event()
962 if (!(phba->sli3_options & LPFC_SLI3_HBQ_ENABLED)) in lpfc_bsg_ct_unsol_event()
963 lpfc_sli_ringpostbuf_put(phba, pring, dmabuf); in lpfc_bsg_ct_unsol_event()
965 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
966 list_for_each_entry(evt, &phba->ct_ev_waiters, node) { in lpfc_bsg_ct_unsol_event()
972 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
975 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
977 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_ct_unsol_event()
983 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) { in lpfc_bsg_ct_unsol_event()
997 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_ct_unsol_event()
1002 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1004 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1010 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) { in lpfc_bsg_ct_unsol_event()
1015 if (phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1037 dmabuf = lpfc_sli_ringpostbuf_get(phba, in lpfc_bsg_ct_unsol_event()
1041 lpfc_printf_log(phba, KERN_ERR, in lpfc_bsg_ct_unsol_event()
1047 spin_lock_irqsave(&phba->ct_ev_lock, in lpfc_bsg_ct_unsol_event()
1051 &phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1058 !(phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1060 lpfc_sli_ringpostbuf_put(phba, pring, in lpfc_bsg_ct_unsol_event()
1065 if (phba->sli_rev < in lpfc_bsg_ct_unsol_event()
1067 diag_cmd_data_free(phba, in lpfc_bsg_ct_unsol_event()
1072 if ((phba->sli_rev == in lpfc_bsg_ct_unsol_event()
1074 (phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1077 lpfc_in_buf_free(phba, in lpfc_bsg_ct_unsol_event()
1080 lpfc_post_buffer(phba, in lpfc_bsg_ct_unsol_event()
1086 if (!(phba->sli3_options & in lpfc_bsg_ct_unsol_event()
1088 lpfc_post_buffer(phba, in lpfc_bsg_ct_unsol_event()
1097 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1098 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_bsg_ct_unsol_event()
1099 evt_dat->immed_dat = phba->ctx_idx; in lpfc_bsg_ct_unsol_event()
1100 phba->ctx_idx = (phba->ctx_idx + 1) % LPFC_CT_CTX_MAX; in lpfc_bsg_ct_unsol_event()
1102 if (phba->ct_ctx[evt_dat->immed_dat].valid == in lpfc_bsg_ct_unsol_event()
1104 lpfc_printf_log(phba, KERN_WARNING, LOG_ELS, in lpfc_bsg_ct_unsol_event()
1107 "sid:x%x\n", phba->ctx_idx, in lpfc_bsg_ct_unsol_event()
1108 phba->ct_ctx[ in lpfc_bsg_ct_unsol_event()
1110 phba->ct_ctx[ in lpfc_bsg_ct_unsol_event()
1112 phba->ct_ctx[evt_dat->immed_dat].rxid = in lpfc_bsg_ct_unsol_event()
1114 phba->ct_ctx[evt_dat->immed_dat].oxid = in lpfc_bsg_ct_unsol_event()
1116 phba->ct_ctx[evt_dat->immed_dat].SID = in lpfc_bsg_ct_unsol_event()
1118 phba->ct_ctx[evt_dat->immed_dat].valid = UNSOL_VALID; in lpfc_bsg_ct_unsol_event()
1143 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1146 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1149 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_ct_unsol_event()
1154 if ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_bsg_ct_unsol_event()
1173 lpfc_bsg_ct_unsol_abort(struct lpfc_hba *phba, struct hbq_dmabuf *dmabuf) in lpfc_bsg_ct_unsol_abort() argument
1187 if (phba->ct_ctx[ctx_idx].valid != UNSOL_VALID) in lpfc_bsg_ct_unsol_abort()
1189 if (phba->ct_ctx[ctx_idx].rxid != rxid) in lpfc_bsg_ct_unsol_abort()
1191 if (phba->ct_ctx[ctx_idx].oxid != oxid) in lpfc_bsg_ct_unsol_abort()
1193 if (phba->ct_ctx[ctx_idx].SID != sid) in lpfc_bsg_ct_unsol_abort()
1195 phba->ct_ctx[ctx_idx].valid = UNSOL_INVALID; in lpfc_bsg_ct_unsol_abort()
1209 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_hba_set_event() local
1220 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_set_event()
1231 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1232 list_for_each_entry(evt, &phba->ct_ev_waiters, node) { in lpfc_bsg_hba_set_event()
1240 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1242 if (&evt->node == &phba->ct_ev_waiters) { in lpfc_bsg_hba_set_event()
1246 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_set_event()
1254 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_set_event()
1264 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1265 list_add(&evt->node, &phba->ct_ev_waiters); in lpfc_bsg_hba_set_event()
1268 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1271 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1275 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_set_event()
1292 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_hba_get_event() local
1304 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_get_event()
1316 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1317 list_for_each_entry_safe(evt, evt_next, &phba->ct_ev_waiters, node) { in lpfc_bsg_hba_get_event()
1329 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1342 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_hba_get_event()
1363 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1365 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_hba_get_event()
1396 lpfc_issue_ct_rsp_cmp(struct lpfc_hba *phba, in lpfc_issue_ct_rsp_cmp() argument
1412 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_issue_ct_rsp_cmp()
1418 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_issue_ct_rsp_cmp()
1421 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_issue_ct_rsp_cmp()
1423 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_issue_ct_rsp_cmp()
1455 lpfc_free_bsg_buffers(phba, cmp); in lpfc_issue_ct_rsp_cmp()
1456 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_issue_ct_rsp_cmp()
1458 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_issue_ct_rsp_cmp()
1481 lpfc_issue_ct_rsp(struct lpfc_hba *phba, struct bsg_job *job, uint32_t tag, in lpfc_issue_ct_rsp() argument
1496 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_issue_ct_rsp()
1503 ctiocb = lpfc_sli_get_iocbq(phba); in lpfc_issue_ct_rsp()
1525 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_issue_ct_rsp()
1527 if (phba->ct_ctx[tag].valid != UNSOL_VALID) { in lpfc_issue_ct_rsp()
1531 icmd->ulpContext = phba->ct_ctx[tag].rxid; in lpfc_issue_ct_rsp()
1532 icmd->unsli3.rcvsli3.ox_id = phba->ct_ctx[tag].oxid; in lpfc_issue_ct_rsp()
1533 ndlp = lpfc_findnode_did(phba->pport, phba->ct_ctx[tag].SID); in lpfc_issue_ct_rsp()
1535 lpfc_printf_log(phba, KERN_WARNING, LOG_ELS, in lpfc_issue_ct_rsp()
1538 phba->ct_ctx[tag].SID); in lpfc_issue_ct_rsp()
1558 phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_issue_ct_rsp()
1561 phba->ct_ctx[tag].valid = UNSOL_INVALID; in lpfc_issue_ct_rsp()
1565 icmd->ulpTimeout = phba->fc_ratov * 2; in lpfc_issue_ct_rsp()
1568 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, in lpfc_issue_ct_rsp()
1570 icmd->ulpContext, icmd->ulpIoTag, tag, phba->link_state); in lpfc_issue_ct_rsp()
1573 ctiocb->vport = phba->pport; in lpfc_issue_ct_rsp()
1587 if (phba->cfg_poll & DISABLE_FCP_RING_INT) { in lpfc_issue_ct_rsp()
1588 if (lpfc_readl(phba->HCregaddr, &creg_val)) { in lpfc_issue_ct_rsp()
1593 writel(creg_val, phba->HCregaddr); in lpfc_issue_ct_rsp()
1594 readl(phba->HCregaddr); /* flush */ in lpfc_issue_ct_rsp()
1597 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, ctiocb, 0); in lpfc_issue_ct_rsp()
1600 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_issue_ct_rsp()
1606 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_issue_ct_rsp()
1614 lpfc_sli_release_iocbq(phba, ctiocb); in lpfc_issue_ct_rsp()
1629 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_send_mgmt_rsp() local
1656 bmp->virt = lpfc_mbuf_alloc(phba, 0, &bmp->phys); in lpfc_bsg_send_mgmt_rsp()
1665 cmp = lpfc_alloc_bsg_buffers(phba, job->request_payload.payload_len, in lpfc_bsg_send_mgmt_rsp()
1674 rc = lpfc_issue_ct_rsp(phba, job, tag, cmp, bmp, bpl_entries); in lpfc_bsg_send_mgmt_rsp()
1681 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_send_mgmt_rsp()
1685 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_send_mgmt_rsp()
1702 lpfc_bsg_diag_mode_enter(struct lpfc_hba *phba) in lpfc_bsg_diag_mode_enter() argument
1711 psli = &phba->sli; in lpfc_bsg_diag_mode_enter()
1716 if ((phba->link_state == LPFC_HBA_ERROR) || in lpfc_bsg_diag_mode_enter()
1721 vports = lpfc_create_vport_work_array(phba); in lpfc_bsg_diag_mode_enter()
1723 for (i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) { in lpfc_bsg_diag_mode_enter()
1727 lpfc_destroy_vport_work_array(phba, vports); in lpfc_bsg_diag_mode_enter()
1729 shost = lpfc_shost_from_vport(phba->pport); in lpfc_bsg_diag_mode_enter()
1733 if (phba->sli_rev != LPFC_SLI_REV4) { in lpfc_bsg_diag_mode_enter()
1735 lpfc_emptyq_wait(phba, &pring->txcmplq, &phba->hbalock); in lpfc_bsg_diag_mode_enter()
1738 list_for_each_entry(qp, &phba->sli4_hba.lpfc_wq_list, wq_list) { in lpfc_bsg_diag_mode_enter()
1742 if (!lpfc_emptyq_wait(phba, &pring->txcmplq, in lpfc_bsg_diag_mode_enter()
1757 lpfc_bsg_diag_mode_exit(struct lpfc_hba *phba) in lpfc_bsg_diag_mode_exit() argument
1763 vports = lpfc_create_vport_work_array(phba); in lpfc_bsg_diag_mode_exit()
1765 for (i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) { in lpfc_bsg_diag_mode_exit()
1769 lpfc_destroy_vport_work_array(phba, vports); in lpfc_bsg_diag_mode_exit()
1771 shost = lpfc_shost_from_vport(phba->pport); in lpfc_bsg_diag_mode_exit()
1791 lpfc_sli3_bsg_diag_loopback_mode(struct lpfc_hba *phba, struct bsg_job *job) in lpfc_sli3_bsg_diag_loopback_mode() argument
1808 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli3_bsg_diag_loopback_mode()
1818 rc = lpfc_bsg_diag_mode_enter(phba); in lpfc_sli3_bsg_diag_loopback_mode()
1828 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli3_bsg_diag_loopback_mode()
1837 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, LPFC_MBOX_TMO); in lpfc_sli3_bsg_diag_loopback_mode()
1842 while (phba->link_state != LPFC_LINK_DOWN) { in lpfc_sli3_bsg_diag_loopback_mode()
1860 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, in lpfc_sli3_bsg_diag_loopback_mode()
1866 spin_lock_irq(&phba->hbalock); in lpfc_sli3_bsg_diag_loopback_mode()
1867 phba->link_flag |= LS_LOOPBACK_MODE; in lpfc_sli3_bsg_diag_loopback_mode()
1868 spin_unlock_irq(&phba->hbalock); in lpfc_sli3_bsg_diag_loopback_mode()
1873 while (phba->link_state != LPFC_HBA_READY) { in lpfc_sli3_bsg_diag_loopback_mode()
1887 lpfc_bsg_diag_mode_exit(phba); in lpfc_sli3_bsg_diag_loopback_mode()
1893 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli3_bsg_diag_loopback_mode()
1914 lpfc_sli4_bsg_set_link_diag_state(struct lpfc_hba *phba, uint32_t diag) in lpfc_sli4_bsg_set_link_diag_state() argument
1921 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_bsg_set_link_diag_state()
1927 alloc_len = lpfc_sli4_config(phba, pmboxq, LPFC_MBOX_SUBSYSTEM_FCOE, in lpfc_sli4_bsg_set_link_diag_state()
1934 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_set_link_diag_state()
1936 diag, phba->sli4_hba.lnk_info.lnk_tp, in lpfc_sli4_bsg_set_link_diag_state()
1937 phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_set_link_diag_state()
1943 phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_set_link_diag_state()
1945 phba->sli4_hba.lnk_info.lnk_tp); in lpfc_sli4_bsg_set_link_diag_state()
1953 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, LPFC_MBOX_TMO); in lpfc_sli4_bsg_set_link_diag_state()
1962 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_set_link_diag_state()
1977 lpfc_sli4_bsg_set_loopback_mode(struct lpfc_hba *phba, int mode, in lpfc_sli4_bsg_set_loopback_mode() argument
1985 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_bsg_set_loopback_mode()
1990 alloc_len = lpfc_sli4_config(phba, pmboxq, LPFC_MBOX_SUBSYSTEM_FCOE, in lpfc_sli4_bsg_set_loopback_mode()
1994 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_set_loopback_mode()
2001 if (phba->sli4_hba.conf_trunk & (1 << link_no)) { in lpfc_sli4_bsg_set_loopback_mode()
2007 phba->sli4_hba.lnk_info.lnk_tp); in lpfc_sli4_bsg_set_loopback_mode()
2013 mbxstatus = lpfc_sli_issue_mbox_wait(phba, pmboxq, LPFC_MBOX_TMO); in lpfc_sli4_bsg_set_loopback_mode()
2015 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_set_loopback_mode()
2022 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_set_loopback_mode()
2034 lpfc_sli4_diag_fcport_reg_setup(struct lpfc_hba *phba) in lpfc_sli4_diag_fcport_reg_setup() argument
2038 if (phba->pport->fc_flag & FC_VFI_REGISTERED) { in lpfc_sli4_diag_fcport_reg_setup()
2039 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_diag_fcport_reg_setup()
2042 phba->pport->fc_myDID, phba->fcf.fcfi, in lpfc_sli4_diag_fcport_reg_setup()
2043 phba->sli4_hba.vfi_ids[phba->pport->vfi], in lpfc_sli4_diag_fcport_reg_setup()
2044 phba->vpi_ids[phba->pport->vpi]); in lpfc_sli4_diag_fcport_reg_setup()
2047 rc = lpfc_issue_reg_vfi(phba->pport); in lpfc_sli4_diag_fcport_reg_setup()
2060 lpfc_sli4_bsg_diag_loopback_mode(struct lpfc_hba *phba, struct bsg_job *job) in lpfc_sli4_bsg_diag_loopback_mode() argument
2073 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2089 link_no = phba->sli4_hba.lnk_info.lnk_no; in lpfc_sli4_bsg_diag_loopback_mode()
2094 rc = lpfc_sli4_bsg_set_loopback_mode(phba, in lpfc_sli4_bsg_diag_loopback_mode()
2099 phba->sli4_hba.conf_trunk &= ~((1 << link_no) << 4); in lpfc_sli4_bsg_diag_loopback_mode()
2104 if (phba->sli4_hba.conf_trunk & ((1 << link_no) << 4)) { in lpfc_sli4_bsg_diag_loopback_mode()
2110 rc = lpfc_bsg_diag_mode_enter(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2115 spin_lock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2116 phba->link_flag |= LS_LOOPBACK_MODE; in lpfc_sli4_bsg_diag_loopback_mode()
2117 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2120 rc = lpfc_selective_reset(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2125 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2128 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 1); in lpfc_sli4_bsg_diag_loopback_mode()
2130 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2138 while (phba->link_state != LPFC_LINK_DOWN) { in lpfc_sli4_bsg_diag_loopback_mode()
2141 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2151 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2156 if (phba->sli4_hba.conf_trunk & (1 << link_no)) { in lpfc_sli4_bsg_diag_loopback_mode()
2157 rc = lpfc_sli4_bsg_set_loopback_mode(phba, in lpfc_sli4_bsg_diag_loopback_mode()
2162 if (phba->sli4_hba.conf_trunk) { in lpfc_sli4_bsg_diag_loopback_mode()
2167 rc = lpfc_sli4_bsg_set_loopback_mode(phba, in lpfc_sli4_bsg_diag_loopback_mode()
2174 phba->sli4_hba.conf_trunk |= (1 << link_no) << 4; in lpfc_sli4_bsg_diag_loopback_mode()
2179 if (phba->sli4_hba.conf_trunk & (1 << link_no)) { in lpfc_sli4_bsg_diag_loopback_mode()
2180 rc = lpfc_sli4_bsg_set_loopback_mode(phba, in lpfc_sli4_bsg_diag_loopback_mode()
2185 if (phba->sli4_hba.conf_trunk) { in lpfc_sli4_bsg_diag_loopback_mode()
2190 rc = lpfc_sli4_bsg_set_loopback_mode(phba, in lpfc_sli4_bsg_diag_loopback_mode()
2197 phba->sli4_hba.conf_trunk |= (1 << link_no) << 4; in lpfc_sli4_bsg_diag_loopback_mode()
2203 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2213 while (phba->link_state < LPFC_LINK_UP) { in lpfc_sli4_bsg_diag_loopback_mode()
2216 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2229 phba->pport->fc_myDID = 1; in lpfc_sli4_bsg_diag_loopback_mode()
2230 rc = lpfc_sli4_diag_fcport_reg_setup(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2238 while (phba->link_state != LPFC_HBA_READY) { in lpfc_sli4_bsg_diag_loopback_mode()
2241 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_loopback_mode()
2254 spin_lock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2255 phba->link_flag &= ~LS_LOOPBACK_MODE; in lpfc_sli4_bsg_diag_loopback_mode()
2256 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_loopback_mode()
2258 lpfc_bsg_diag_mode_exit(phba); in lpfc_sli4_bsg_diag_loopback_mode()
2282 struct lpfc_hba *phba; in lpfc_bsg_diag_loopback_mode() local
2291 phba = vport->phba; in lpfc_bsg_diag_loopback_mode()
2292 if (!phba) in lpfc_bsg_diag_loopback_mode()
2295 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_bsg_diag_loopback_mode()
2296 rc = lpfc_sli3_bsg_diag_loopback_mode(phba, job); in lpfc_bsg_diag_loopback_mode()
2297 else if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) >= in lpfc_bsg_diag_loopback_mode()
2299 rc = lpfc_sli4_bsg_diag_loopback_mode(phba, job); in lpfc_bsg_diag_loopback_mode()
2320 struct lpfc_hba *phba; in lpfc_sli4_bsg_diag_mode_end() local
2331 phba = vport->phba; in lpfc_sli4_bsg_diag_mode_end()
2332 if (!phba) in lpfc_sli4_bsg_diag_mode_end()
2335 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_sli4_bsg_diag_mode_end()
2337 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) < in lpfc_sli4_bsg_diag_mode_end()
2342 spin_lock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_mode_end()
2343 phba->link_flag &= ~LS_LOOPBACK_MODE; in lpfc_sli4_bsg_diag_mode_end()
2344 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_bsg_diag_mode_end()
2349 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 0); in lpfc_sli4_bsg_diag_mode_end()
2351 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_diag_mode_end()
2359 while (phba->link_state != LPFC_LINK_DOWN) { in lpfc_sli4_bsg_diag_mode_end()
2361 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_sli4_bsg_diag_mode_end()
2372 rc = lpfc_selective_reset(phba); in lpfc_sli4_bsg_diag_mode_end()
2373 phba->pport->fc_myDID = 0; in lpfc_sli4_bsg_diag_mode_end()
2399 struct lpfc_hba *phba; in lpfc_sli4_bsg_link_diag_test() local
2417 phba = vport->phba; in lpfc_sli4_bsg_link_diag_test()
2418 if (!phba) in lpfc_sli4_bsg_link_diag_test()
2422 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_sli4_bsg_link_diag_test()
2425 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) < in lpfc_sli4_bsg_link_diag_test()
2431 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_link_diag_test()
2441 rc = lpfc_bsg_diag_mode_enter(phba); in lpfc_sli4_bsg_link_diag_test()
2448 rc = lpfc_sli4_bsg_set_link_diag_state(phba, 1); in lpfc_sli4_bsg_link_diag_test()
2453 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_bsg_link_diag_test()
2459 alloc_len = lpfc_sli4_config(phba, pmboxq, LPFC_MBOX_SUBSYSTEM_FCOE, in lpfc_sli4_bsg_link_diag_test()
2469 phba->sli4_hba.lnk_info.lnk_no); in lpfc_sli4_bsg_link_diag_test()
2471 phba->sli4_hba.lnk_info.lnk_tp); in lpfc_sli4_bsg_link_diag_test()
2481 mbxstatus = lpfc_sli_issue_mbox(phba, pmboxq, MBX_POLL); in lpfc_sli4_bsg_link_diag_test()
2488 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_sli4_bsg_link_diag_test()
2498 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_sli4_bsg_link_diag_test()
2513 rc1 = lpfc_sli4_bsg_set_link_diag_state(phba, 0); in lpfc_sli4_bsg_link_diag_test()
2516 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_sli4_bsg_link_diag_test()
2518 lpfc_bsg_diag_mode_exit(phba); in lpfc_sli4_bsg_link_diag_test()
2540 static int lpfcdiag_loop_self_reg(struct lpfc_hba *phba, uint16_t *rpi) in lpfcdiag_loop_self_reg() argument
2546 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfcdiag_loop_self_reg()
2550 if (phba->sli_rev < LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2551 status = lpfc_reg_rpi(phba, 0, phba->pport->fc_myDID, in lpfcdiag_loop_self_reg()
2552 (uint8_t *)&phba->pport->fc_sparam, in lpfcdiag_loop_self_reg()
2555 *rpi = lpfc_sli4_alloc_rpi(phba); in lpfcdiag_loop_self_reg()
2557 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2560 status = lpfc_reg_rpi(phba, phba->pport->vpi, in lpfcdiag_loop_self_reg()
2561 phba->pport->fc_myDID, in lpfcdiag_loop_self_reg()
2562 (uint8_t *)&phba->pport->fc_sparam, in lpfcdiag_loop_self_reg()
2567 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2568 if (phba->sli_rev == LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2569 lpfc_sli4_free_rpi(phba, *rpi); in lpfcdiag_loop_self_reg()
2576 status = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfcdiag_loop_self_reg()
2579 lpfc_mbuf_free(phba, dmabuff->virt, dmabuff->phys); in lpfcdiag_loop_self_reg()
2582 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2583 if (phba->sli_rev == LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2584 lpfc_sli4_free_rpi(phba, *rpi); in lpfcdiag_loop_self_reg()
2588 if (phba->sli_rev < LPFC_SLI_REV4) in lpfcdiag_loop_self_reg()
2591 lpfc_mbuf_free(phba, dmabuff->virt, dmabuff->phys); in lpfcdiag_loop_self_reg()
2593 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_reg()
2604 static int lpfcdiag_loop_self_unreg(struct lpfc_hba *phba, uint16_t rpi) in lpfcdiag_loop_self_unreg() argument
2610 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfcdiag_loop_self_unreg()
2614 if (phba->sli_rev < LPFC_SLI_REV4) in lpfcdiag_loop_self_unreg()
2615 lpfc_unreg_login(phba, 0, rpi, mbox); in lpfcdiag_loop_self_unreg()
2617 lpfc_unreg_login(phba, phba->pport->vpi, in lpfcdiag_loop_self_unreg()
2618 phba->sli4_hba.rpi_ids[rpi], mbox); in lpfcdiag_loop_self_unreg()
2620 status = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfcdiag_loop_self_unreg()
2624 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_unreg()
2627 mempool_free(mbox, phba->mbox_mem_pool); in lpfcdiag_loop_self_unreg()
2628 if (phba->sli_rev == LPFC_SLI_REV4) in lpfcdiag_loop_self_unreg()
2629 lpfc_sli4_free_rpi(phba, rpi); in lpfcdiag_loop_self_unreg()
2645 static int lpfcdiag_loop_get_xri(struct lpfc_hba *phba, uint16_t rpi, in lpfcdiag_loop_get_xri() argument
2666 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2667 list_add(&evt->node, &phba->ct_ev_waiters); in lpfcdiag_loop_get_xri()
2669 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2671 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_get_xri()
2672 rspiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_get_xri()
2676 dmabuf->virt = lpfc_mbuf_alloc(phba, 0, &dmabuf->phys); in lpfcdiag_loop_get_xri()
2731 cmdiocbq->vport = phba->pport; in lpfcdiag_loop_get_xri()
2734 iocb_stat = lpfc_sli_issue_iocb_wait(phba, LPFC_ELS_RING, cmdiocbq, in lpfcdiag_loop_get_xri()
2736 (phba->fc_ratov * 2) in lpfcdiag_loop_get_xri()
2749 ((phba->fc_ratov * 2) + LPFC_DRVR_TIMEOUT))); in lpfcdiag_loop_get_xri()
2753 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2755 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2763 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2766 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfcdiag_loop_get_xri()
2770 lpfc_mbuf_free(phba, dmabuf->virt, dmabuf->phys); in lpfcdiag_loop_get_xri()
2775 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfcdiag_loop_get_xri()
2777 lpfc_sli_release_iocbq(phba, rspiocbq); in lpfcdiag_loop_get_xri()
2789 lpfc_bsg_dma_page_alloc(struct lpfc_hba *phba) in lpfc_bsg_dma_page_alloc() argument
2792 struct pci_dev *pcidev = phba->pcidev; in lpfc_bsg_dma_page_alloc()
2822 lpfc_bsg_dma_page_free(struct lpfc_hba *phba, struct lpfc_dmabuf *dmabuf) in lpfc_bsg_dma_page_free() argument
2824 struct pci_dev *pcidev = phba->pcidev; in lpfc_bsg_dma_page_free()
2845 lpfc_bsg_dma_page_list_free(struct lpfc_hba *phba, in lpfc_bsg_dma_page_list_free() argument
2855 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_dma_page_list_free()
2872 diag_cmd_data_alloc(struct lpfc_hba *phba, in diag_cmd_data_alloc() argument
2881 pcidev = phba->pcidev; in diag_cmd_data_alloc()
2938 diag_cmd_data_free(phba, mlist); in diag_cmd_data_alloc()
2951 static int lpfcdiag_loop_post_rxbufs(struct lpfc_hba *phba, uint16_t rxxri, in lpfcdiag_loop_post_rxbufs() argument
2968 pring = lpfc_phba_elsring(phba); in lpfcdiag_loop_post_rxbufs()
2970 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_post_rxbufs()
2973 rxbmp->virt = lpfc_mbuf_alloc(phba, 0, &rxbmp->phys); in lpfcdiag_loop_post_rxbufs()
2977 rxbuffer = diag_cmd_data_alloc(phba, rxbpl, len, 0); in lpfcdiag_loop_post_rxbufs()
2999 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) { in lpfcdiag_loop_post_rxbufs()
3000 mp[i]->buffer_tag = lpfc_sli_get_buffer_tag(phba); in lpfcdiag_loop_post_rxbufs()
3031 iocb_stat = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, in lpfcdiag_loop_post_rxbufs()
3034 diag_cmd_data_free(phba, in lpfcdiag_loop_post_rxbufs()
3037 diag_cmd_data_free(phba, in lpfcdiag_loop_post_rxbufs()
3044 lpfc_sli_ringpostbuf_put(phba, pring, mp[0]); in lpfcdiag_loop_post_rxbufs()
3046 lpfc_sli_ringpostbuf_put(phba, pring, mp[1]); in lpfcdiag_loop_post_rxbufs()
3051 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfcdiag_loop_post_rxbufs()
3067 lpfc_mbuf_free(phba, rxbmp->virt, rxbmp->phys); in lpfcdiag_loop_post_rxbufs()
3072 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfcdiag_loop_post_rxbufs()
3100 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_diag_loopback_run() local
3103 struct lpfc_sli *psli = &phba->sli; in lpfc_bsg_diag_loopback_run()
3131 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3144 if ((phba->link_state == LPFC_HBA_ERROR) || in lpfc_bsg_diag_loopback_run()
3151 if (!lpfc_is_link_up(phba) || !(phba->link_flag & LS_LOOPBACK_MODE)) { in lpfc_bsg_diag_loopback_run()
3191 rc = lpfcdiag_loop_self_reg(phba, &rpi); in lpfc_bsg_diag_loopback_run()
3195 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_bsg_diag_loopback_run()
3196 rc = lpfcdiag_loop_get_xri(phba, rpi, &txxri, &rxxri); in lpfc_bsg_diag_loopback_run()
3198 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3202 rc = lpfcdiag_loop_post_rxbufs(phba, rxxri, full_size); in lpfc_bsg_diag_loopback_run()
3204 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3211 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3216 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3217 list_add(&evt->node, &phba->ct_ev_waiters); in lpfc_bsg_diag_loopback_run()
3219 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3221 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfc_bsg_diag_loopback_run()
3222 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_bsg_diag_loopback_run()
3223 rspiocbq = lpfc_sli_get_iocbq(phba); in lpfc_bsg_diag_loopback_run()
3227 txbmp->virt = lpfc_mbuf_alloc(phba, 0, &txbmp->phys); in lpfc_bsg_diag_loopback_run()
3231 txbuffer = diag_cmd_data_alloc(phba, in lpfc_bsg_diag_loopback_run()
3240 if ((phba->sli_rev < LPFC_SLI_REV4) && !rspiocbq) { in lpfc_bsg_diag_loopback_run()
3246 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_bsg_diag_loopback_run()
3294 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_bsg_diag_loopback_run()
3298 cmd->un.ulpWord[3] = phba->sli4_hba.rpi_ids[rpi]; in lpfc_bsg_diag_loopback_run()
3305 cmdiocbq->vport = phba->pport; in lpfc_bsg_diag_loopback_run()
3307 iocb_stat = lpfc_sli_issue_iocb_wait(phba, LPFC_ELS_RING, cmdiocbq, in lpfc_bsg_diag_loopback_run()
3308 rspiocbq, (phba->fc_ratov * 2) + in lpfc_bsg_diag_loopback_run()
3312 ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_bsg_diag_loopback_run()
3314 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3325 ((phba->fc_ratov * 2) + LPFC_DRVR_TIMEOUT))); in lpfc_bsg_diag_loopback_run()
3329 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3333 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3337 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3340 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_diag_loopback_run()
3361 lpfcdiag_loop_self_unreg(phba, rpi); in lpfc_bsg_diag_loopback_run()
3363 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3366 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_diag_loopback_run()
3369 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_diag_loopback_run()
3372 lpfc_sli_release_iocbq(phba, rspiocbq); in lpfc_bsg_diag_loopback_run()
3377 diag_cmd_data_free(phba, txbuffer); in lpfc_bsg_diag_loopback_run()
3378 lpfc_mbuf_free(phba, txbmp->virt, txbmp->phys); in lpfc_bsg_diag_loopback_run()
3404 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_get_dfc_rev() local
3410 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_get_dfc_rev()
3421 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_get_dfc_rev()
3450 lpfc_bsg_issue_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_mbox_cmpl() argument
3471 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_cmpl()
3477 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_cmpl()
3491 mempool_free(dd_data->context_un.mbox.pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_mbox_cmpl()
3492 lpfc_bsg_dma_page_free(phba, dd_data->context_un.mbox.dmabuffers); in lpfc_bsg_issue_mbox_cmpl()
3514 static int lpfc_bsg_check_cmd_access(struct lpfc_hba *phba, in lpfc_bsg_check_cmd_access() argument
3532 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_check_cmd_access()
3568 lpfc_printf_log(phba, KERN_INFO, LOG_INIT, in lpfc_bsg_check_cmd_access()
3574 phba->wait_4_mlo_maint_flg = 1; in lpfc_bsg_check_cmd_access()
3576 spin_lock_irq(&phba->hbalock); in lpfc_bsg_check_cmd_access()
3577 phba->link_flag &= ~LS_LOOPBACK_MODE; in lpfc_bsg_check_cmd_access()
3578 spin_unlock_irq(&phba->hbalock); in lpfc_bsg_check_cmd_access()
3579 phba->fc_topology = LPFC_TOPOLOGY_PT_PT; in lpfc_bsg_check_cmd_access()
3588 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_check_cmd_access()
3605 lpfc_bsg_mbox_ext_session_reset(struct lpfc_hba *phba) in lpfc_bsg_mbox_ext_session_reset() argument
3607 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_IDLE) in lpfc_bsg_mbox_ext_session_reset()
3611 lpfc_bsg_dma_page_list_free(phba, in lpfc_bsg_mbox_ext_session_reset()
3612 &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_mbox_ext_session_reset()
3613 lpfc_bsg_dma_page_free(phba, phba->mbox_ext_buf_ctx.mbx_dmabuf); in lpfc_bsg_mbox_ext_session_reset()
3615 memset((char *)&phba->mbox_ext_buf_ctx, 0, in lpfc_bsg_mbox_ext_session_reset()
3617 INIT_LIST_HEAD(&phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_mbox_ext_session_reset()
3631 lpfc_bsg_issue_mbox_ext_handle_job(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_mbox_ext_handle_job() argument
3647 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_ext_handle_job()
3654 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_issue_mbox_ext_handle_job()
3666 dmabuf = phba->mbox_ext_buf_ctx.mbx_dmabuf; in lpfc_bsg_issue_mbox_ext_handle_job()
3689 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_issue_mbox_ext_handle_job()
3692 phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_issue_mbox_ext_handle_job()
3693 phba->mbox_ext_buf_ctx.mboxType, size); in lpfc_bsg_issue_mbox_ext_handle_job()
3694 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, in lpfc_bsg_issue_mbox_ext_handle_job()
3695 phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_issue_mbox_ext_handle_job()
3696 phba->mbox_ext_buf_ctx.mboxType, in lpfc_bsg_issue_mbox_ext_handle_job()
3698 phba->mbox_ext_buf_ctx.mbx_dmabuf, 0); in lpfc_bsg_issue_mbox_ext_handle_job()
3700 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_issue_mbox_ext_handle_job()
3703 phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_issue_mbox_ext_handle_job()
3704 phba->mbox_ext_buf_ctx.mboxType, rc); in lpfc_bsg_issue_mbox_ext_handle_job()
3709 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_DONE; in lpfc_bsg_issue_mbox_ext_handle_job()
3723 lpfc_bsg_issue_read_mbox_ext_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_read_mbox_ext_cmpl() argument
3728 job = lpfc_bsg_issue_mbox_ext_handle_job(phba, pmboxq); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3734 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_issue_read_mbox_ext_cmpl()
3737 phba->mbox_ext_buf_ctx.state, pmboxq->u.mb.mbxStatus); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3739 if (pmboxq->u.mb.mbxStatus || phba->mbox_ext_buf_ctx.numBuf == 1) in lpfc_bsg_issue_read_mbox_ext_cmpl()
3740 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3743 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_read_mbox_ext_cmpl()
3763 lpfc_bsg_issue_write_mbox_ext_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) in lpfc_bsg_issue_write_mbox_ext_cmpl() argument
3768 job = lpfc_bsg_issue_mbox_ext_handle_job(phba, pmboxq); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3774 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_issue_write_mbox_ext_cmpl()
3777 phba->mbox_ext_buf_ctx.state, pmboxq->u.mb.mbxStatus); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3780 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3781 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_issue_write_mbox_ext_cmpl()
3794 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
3813 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3830 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3851 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3870 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_dma_desc_setup()
3897 lpfc_bsg_sli_cfg_read_cmd_ext(struct lpfc_hba *phba, struct bsg_job *job, in lpfc_bsg_sli_cfg_read_cmd_ext() argument
3923 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3931 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3936 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) < in lpfc_bsg_sli_cfg_read_cmd_ext()
3944 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3952 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
3958 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_rd, dma_mbox, in lpfc_bsg_sli_cfg_read_cmd_ext()
3968 ext_dmabuf = lpfc_bsg_dma_page_alloc(phba); in lpfc_bsg_sli_cfg_read_cmd_ext()
3974 &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_sli_cfg_read_cmd_ext()
3986 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_sli_cfg_read_cmd_ext()
3994 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, 0, dmabuf, dmabuf); in lpfc_bsg_sli_cfg_read_cmd_ext()
4000 &phba->mbox_ext_buf_ctx.ext_dmabuf_list, list) { in lpfc_bsg_sli_cfg_read_cmd_ext()
4001 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, in lpfc_bsg_sli_cfg_read_cmd_ext()
4009 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_rd, dma_mbox, in lpfc_bsg_sli_cfg_read_cmd_ext()
4017 pmboxq->vport = phba->pport; in lpfc_bsg_sli_cfg_read_cmd_ext()
4020 phba->mbox_ext_buf_ctx.nembType = nemb_tp; in lpfc_bsg_sli_cfg_read_cmd_ext()
4021 phba->mbox_ext_buf_ctx.mboxType = mbox_rd; in lpfc_bsg_sli_cfg_read_cmd_ext()
4022 phba->mbox_ext_buf_ctx.numBuf = ext_buf_cnt; in lpfc_bsg_sli_cfg_read_cmd_ext()
4023 phba->mbox_ext_buf_ctx.mbxTag = mbox_req->extMboxTag; in lpfc_bsg_sli_cfg_read_cmd_ext()
4024 phba->mbox_ext_buf_ctx.seqNum = mbox_req->extSeqNum; in lpfc_bsg_sli_cfg_read_cmd_ext()
4025 phba->mbox_ext_buf_ctx.mbx_dmabuf = dmabuf; in lpfc_bsg_sli_cfg_read_cmd_ext()
4039 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_PORT; in lpfc_bsg_sli_cfg_read_cmd_ext()
4053 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_sli_cfg_read_cmd_ext()
4055 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
4060 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_read_cmd_ext()
4067 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_sli_cfg_read_cmd_ext()
4068 lpfc_bsg_dma_page_list_free(phba, in lpfc_bsg_sli_cfg_read_cmd_ext()
4069 &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_sli_cfg_read_cmd_ext()
4071 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_IDLE; in lpfc_bsg_sli_cfg_read_cmd_ext()
4085 lpfc_bsg_sli_cfg_write_cmd_ext(struct lpfc_hba *phba, struct bsg_job *job, in lpfc_bsg_sli_cfg_write_cmd_ext() argument
4110 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4117 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4122 if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) < in lpfc_bsg_sli_cfg_write_cmd_ext()
4128 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4135 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4141 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_wr, dma_mbox, in lpfc_bsg_sli_cfg_write_cmd_ext()
4148 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, 0, dmabuf, dmabuf); in lpfc_bsg_sli_cfg_write_cmd_ext()
4151 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, nemb_tp, mbox_wr, dma_mbox, in lpfc_bsg_sli_cfg_write_cmd_ext()
4157 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4162 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4170 phba->mbox_ext_buf_ctx.nembType = nemb_tp; in lpfc_bsg_sli_cfg_write_cmd_ext()
4171 phba->mbox_ext_buf_ctx.mboxType = mbox_wr; in lpfc_bsg_sli_cfg_write_cmd_ext()
4172 phba->mbox_ext_buf_ctx.numBuf = ext_buf_cnt; in lpfc_bsg_sli_cfg_write_cmd_ext()
4173 phba->mbox_ext_buf_ctx.mbxTag = mbox_req->extMboxTag; in lpfc_bsg_sli_cfg_write_cmd_ext()
4174 phba->mbox_ext_buf_ctx.seqNum = mbox_req->extSeqNum; in lpfc_bsg_sli_cfg_write_cmd_ext()
4175 phba->mbox_ext_buf_ctx.mbx_dmabuf = dmabuf; in lpfc_bsg_sli_cfg_write_cmd_ext()
4186 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_sli_cfg_write_cmd_ext()
4196 pmboxq->vport = phba->pport; in lpfc_bsg_sli_cfg_write_cmd_ext()
4211 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_PORT; in lpfc_bsg_sli_cfg_write_cmd_ext()
4212 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_sli_cfg_write_cmd_ext()
4214 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4219 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_sli_cfg_write_cmd_ext()
4235 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_sli_cfg_write_cmd_ext()
4252 lpfc_bsg_handle_sli_cfg_mbox(struct lpfc_hba *phba, struct bsg_job *job, in lpfc_bsg_handle_sli_cfg_mbox() argument
4261 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_HOST; in lpfc_bsg_handle_sli_cfg_mbox()
4275 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4279 rc = lpfc_bsg_sli_cfg_read_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4285 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4289 rc = lpfc_bsg_sli_cfg_write_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4293 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4306 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4310 rc = lpfc_bsg_sli_cfg_read_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4314 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4322 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4337 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4341 rc = lpfc_bsg_sli_cfg_read_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4345 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4349 rc = lpfc_bsg_sli_cfg_write_cmd_ext(phba, job, in lpfc_bsg_handle_sli_cfg_mbox()
4353 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4361 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_mbox()
4371 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_IDLE; in lpfc_bsg_handle_sli_cfg_mbox()
4384 lpfc_bsg_mbox_ext_abort(struct lpfc_hba *phba) in lpfc_bsg_mbox_ext_abort() argument
4386 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_PORT) in lpfc_bsg_mbox_ext_abort()
4387 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_ABTS; in lpfc_bsg_mbox_ext_abort()
4389 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_mbox_ext_abort()
4402 lpfc_bsg_read_ebuf_get(struct lpfc_hba *phba, struct bsg_job *job) in lpfc_bsg_read_ebuf_get() argument
4411 index = phba->mbox_ext_buf_ctx.seqNum; in lpfc_bsg_read_ebuf_get()
4412 phba->mbox_ext_buf_ctx.seqNum++; in lpfc_bsg_read_ebuf_get()
4415 phba->mbox_ext_buf_ctx.mbx_dmabuf->virt; in lpfc_bsg_read_ebuf_get()
4417 if (phba->mbox_ext_buf_ctx.nembType == nemb_mse) { in lpfc_bsg_read_ebuf_get()
4420 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_read_ebuf_get()
4426 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_read_ebuf_get()
4430 if (list_empty(&phba->mbox_ext_buf_ctx.ext_dmabuf_list)) in lpfc_bsg_read_ebuf_get()
4432 dmabuf = list_first_entry(&phba->mbox_ext_buf_ctx.ext_dmabuf_list, in lpfc_bsg_read_ebuf_get()
4437 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_read_ebuf_get()
4447 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_read_ebuf_get()
4449 if (phba->mbox_ext_buf_ctx.seqNum == phba->mbox_ext_buf_ctx.numBuf) { in lpfc_bsg_read_ebuf_get()
4450 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_read_ebuf_get()
4453 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_read_ebuf_get()
4472 lpfc_bsg_write_ebuf_set(struct lpfc_hba *phba, struct bsg_job *job, in lpfc_bsg_write_ebuf_set() argument
4485 index = phba->mbox_ext_buf_ctx.seqNum; in lpfc_bsg_write_ebuf_set()
4486 phba->mbox_ext_buf_ctx.seqNum++; in lpfc_bsg_write_ebuf_set()
4487 nemb_tp = phba->mbox_ext_buf_ctx.nembType; in lpfc_bsg_write_ebuf_set()
4495 if (phba->mbox_ext_buf_ctx.nembType == nemb_mse) { in lpfc_bsg_write_ebuf_set()
4496 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4499 phba->mbox_ext_buf_ctx.seqNum, size); in lpfc_bsg_write_ebuf_set()
4502 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4505 phba->mbox_ext_buf_ctx.seqNum, size); in lpfc_bsg_write_ebuf_set()
4510 lpfc_bsg_sli_cfg_dma_desc_setup(phba, nemb_tp, index, in lpfc_bsg_write_ebuf_set()
4511 phba->mbox_ext_buf_ctx.mbx_dmabuf, in lpfc_bsg_write_ebuf_set()
4513 list_add_tail(&dmabuf->list, &phba->mbox_ext_buf_ctx.ext_dmabuf_list); in lpfc_bsg_write_ebuf_set()
4516 lpfc_idiag_mbxacc_dump_bsg_mbox(phba, phba->mbox_ext_buf_ctx.nembType, in lpfc_bsg_write_ebuf_set()
4520 if (phba->mbox_ext_buf_ctx.seqNum == phba->mbox_ext_buf_ctx.numBuf) { in lpfc_bsg_write_ebuf_set()
4521 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4524 phba->mbox_ext_buf_ctx.numBuf); in lpfc_bsg_write_ebuf_set()
4533 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_write_ebuf_set()
4539 pbuf = (uint8_t *)phba->mbox_ext_buf_ctx.mbx_dmabuf->virt; in lpfc_bsg_write_ebuf_set()
4543 pmboxq->vport = phba->pport; in lpfc_bsg_write_ebuf_set()
4557 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_PORT; in lpfc_bsg_write_ebuf_set()
4559 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_write_ebuf_set()
4561 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4566 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_write_ebuf_set()
4581 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_write_ebuf_set()
4582 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_write_ebuf_set()
4598 lpfc_bsg_handle_sli_cfg_ebuf(struct lpfc_hba *phba, struct bsg_job *job, in lpfc_bsg_handle_sli_cfg_ebuf() argument
4603 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ebuf()
4605 phba->mbox_ext_buf_ctx.mboxType); in lpfc_bsg_handle_sli_cfg_ebuf()
4607 if (phba->mbox_ext_buf_ctx.mboxType == mbox_rd) { in lpfc_bsg_handle_sli_cfg_ebuf()
4608 if (phba->mbox_ext_buf_ctx.state != LPFC_BSG_MBOX_DONE) { in lpfc_bsg_handle_sli_cfg_ebuf()
4609 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ebuf()
4612 phba->mbox_ext_buf_ctx.state); in lpfc_bsg_handle_sli_cfg_ebuf()
4613 lpfc_bsg_mbox_ext_abort(phba); in lpfc_bsg_handle_sli_cfg_ebuf()
4616 rc = lpfc_bsg_read_ebuf_get(phba, job); in lpfc_bsg_handle_sli_cfg_ebuf()
4618 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_handle_sli_cfg_ebuf()
4620 if (phba->mbox_ext_buf_ctx.state != LPFC_BSG_MBOX_HOST) { in lpfc_bsg_handle_sli_cfg_ebuf()
4621 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ebuf()
4624 phba->mbox_ext_buf_ctx.state); in lpfc_bsg_handle_sli_cfg_ebuf()
4625 lpfc_bsg_mbox_ext_abort(phba); in lpfc_bsg_handle_sli_cfg_ebuf()
4628 rc = lpfc_bsg_write_ebuf_set(phba, job, dmabuf); in lpfc_bsg_handle_sli_cfg_ebuf()
4643 lpfc_bsg_handle_sli_cfg_ext(struct lpfc_hba *phba, struct bsg_job *job, in lpfc_bsg_handle_sli_cfg_ext() argument
4658 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_IDLE) { in lpfc_bsg_handle_sli_cfg_ext()
4660 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ext()
4664 rc = lpfc_bsg_handle_sli_cfg_mbox(phba, job, dmabuf); in lpfc_bsg_handle_sli_cfg_ext()
4675 if (mbox_req->extMboxTag != phba->mbox_ext_buf_ctx.mbxTag) in lpfc_bsg_handle_sli_cfg_ext()
4677 if (mbox_req->extSeqNum > phba->mbox_ext_buf_ctx.numBuf) in lpfc_bsg_handle_sli_cfg_ext()
4679 if (mbox_req->extSeqNum != phba->mbox_ext_buf_ctx.seqNum + 1) in lpfc_bsg_handle_sli_cfg_ext()
4682 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ext()
4685 phba->mbox_ext_buf_ctx.state, mbox_req->extMboxTag, in lpfc_bsg_handle_sli_cfg_ext()
4687 rc = lpfc_bsg_handle_sli_cfg_ebuf(phba, job, dmabuf); in lpfc_bsg_handle_sli_cfg_ext()
4692 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_handle_sli_cfg_ext()
4696 phba->mbox_ext_buf_ctx.state, in lpfc_bsg_handle_sli_cfg_ext()
4697 phba->mbox_ext_buf_ctx.numBuf, in lpfc_bsg_handle_sli_cfg_ext()
4698 phba->mbox_ext_buf_ctx.mbxTag, in lpfc_bsg_handle_sli_cfg_ext()
4699 phba->mbox_ext_buf_ctx.seqNum, in lpfc_bsg_handle_sli_cfg_ext()
4702 lpfc_bsg_mbox_ext_session_reset(phba); in lpfc_bsg_handle_sli_cfg_ext()
4721 lpfc_bsg_issue_mbox(struct lpfc_hba *phba, struct bsg_job *job, in lpfc_bsg_issue_mbox() argument
4757 if (phba->sli.sli_flag & LPFC_BLOCK_MGMT_IO) { in lpfc_bsg_issue_mbox()
4772 dmabuf = lpfc_bsg_dma_page_alloc(phba); in lpfc_bsg_issue_mbox()
4785 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_bsg_issue_mbox()
4786 rc = lpfc_bsg_handle_sli_cfg_ext(phba, job, dmabuf); in lpfc_bsg_issue_mbox()
4794 rc = lpfc_bsg_check_cmd_access(phba, (MAILBOX_t *)pmbx, vport); in lpfc_bsg_issue_mbox()
4801 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_bsg_issue_mbox()
4807 pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_bsg_issue_mbox()
4822 if (phba->pport->stopped && in lpfc_bsg_issue_mbox()
4827 lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX, in lpfc_bsg_issue_mbox()
4890 } else if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_bsg_issue_mbox()
4976 (!(phba->sli.sli_flag & LPFC_SLI_ACTIVE))) { in lpfc_bsg_issue_mbox()
4977 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_POLL); in lpfc_bsg_issue_mbox()
4994 rc = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT); in lpfc_bsg_issue_mbox()
5001 mempool_free(pmboxq, phba->mbox_mem_pool); in lpfc_bsg_issue_mbox()
5002 lpfc_bsg_dma_page_free(phba, dmabuf); in lpfc_bsg_issue_mbox()
5019 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_mbox_cmd() local
5027 lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, in lpfc_bsg_mbox_cmd()
5040 rc = lpfc_bsg_issue_mbox(phba, job, vport); in lpfc_bsg_mbox_cmd()
5078 lpfc_bsg_menlo_cmd_cmp(struct lpfc_hba *phba, in lpfc_bsg_menlo_cmd_cmp() argument
5101 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_menlo_cmd_cmp()
5108 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_menlo_cmd_cmp()
5146 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_bsg_menlo_cmd_cmp()
5147 lpfc_free_bsg_buffers(phba, cmp); in lpfc_bsg_menlo_cmd_cmp()
5148 lpfc_free_bsg_buffers(phba, rmp); in lpfc_bsg_menlo_cmd_cmp()
5149 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_bsg_menlo_cmd_cmp()
5179 struct lpfc_hba *phba = vport->phba; in lpfc_menlo_cmd() local
5196 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5205 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5212 if (!(phba->menlo_flag & HBA_MENLO_SUPPORT)) { in lpfc_menlo_cmd()
5213 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5226 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_menlo_cmd()
5238 bmp->virt = lpfc_mbuf_alloc(phba, 0, &bmp->phys); in lpfc_menlo_cmd()
5248 cmp = lpfc_alloc_bsg_buffers(phba, job->request_payload.payload_len, in lpfc_menlo_cmd()
5259 rmp = lpfc_alloc_bsg_buffers(phba, job->reply_payload.payload_len, 0, in lpfc_menlo_cmd()
5266 cmdiocbq = lpfc_sli_get_iocbq(phba); in lpfc_menlo_cmd()
5288 cmdiocbq->vport = phba->pport; in lpfc_menlo_cmd()
5313 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, cmdiocbq, in lpfc_menlo_cmd()
5318 lpfc_sli_release_iocbq(phba, cmdiocbq); in lpfc_menlo_cmd()
5321 lpfc_free_bsg_buffers(phba, rmp); in lpfc_menlo_cmd()
5323 lpfc_free_bsg_buffers(phba, cmp); in lpfc_menlo_cmd()
5326 lpfc_mbuf_free(phba, bmp->virt, bmp->phys); in lpfc_menlo_cmd()
5342 struct lpfc_hba *phba = vport->phba; in lpfc_forced_link_speed() local
5350 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_forced_link_speed()
5361 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_forced_link_speed()
5368 forced_reply->supported = (phba->hba_flag & HBA_FORCED_LINK_SPEED) in lpfc_forced_link_speed()
5386 lpfc_check_fwlog_support(struct lpfc_hba *phba) in lpfc_check_fwlog_support() argument
5390 ras_fwlog = &phba->ras_fwlog; in lpfc_check_fwlog_support()
5412 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_get_ras_config() local
5414 struct lpfc_ras_fwlog *ras_fwlog = &phba->ras_fwlog; in lpfc_bsg_get_ras_config()
5420 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_get_ras_config()
5428 rc = lpfc_check_fwlog_support(phba); in lpfc_bsg_get_ras_config()
5436 spin_lock_irq(&phba->hbalock); in lpfc_bsg_get_ras_config()
5441 spin_unlock_irq(&phba->hbalock); in lpfc_bsg_get_ras_config()
5443 ras_reply->log_level = phba->ras_fwlog.fw_loglevel; in lpfc_bsg_get_ras_config()
5444 ras_reply->log_buff_sz = phba->cfg_ras_fwlog_buffsize; in lpfc_bsg_get_ras_config()
5468 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_set_ras_config() local
5471 struct lpfc_ras_fwlog *ras_fwlog = &phba->ras_fwlog; in lpfc_bsg_set_ras_config()
5479 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_set_ras_config()
5487 rc = lpfc_check_fwlog_support(phba); in lpfc_bsg_set_ras_config()
5498 spin_lock_irq(&phba->hbalock); in lpfc_bsg_set_ras_config()
5500 spin_unlock_irq(&phba->hbalock); in lpfc_bsg_set_ras_config()
5504 spin_unlock_irq(&phba->hbalock); in lpfc_bsg_set_ras_config()
5507 lpfc_ras_stop_fwlog(phba); in lpfc_bsg_set_ras_config()
5515 spin_lock_irq(&phba->hbalock); in lpfc_bsg_set_ras_config()
5518 spin_unlock_irq(&phba->hbalock); in lpfc_bsg_set_ras_config()
5521 rc = lpfc_sli4_ras_fwlog_init(phba, log_level, in lpfc_bsg_set_ras_config()
5557 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_get_ras_lwpd() local
5558 struct lpfc_ras_fwlog *ras_fwlog = &phba->ras_fwlog; in lpfc_bsg_get_ras_lwpd()
5563 rc = lpfc_check_fwlog_support(phba); in lpfc_bsg_get_ras_lwpd()
5570 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_get_ras_lwpd()
5581 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_get_ras_lwpd()
5617 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_get_ras_fwlog() local
5627 ras_fwlog = &phba->ras_fwlog; in lpfc_bsg_get_ras_fwlog()
5629 rc = lpfc_check_fwlog_support(phba); in lpfc_bsg_get_ras_fwlog()
5634 spin_lock_irq(&phba->hbalock); in lpfc_bsg_get_ras_fwlog()
5636 spin_unlock_irq(&phba->hbalock); in lpfc_bsg_get_ras_fwlog()
5640 spin_unlock_irq(&phba->hbalock); in lpfc_bsg_get_ras_fwlog()
5645 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_bsg_get_ras_fwlog()
5697 struct lpfc_hba *phba = vport->phba; in lpfc_get_trunk_info() local
5704 lpfc_printf_log(phba, KERN_ERR, LOG_LIBDFC, in lpfc_get_trunk_info()
5715 lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC, in lpfc_get_trunk_info()
5727 (phba->link_state >= LPFC_LINK_UP) ? 1 : 0); in lpfc_get_trunk_info()
5730 (phba->trunk_link.link0.state == LPFC_LINK_UP) ? 1 : 0); in lpfc_get_trunk_info()
5733 (phba->trunk_link.link1.state == LPFC_LINK_UP) ? 1 : 0); in lpfc_get_trunk_info()
5736 (phba->trunk_link.link2.state == LPFC_LINK_UP) ? 1 : 0); in lpfc_get_trunk_info()
5739 (phba->trunk_link.link3.state == LPFC_LINK_UP) ? 1 : 0); in lpfc_get_trunk_info()
5742 bf_get(lpfc_conf_trunk_port0, &phba->sli4_hba)); in lpfc_get_trunk_info()
5745 bf_get(lpfc_conf_trunk_port1, &phba->sli4_hba)); in lpfc_get_trunk_info()
5748 bf_get(lpfc_conf_trunk_port2, &phba->sli4_hba)); in lpfc_get_trunk_info()
5751 bf_get(lpfc_conf_trunk_port3, &phba->sli4_hba)); in lpfc_get_trunk_info()
5753 event_reply->port_speed = phba->sli4_hba.link_state.speed / 1000; in lpfc_get_trunk_info()
5755 phba->sli4_hba.link_state.logical_speed / 1000; in lpfc_get_trunk_info()
5883 struct lpfc_hba *phba = vport->phba; in lpfc_bsg_timeout() local
5892 pring = lpfc_phba_elsring(phba); in lpfc_bsg_timeout()
5905 spin_lock_irqsave(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5911 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5922 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5924 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_timeout()
5927 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_timeout()
5938 lpfc_sli_issue_abort_iotag(phba, pring, cmdiocb); in lpfc_bsg_timeout()
5939 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_timeout()
5941 lpfc_sli_cancel_iocbs(phba, &completions, in lpfc_bsg_timeout()
5948 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5954 if (phba->mbox_ext_buf_ctx.state == LPFC_BSG_MBOX_PORT) in lpfc_bsg_timeout()
5955 phba->mbox_ext_buf_ctx.state = LPFC_BSG_MBOX_ABTS; in lpfc_bsg_timeout()
5956 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5964 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()
5966 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_bsg_timeout()
5975 lpfc_sli_issue_abort_iotag(phba, pring, cmdiocb); in lpfc_bsg_timeout()
5976 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_bsg_timeout()
5978 lpfc_sli_cancel_iocbs(phba, &completions, in lpfc_bsg_timeout()
5984 spin_unlock_irqrestore(&phba->ct_ev_lock, flags); in lpfc_bsg_timeout()