Lines Matching +full:hb +full:- +full:pll +full:- +full:clock
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
4 * Copyright (c) 2014- QLogic Corporation.
8 * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter.
31 bfa_timer_begin((__ioc)->timer_mod, &(__ioc)->ioc_timer, \
33 #define bfa_ioc_timer_stop(__ioc) bfa_timer_stop(&(__ioc)->ioc_timer)
36 bfa_timer_begin((__ioc)->timer_mod, &(__ioc)->hb_timer, \
38 #define bfa_hb_timer_stop(__ioc) bfa_timer_stop(&(__ioc)->hb_timer)
55 ((__ioc)->ioc_hwif->ioc_firmware_lock(__ioc))
57 ((__ioc)->ioc_hwif->ioc_firmware_unlock(__ioc))
58 #define bfa_ioc_reg_init(__ioc) ((__ioc)->ioc_hwif->ioc_reg_init(__ioc))
59 #define bfa_ioc_map_port(__ioc) ((__ioc)->ioc_hwif->ioc_map_port(__ioc))
61 ((__ioc)->ioc_hwif->ioc_notify_fail(__ioc))
63 ((__ioc)->ioc_hwif->ioc_sync_start(__ioc))
65 ((__ioc)->ioc_hwif->ioc_sync_join(__ioc))
67 ((__ioc)->ioc_hwif->ioc_sync_leave(__ioc))
69 ((__ioc)->ioc_hwif->ioc_sync_ack(__ioc))
71 ((__ioc)->ioc_hwif->ioc_sync_complete(__ioc))
73 ((__ioc)->ioc_hwif->ioc_set_fwstate(__ioc, __fwstate))
75 ((__ioc)->ioc_hwif->ioc_get_fwstate(__ioc))
77 ((__ioc)->ioc_hwif->ioc_set_alt_fwstate(__ioc, __fwstate))
79 ((__ioc)->ioc_hwif->ioc_get_alt_fwstate(__ioc))
82 (!list_empty(&((__ioc)->mbox_mod.cmd_q)) || \
83 readl((__ioc)->ioc_regs.hfn_mbox_cmd))
162 bfa_timer_begin((__ioc)->timer_mod, &(__ioc)->ioc_timer, \
164 #define bfa_iocpf_timer_stop(__ioc) bfa_timer_stop(&(__ioc)->ioc_timer)
167 bfa_timer_begin((__ioc)->timer_mod, &(__ioc)->ioc_timer, \
171 bfa_timer_begin((__ioc)->timer_mod, &(__ioc)->sem_timer, \
173 #define bfa_sem_timer_stop(__ioc) bfa_timer_stop(&(__ioc)->sem_timer)
278 * Reset entry actions -- initialize state machine
283 bfa_fsm_set_state(&ioc->iocpf, bfa_iocpf_sm_reset); in bfa_ioc_sm_reset_entry()
316 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_ENABLE); in bfa_ioc_sm_enabling_entry()
336 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
339 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_INITFAIL); in bfa_ioc_sm_enabling()
343 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
353 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_ioc_sm_enabling()
391 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_getattr()
394 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_GETATTRFAIL); in bfa_ioc_sm_getattr()
413 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_sm_op_entry()
415 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_OK); in bfa_ioc_sm_op_entry()
441 if (ioc->iocpf.auto_recover) in bfa_ioc_sm_op()
449 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FAIL); in bfa_ioc_sm_op()
461 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_sm_disabling_entry()
462 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_DISABLE); in bfa_ioc_sm_disabling_entry()
486 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FAIL); in bfa_ioc_sm_disabling()
519 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_disabled()
524 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_ioc_sm_disabled()
557 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
560 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_INITFAIL); in bfa_ioc_sm_fail_retry()
564 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
577 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_ioc_sm_fail_retry()
603 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail()
612 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_ioc_sm_fail()
618 * HB failure / HW error notification, ignore. in bfa_ioc_sm_fail()
639 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_hwfail()
643 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_hwfail()
651 /* Ignore - already in hwfail state */ in bfa_ioc_sm_hwfail()
664 * Reset entry actions -- initialize state machine
669 iocpf->fw_mismatch_notified = BFA_FALSE; in bfa_iocpf_sm_reset_entry()
670 iocpf->auto_recover = bfa_auto_recover; in bfa_iocpf_sm_reset_entry()
679 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_reset()
709 r32 = readl(iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
712 r32 = readl(iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
716 fwstate = bfa_ioc_get_cur_ioc_fwstate(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
718 writel(1, iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
722 bfa_ioc_fwver_get(iocpf->ioc, &fwhdr); in bfa_iocpf_sm_fwcheck_entry()
725 writel(1, iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
732 pgnum = PSS_SMEM_PGNUM(iocpf->ioc->ioc_regs.smem_pg0, loff); in bfa_iocpf_sm_fwcheck_entry()
733 writel(pgnum, iocpf->ioc->ioc_regs.host_page_num_fn); in bfa_iocpf_sm_fwcheck_entry()
736 bfa_mem_write(iocpf->ioc->ioc_regs.smem_page_start, loff, 0); in bfa_iocpf_sm_fwcheck_entry()
740 bfa_trc(iocpf->ioc, fwstate); in bfa_iocpf_sm_fwcheck_entry()
741 bfa_trc(iocpf->ioc, swab32(fwhdr.exec)); in bfa_iocpf_sm_fwcheck_entry()
742 bfa_ioc_set_cur_ioc_fwstate(iocpf->ioc, BFI_IOC_UNINIT); in bfa_iocpf_sm_fwcheck_entry()
743 bfa_ioc_set_alt_ioc_fwstate(iocpf->ioc, BFI_IOC_UNINIT); in bfa_iocpf_sm_fwcheck_entry()
748 bfa_ioc_ownership_reset(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
753 writel(1, iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
756 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
765 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_fwcheck()
777 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_fwcheck()
781 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_fwcheck()
816 if (iocpf->fw_mismatch_notified == BFA_FALSE) in bfa_iocpf_sm_mismatch_entry()
817 bfa_ioc_pf_fwmismatch(iocpf->ioc); in bfa_iocpf_sm_mismatch_entry()
819 iocpf->fw_mismatch_notified = BFA_TRUE; in bfa_iocpf_sm_mismatch_entry()
820 bfa_iocpf_timer_start(iocpf->ioc); in bfa_iocpf_sm_mismatch_entry()
829 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_mismatch()
860 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_semwait_entry()
869 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_semwait()
879 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_semwait()
902 iocpf->poll_time = 0; in bfa_iocpf_sm_hwinit_entry()
903 bfa_ioc_hwinit(iocpf->ioc, BFA_FALSE); in bfa_iocpf_sm_hwinit_entry()
913 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_hwinit()
923 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_hwinit()
931 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_hwinit()
943 bfa_iocpf_timer_start(iocpf->ioc); in bfa_iocpf_sm_enabling_entry()
947 iocpf->ioc->cbfn->reset_cbfn(iocpf->ioc->bfa); in bfa_iocpf_sm_enabling_entry()
948 bfa_ioc_send_enable(iocpf->ioc); in bfa_iocpf_sm_enabling_entry()
958 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_enabling()
965 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_enabling()
974 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_enabling()
982 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_enabling()
994 bfa_fsm_send_event(iocpf->ioc, IOC_E_ENABLED); in bfa_iocpf_sm_ready_entry()
1000 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_ready()
1025 bfa_iocpf_timer_start(iocpf->ioc); in bfa_iocpf_sm_disabling_entry()
1026 bfa_ioc_send_disable(iocpf->ioc); in bfa_iocpf_sm_disabling_entry()
1035 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling()
1065 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_disabling_sync_entry()
1069 * IOC hb ack request is being removed.
1074 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling_sync()
1081 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_disabling_sync()
1104 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_disabled_entry()
1105 bfa_fsm_send_event(iocpf->ioc, IOC_E_DISABLED); in bfa_iocpf_sm_disabled_entry()
1111 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_disabled()
1133 bfa_ioc_debug_save_ftrc(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
1134 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
1143 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail_sync()
1152 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_initfail_sync()
1183 bfa_trc(iocpf->ioc, 0); in bfa_iocpf_sm_initfail_entry()
1192 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail()
1217 bfa_ioc_lpu_stop(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1222 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1224 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1230 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_fail_sync()
1238 if (!iocpf->auto_recover) { in bfa_iocpf_sm_fail_sync()
1241 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_fail_sync()
1247 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_fail_sync()
1274 bfa_trc(iocpf->ioc, 0); in bfa_iocpf_sm_fail_entry()
1283 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_fail()
1310 list_for_each(qe, &ioc->notify_q) { in bfa_ioc_event_notify()
1312 notify->cbfn(notify->cbarg, event); in bfa_ioc_event_notify()
1319 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_disable_comp()
1353 r32 = readl(ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_get()
1356 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEM_ERROR); in bfa_ioc_hw_sem_get()
1360 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEMLOCKED); in bfa_ioc_hw_sem_get()
1377 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1382 * i2c workaround 12.5khz clock in bfa_ioc_lmem_init()
1385 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1392 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1404 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1415 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1418 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1429 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1432 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1446 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_ioc_fwver_get()
1447 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_fwver_get()
1452 bfa_mem_read(ioc->ioc_regs.smem_page_start, loff); in bfa_ioc_fwver_get()
1523 if (fwhdr_1->md5sum[i] != fwhdr_2->md5sum[i]) in bfa_ioc_fwver_md5_check()
1537 if (drv_fwhdr->signature != fwhdr_to_cmp->signature) in bfa_ioc_fw_ver_compatible()
1540 if (drv_fwhdr->fwver.major != fwhdr_to_cmp->fwver.major) in bfa_ioc_fw_ver_compatible()
1543 if (drv_fwhdr->fwver.minor != fwhdr_to_cmp->fwver.minor) in bfa_ioc_fw_ver_compatible()
1546 if (drv_fwhdr->fwver.maint != fwhdr_to_cmp->fwver.maint) in bfa_ioc_fw_ver_compatible()
1549 if (drv_fwhdr->fwver.patch == fwhdr_to_cmp->fwver.patch && in bfa_ioc_fw_ver_compatible()
1550 drv_fwhdr->fwver.phase == fwhdr_to_cmp->fwver.phase && in bfa_ioc_fw_ver_compatible()
1551 drv_fwhdr->fwver.build == fwhdr_to_cmp->fwver.build) { in bfa_ioc_fw_ver_compatible()
1561 if (flash_fwhdr->fwver.major == 0 || flash_fwhdr->fwver.major == 0xFF) in bfa_ioc_flash_fwver_valid()
1569 if (fwhdr->fwver.phase == 0 && in fwhdr_is_ga()
1570 fwhdr->fwver.build == 0) in fwhdr_is_ga()
1586 if (fwhdr_to_cmp->fwver.patch > base_fwhdr->fwver.patch) in bfa_ioc_fw_ver_patch_cmp()
1589 else if (fwhdr_to_cmp->fwver.patch < base_fwhdr->fwver.patch) in bfa_ioc_fw_ver_patch_cmp()
1607 if (fwhdr_to_cmp->fwver.phase > base_fwhdr->fwver.phase) in bfa_ioc_fw_ver_patch_cmp()
1609 else if (fwhdr_to_cmp->fwver.phase < base_fwhdr->fwver.phase) in bfa_ioc_fw_ver_patch_cmp()
1612 if (fwhdr_to_cmp->fwver.build > base_fwhdr->fwver.build) in bfa_ioc_fw_ver_patch_cmp()
1614 else if (fwhdr_to_cmp->fwver.build < base_fwhdr->fwver.build) in bfa_ioc_fw_ver_patch_cmp()
1630 return bfa_flash_raw_read(ioc->pcidev.pci_bar_kva, in bfa_ioc_flash_img_get_chnk()
1670 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_ioc_fwsig_invalidate()
1671 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_fwsig_invalidate()
1672 bfa_mem_write(ioc->ioc_regs.smem_page_start, loff, BFA_IOC_FW_INV_SIGN); in bfa_ioc_fwsig_invalidate()
1685 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1687 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1731 * just re-enable IOC. in bfa_ioc_hwinit()
1740 * When using MSI-X any pending firmware ready event should in bfa_ioc_hwinit()
1741 * be flushed. Otherwise MSI-X interrupts are not delivered. in bfa_ioc_hwinit()
1744 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_hwinit()
1780 ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1783 writel(0, ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1788 writel(1, ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1789 (void) readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1799 enable_req.clscode = cpu_to_be16(ioc->clscode); in bfa_ioc_send_enable()
1800 /* unsigned 32-bit time_t overflow in y2106 */ in bfa_ioc_send_enable()
1812 disable_req.clscode = cpu_to_be16(ioc->clscode); in bfa_ioc_send_disable()
1813 /* unsigned 32-bit time_t overflow in y2106 */ in bfa_ioc_send_disable()
1825 bfa_dma_be_addr_set(attr_req.attr_addr, ioc->attr_dma.pa); in bfa_ioc_send_getattr()
1835 hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_ioc_hb_check()
1836 if (ioc->hb_count == hb_count) { in bfa_ioc_hb_check()
1840 ioc->hb_count = hb_count; in bfa_ioc_hb_check()
1850 ioc->hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_ioc_hb_monitor()
1890 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_ioc_download_fw()
1891 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
1917 bfa_mem_write(ioc->ioc_regs.smem_page_start, loff, in bfa_ioc_download_fw()
1928 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
1932 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0), in bfa_ioc_download_fw()
1933 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
1942 asicmode = BFI_FWBOOT_DEVMODE(ioc->asic_gen, ioc->asic_mode, in bfa_ioc_download_fw()
1943 ioc->port0_mode, ioc->port1_mode); in bfa_ioc_download_fw()
1944 bfa_mem_write(ioc->ioc_regs.smem_page_start, BFI_FWBOOT_DEVMODE_OFF, in bfa_ioc_download_fw()
1946 bfa_mem_write(ioc->ioc_regs.smem_page_start, BFI_FWBOOT_TYPE_OFF, in bfa_ioc_download_fw()
1948 bfa_mem_write(ioc->ioc_regs.smem_page_start, BFI_FWBOOT_ENV_OFF, in bfa_ioc_download_fw()
1960 struct bfi_ioc_attr_s *attr = ioc->attr; in bfa_ioc_getattr_reply()
1962 attr->adapter_prop = be32_to_cpu(attr->adapter_prop); in bfa_ioc_getattr_reply()
1963 attr->card_type = be32_to_cpu(attr->card_type); in bfa_ioc_getattr_reply()
1964 attr->maxfrsize = be16_to_cpu(attr->maxfrsize); in bfa_ioc_getattr_reply()
1965 ioc->fcmode = (attr->port_mode == BFI_PORT_MODE_FC); in bfa_ioc_getattr_reply()
1966 attr->mfg_year = be16_to_cpu(attr->mfg_year); in bfa_ioc_getattr_reply()
1977 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_attach()
1980 INIT_LIST_HEAD(&mod->cmd_q); in bfa_ioc_mbox_attach()
1982 mod->mbhdlr[mc].cbfn = NULL; in bfa_ioc_mbox_attach()
1983 mod->mbhdlr[mc].cbarg = ioc->bfa; in bfa_ioc_mbox_attach()
1988 * Mbox poll timer -- restarts any pending mailbox requests.
1993 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_poll()
2000 if (list_empty(&mod->cmd_q)) in bfa_ioc_mbox_poll()
2006 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_poll()
2013 bfa_q_deq(&mod->cmd_q, &cmd); in bfa_ioc_mbox_poll()
2014 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_ioc_mbox_poll()
2023 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_flush()
2026 while (!list_empty(&mod->cmd_q)) in bfa_ioc_mbox_flush()
2027 bfa_q_deq(&mod->cmd_q, &cmd); in bfa_ioc_mbox_flush()
2046 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, soff); in bfa_ioc_smem_read()
2053 * Hold semaphore to serialize pll init and fwtrc. in bfa_ioc_smem_read()
2055 if (BFA_FALSE == bfa_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg)) { in bfa_ioc_smem_read()
2060 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_read()
2065 r32 = bfa_mem_read(ioc->ioc_regs.smem_page_start, loff); in bfa_ioc_smem_read()
2075 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_read()
2078 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0), in bfa_ioc_smem_read()
2079 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_read()
2083 readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_smem_read()
2084 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_smem_read()
2103 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, soff); in bfa_ioc_smem_clr()
2110 * Hold semaphore to serialize pll init and fwtrc. in bfa_ioc_smem_clr()
2112 if (BFA_FALSE == bfa_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg)) { in bfa_ioc_smem_clr()
2117 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_clr()
2122 bfa_mem_write(ioc->ioc_regs.smem_page_start, loff, 0); in bfa_ioc_smem_clr()
2131 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_clr()
2134 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0), in bfa_ioc_smem_clr()
2135 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_clr()
2140 readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_smem_clr()
2141 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_smem_clr()
2149 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_fail_notify()
2154 ioc->cbfn->hbfail_cbfn(ioc->bfa); in bfa_ioc_fail_notify()
2168 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_pf_fwmismatch()
2172 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_pf_fwmismatch()
2186 bfa_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2190 ioc->pllinit = BFA_TRUE; in bfa_ioc_pll_init()
2200 readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2201 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2270 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2279 r32 = readl(ioc->ioc_regs.lpu_mbox + in bfa_ioc_msgget()
2287 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2288 readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2297 struct bfa_iocpf_s *iocpf = &ioc->iocpf; in bfa_ioc_isr()
2303 switch (msg->mh.msg_id) { in bfa_ioc_isr()
2308 ioc->port_mode = ioc->port_mode_cfg = in bfa_ioc_isr()
2309 (enum bfa_mode_s)msg->fw_event.port_mode; in bfa_ioc_isr()
2310 ioc->ad_cap_bm = msg->fw_event.cap_bm; in bfa_ioc_isr()
2323 bfa_trc(ioc, msg->mh.msg_id); in bfa_ioc_isr()
2338 ioc->bfa = bfa; in bfa_ioc_attach()
2339 ioc->cbfn = cbfn; in bfa_ioc_attach()
2340 ioc->timer_mod = timer_mod; in bfa_ioc_attach()
2341 ioc->fcmode = BFA_FALSE; in bfa_ioc_attach()
2342 ioc->pllinit = BFA_FALSE; in bfa_ioc_attach()
2343 ioc->dbg_fwsave_once = BFA_TRUE; in bfa_ioc_attach()
2344 ioc->iocpf.ioc = ioc; in bfa_ioc_attach()
2347 INIT_LIST_HEAD(&ioc->notify_q); in bfa_ioc_attach()
2360 INIT_LIST_HEAD(&ioc->notify_q); in bfa_ioc_detach()
2372 ioc->clscode = clscode; in bfa_ioc_pci_init()
2373 ioc->pcidev = *pcidev; in bfa_ioc_pci_init()
2378 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_FC; in bfa_ioc_pci_init()
2379 ioc->asic_mode = BFI_ASIC_MODE_FC; in bfa_ioc_pci_init()
2381 switch (pcidev->device_id) { in bfa_ioc_pci_init()
2384 ioc->asic_gen = BFI_ASIC_GEN_CB; in bfa_ioc_pci_init()
2385 ioc->fcmode = BFA_TRUE; in bfa_ioc_pci_init()
2386 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA; in bfa_ioc_pci_init()
2387 ioc->ad_cap_bm = BFA_CM_HBA; in bfa_ioc_pci_init()
2391 ioc->asic_gen = BFI_ASIC_GEN_CT; in bfa_ioc_pci_init()
2392 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_ioc_pci_init()
2393 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_ioc_pci_init()
2394 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_ioc_pci_init()
2395 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_ioc_pci_init()
2399 ioc->asic_gen = BFI_ASIC_GEN_CT; in bfa_ioc_pci_init()
2400 ioc->fcmode = BFA_TRUE; in bfa_ioc_pci_init()
2401 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA; in bfa_ioc_pci_init()
2402 ioc->ad_cap_bm = BFA_CM_HBA; in bfa_ioc_pci_init()
2407 ioc->asic_gen = BFI_ASIC_GEN_CT2; in bfa_ioc_pci_init()
2409 pcidev->ssid == BFA_PCI_CT2_SSID_FC) { in bfa_ioc_pci_init()
2410 ioc->asic_mode = BFI_ASIC_MODE_FC16; in bfa_ioc_pci_init()
2411 ioc->fcmode = BFA_TRUE; in bfa_ioc_pci_init()
2412 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA; in bfa_ioc_pci_init()
2413 ioc->ad_cap_bm = BFA_CM_HBA; in bfa_ioc_pci_init()
2415 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_ioc_pci_init()
2416 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_ioc_pci_init()
2417 if (pcidev->ssid == BFA_PCI_CT2_SSID_FCoE) { in bfa_ioc_pci_init()
2418 ioc->port_mode = in bfa_ioc_pci_init()
2419 ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_ioc_pci_init()
2420 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_ioc_pci_init()
2422 ioc->port_mode = in bfa_ioc_pci_init()
2423 ioc->port_mode_cfg = BFA_MODE_NIC; in bfa_ioc_pci_init()
2424 ioc->ad_cap_bm = BFA_CM_NIC; in bfa_ioc_pci_init()
2436 if (ioc->asic_gen == BFI_ASIC_GEN_CB) in bfa_ioc_pci_init()
2438 else if (ioc->asic_gen == BFI_ASIC_GEN_CT) in bfa_ioc_pci_init()
2441 WARN_ON(ioc->asic_gen != BFI_ASIC_GEN_CT2); in bfa_ioc_pci_init()
2462 ioc->attr_dma.kva = dm_kva; in bfa_ioc_mem_claim()
2463 ioc->attr_dma.pa = dm_pa; in bfa_ioc_mem_claim()
2464 ioc->attr = (struct bfi_ioc_attr_s *) dm_kva; in bfa_ioc_mem_claim()
2471 ioc->dbg_fwsave_once = BFA_TRUE; in bfa_ioc_enable()
2486 ioc->dbg_fwsave_once = BFA_TRUE; in bfa_ioc_suspend()
2497 ioc->dbg_fwsave = dbg_fwsave; in bfa_ioc_debug_memclaim()
2498 ioc->dbg_fwsave_len = BFA_DBG_FWTRC_LEN; in bfa_ioc_debug_memclaim()
2510 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_register()
2514 mod->mbhdlr[mc].cbfn = mcfuncs[mc]; in bfa_ioc_mbox_register()
2524 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_regisr()
2526 mod->mbhdlr[mc].cbfn = cbfn; in bfa_ioc_mbox_regisr()
2527 mod->mbhdlr[mc].cbarg = cbarg; in bfa_ioc_mbox_regisr()
2540 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_queue()
2546 if (!list_empty(&mod->cmd_q)) { in bfa_ioc_mbox_queue()
2547 list_add_tail(&cmd->qe, &mod->cmd_q); in bfa_ioc_mbox_queue()
2554 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_queue()
2556 list_add_tail(&cmd->qe, &mod->cmd_q); in bfa_ioc_mbox_queue()
2561 * mailbox is free -- queue command to firmware in bfa_ioc_mbox_queue()
2563 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_ioc_mbox_queue()
2572 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_isr()
2586 if ((mc >= BFI_MC_MAX) || (mod->mbhdlr[mc].cbfn == NULL)) in bfa_ioc_mbox_isr()
2589 mod->mbhdlr[mc].cbfn(mod->mbhdlr[mc].cbarg, &m); in bfa_ioc_mbox_isr()
2604 ioc->stats.hb_count = ioc->hb_count; in bfa_ioc_error_isr()
2625 bfa_fsm_cmp_state(&ioc->iocpf, bfa_iocpf_sm_fwcheck) || in bfa_ioc_fw_mismatch()
2626 bfa_fsm_cmp_state(&ioc->iocpf, bfa_iocpf_sm_mismatch); in bfa_ioc_fw_mismatch()
2630 * Check if adapter is disabled -- both IOCs should be in a disabled
2645 if (ioc->pcidev.device_id != BFA_PCI_DEVICE_ID_FC_8G1P) { in bfa_ioc_adapter_is_disabled()
2671 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_attr()
2673 bfa_ioc_get_adapter_serial_num(ioc, ad_attr->serial_num); in bfa_ioc_get_adapter_attr()
2674 bfa_ioc_get_adapter_fw_ver(ioc, ad_attr->fw_ver); in bfa_ioc_get_adapter_attr()
2675 bfa_ioc_get_adapter_optrom_ver(ioc, ad_attr->optrom_ver); in bfa_ioc_get_adapter_attr()
2676 bfa_ioc_get_adapter_manufacturer(ioc, ad_attr->manufacturer); in bfa_ioc_get_adapter_attr()
2677 memcpy(&ad_attr->vpd, &ioc_attr->vpd, in bfa_ioc_get_adapter_attr()
2680 ad_attr->nports = bfa_ioc_get_nports(ioc); in bfa_ioc_get_adapter_attr()
2681 ad_attr->max_speed = bfa_ioc_speed_sup(ioc); in bfa_ioc_get_adapter_attr()
2683 bfa_ioc_get_adapter_model(ioc, ad_attr->model); in bfa_ioc_get_adapter_attr()
2685 bfa_ioc_get_adapter_model(ioc, ad_attr->model_descr); in bfa_ioc_get_adapter_attr()
2687 ad_attr->card_type = ioc_attr->card_type; in bfa_ioc_get_adapter_attr()
2688 ad_attr->is_mezz = bfa_mfg_is_mezz(ioc_attr->card_type); in bfa_ioc_get_adapter_attr()
2690 if (BFI_ADAPTER_IS_SPECIAL(ioc_attr->adapter_prop)) in bfa_ioc_get_adapter_attr()
2691 ad_attr->prototype = 1; in bfa_ioc_get_adapter_attr()
2693 ad_attr->prototype = 0; in bfa_ioc_get_adapter_attr()
2695 ad_attr->pwwn = ioc->attr->pwwn; in bfa_ioc_get_adapter_attr()
2696 ad_attr->mac = bfa_ioc_get_mac(ioc); in bfa_ioc_get_adapter_attr()
2698 ad_attr->pcie_gen = ioc_attr->pcie_gen; in bfa_ioc_get_adapter_attr()
2699 ad_attr->pcie_lanes = ioc_attr->pcie_lanes; in bfa_ioc_get_adapter_attr()
2700 ad_attr->pcie_lanes_orig = ioc_attr->pcie_lanes_orig; in bfa_ioc_get_adapter_attr()
2701 ad_attr->asic_rev = ioc_attr->asic_rev; in bfa_ioc_get_adapter_attr()
2703 bfa_ioc_get_pci_chip_rev(ioc, ad_attr->hw_ver); in bfa_ioc_get_adapter_attr()
2705 ad_attr->cna_capable = bfa_ioc_is_cna(ioc); in bfa_ioc_get_adapter_attr()
2706 ad_attr->trunk_capable = (ad_attr->nports > 1) && in bfa_ioc_get_adapter_attr()
2707 !bfa_ioc_is_cna(ioc) && !ad_attr->is_mezz; in bfa_ioc_get_adapter_attr()
2708 ad_attr->mfg_day = ioc_attr->mfg_day; in bfa_ioc_get_adapter_attr()
2709 ad_attr->mfg_month = ioc_attr->mfg_month; in bfa_ioc_get_adapter_attr()
2710 ad_attr->mfg_year = ioc_attr->mfg_year; in bfa_ioc_get_adapter_attr()
2711 memcpy(ad_attr->uuid, ioc_attr->uuid, BFA_ADAPTER_UUID_LEN); in bfa_ioc_get_adapter_attr()
2717 if (ioc->clscode == BFI_PCIFN_CLASS_ETH) in bfa_ioc_get_type()
2720 WARN_ON(ioc->clscode != BFI_PCIFN_CLASS_FC); in bfa_ioc_get_type()
2722 return (ioc->attr->port_mode == BFI_PORT_MODE_FC) in bfa_ioc_get_type()
2731 (void *)ioc->attr->brcd_serialnum, in bfa_ioc_get_adapter_serial_num()
2739 memcpy(fw_ver, ioc->attr->fw_version, BFA_VERSION_LEN); in bfa_ioc_get_adapter_fw_ver()
2752 chip_rev[3] = '-'; in bfa_ioc_get_pci_chip_rev()
2753 chip_rev[4] = ioc->attr->asic_rev; in bfa_ioc_get_pci_chip_rev()
2761 memcpy(optrom_ver, ioc->attr->optrom_version, in bfa_ioc_get_adapter_optrom_ver()
2781 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_model()
2783 if (bfa_asic_id_ct2(ioc->pcidev.device_id) && in bfa_ioc_get_adapter_model()
2784 (!bfa_mfg_is_mezz(ioc_attr->card_type))) in bfa_ioc_get_adapter_model()
2785 snprintf(model, BFA_ADAPTER_MODEL_NAME_LEN, "%s-%u-%u%s", in bfa_ioc_get_adapter_model()
2786 BFA_MFG_NAME, ioc_attr->card_type, nports, "p"); in bfa_ioc_get_adapter_model()
2788 snprintf(model, BFA_ADAPTER_MODEL_NAME_LEN, "%s-%u", in bfa_ioc_get_adapter_model()
2789 BFA_MFG_NAME, ioc_attr->card_type); in bfa_ioc_get_adapter_model()
2796 enum bfa_ioc_state ioc_st = bfa_ioc_sm_to_state(ioc_sm_table, ioc->fsm); in bfa_ioc_get_state()
2801 iocpf_st = bfa_iocpf_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); in bfa_ioc_get_state()
2837 ioc_attr->state = bfa_ioc_get_state(ioc); in bfa_ioc_get_attr()
2838 ioc_attr->port_id = bfa_ioc_portid(ioc); in bfa_ioc_get_attr()
2839 ioc_attr->port_mode = ioc->port_mode; in bfa_ioc_get_attr()
2840 ioc_attr->port_mode_cfg = ioc->port_mode_cfg; in bfa_ioc_get_attr()
2841 ioc_attr->cap_bm = ioc->ad_cap_bm; in bfa_ioc_get_attr()
2843 ioc_attr->ioc_type = bfa_ioc_get_type(ioc); in bfa_ioc_get_attr()
2845 bfa_ioc_get_adapter_attr(ioc, &ioc_attr->adapter_attr); in bfa_ioc_get_attr()
2847 ioc_attr->pci_attr.device_id = bfa_ioc_devid(ioc); in bfa_ioc_get_attr()
2848 ioc_attr->pci_attr.pcifn = bfa_ioc_pcifn(ioc); in bfa_ioc_get_attr()
2849 ioc_attr->def_fn = (bfa_ioc_pcifn(ioc) == bfa_ioc_portid(ioc)); in bfa_ioc_get_attr()
2850 bfa_ioc_get_pci_chip_rev(ioc, ioc_attr->pci_attr.chip_rev); in bfa_ioc_get_attr()
2860 return ioc->attr->fcoe_mac; in bfa_ioc_get_mac()
2862 return ioc->attr->mac; in bfa_ioc_get_mac()
2870 m = ioc->attr->mfg_mac; in bfa_ioc_get_mfg_mac()
2871 if (bfa_mfg_is_old_wwn_mac_model(ioc->attr->card_type)) in bfa_ioc_get_mfg_mac()
2872 m.mac[MAC_ADDRLEN - 1] += bfa_ioc_pcifn(ioc); in bfa_ioc_get_mfg_mac()
2874 bfa_mfg_increment_wwn_mac(&(m.mac[MAC_ADDRLEN-3]), in bfa_ioc_get_mfg_mac()
2886 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_aen_post()
2897 aen_entry->aen_data.ioc.pwwn = ioc->attr->pwwn; in bfa_ioc_aen_post()
2900 aen_entry->aen_data.ioc.pwwn = ioc->attr->pwwn; in bfa_ioc_aen_post()
2901 aen_entry->aen_data.ioc.mac = bfa_ioc_get_mac(ioc); in bfa_ioc_aen_post()
2904 aen_entry->aen_data.ioc.mac = bfa_ioc_get_mac(ioc); in bfa_ioc_aen_post()
2912 aen_entry->aen_data.ioc.ioc_type = ioc_type; in bfa_ioc_aen_post()
2913 bfad_im_post_vendor_event(aen_entry, bfad, ++ioc->ioc_aen_seq, in bfa_ioc_aen_post()
2925 if (ioc->dbg_fwsave_len == 0) in bfa_ioc_debug_fwsave()
2929 if (tlen > ioc->dbg_fwsave_len) in bfa_ioc_debug_fwsave()
2930 tlen = ioc->dbg_fwsave_len; in bfa_ioc_debug_fwsave()
2932 memcpy(trcdata, ioc->dbg_fwsave, tlen); in bfa_ioc_debug_fwsave()
2965 bfi_h2i_set(req->mh, BFI_MC_IOC, BFI_IOC_H2I_DBG_SYNC, in bfa_ioc_send_fwsync()
2967 req->clscode = cpu_to_be16(ioc->clscode); in bfa_ioc_send_fwsync()
2990 fwsync_iter--; in bfa_ioc_fwsync()
3021 dlen = smem_len - loff; in bfa_ioc_debug_fwcore()
3051 if (ioc->stats_busy) { in bfa_ioc_fw_stats_get()
3052 bfa_trc(ioc, ioc->stats_busy); in bfa_ioc_fw_stats_get()
3055 ioc->stats_busy = BFA_TRUE; in bfa_ioc_fw_stats_get()
3060 ioc->stats_busy = BFA_FALSE; in bfa_ioc_fw_stats_get()
3072 if (ioc->stats_busy) { in bfa_ioc_fw_stats_clear()
3073 bfa_trc(ioc, ioc->stats_busy); in bfa_ioc_fw_stats_clear()
3076 ioc->stats_busy = BFA_TRUE; in bfa_ioc_fw_stats_clear()
3081 ioc->stats_busy = BFA_FALSE; in bfa_ioc_fw_stats_clear()
3093 if (ioc->dbg_fwsave_once) { in bfa_ioc_debug_save_ftrc()
3094 ioc->dbg_fwsave_once = BFA_FALSE; in bfa_ioc_debug_save_ftrc()
3095 if (ioc->dbg_fwsave_len) { in bfa_ioc_debug_save_ftrc()
3096 tlen = ioc->dbg_fwsave_len; in bfa_ioc_debug_save_ftrc()
3097 bfa_ioc_debug_fwtrc(ioc, ioc->dbg_fwsave, &tlen); in bfa_ioc_debug_save_ftrc()
3109 ioc->stats.hb_count = ioc->hb_count; in bfa_ioc_recover()
3122 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT); in bfa_iocpf_timeout()
3141 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_poll_fwinit()
3145 if (ioc->iocpf.poll_time >= (3 * BFA_IOC_TOV)) in bfa_ioc_poll_fwinit()
3148 ioc->iocpf.poll_time += BFA_IOC_POLL_TOV; in bfa_ioc_poll_fwinit()
3167 struct list_head *qh = &mod->timer_q; in bfa_timer_beat()
3180 if (elem->timeout <= BFA_TIMER_FREQ) { in bfa_timer_beat()
3181 elem->timeout = 0; in bfa_timer_beat()
3182 list_del(&elem->qe); in bfa_timer_beat()
3183 list_add_tail(&elem->qe, &timedout_q); in bfa_timer_beat()
3185 elem->timeout -= BFA_TIMER_FREQ; in bfa_timer_beat()
3196 elem->timercb(elem->arg); in bfa_timer_beat()
3209 WARN_ON(bfa_q_is_on_q(&mod->timer_q, timer)); in bfa_timer_begin()
3211 timer->timeout = timeout; in bfa_timer_begin()
3212 timer->timercb = timercb; in bfa_timer_begin()
3213 timer->arg = arg; in bfa_timer_begin()
3215 list_add_tail(&timer->qe, &mod->timer_q); in bfa_timer_begin()
3224 WARN_ON(list_empty(&timer->qe)); in bfa_timer_stop()
3226 list_del(&timer->qe); in bfa_timer_stop()
3240 cfg_inst = &cfg->inst[i]; in bfa_ablk_config_swap()
3242 be16 = cfg_inst->pf_cfg[j].pers; in bfa_ablk_config_swap()
3243 cfg_inst->pf_cfg[j].pers = be16_to_cpu(be16); in bfa_ablk_config_swap()
3244 be16 = cfg_inst->pf_cfg[j].num_qpairs; in bfa_ablk_config_swap()
3245 cfg_inst->pf_cfg[j].num_qpairs = be16_to_cpu(be16); in bfa_ablk_config_swap()
3246 be16 = cfg_inst->pf_cfg[j].num_vectors; in bfa_ablk_config_swap()
3247 cfg_inst->pf_cfg[j].num_vectors = be16_to_cpu(be16); in bfa_ablk_config_swap()
3248 be16 = cfg_inst->pf_cfg[j].bw_min; in bfa_ablk_config_swap()
3249 cfg_inst->pf_cfg[j].bw_min = be16_to_cpu(be16); in bfa_ablk_config_swap()
3250 be16 = cfg_inst->pf_cfg[j].bw_max; in bfa_ablk_config_swap()
3251 cfg_inst->pf_cfg[j].bw_max = be16_to_cpu(be16); in bfa_ablk_config_swap()
3263 WARN_ON(msg->mh.msg_class != BFI_MC_ABLK); in bfa_ablk_isr()
3264 bfa_trc(ablk->ioc, msg->mh.msg_id); in bfa_ablk_isr()
3266 switch (msg->mh.msg_id) { in bfa_ablk_isr()
3268 if (rsp->status == BFA_STATUS_OK) { in bfa_ablk_isr()
3269 memcpy(ablk->cfg, ablk->dma_addr.kva, in bfa_ablk_isr()
3271 bfa_ablk_config_swap(ablk->cfg); in bfa_ablk_isr()
3272 ablk->cfg = NULL; in bfa_ablk_isr()
3279 ablk->ioc->port_mode_cfg = rsp->port_mode; in bfa_ablk_isr()
3286 /* No-op */ in bfa_ablk_isr()
3290 *(ablk->pcifn) = rsp->pcifn; in bfa_ablk_isr()
3291 ablk->pcifn = NULL; in bfa_ablk_isr()
3298 ablk->busy = BFA_FALSE; in bfa_ablk_isr()
3299 if (ablk->cbfn) { in bfa_ablk_isr()
3300 cbfn = ablk->cbfn; in bfa_ablk_isr()
3301 ablk->cbfn = NULL; in bfa_ablk_isr()
3302 cbfn(ablk->cbarg, rsp->status); in bfa_ablk_isr()
3311 bfa_trc(ablk->ioc, event); in bfa_ablk_notify()
3315 WARN_ON(ablk->busy != BFA_FALSE); in bfa_ablk_notify()
3321 ablk->pcifn = NULL; in bfa_ablk_notify()
3322 if (ablk->busy) { in bfa_ablk_notify()
3323 if (ablk->cbfn) in bfa_ablk_notify()
3324 ablk->cbfn(ablk->cbarg, BFA_STATUS_FAILED); in bfa_ablk_notify()
3325 ablk->cbfn = NULL; in bfa_ablk_notify()
3326 ablk->busy = BFA_FALSE; in bfa_ablk_notify()
3345 ablk->dma_addr.kva = dma_kva; in bfa_ablk_memclaim()
3346 ablk->dma_addr.pa = dma_pa; in bfa_ablk_memclaim()
3352 ablk->ioc = ioc; in bfa_ablk_attach()
3354 bfa_ioc_mbox_regisr(ablk->ioc, BFI_MC_ABLK, bfa_ablk_isr, ablk); in bfa_ablk_attach()
3355 bfa_q_qe_init(&ablk->ioc_notify); in bfa_ablk_attach()
3356 bfa_ioc_notify_init(&ablk->ioc_notify, bfa_ablk_notify, ablk); in bfa_ablk_attach()
3357 list_add_tail(&ablk->ioc_notify.qe, &ablk->ioc->notify_q); in bfa_ablk_attach()
3368 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_query()
3369 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_query()
3373 if (ablk->busy) { in bfa_ablk_query()
3374 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_query()
3378 ablk->cfg = ablk_cfg; in bfa_ablk_query()
3379 ablk->cbfn = cbfn; in bfa_ablk_query()
3380 ablk->cbarg = cbarg; in bfa_ablk_query()
3381 ablk->busy = BFA_TRUE; in bfa_ablk_query()
3383 m = (struct bfi_ablk_h2i_query_s *)ablk->mb.msg; in bfa_ablk_query()
3384 bfi_h2i_set(m->mh, BFI_MC_ABLK, BFI_ABLK_H2I_QUERY, in bfa_ablk_query()
3385 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_query()
3386 bfa_dma_be_addr_set(m->addr, ablk->dma_addr.pa); in bfa_ablk_query()
3387 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_query()
3400 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_pf_create()
3401 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_pf_create()
3405 if (ablk->busy) { in bfa_ablk_pf_create()
3406 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_pf_create()
3410 ablk->pcifn = pcifn; in bfa_ablk_pf_create()
3411 ablk->cbfn = cbfn; in bfa_ablk_pf_create()
3412 ablk->cbarg = cbarg; in bfa_ablk_pf_create()
3413 ablk->busy = BFA_TRUE; in bfa_ablk_pf_create()
3415 m = (struct bfi_ablk_h2i_pf_req_s *)ablk->mb.msg; in bfa_ablk_pf_create()
3416 bfi_h2i_set(m->mh, BFI_MC_ABLK, BFI_ABLK_H2I_PF_CREATE, in bfa_ablk_pf_create()
3417 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_pf_create()
3418 m->pers = cpu_to_be16((u16)personality); in bfa_ablk_pf_create()
3419 m->bw_min = cpu_to_be16(bw_min); in bfa_ablk_pf_create()
3420 m->bw_max = cpu_to_be16(bw_max); in bfa_ablk_pf_create()
3421 m->port = port; in bfa_ablk_pf_create()
3422 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_pf_create()
3433 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_pf_delete()
3434 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_pf_delete()
3438 if (ablk->busy) { in bfa_ablk_pf_delete()
3439 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_pf_delete()
3443 ablk->cbfn = cbfn; in bfa_ablk_pf_delete()
3444 ablk->cbarg = cbarg; in bfa_ablk_pf_delete()
3445 ablk->busy = BFA_TRUE; in bfa_ablk_pf_delete()
3447 m = (struct bfi_ablk_h2i_pf_req_s *)ablk->mb.msg; in bfa_ablk_pf_delete()
3448 bfi_h2i_set(m->mh, BFI_MC_ABLK, BFI_ABLK_H2I_PF_DELETE, in bfa_ablk_pf_delete()
3449 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_pf_delete()
3450 m->pcifn = (u8)pcifn; in bfa_ablk_pf_delete()
3451 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_pf_delete()
3462 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_adapter_config()
3463 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_adapter_config()
3467 if (ablk->busy) { in bfa_ablk_adapter_config()
3468 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_adapter_config()
3472 ablk->cbfn = cbfn; in bfa_ablk_adapter_config()
3473 ablk->cbarg = cbarg; in bfa_ablk_adapter_config()
3474 ablk->busy = BFA_TRUE; in bfa_ablk_adapter_config()
3476 m = (struct bfi_ablk_h2i_cfg_req_s *)ablk->mb.msg; in bfa_ablk_adapter_config()
3477 bfi_h2i_set(m->mh, BFI_MC_ABLK, BFI_ABLK_H2I_ADPT_CONFIG, in bfa_ablk_adapter_config()
3478 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_adapter_config()
3479 m->mode = (u8)mode; in bfa_ablk_adapter_config()
3480 m->max_pf = (u8)max_pf; in bfa_ablk_adapter_config()
3481 m->max_vf = (u8)max_vf; in bfa_ablk_adapter_config()
3482 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_adapter_config()
3493 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_port_config()
3494 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_port_config()
3498 if (ablk->busy) { in bfa_ablk_port_config()
3499 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_port_config()
3503 ablk->cbfn = cbfn; in bfa_ablk_port_config()
3504 ablk->cbarg = cbarg; in bfa_ablk_port_config()
3505 ablk->busy = BFA_TRUE; in bfa_ablk_port_config()
3507 m = (struct bfi_ablk_h2i_cfg_req_s *)ablk->mb.msg; in bfa_ablk_port_config()
3508 bfi_h2i_set(m->mh, BFI_MC_ABLK, BFI_ABLK_H2I_PORT_CONFIG, in bfa_ablk_port_config()
3509 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_port_config()
3510 m->port = (u8)port; in bfa_ablk_port_config()
3511 m->mode = (u8)mode; in bfa_ablk_port_config()
3512 m->max_pf = (u8)max_pf; in bfa_ablk_port_config()
3513 m->max_vf = (u8)max_vf; in bfa_ablk_port_config()
3514 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_port_config()
3525 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_pf_update()
3526 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_pf_update()
3530 if (ablk->busy) { in bfa_ablk_pf_update()
3531 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_pf_update()
3535 ablk->cbfn = cbfn; in bfa_ablk_pf_update()
3536 ablk->cbarg = cbarg; in bfa_ablk_pf_update()
3537 ablk->busy = BFA_TRUE; in bfa_ablk_pf_update()
3539 m = (struct bfi_ablk_h2i_pf_req_s *)ablk->mb.msg; in bfa_ablk_pf_update()
3540 bfi_h2i_set(m->mh, BFI_MC_ABLK, BFI_ABLK_H2I_PF_UPDATE, in bfa_ablk_pf_update()
3541 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_pf_update()
3542 m->pcifn = (u8)pcifn; in bfa_ablk_pf_update()
3543 m->bw_min = cpu_to_be16(bw_min); in bfa_ablk_pf_update()
3544 m->bw_max = cpu_to_be16(bw_max); in bfa_ablk_pf_update()
3545 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_pf_update()
3555 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_optrom_en()
3556 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_optrom_en()
3560 if (ablk->busy) { in bfa_ablk_optrom_en()
3561 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_optrom_en()
3565 ablk->cbfn = cbfn; in bfa_ablk_optrom_en()
3566 ablk->cbarg = cbarg; in bfa_ablk_optrom_en()
3567 ablk->busy = BFA_TRUE; in bfa_ablk_optrom_en()
3569 m = (struct bfi_ablk_h2i_optrom_s *)ablk->mb.msg; in bfa_ablk_optrom_en()
3570 bfi_h2i_set(m->mh, BFI_MC_ABLK, BFI_ABLK_H2I_OPTROM_ENABLE, in bfa_ablk_optrom_en()
3571 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_optrom_en()
3572 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_optrom_en()
3582 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_optrom_dis()
3583 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_optrom_dis()
3587 if (ablk->busy) { in bfa_ablk_optrom_dis()
3588 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_optrom_dis()
3592 ablk->cbfn = cbfn; in bfa_ablk_optrom_dis()
3593 ablk->cbarg = cbarg; in bfa_ablk_optrom_dis()
3594 ablk->busy = BFA_TRUE; in bfa_ablk_optrom_dis()
3596 m = (struct bfi_ablk_h2i_optrom_s *)ablk->mb.msg; in bfa_ablk_optrom_dis()
3597 bfi_h2i_set(m->mh, BFI_MC_ABLK, BFI_ABLK_H2I_OPTROM_DISABLE, in bfa_ablk_optrom_dis()
3598 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_optrom_dis()
3599 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_optrom_dis()
3617 bfa_trc(sfp, sfp->lock); in bfa_cb_sfp_show()
3618 if (sfp->cbfn) in bfa_cb_sfp_show()
3619 sfp->cbfn(sfp->cbarg, sfp->status); in bfa_cb_sfp_show()
3620 sfp->lock = 0; in bfa_cb_sfp_show()
3621 sfp->cbfn = NULL; in bfa_cb_sfp_show()
3627 bfa_trc(sfp, sfp->portspeed); in bfa_cb_sfp_state_query()
3628 if (sfp->media) { in bfa_cb_sfp_state_query()
3630 if (sfp->state_query_cbfn) in bfa_cb_sfp_state_query()
3631 sfp->state_query_cbfn(sfp->state_query_cbarg, in bfa_cb_sfp_state_query()
3632 sfp->status); in bfa_cb_sfp_state_query()
3633 sfp->media = NULL; in bfa_cb_sfp_state_query()
3636 if (sfp->portspeed) { in bfa_cb_sfp_state_query()
3637 sfp->status = bfa_sfp_speed_valid(sfp, sfp->portspeed); in bfa_cb_sfp_state_query()
3638 if (sfp->state_query_cbfn) in bfa_cb_sfp_state_query()
3639 sfp->state_query_cbfn(sfp->state_query_cbarg, in bfa_cb_sfp_state_query()
3640 sfp->status); in bfa_cb_sfp_state_query()
3641 sfp->portspeed = BFA_PORT_SPEED_UNKNOWN; in bfa_cb_sfp_state_query()
3644 sfp->state_query_lock = 0; in bfa_cb_sfp_state_query()
3645 sfp->state_query_cbfn = NULL; in bfa_cb_sfp_state_query()
3657 bfa_trc(sfp, sfp->lock); in bfa_sfp_notify()
3658 bfa_trc(sfp, sfp->state_query_lock); in bfa_sfp_notify()
3663 if (sfp->lock) { in bfa_sfp_notify()
3664 sfp->status = BFA_STATUS_IOC_FAILURE; in bfa_sfp_notify()
3668 if (sfp->state_query_lock) { in bfa_sfp_notify()
3669 sfp->status = BFA_STATUS_IOC_FAILURE; in bfa_sfp_notify()
3685 struct bfad_s *bfad = (struct bfad_s *)sfp->ioc->bfa->bfad; in bfa_sfp_scn_aen_post()
3689 bfa_trc(sfp, (((u64)rsp->pomlvl) << 16) | (((u64)rsp->sfpid) << 8) | in bfa_sfp_scn_aen_post()
3690 ((u64)rsp->event)); in bfa_sfp_scn_aen_post()
3696 aen_entry->aen_data.port.ioc_type = bfa_ioc_get_type(sfp->ioc); in bfa_sfp_scn_aen_post()
3697 aen_entry->aen_data.port.pwwn = sfp->ioc->attr->pwwn; in bfa_sfp_scn_aen_post()
3698 aen_entry->aen_data.port.mac = bfa_ioc_get_mac(sfp->ioc); in bfa_sfp_scn_aen_post()
3700 switch (rsp->event) { in bfa_sfp_scn_aen_post()
3715 aen_entry->aen_data.port.level = rsp->pomlvl; in bfa_sfp_scn_aen_post()
3718 bfa_trc(sfp, rsp->event); in bfa_sfp_scn_aen_post()
3723 bfad_im_post_vendor_event(aen_entry, bfad, ++sfp->ioc->ioc_aen_seq, in bfa_sfp_scn_aen_post()
3733 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg; in bfa_sfp_getdata_send()
3735 bfa_trc(sfp, req->memtype); in bfa_sfp_getdata_send()
3738 bfi_h2i_set(req->mh, BFI_MC_SFP, BFI_SFP_H2I_SHOW, in bfa_sfp_getdata_send()
3739 bfa_ioc_portid(sfp->ioc)); in bfa_sfp_getdata_send()
3742 bfa_ioc_mbox_queue(sfp->ioc, &sfp->mbcmd); in bfa_sfp_getdata_send()
3751 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg; in bfa_sfp_getdata()
3753 WARN_ON(sfp->lock != 0); in bfa_sfp_getdata()
3754 bfa_trc(sfp, sfp->state); in bfa_sfp_getdata()
3756 sfp->lock = 1; in bfa_sfp_getdata()
3757 sfp->memtype = memtype; in bfa_sfp_getdata()
3758 req->memtype = memtype; in bfa_sfp_getdata()
3761 bfa_alen_set(&req->alen, sizeof(struct sfp_mem_s), sfp->dbuf_pa); in bfa_sfp_getdata()
3774 switch (rsp->event) { in bfa_sfp_scn()
3776 sfp->state = BFA_SFP_STATE_INSERTED; in bfa_sfp_scn()
3777 sfp->data_valid = 0; in bfa_sfp_scn()
3781 sfp->state = BFA_SFP_STATE_REMOVED; in bfa_sfp_scn()
3782 sfp->data_valid = 0; in bfa_sfp_scn()
3786 sfp->state = BFA_SFP_STATE_FAILED; in bfa_sfp_scn()
3787 sfp->data_valid = 0; in bfa_sfp_scn()
3791 sfp->state = BFA_SFP_STATE_UNSUPPORT; in bfa_sfp_scn()
3793 if (!sfp->lock) in bfa_sfp_scn()
3800 sfp->state = BFA_SFP_STATE_VALID; in bfa_sfp_scn()
3801 if (!sfp->lock) in bfa_sfp_scn()
3805 bfa_trc(sfp, rsp->event); in bfa_sfp_scn()
3818 if (!sfp->lock) { in bfa_sfp_show_comp()
3822 bfa_trc(sfp, sfp->lock); in bfa_sfp_show_comp()
3826 bfa_trc(sfp, rsp->status); in bfa_sfp_show_comp()
3827 if (rsp->status == BFA_STATUS_OK) { in bfa_sfp_show_comp()
3828 sfp->data_valid = 1; in bfa_sfp_show_comp()
3829 if (sfp->state == BFA_SFP_STATE_VALID) in bfa_sfp_show_comp()
3830 sfp->status = BFA_STATUS_OK; in bfa_sfp_show_comp()
3831 else if (sfp->state == BFA_SFP_STATE_UNSUPPORT) in bfa_sfp_show_comp()
3832 sfp->status = BFA_STATUS_SFP_UNSUPP; in bfa_sfp_show_comp()
3834 bfa_trc(sfp, sfp->state); in bfa_sfp_show_comp()
3836 sfp->data_valid = 0; in bfa_sfp_show_comp()
3837 sfp->status = rsp->status; in bfa_sfp_show_comp()
3841 bfa_trc(sfp, sfp->memtype); in bfa_sfp_show_comp()
3842 if (sfp->memtype == BFI_SFP_MEM_DIAGEXT) { in bfa_sfp_show_comp()
3843 bfa_trc(sfp, sfp->data_valid); in bfa_sfp_show_comp()
3844 if (sfp->data_valid) { in bfa_sfp_show_comp()
3846 u8 *des = (u8 *)(sfp->sfpmem); in bfa_sfp_show_comp()
3847 memcpy(des, sfp->dbuf_kva, size); in bfa_sfp_show_comp()
3854 sfp->lock = 0; in bfa_sfp_show_comp()
3856 bfa_trc(sfp, sfp->state_query_lock); in bfa_sfp_show_comp()
3857 if (sfp->state_query_lock) { in bfa_sfp_show_comp()
3858 sfp->state = rsp->state; in bfa_sfp_show_comp()
3870 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg; in bfa_sfp_state_query()
3873 WARN_ON(sfp->state != BFA_SFP_STATE_INIT); in bfa_sfp_state_query()
3874 WARN_ON(sfp->state_query_lock != 0); in bfa_sfp_state_query()
3875 bfa_trc(sfp, sfp->state); in bfa_sfp_state_query()
3877 sfp->state_query_lock = 1; in bfa_sfp_state_query()
3878 req->memtype = 0; in bfa_sfp_state_query()
3880 if (!sfp->lock) in bfa_sfp_state_query()
3887 enum bfa_defs_sfp_media_e *media = sfp->media; in bfa_sfp_media_get()
3891 if (sfp->state == BFA_SFP_STATE_UNSUPPORT) in bfa_sfp_media_get()
3893 else if (sfp->state == BFA_SFP_STATE_VALID) { in bfa_sfp_media_get()
3895 struct sfp_mem_s *sfpmem = (struct sfp_mem_s *)sfp->dbuf_kva; in bfa_sfp_media_get()
3896 u16 xmtr_tech = (sfpmem->srlid_base.xcvr[4] & 0x3) << 7 | in bfa_sfp_media_get()
3897 (sfpmem->srlid_base.xcvr[5] >> 1); in bfa_sfp_media_get()
3899 e10g.b = sfpmem->srlid_base.xcvr[0]; in bfa_sfp_media_get()
3927 bfa_trc(sfp, sfp->state); in bfa_sfp_media_get()
3933 struct sfp_mem_s *sfpmem = (struct sfp_mem_s *)sfp->dbuf_kva; in bfa_sfp_speed_valid()
3934 struct sfp_xcvr_s *xcvr = (struct sfp_xcvr_s *) sfpmem->srlid_base.xcvr; in bfa_sfp_speed_valid()
3935 union sfp_xcvr_fc3_code_u fc3 = xcvr->fc3; in bfa_sfp_speed_valid()
3936 union sfp_xcvr_e10g_code_u e10g = xcvr->e10g; in bfa_sfp_speed_valid()
3968 switch (msg->mh.msg_id) { in bfa_sfp_intr()
3978 bfa_trc(sfp, msg->mh.msg_id); in bfa_sfp_intr()
3999 sfp->dev = dev; in bfa_sfp_attach()
4000 sfp->ioc = ioc; in bfa_sfp_attach()
4001 sfp->trcmod = trcmod; in bfa_sfp_attach()
4003 sfp->cbfn = NULL; in bfa_sfp_attach()
4004 sfp->cbarg = NULL; in bfa_sfp_attach()
4005 sfp->sfpmem = NULL; in bfa_sfp_attach()
4006 sfp->lock = 0; in bfa_sfp_attach()
4007 sfp->data_valid = 0; in bfa_sfp_attach()
4008 sfp->state = BFA_SFP_STATE_INIT; in bfa_sfp_attach()
4009 sfp->state_query_lock = 0; in bfa_sfp_attach()
4010 sfp->state_query_cbfn = NULL; in bfa_sfp_attach()
4011 sfp->state_query_cbarg = NULL; in bfa_sfp_attach()
4012 sfp->media = NULL; in bfa_sfp_attach()
4013 sfp->portspeed = BFA_PORT_SPEED_UNKNOWN; in bfa_sfp_attach()
4014 sfp->is_elb = BFA_FALSE; in bfa_sfp_attach()
4016 bfa_ioc_mbox_regisr(sfp->ioc, BFI_MC_SFP, bfa_sfp_intr, sfp); in bfa_sfp_attach()
4017 bfa_q_qe_init(&sfp->ioc_notify); in bfa_sfp_attach()
4018 bfa_ioc_notify_init(&sfp->ioc_notify, bfa_sfp_notify, sfp); in bfa_sfp_attach()
4019 list_add_tail(&sfp->ioc_notify.qe, &sfp->ioc->notify_q); in bfa_sfp_attach()
4028 sfp->dbuf_kva = dm_kva; in bfa_sfp_memclaim()
4029 sfp->dbuf_pa = dm_pa; in bfa_sfp_memclaim()
4030 memset(sfp->dbuf_kva, 0, sizeof(struct sfp_mem_s)); in bfa_sfp_memclaim()
4039 * @param[in] sfp - bfa sfp module
4041 * @param[out] sfpmem - sfp eeprom data
4049 if (!bfa_ioc_is_operational(sfp->ioc)) { in bfa_sfp_show()
4054 if (sfp->lock) { in bfa_sfp_show()
4059 sfp->cbfn = cbfn; in bfa_sfp_show()
4060 sfp->cbarg = cbarg; in bfa_sfp_show()
4061 sfp->sfpmem = sfpmem; in bfa_sfp_show()
4070 * @param[in] sfp - bfa sfp module
4072 * @param[out] media - port speed from user
4079 if (!bfa_ioc_is_operational(sfp->ioc)) { in bfa_sfp_media()
4084 sfp->media = media; in bfa_sfp_media()
4085 if (sfp->state == BFA_SFP_STATE_INIT) { in bfa_sfp_media()
4086 if (sfp->state_query_lock) { in bfa_sfp_media()
4090 sfp->state_query_cbfn = cbfn; in bfa_sfp_media()
4091 sfp->state_query_cbarg = cbarg; in bfa_sfp_media()
4104 * @param[in] sfp - bfa sfp module
4105 * @param[in] portspeed - port speed from user
4114 if (!bfa_ioc_is_operational(sfp->ioc)) in bfa_sfp_speed()
4118 if (bfa_mfg_is_mezz(sfp->ioc->attr->card_type)) in bfa_sfp_speed()
4122 sfp->portspeed = portspeed; in bfa_sfp_speed()
4123 if (sfp->state == BFA_SFP_STATE_INIT) { in bfa_sfp_speed()
4124 if (sfp->state_query_lock) { in bfa_sfp_speed()
4128 sfp->state_query_cbfn = cbfn; in bfa_sfp_speed()
4129 sfp->state_query_cbarg = cbarg; in bfa_sfp_speed()
4135 if (sfp->state == BFA_SFP_STATE_REMOVED || in bfa_sfp_speed()
4136 sfp->state == BFA_SFP_STATE_FAILED) { in bfa_sfp_speed()
4137 bfa_trc(sfp, sfp->state); in bfa_sfp_speed()
4141 if (sfp->state == BFA_SFP_STATE_INSERTED) { in bfa_sfp_speed()
4142 bfa_trc(sfp, sfp->state); in bfa_sfp_speed()
4147 if (sfp->is_elb) in bfa_sfp_speed()
4170 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_flash_aen_audit_post()
4177 aen_entry->aen_data.audit.pwwn = ioc->attr->pwwn; in bfa_flash_aen_audit_post()
4178 aen_entry->aen_data.audit.partition_inst = inst; in bfa_flash_aen_audit_post()
4179 aen_entry->aen_data.audit.partition_type = type; in bfa_flash_aen_audit_post()
4182 bfad_im_post_vendor_event(aen_entry, bfad, ++ioc->ioc_aen_seq, in bfa_flash_aen_audit_post()
4189 flash->op_busy = 0; in bfa_flash_cb()
4190 if (flash->cbfn) in bfa_flash_cb()
4191 flash->cbfn(flash->cbarg, flash->status); in bfa_flash_cb()
4203 if (flash->op_busy) { in bfa_flash_notify()
4204 flash->status = BFA_STATUS_IOC_FAILURE; in bfa_flash_notify()
4205 flash->cbfn(flash->cbarg, flash->status); in bfa_flash_notify()
4206 flash->op_busy = 0; in bfa_flash_notify()
4218 * @param[in] cbarg - callback argument
4225 (struct bfi_flash_query_req_s *) flash->mb.msg; in bfa_flash_query_send()
4227 bfi_h2i_set(msg->mh, BFI_MC_FLASH, BFI_FLASH_H2I_QUERY_REQ, in bfa_flash_query_send()
4228 bfa_ioc_portid(flash->ioc)); in bfa_flash_query_send()
4229 bfa_alen_set(&msg->alen, sizeof(struct bfa_flash_attr_s), in bfa_flash_query_send()
4230 flash->dbuf_pa); in bfa_flash_query_send()
4231 bfa_ioc_mbox_queue(flash->ioc, &flash->mb); in bfa_flash_query_send()
4237 * @param[in] cbarg - callback argument
4243 (struct bfi_flash_write_req_s *) flash->mb.msg; in bfa_flash_write_send()
4246 msg->type = be32_to_cpu(flash->type); in bfa_flash_write_send()
4247 msg->instance = flash->instance; in bfa_flash_write_send()
4248 msg->offset = be32_to_cpu(flash->addr_off + flash->offset); in bfa_flash_write_send()
4249 len = (flash->residue < BFA_FLASH_DMA_BUF_SZ) ? in bfa_flash_write_send()
4250 flash->residue : BFA_FLASH_DMA_BUF_SZ; in bfa_flash_write_send()
4251 msg->length = be32_to_cpu(len); in bfa_flash_write_send()
4254 msg->last = (len == flash->residue) ? 1 : 0; in bfa_flash_write_send()
4256 bfi_h2i_set(msg->mh, BFI_MC_FLASH, BFI_FLASH_H2I_WRITE_REQ, in bfa_flash_write_send()
4257 bfa_ioc_portid(flash->ioc)); in bfa_flash_write_send()
4258 bfa_alen_set(&msg->alen, len, flash->dbuf_pa); in bfa_flash_write_send()
4259 memcpy(flash->dbuf_kva, flash->ubuf + flash->offset, len); in bfa_flash_write_send()
4260 bfa_ioc_mbox_queue(flash->ioc, &flash->mb); in bfa_flash_write_send()
4262 flash->residue -= len; in bfa_flash_write_send()
4263 flash->offset += len; in bfa_flash_write_send()
4269 * @param[in] cbarg - callback argument
4276 (struct bfi_flash_read_req_s *) flash->mb.msg; in bfa_flash_read_send()
4279 msg->type = be32_to_cpu(flash->type); in bfa_flash_read_send()
4280 msg->instance = flash->instance; in bfa_flash_read_send()
4281 msg->offset = be32_to_cpu(flash->addr_off + flash->offset); in bfa_flash_read_send()
4282 len = (flash->residue < BFA_FLASH_DMA_BUF_SZ) ? in bfa_flash_read_send()
4283 flash->residue : BFA_FLASH_DMA_BUF_SZ; in bfa_flash_read_send()
4284 msg->length = be32_to_cpu(len); in bfa_flash_read_send()
4285 bfi_h2i_set(msg->mh, BFI_MC_FLASH, BFI_FLASH_H2I_READ_REQ, in bfa_flash_read_send()
4286 bfa_ioc_portid(flash->ioc)); in bfa_flash_read_send()
4287 bfa_alen_set(&msg->alen, len, flash->dbuf_pa); in bfa_flash_read_send()
4288 bfa_ioc_mbox_queue(flash->ioc, &flash->mb); in bfa_flash_read_send()
4294 * @param[in] cbarg - callback argument
4301 (struct bfi_flash_erase_req_s *) flash->mb.msg; in bfa_flash_erase_send()
4303 msg->type = be32_to_cpu(flash->type); in bfa_flash_erase_send()
4304 msg->instance = flash->instance; in bfa_flash_erase_send()
4305 bfi_h2i_set(msg->mh, BFI_MC_FLASH, BFI_FLASH_H2I_ERASE_REQ, in bfa_flash_erase_send()
4306 bfa_ioc_portid(flash->ioc)); in bfa_flash_erase_send()
4307 bfa_ioc_mbox_queue(flash->ioc, &flash->mb); in bfa_flash_erase_send()
4313 * @param[in] flasharg - flash structure
4314 * @param[in] msg - message structure
4332 bfa_trc(flash, msg->mh.msg_id); in bfa_flash_intr()
4334 if (!flash->op_busy && msg->mh.msg_id != BFI_FLASH_I2H_EVENT) { in bfa_flash_intr()
4340 switch (msg->mh.msg_id) { in bfa_flash_intr()
4342 status = be32_to_cpu(m.query->status); in bfa_flash_intr()
4348 attr = (struct bfa_flash_attr_s *) flash->ubuf; in bfa_flash_intr()
4349 f = (struct bfa_flash_attr_s *) flash->dbuf_kva; in bfa_flash_intr()
4350 attr->status = be32_to_cpu(f->status); in bfa_flash_intr()
4351 attr->npart = be32_to_cpu(f->npart); in bfa_flash_intr()
4352 bfa_trc(flash, attr->status); in bfa_flash_intr()
4353 bfa_trc(flash, attr->npart); in bfa_flash_intr()
4354 for (i = 0; i < attr->npart; i++) { in bfa_flash_intr()
4355 attr->part[i].part_type = in bfa_flash_intr()
4356 be32_to_cpu(f->part[i].part_type); in bfa_flash_intr()
4357 attr->part[i].part_instance = in bfa_flash_intr()
4358 be32_to_cpu(f->part[i].part_instance); in bfa_flash_intr()
4359 attr->part[i].part_off = in bfa_flash_intr()
4360 be32_to_cpu(f->part[i].part_off); in bfa_flash_intr()
4361 attr->part[i].part_size = in bfa_flash_intr()
4362 be32_to_cpu(f->part[i].part_size); in bfa_flash_intr()
4363 attr->part[i].part_len = in bfa_flash_intr()
4364 be32_to_cpu(f->part[i].part_len); in bfa_flash_intr()
4365 attr->part[i].part_status = in bfa_flash_intr()
4366 be32_to_cpu(f->part[i].part_status); in bfa_flash_intr()
4369 flash->status = status; in bfa_flash_intr()
4373 status = be32_to_cpu(m.erase->status); in bfa_flash_intr()
4375 flash->status = status; in bfa_flash_intr()
4379 status = be32_to_cpu(m.write->status); in bfa_flash_intr()
4381 if (status != BFA_STATUS_OK || flash->residue == 0) { in bfa_flash_intr()
4382 flash->status = status; in bfa_flash_intr()
4385 bfa_trc(flash, flash->offset); in bfa_flash_intr()
4390 status = be32_to_cpu(m.read->status); in bfa_flash_intr()
4393 flash->status = status; in bfa_flash_intr()
4396 u32 len = be32_to_cpu(m.read->length); in bfa_flash_intr()
4397 bfa_trc(flash, flash->offset); in bfa_flash_intr()
4399 memcpy(flash->ubuf + flash->offset, in bfa_flash_intr()
4400 flash->dbuf_kva, len); in bfa_flash_intr()
4401 flash->residue -= len; in bfa_flash_intr()
4402 flash->offset += len; in bfa_flash_intr()
4403 if (flash->residue == 0) { in bfa_flash_intr()
4404 flash->status = status; in bfa_flash_intr()
4413 status = be32_to_cpu(m.event->status); in bfa_flash_intr()
4416 bfa_ioc_aen_post(flash->ioc, BFA_IOC_AEN_FWCFG_ERROR); in bfa_flash_intr()
4419 param = be32_to_cpu(m.event->param); in bfa_flash_intr()
4421 bfa_ioc_aen_post(flash->ioc, in bfa_flash_intr()
4434 * @param[in] mincfg - minimal cfg variable
4448 * @param[in] flash - flash structure
4449 * @param[in] ioc - ioc structure
4450 * @param[in] dev - device structure
4451 * @param[in] trcmod - trace module
4452 * @param[in] logmod - log module
4458 flash->ioc = ioc; in bfa_flash_attach()
4459 flash->trcmod = trcmod; in bfa_flash_attach()
4460 flash->cbfn = NULL; in bfa_flash_attach()
4461 flash->cbarg = NULL; in bfa_flash_attach()
4462 flash->op_busy = 0; in bfa_flash_attach()
4464 bfa_ioc_mbox_regisr(flash->ioc, BFI_MC_FLASH, bfa_flash_intr, flash); in bfa_flash_attach()
4465 bfa_q_qe_init(&flash->ioc_notify); in bfa_flash_attach()
4466 bfa_ioc_notify_init(&flash->ioc_notify, bfa_flash_notify, flash); in bfa_flash_attach()
4467 list_add_tail(&flash->ioc_notify.qe, &flash->ioc->notify_q); in bfa_flash_attach()
4471 flash->dbuf_kva = NULL; in bfa_flash_attach()
4472 flash->dbuf_pa = 0; in bfa_flash_attach()
4479 * @param[in] flash - flash structure
4480 * @param[in] dm_kva - pointer to virtual memory address
4481 * @param[in] dm_pa - physical memory address
4482 * @param[in] mincfg - minimal cfg variable
4491 flash->dbuf_kva = dm_kva; in bfa_flash_memclaim()
4492 flash->dbuf_pa = dm_pa; in bfa_flash_memclaim()
4493 memset(flash->dbuf_kva, 0, BFA_FLASH_DMA_BUF_SZ); in bfa_flash_memclaim()
4501 * @param[in] flash - flash structure
4502 * @param[in] attr - flash attribute structure
4503 * @param[in] cbfn - callback function
4504 * @param[in] cbarg - callback argument
4514 if (!bfa_ioc_is_operational(flash->ioc)) in bfa_flash_get_attr()
4517 if (flash->op_busy) { in bfa_flash_get_attr()
4518 bfa_trc(flash, flash->op_busy); in bfa_flash_get_attr()
4522 flash->op_busy = 1; in bfa_flash_get_attr()
4523 flash->cbfn = cbfn; in bfa_flash_get_attr()
4524 flash->cbarg = cbarg; in bfa_flash_get_attr()
4525 flash->ubuf = (u8 *) attr; in bfa_flash_get_attr()
4534 * @param[in] flash - flash structure
4535 * @param[in] type - flash partition type
4536 * @param[in] instance - flash partition instance
4537 * @param[in] cbfn - callback function
4538 * @param[in] cbarg - callback argument
4550 if (!bfa_ioc_is_operational(flash->ioc)) in bfa_flash_erase_part()
4553 if (flash->op_busy) { in bfa_flash_erase_part()
4554 bfa_trc(flash, flash->op_busy); in bfa_flash_erase_part()
4558 flash->op_busy = 1; in bfa_flash_erase_part()
4559 flash->cbfn = cbfn; in bfa_flash_erase_part()
4560 flash->cbarg = cbarg; in bfa_flash_erase_part()
4561 flash->type = type; in bfa_flash_erase_part()
4562 flash->instance = instance; in bfa_flash_erase_part()
4565 bfa_flash_aen_audit_post(flash->ioc, BFA_AUDIT_AEN_FLASH_ERASE, in bfa_flash_erase_part()
4573 * @param[in] flash - flash structure
4574 * @param[in] type - flash partition type
4575 * @param[in] instance - flash partition instance
4576 * @param[in] buf - update data buffer
4577 * @param[in] len - data buffer length
4578 * @param[in] offset - offset relative to the partition starting address
4579 * @param[in] cbfn - callback function
4580 * @param[in] cbarg - callback argument
4595 if (!bfa_ioc_is_operational(flash->ioc)) in bfa_flash_update_part()
4599 * 'len' must be in word (4-byte) boundary in bfa_flash_update_part()
4608 if (flash->op_busy) { in bfa_flash_update_part()
4609 bfa_trc(flash, flash->op_busy); in bfa_flash_update_part()
4613 flash->op_busy = 1; in bfa_flash_update_part()
4614 flash->cbfn = cbfn; in bfa_flash_update_part()
4615 flash->cbarg = cbarg; in bfa_flash_update_part()
4616 flash->type = type; in bfa_flash_update_part()
4617 flash->instance = instance; in bfa_flash_update_part()
4618 flash->residue = len; in bfa_flash_update_part()
4619 flash->offset = 0; in bfa_flash_update_part()
4620 flash->addr_off = offset; in bfa_flash_update_part()
4621 flash->ubuf = buf; in bfa_flash_update_part()
4630 * @param[in] flash - flash structure
4631 * @param[in] type - flash partition type
4632 * @param[in] instance - flash partition instance
4633 * @param[in] buf - read data buffer
4634 * @param[in] len - data buffer length
4635 * @param[in] offset - offset relative to the partition starting address
4636 * @param[in] cbfn - callback function
4637 * @param[in] cbarg - callback argument
4652 if (!bfa_ioc_is_operational(flash->ioc)) in bfa_flash_read_part()
4656 * 'len' must be in word (4-byte) boundary in bfa_flash_read_part()
4662 if (flash->op_busy) { in bfa_flash_read_part()
4663 bfa_trc(flash, flash->op_busy); in bfa_flash_read_part()
4667 flash->op_busy = 1; in bfa_flash_read_part()
4668 flash->cbfn = cbfn; in bfa_flash_read_part()
4669 flash->cbarg = cbarg; in bfa_flash_read_part()
4670 flash->type = type; in bfa_flash_read_part()
4671 flash->instance = instance; in bfa_flash_read_part()
4672 flash->residue = len; in bfa_flash_read_part()
4673 flash->offset = 0; in bfa_flash_read_part()
4674 flash->addr_off = offset; in bfa_flash_read_part()
4675 flash->ubuf = buf; in bfa_flash_read_part()
4695 bfa_trc(diag, diag->block); in bfa_diag_notify()
4696 bfa_trc(diag, diag->fwping.lock); in bfa_diag_notify()
4697 bfa_trc(diag, diag->tsensor.lock); in bfa_diag_notify()
4702 if (diag->fwping.lock) { in bfa_diag_notify()
4703 diag->fwping.status = BFA_STATUS_IOC_FAILURE; in bfa_diag_notify()
4704 diag->fwping.cbfn(diag->fwping.cbarg, in bfa_diag_notify()
4705 diag->fwping.status); in bfa_diag_notify()
4706 diag->fwping.lock = 0; in bfa_diag_notify()
4709 if (diag->tsensor.lock) { in bfa_diag_notify()
4710 diag->tsensor.status = BFA_STATUS_IOC_FAILURE; in bfa_diag_notify()
4711 diag->tsensor.cbfn(diag->tsensor.cbarg, in bfa_diag_notify()
4712 diag->tsensor.status); in bfa_diag_notify()
4713 diag->tsensor.lock = 0; in bfa_diag_notify()
4716 if (diag->block) { in bfa_diag_notify()
4717 if (diag->timer_active) { in bfa_diag_notify()
4718 bfa_timer_stop(&diag->timer); in bfa_diag_notify()
4719 diag->timer_active = 0; in bfa_diag_notify()
4722 diag->status = BFA_STATUS_IOC_FAILURE; in bfa_diag_notify()
4723 diag->cbfn(diag->cbarg, diag->status); in bfa_diag_notify()
4724 diag->block = 0; in bfa_diag_notify()
4737 struct bfa_ioc_s *ioc = diag->ioc; in bfa_diag_memtest_done()
4738 struct bfa_diag_memtest_result *res = diag->result; in bfa_diag_memtest_done()
4742 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_diag_memtest_done()
4743 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_diag_memtest_done()
4749 bfa_mem_read(ioc->ioc_regs.smem_page_start, loff); in bfa_diag_memtest_done()
4756 res->status = swab32(res->status); in bfa_diag_memtest_done()
4757 bfa_trc(diag, res->status); in bfa_diag_memtest_done()
4759 if (res->status == BFI_BOOT_MEMTEST_RES_SIG) in bfa_diag_memtest_done()
4760 diag->status = BFA_STATUS_OK; in bfa_diag_memtest_done()
4762 diag->status = BFA_STATUS_MEMTEST_FAILED; in bfa_diag_memtest_done()
4763 res->addr = swab32(res->addr); in bfa_diag_memtest_done()
4764 res->exp = swab32(res->exp); in bfa_diag_memtest_done()
4765 res->act = swab32(res->act); in bfa_diag_memtest_done()
4766 res->err_status = swab32(res->err_status); in bfa_diag_memtest_done()
4767 res->err_status1 = swab32(res->err_status1); in bfa_diag_memtest_done()
4768 res->err_addr = swab32(res->err_addr); in bfa_diag_memtest_done()
4769 bfa_trc(diag, res->addr); in bfa_diag_memtest_done()
4770 bfa_trc(diag, res->exp); in bfa_diag_memtest_done()
4771 bfa_trc(diag, res->act); in bfa_diag_memtest_done()
4772 bfa_trc(diag, res->err_status); in bfa_diag_memtest_done()
4773 bfa_trc(diag, res->err_status1); in bfa_diag_memtest_done()
4774 bfa_trc(diag, res->err_addr); in bfa_diag_memtest_done()
4776 diag->timer_active = 0; in bfa_diag_memtest_done()
4777 diag->cbfn(diag->cbarg, diag->status); in bfa_diag_memtest_done()
4778 diag->block = 0; in bfa_diag_memtest_done()
4794 bfa_trc(diag, diag->fwping.dbuf_pa); in diag_fwping_send()
4798 *((u32 *)diag->fwping.dbuf_kva + i) = diag->fwping.data; in diag_fwping_send()
4801 fwping_req = (struct bfi_diag_fwping_req_s *)diag->fwping.mbcmd.msg; in diag_fwping_send()
4804 bfa_alen_set(&fwping_req->alen, BFI_DIAG_DMA_BUF_SZ, in diag_fwping_send()
4805 diag->fwping.dbuf_pa); in diag_fwping_send()
4807 fwping_req->count = cpu_to_be32(diag->fwping.count); in diag_fwping_send()
4809 fwping_req->data = diag->fwping.data; in diag_fwping_send()
4812 bfi_h2i_set(fwping_req->mh, BFI_MC_DIAG, BFI_DIAG_H2I_FWPING, in diag_fwping_send()
4813 bfa_ioc_portid(diag->ioc)); in diag_fwping_send()
4816 bfa_ioc_mbox_queue(diag->ioc, &diag->fwping.mbcmd); in diag_fwping_send()
4823 u32 rsp_data = diag_rsp->data; in diag_fwping_comp()
4824 u8 rsp_dma_status = diag_rsp->dma_status; in diag_fwping_comp()
4831 pat = (diag->fwping.count & 0x1) ? ~(diag->fwping.data) : in diag_fwping_comp()
4832 diag->fwping.data; in diag_fwping_comp()
4834 if (diag->fwping.data != rsp_data) { in diag_fwping_comp()
4836 diag->fwping.result->dmastatus = in diag_fwping_comp()
4838 diag->fwping.status = BFA_STATUS_DATACORRUPTED; in diag_fwping_comp()
4839 diag->fwping.cbfn(diag->fwping.cbarg, in diag_fwping_comp()
4840 diag->fwping.status); in diag_fwping_comp()
4841 diag->fwping.lock = 0; in diag_fwping_comp()
4846 if (*((u32 *)diag->fwping.dbuf_kva + i) != pat) { in diag_fwping_comp()
4850 *((u32 *)diag->fwping.dbuf_kva + i)); in diag_fwping_comp()
4851 diag->fwping.result->dmastatus = in diag_fwping_comp()
4853 diag->fwping.status = BFA_STATUS_DATACORRUPTED; in diag_fwping_comp()
4854 diag->fwping.cbfn(diag->fwping.cbarg, in diag_fwping_comp()
4855 diag->fwping.status); in diag_fwping_comp()
4856 diag->fwping.lock = 0; in diag_fwping_comp()
4860 diag->fwping.result->dmastatus = BFA_STATUS_OK; in diag_fwping_comp()
4861 diag->fwping.status = BFA_STATUS_OK; in diag_fwping_comp()
4862 diag->fwping.cbfn(diag->fwping.cbarg, diag->fwping.status); in diag_fwping_comp()
4863 diag->fwping.lock = 0; in diag_fwping_comp()
4865 diag->fwping.status = BFA_STATUS_HDMA_FAILED; in diag_fwping_comp()
4866 diag->fwping.cbfn(diag->fwping.cbarg, diag->fwping.status); in diag_fwping_comp()
4867 diag->fwping.lock = 0; in diag_fwping_comp()
4880 msg = (struct bfi_diag_ts_req_s *)diag->tsensor.mbcmd.msg; in diag_tempsensor_send()
4881 bfa_trc(diag, msg->temp); in diag_tempsensor_send()
4883 bfi_h2i_set(msg->mh, BFI_MC_DIAG, BFI_DIAG_H2I_TEMPSENSOR, in diag_tempsensor_send()
4884 bfa_ioc_portid(diag->ioc)); in diag_tempsensor_send()
4886 bfa_ioc_mbox_queue(diag->ioc, &diag->tsensor.mbcmd); in diag_tempsensor_send()
4892 if (!diag->tsensor.lock) { in diag_tempsensor_comp()
4894 bfa_trc(diag, diag->tsensor.lock); in diag_tempsensor_comp()
4902 diag->tsensor.temp->temp = be16_to_cpu(rsp->temp); in diag_tempsensor_comp()
4903 diag->tsensor.temp->ts_junc = rsp->ts_junc; in diag_tempsensor_comp()
4904 diag->tsensor.temp->ts_brd = rsp->ts_brd; in diag_tempsensor_comp()
4906 if (rsp->ts_brd) { in diag_tempsensor_comp()
4907 /* tsensor.temp->status is brd_temp status */ in diag_tempsensor_comp()
4908 diag->tsensor.temp->status = rsp->status; in diag_tempsensor_comp()
4909 if (rsp->status == BFA_STATUS_OK) { in diag_tempsensor_comp()
4910 diag->tsensor.temp->brd_temp = in diag_tempsensor_comp()
4911 be16_to_cpu(rsp->brd_temp); in diag_tempsensor_comp()
4913 diag->tsensor.temp->brd_temp = 0; in diag_tempsensor_comp()
4916 bfa_trc(diag, rsp->status); in diag_tempsensor_comp()
4917 bfa_trc(diag, rsp->ts_junc); in diag_tempsensor_comp()
4918 bfa_trc(diag, rsp->temp); in diag_tempsensor_comp()
4919 bfa_trc(diag, rsp->ts_brd); in diag_tempsensor_comp()
4920 bfa_trc(diag, rsp->brd_temp); in diag_tempsensor_comp()
4923 diag->tsensor.status = BFA_STATUS_OK; in diag_tempsensor_comp()
4924 diag->tsensor.cbfn(diag->tsensor.cbarg, diag->tsensor.status); in diag_tempsensor_comp()
4925 diag->tsensor.lock = 0; in diag_tempsensor_comp()
4936 msg = (struct bfi_diag_ledtest_req_s *)diag->ledtest.mbcmd.msg; in diag_ledtest_send()
4938 bfi_h2i_set(msg->mh, BFI_MC_DIAG, BFI_DIAG_H2I_LEDTEST, in diag_ledtest_send()
4939 bfa_ioc_portid(diag->ioc)); in diag_ledtest_send()
4945 if (ledtest->freq) in diag_ledtest_send()
4946 ledtest->freq = 500 / ledtest->freq; in diag_ledtest_send()
4948 if (ledtest->freq == 0) in diag_ledtest_send()
4949 ledtest->freq = 1; in diag_ledtest_send()
4951 bfa_trc(diag, ledtest->freq); in diag_ledtest_send()
4952 /* mcpy(&ledtest_req->req, ledtest, sizeof(bfa_diag_ledtest_t)); */ in diag_ledtest_send()
4953 msg->cmd = (u8) ledtest->cmd; in diag_ledtest_send()
4954 msg->color = (u8) ledtest->color; in diag_ledtest_send()
4955 msg->portid = bfa_ioc_portid(diag->ioc); in diag_ledtest_send()
4956 msg->led = ledtest->led; in diag_ledtest_send()
4957 msg->freq = cpu_to_be16(ledtest->freq); in diag_ledtest_send()
4960 bfa_ioc_mbox_queue(diag->ioc, &diag->ledtest.mbcmd); in diag_ledtest_send()
4966 bfa_trc(diag, diag->ledtest.lock); in diag_ledtest_comp()
4967 diag->ledtest.lock = BFA_FALSE; in diag_ledtest_comp()
4979 msg = (struct bfi_diag_portbeacon_req_s *)diag->beacon.mbcmd.msg; in diag_portbeacon_send()
4981 bfi_h2i_set(msg->mh, BFI_MC_DIAG, BFI_DIAG_H2I_PORTBEACON, in diag_portbeacon_send()
4982 bfa_ioc_portid(diag->ioc)); in diag_portbeacon_send()
4983 msg->beacon = beacon; in diag_portbeacon_send()
4984 msg->period = cpu_to_be32(sec); in diag_portbeacon_send()
4986 bfa_ioc_mbox_queue(diag->ioc, &diag->beacon.mbcmd); in diag_portbeacon_send()
4992 bfa_trc(diag, diag->beacon.state); in diag_portbeacon_comp()
4993 diag->beacon.state = BFA_FALSE; in diag_portbeacon_comp()
4994 if (diag->cbfn_beacon) in diag_portbeacon_comp()
4995 diag->cbfn_beacon(diag->dev, BFA_FALSE, diag->beacon.link_e2e); in diag_portbeacon_comp()
5006 switch (msg->mh.msg_id) { in bfa_diag_intr()
5020 bfa_trc(diag, msg->mh.msg_id); in bfa_diag_intr()
5028 * @param[in] *diag - diag data struct
5029 * @param[in] *memtest - mem test params input from upper layer,
5030 * @param[in] pattern - mem test pattern
5031 * @param[in] *result - mem test result
5032 * @param[in] cbfn - mem test callback functioin
5033 * @param[in] cbarg - callback functioin arg
5046 if (!bfa_ioc_adapter_is_disabled(diag->ioc)) in bfa_diag_memtest()
5050 if (diag->block) { in bfa_diag_memtest()
5051 bfa_trc(diag, diag->block); in bfa_diag_memtest()
5054 diag->block = 1; in bfa_diag_memtest()
5056 diag->result = result; in bfa_diag_memtest()
5057 diag->cbfn = cbfn; in bfa_diag_memtest()
5058 diag->cbarg = cbarg; in bfa_diag_memtest()
5061 bfa_ioc_boot(diag->ioc, BFI_FWBOOT_TYPE_MEMTEST, BFI_FWBOOT_ENV_OS); in bfa_diag_memtest()
5063 memtest_tov = (bfa_ioc_asic_gen(diag->ioc) == BFI_ASIC_GEN_CT2) ? in bfa_diag_memtest()
5065 bfa_timer_begin(diag->ioc->timer_mod, &diag->timer, in bfa_diag_memtest()
5067 diag->timer_active = 1; in bfa_diag_memtest()
5074 * @param[in] *diag - diag data struct
5075 * @param[in] cnt - dma loop count for testing PCIE
5076 * @param[in] data - data pattern to pass in fw
5077 * @param[in] *result - pt to bfa_diag_fwping_result_t data struct
5078 * @param[in] cbfn - callback function
5079 * @param[in] *cbarg - callback functioin arg
5091 if (!bfa_ioc_is_operational(diag->ioc)) in bfa_diag_fwping()
5094 if (bfa_asic_id_ct2(bfa_ioc_devid((diag->ioc))) && in bfa_diag_fwping()
5095 ((diag->ioc)->clscode == BFI_PCIFN_CLASS_ETH)) in bfa_diag_fwping()
5099 if (diag->block || diag->fwping.lock) { in bfa_diag_fwping()
5100 bfa_trc(diag, diag->block); in bfa_diag_fwping()
5101 bfa_trc(diag, diag->fwping.lock); in bfa_diag_fwping()
5106 diag->fwping.lock = 1; in bfa_diag_fwping()
5107 diag->fwping.cbfn = cbfn; in bfa_diag_fwping()
5108 diag->fwping.cbarg = cbarg; in bfa_diag_fwping()
5109 diag->fwping.result = result; in bfa_diag_fwping()
5110 diag->fwping.data = data; in bfa_diag_fwping()
5111 diag->fwping.count = cnt; in bfa_diag_fwping()
5114 diag->fwping.result->data = 0; in bfa_diag_fwping()
5115 diag->fwping.result->status = BFA_STATUS_OK; in bfa_diag_fwping()
5125 * @param[in] *diag - diag data struct
5126 * @param[in] *result - pt to bfa_diag_temp_t data struct
5127 * @param[in] cbfn - callback function
5128 * @param[in] *cbarg - callback functioin arg
5138 if (diag->block || diag->tsensor.lock) { in bfa_diag_tsensor_query()
5139 bfa_trc(diag, diag->block); in bfa_diag_tsensor_query()
5140 bfa_trc(diag, diag->tsensor.lock); in bfa_diag_tsensor_query()
5144 if (!bfa_ioc_is_operational(diag->ioc)) in bfa_diag_tsensor_query()
5148 diag->tsensor.lock = 1; in bfa_diag_tsensor_query()
5149 diag->tsensor.temp = result; in bfa_diag_tsensor_query()
5150 diag->tsensor.cbfn = cbfn; in bfa_diag_tsensor_query()
5151 diag->tsensor.cbarg = cbarg; in bfa_diag_tsensor_query()
5152 diag->tsensor.status = BFA_STATUS_OK; in bfa_diag_tsensor_query()
5163 * @param[in] *diag - diag data struct
5164 * @param[in] *ledtest - pt to ledtest data structure
5171 bfa_trc(diag, ledtest->cmd); in bfa_diag_ledtest()
5173 if (!bfa_ioc_is_operational(diag->ioc)) in bfa_diag_ledtest()
5176 if (diag->beacon.state) in bfa_diag_ledtest()
5179 if (diag->ledtest.lock) in bfa_diag_ledtest()
5183 diag->ledtest.lock = BFA_TRUE; in bfa_diag_ledtest()
5192 * @param[in] *diag - diag data struct
5193 * @param[in] beacon - port beaconing 1:ON 0:OFF
5194 * @param[in] link_e2e_beacon - link beaconing 1:ON 0:OFF
5195 * @param[in] sec - beaconing duration in seconds
5207 if (!bfa_ioc_is_operational(diag->ioc)) in bfa_diag_beacon_port()
5210 if (diag->ledtest.lock) in bfa_diag_beacon_port()
5213 if (diag->beacon.state && beacon) /* beacon alread on */ in bfa_diag_beacon_port()
5216 diag->beacon.state = beacon; in bfa_diag_beacon_port()
5217 diag->beacon.link_e2e = link_e2e_beacon; in bfa_diag_beacon_port()
5218 if (diag->cbfn_beacon) in bfa_diag_beacon_port()
5219 diag->cbfn_beacon(diag->dev, beacon, link_e2e_beacon); in bfa_diag_beacon_port()
5243 diag->dev = dev; in bfa_diag_attach()
5244 diag->ioc = ioc; in bfa_diag_attach()
5245 diag->trcmod = trcmod; in bfa_diag_attach()
5247 diag->block = 0; in bfa_diag_attach()
5248 diag->cbfn = NULL; in bfa_diag_attach()
5249 diag->cbarg = NULL; in bfa_diag_attach()
5250 diag->result = NULL; in bfa_diag_attach()
5251 diag->cbfn_beacon = cbfn_beacon; in bfa_diag_attach()
5253 bfa_ioc_mbox_regisr(diag->ioc, BFI_MC_DIAG, bfa_diag_intr, diag); in bfa_diag_attach()
5254 bfa_q_qe_init(&diag->ioc_notify); in bfa_diag_attach()
5255 bfa_ioc_notify_init(&diag->ioc_notify, bfa_diag_notify, diag); in bfa_diag_attach()
5256 list_add_tail(&diag->ioc_notify.qe, &diag->ioc->notify_q); in bfa_diag_attach()
5262 diag->fwping.dbuf_kva = dm_kva; in bfa_diag_memclaim()
5263 diag->fwping.dbuf_pa = dm_pa; in bfa_diag_memclaim()
5264 memset(diag->fwping.dbuf_kva, 0, BFI_DIAG_DMA_BUF_SZ); in bfa_diag_memclaim()
5285 return (phy->ioc->attr->card_type == BFA_MFG_TYPE_LIGHTNING); in bfa_phy_present()
5298 if (phy->op_busy) { in bfa_phy_notify()
5299 phy->status = BFA_STATUS_IOC_FAILURE; in bfa_phy_notify()
5300 phy->cbfn(phy->cbarg, phy->status); in bfa_phy_notify()
5301 phy->op_busy = 0; in bfa_phy_notify()
5313 * @param[in] cbarg - callback argument
5320 (struct bfi_phy_query_req_s *) phy->mb.msg; in bfa_phy_query_send()
5322 msg->instance = phy->instance; in bfa_phy_query_send()
5323 bfi_h2i_set(msg->mh, BFI_MC_PHY, BFI_PHY_H2I_QUERY_REQ, in bfa_phy_query_send()
5324 bfa_ioc_portid(phy->ioc)); in bfa_phy_query_send()
5325 bfa_alen_set(&msg->alen, sizeof(struct bfa_phy_attr_s), phy->dbuf_pa); in bfa_phy_query_send()
5326 bfa_ioc_mbox_queue(phy->ioc, &phy->mb); in bfa_phy_query_send()
5332 * @param[in] cbarg - callback argument
5339 (struct bfi_phy_write_req_s *) phy->mb.msg; in bfa_phy_write_send()
5344 msg->instance = phy->instance; in bfa_phy_write_send()
5345 msg->offset = cpu_to_be32(phy->addr_off + phy->offset); in bfa_phy_write_send()
5346 len = (phy->residue < BFA_PHY_DMA_BUF_SZ) ? in bfa_phy_write_send()
5347 phy->residue : BFA_PHY_DMA_BUF_SZ; in bfa_phy_write_send()
5348 msg->length = cpu_to_be32(len); in bfa_phy_write_send()
5351 msg->last = (len == phy->residue) ? 1 : 0; in bfa_phy_write_send()
5353 bfi_h2i_set(msg->mh, BFI_MC_PHY, BFI_PHY_H2I_WRITE_REQ, in bfa_phy_write_send()
5354 bfa_ioc_portid(phy->ioc)); in bfa_phy_write_send()
5355 bfa_alen_set(&msg->alen, len, phy->dbuf_pa); in bfa_phy_write_send()
5357 buf = (u16 *) (phy->ubuf + phy->offset); in bfa_phy_write_send()
5358 dbuf = (u16 *)phy->dbuf_kva; in bfa_phy_write_send()
5363 bfa_ioc_mbox_queue(phy->ioc, &phy->mb); in bfa_phy_write_send()
5365 phy->residue -= len; in bfa_phy_write_send()
5366 phy->offset += len; in bfa_phy_write_send()
5372 * @param[in] cbarg - callback argument
5379 (struct bfi_phy_read_req_s *) phy->mb.msg; in bfa_phy_read_send()
5382 msg->instance = phy->instance; in bfa_phy_read_send()
5383 msg->offset = cpu_to_be32(phy->addr_off + phy->offset); in bfa_phy_read_send()
5384 len = (phy->residue < BFA_PHY_DMA_BUF_SZ) ? in bfa_phy_read_send()
5385 phy->residue : BFA_PHY_DMA_BUF_SZ; in bfa_phy_read_send()
5386 msg->length = cpu_to_be32(len); in bfa_phy_read_send()
5387 bfi_h2i_set(msg->mh, BFI_MC_PHY, BFI_PHY_H2I_READ_REQ, in bfa_phy_read_send()
5388 bfa_ioc_portid(phy->ioc)); in bfa_phy_read_send()
5389 bfa_alen_set(&msg->alen, len, phy->dbuf_pa); in bfa_phy_read_send()
5390 bfa_ioc_mbox_queue(phy->ioc, &phy->mb); in bfa_phy_read_send()
5396 * @param[in] cbarg - callback argument
5403 (struct bfi_phy_stats_req_s *) phy->mb.msg; in bfa_phy_stats_send()
5405 msg->instance = phy->instance; in bfa_phy_stats_send()
5406 bfi_h2i_set(msg->mh, BFI_MC_PHY, BFI_PHY_H2I_STATS_REQ, in bfa_phy_stats_send()
5407 bfa_ioc_portid(phy->ioc)); in bfa_phy_stats_send()
5408 bfa_alen_set(&msg->alen, sizeof(struct bfa_phy_stats_s), phy->dbuf_pa); in bfa_phy_stats_send()
5409 bfa_ioc_mbox_queue(phy->ioc, &phy->mb); in bfa_phy_stats_send()
5415 * @param[in] mincfg - minimal cfg variable
5430 * @param[in] phy - phy structure
5431 * @param[in] ioc - ioc structure
5432 * @param[in] dev - device structure
5433 * @param[in] trcmod - trace module
5434 * @param[in] logmod - log module
5440 phy->ioc = ioc; in bfa_phy_attach()
5441 phy->trcmod = trcmod; in bfa_phy_attach()
5442 phy->cbfn = NULL; in bfa_phy_attach()
5443 phy->cbarg = NULL; in bfa_phy_attach()
5444 phy->op_busy = 0; in bfa_phy_attach()
5446 bfa_ioc_mbox_regisr(phy->ioc, BFI_MC_PHY, bfa_phy_intr, phy); in bfa_phy_attach()
5447 bfa_q_qe_init(&phy->ioc_notify); in bfa_phy_attach()
5448 bfa_ioc_notify_init(&phy->ioc_notify, bfa_phy_notify, phy); in bfa_phy_attach()
5449 list_add_tail(&phy->ioc_notify.qe, &phy->ioc->notify_q); in bfa_phy_attach()
5453 phy->dbuf_kva = NULL; in bfa_phy_attach()
5454 phy->dbuf_pa = 0; in bfa_phy_attach()
5461 * @param[in] phy - phy structure
5462 * @param[in] dm_kva - pointer to virtual memory address
5463 * @param[in] dm_pa - physical memory address
5464 * @param[in] mincfg - minimal cfg variable
5473 phy->dbuf_kva = dm_kva; in bfa_phy_memclaim()
5474 phy->dbuf_pa = dm_pa; in bfa_phy_memclaim()
5475 memset(phy->dbuf_kva, 0, BFA_PHY_DMA_BUF_SZ); in bfa_phy_memclaim()
5492 * @param[in] phy - phy structure
5493 * @param[in] attr - phy attribute structure
5494 * @param[in] cbfn - callback function
5495 * @param[in] cbarg - callback argument
5509 if (!bfa_ioc_is_operational(phy->ioc)) in bfa_phy_get_attr()
5512 if (phy->op_busy || bfa_phy_busy(phy->ioc)) { in bfa_phy_get_attr()
5513 bfa_trc(phy, phy->op_busy); in bfa_phy_get_attr()
5517 phy->op_busy = 1; in bfa_phy_get_attr()
5518 phy->cbfn = cbfn; in bfa_phy_get_attr()
5519 phy->cbarg = cbarg; in bfa_phy_get_attr()
5520 phy->instance = instance; in bfa_phy_get_attr()
5521 phy->ubuf = (uint8_t *) attr; in bfa_phy_get_attr()
5530 * @param[in] phy - phy structure
5531 * @param[in] instance - phy image instance
5532 * @param[in] stats - pointer to phy stats
5533 * @param[in] cbfn - callback function
5534 * @param[in] cbarg - callback argument
5549 if (!bfa_ioc_is_operational(phy->ioc)) in bfa_phy_get_stats()
5552 if (phy->op_busy || bfa_phy_busy(phy->ioc)) { in bfa_phy_get_stats()
5553 bfa_trc(phy, phy->op_busy); in bfa_phy_get_stats()
5557 phy->op_busy = 1; in bfa_phy_get_stats()
5558 phy->cbfn = cbfn; in bfa_phy_get_stats()
5559 phy->cbarg = cbarg; in bfa_phy_get_stats()
5560 phy->instance = instance; in bfa_phy_get_stats()
5561 phy->ubuf = (u8 *) stats; in bfa_phy_get_stats()
5570 * @param[in] phy - phy structure
5571 * @param[in] instance - phy image instance
5572 * @param[in] buf - update data buffer
5573 * @param[in] len - data buffer length
5574 * @param[in] offset - offset relative to starting address
5575 * @param[in] cbfn - callback function
5576 * @param[in] cbarg - callback argument
5593 if (!bfa_ioc_is_operational(phy->ioc)) in bfa_phy_update()
5596 /* 'len' must be in word (4-byte) boundary */ in bfa_phy_update()
5600 if (phy->op_busy || bfa_phy_busy(phy->ioc)) { in bfa_phy_update()
5601 bfa_trc(phy, phy->op_busy); in bfa_phy_update()
5605 phy->op_busy = 1; in bfa_phy_update()
5606 phy->cbfn = cbfn; in bfa_phy_update()
5607 phy->cbarg = cbarg; in bfa_phy_update()
5608 phy->instance = instance; in bfa_phy_update()
5609 phy->residue = len; in bfa_phy_update()
5610 phy->offset = 0; in bfa_phy_update()
5611 phy->addr_off = offset; in bfa_phy_update()
5612 phy->ubuf = buf; in bfa_phy_update()
5621 * @param[in] phy - phy structure
5622 * @param[in] instance - phy image instance
5623 * @param[in] buf - read data buffer
5624 * @param[in] len - data buffer length
5625 * @param[in] offset - offset relative to starting address
5626 * @param[in] cbfn - callback function
5627 * @param[in] cbarg - callback argument
5644 if (!bfa_ioc_is_operational(phy->ioc)) in bfa_phy_read()
5647 /* 'len' must be in word (4-byte) boundary */ in bfa_phy_read()
5651 if (phy->op_busy || bfa_phy_busy(phy->ioc)) { in bfa_phy_read()
5652 bfa_trc(phy, phy->op_busy); in bfa_phy_read()
5656 phy->op_busy = 1; in bfa_phy_read()
5657 phy->cbfn = cbfn; in bfa_phy_read()
5658 phy->cbarg = cbarg; in bfa_phy_read()
5659 phy->instance = instance; in bfa_phy_read()
5660 phy->residue = len; in bfa_phy_read()
5661 phy->offset = 0; in bfa_phy_read()
5662 phy->addr_off = offset; in bfa_phy_read()
5663 phy->ubuf = buf; in bfa_phy_read()
5672 * @param[in] phyarg - phy structure
5673 * @param[in] msg - message structure
5690 bfa_trc(phy, msg->mh.msg_id); in bfa_phy_intr()
5692 if (!phy->op_busy) { in bfa_phy_intr()
5698 switch (msg->mh.msg_id) { in bfa_phy_intr()
5700 status = be32_to_cpu(m.query->status); in bfa_phy_intr()
5705 (struct bfa_phy_attr_s *) phy->ubuf; in bfa_phy_intr()
5706 bfa_phy_ntoh32((u32 *)attr, (u32 *)phy->dbuf_kva, in bfa_phy_intr()
5708 bfa_trc(phy, attr->status); in bfa_phy_intr()
5709 bfa_trc(phy, attr->length); in bfa_phy_intr()
5712 phy->status = status; in bfa_phy_intr()
5713 phy->op_busy = 0; in bfa_phy_intr()
5714 if (phy->cbfn) in bfa_phy_intr()
5715 phy->cbfn(phy->cbarg, phy->status); in bfa_phy_intr()
5718 status = be32_to_cpu(m.stats->status); in bfa_phy_intr()
5723 (struct bfa_phy_stats_s *) phy->ubuf; in bfa_phy_intr()
5724 bfa_phy_ntoh32((u32 *)stats, (u32 *)phy->dbuf_kva, in bfa_phy_intr()
5726 bfa_trc(phy, stats->status); in bfa_phy_intr()
5729 phy->status = status; in bfa_phy_intr()
5730 phy->op_busy = 0; in bfa_phy_intr()
5731 if (phy->cbfn) in bfa_phy_intr()
5732 phy->cbfn(phy->cbarg, phy->status); in bfa_phy_intr()
5735 status = be32_to_cpu(m.write->status); in bfa_phy_intr()
5738 if (status != BFA_STATUS_OK || phy->residue == 0) { in bfa_phy_intr()
5739 phy->status = status; in bfa_phy_intr()
5740 phy->op_busy = 0; in bfa_phy_intr()
5741 if (phy->cbfn) in bfa_phy_intr()
5742 phy->cbfn(phy->cbarg, phy->status); in bfa_phy_intr()
5744 bfa_trc(phy, phy->offset); in bfa_phy_intr()
5749 status = be32_to_cpu(m.read->status); in bfa_phy_intr()
5753 phy->status = status; in bfa_phy_intr()
5754 phy->op_busy = 0; in bfa_phy_intr()
5755 if (phy->cbfn) in bfa_phy_intr()
5756 phy->cbfn(phy->cbarg, phy->status); in bfa_phy_intr()
5758 u32 len = be32_to_cpu(m.read->length); in bfa_phy_intr()
5759 u16 *buf = (u16 *)(phy->ubuf + phy->offset); in bfa_phy_intr()
5760 u16 *dbuf = (u16 *)phy->dbuf_kva; in bfa_phy_intr()
5763 bfa_trc(phy, phy->offset); in bfa_phy_intr()
5769 phy->residue -= len; in bfa_phy_intr()
5770 phy->offset += len; in bfa_phy_intr()
5772 if (phy->residue == 0) { in bfa_phy_intr()
5773 phy->status = status; in bfa_phy_intr()
5774 phy->op_busy = 0; in bfa_phy_intr()
5775 if (phy->cbfn) in bfa_phy_intr()
5776 phy->cbfn(phy->cbarg, phy->status); in bfa_phy_intr()
5814 bfa_trc(dconf->bfa, event); in bfa_dconf_sm_uninit()
5818 if (dconf->min_cfg) { in bfa_dconf_sm_uninit()
5819 bfa_trc(dconf->bfa, dconf->min_cfg); in bfa_dconf_sm_uninit()
5820 bfa_fsm_send_event(&dconf->bfa->iocfc, in bfa_dconf_sm_uninit()
5825 bfa_timer_start(dconf->bfa, &dconf->timer, in bfa_dconf_sm_uninit()
5827 bfa_status = bfa_flash_read_part(BFA_FLASH(dconf->bfa), in bfa_dconf_sm_uninit()
5828 BFA_FLASH_PART_DRV, dconf->instance, in bfa_dconf_sm_uninit()
5829 dconf->dconf, in bfa_dconf_sm_uninit()
5831 bfa_dconf_init_cb, dconf->bfa); in bfa_dconf_sm_uninit()
5833 bfa_timer_stop(&dconf->timer); in bfa_dconf_sm_uninit()
5834 bfa_dconf_init_cb(dconf->bfa, BFA_STATUS_FAILED); in bfa_dconf_sm_uninit()
5840 bfa_fsm_send_event(&dconf->bfa->iocfc, IOCFC_E_DCONF_DONE); in bfa_dconf_sm_uninit()
5847 bfa_sm_fault(dconf->bfa, event); in bfa_dconf_sm_uninit()
5858 bfa_trc(dconf->bfa, event); in bfa_dconf_sm_flash_read()
5862 bfa_timer_stop(&dconf->timer); in bfa_dconf_sm_flash_read()
5867 bfa_ioc_suspend(&dconf->bfa->ioc); in bfa_dconf_sm_flash_read()
5870 bfa_timer_stop(&dconf->timer); in bfa_dconf_sm_flash_read()
5872 bfa_fsm_send_event(&dconf->bfa->iocfc, IOCFC_E_DCONF_DONE); in bfa_dconf_sm_flash_read()
5875 bfa_timer_stop(&dconf->timer); in bfa_dconf_sm_flash_read()
5879 bfa_sm_fault(dconf->bfa, event); in bfa_dconf_sm_flash_read()
5889 bfa_trc(dconf->bfa, event); in bfa_dconf_sm_ready()
5893 bfa_timer_start(dconf->bfa, &dconf->timer, in bfa_dconf_sm_ready()
5899 bfa_fsm_send_event(&dconf->bfa->iocfc, IOCFC_E_DCONF_DONE); in bfa_dconf_sm_ready()
5905 bfa_sm_fault(dconf->bfa, event); in bfa_dconf_sm_ready()
5916 bfa_trc(dconf->bfa, event); in bfa_dconf_sm_dirty()
5924 bfa_timer_stop(&dconf->timer); in bfa_dconf_sm_dirty()
5925 bfa_timer_start(dconf->bfa, &dconf->timer, in bfa_dconf_sm_dirty()
5929 bfa_timer_stop(&dconf->timer); in bfa_dconf_sm_dirty()
5930 bfa_timer_start(dconf->bfa, &dconf->timer, in bfa_dconf_sm_dirty()
5938 bfa_timer_stop(&dconf->timer); in bfa_dconf_sm_dirty()
5942 bfa_sm_fault(dconf->bfa, event); in bfa_dconf_sm_dirty()
5953 bfa_trc(dconf->bfa, event); in bfa_dconf_sm_final_sync()
5958 bfa_timer_stop(&dconf->timer); in bfa_dconf_sm_final_sync()
5962 bfa_fsm_send_event(&dconf->bfa->iocfc, IOCFC_E_DCONF_DONE); in bfa_dconf_sm_final_sync()
5965 bfa_sm_fault(dconf->bfa, event); in bfa_dconf_sm_final_sync()
5972 bfa_trc(dconf->bfa, event); in bfa_dconf_sm_sync()
5979 bfa_timer_start(dconf->bfa, &dconf->timer, in bfa_dconf_sm_sync()
5984 bfa_timer_start(dconf->bfa, &dconf->timer, in bfa_dconf_sm_sync()
5992 bfa_sm_fault(dconf->bfa, event); in bfa_dconf_sm_sync()
6000 bfa_trc(dconf->bfa, event); in bfa_dconf_sm_iocdown_dirty()
6004 bfa_timer_start(dconf->bfa, &dconf->timer, in bfa_dconf_sm_iocdown_dirty()
6010 bfa_fsm_send_event(&dconf->bfa->iocfc, IOCFC_E_DCONF_DONE); in bfa_dconf_sm_iocdown_dirty()
6015 bfa_sm_fault(dconf->bfa, event); in bfa_dconf_sm_iocdown_dirty()
6028 if (cfg->drvcfg.min_cfg) in bfa_dconf_meminfo()
6041 dconf->bfad = bfad; in bfa_dconf_attach()
6042 dconf->bfa = bfa; in bfa_dconf_attach()
6043 dconf->instance = bfa->ioc.port_id; in bfa_dconf_attach()
6044 bfa_trc(bfa, dconf->instance); in bfa_dconf_attach()
6046 dconf->dconf = (struct bfa_dconf_s *) bfa_mem_kva_curp(dconf); in bfa_dconf_attach()
6047 if (cfg->drvcfg.min_cfg) { in bfa_dconf_attach()
6049 dconf->min_cfg = BFA_TRUE; in bfa_dconf_attach()
6051 dconf->min_cfg = BFA_FALSE; in bfa_dconf_attach()
6067 if (dconf->dconf->hdr.signature != BFI_DCONF_SIGNATURE) in bfa_dconf_init_cb()
6068 dconf->dconf->hdr.signature = BFI_DCONF_SIGNATURE; in bfa_dconf_init_cb()
6069 if (dconf->dconf->hdr.version != BFI_DCONF_VERSION) in bfa_dconf_init_cb()
6070 dconf->dconf->hdr.version = BFI_DCONF_VERSION; in bfa_dconf_init_cb()
6073 bfa_fsm_send_event(&bfa->iocfc, IOCFC_E_DCONF_DONE); in bfa_dconf_init_cb()
6100 bfa_trc(dconf->bfa, 0); in bfa_dconf_flash_write()
6102 bfa_status = bfa_flash_update_part(BFA_FLASH(dconf->bfa), in bfa_dconf_flash_write()
6103 BFA_FLASH_PART_DRV, dconf->instance, in bfa_dconf_flash_write()
6104 dconf->dconf, sizeof(struct bfa_dconf_s), 0, in bfa_dconf_flash_write()
6108 bfa_trc(dconf->bfa, bfa_status); in bfa_dconf_flash_write()
6117 bfa_trc(dconf->bfa, 0); in bfa_dconf_update()
6121 if (dconf->min_cfg) { in bfa_dconf_update()
6122 bfa_trc(dconf->bfa, dconf->min_cfg); in bfa_dconf_update()
6163 if (fru->op_busy) { in bfa_fru_notify()
6164 fru->status = BFA_STATUS_IOC_FAILURE; in bfa_fru_notify()
6165 fru->cbfn(fru->cbarg, fru->status); in bfa_fru_notify()
6166 fru->op_busy = 0; in bfa_fru_notify()
6178 * @param[in] cbarg - callback argument
6185 (struct bfi_fru_write_req_s *) fru->mb.msg; in bfa_fru_write_send()
6188 msg->offset = cpu_to_be32(fru->addr_off + fru->offset); in bfa_fru_write_send()
6189 len = (fru->residue < BFA_FRU_DMA_BUF_SZ) ? in bfa_fru_write_send()
6190 fru->residue : BFA_FRU_DMA_BUF_SZ; in bfa_fru_write_send()
6191 msg->length = cpu_to_be32(len); in bfa_fru_write_send()
6196 msg->last = (len == fru->residue) ? 1 : 0; in bfa_fru_write_send()
6198 msg->trfr_cmpl = (len == fru->residue) ? fru->trfr_cmpl : 0; in bfa_fru_write_send()
6199 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc)); in bfa_fru_write_send()
6200 bfa_alen_set(&msg->alen, len, fru->dbuf_pa); in bfa_fru_write_send()
6202 memcpy(fru->dbuf_kva, fru->ubuf + fru->offset, len); in bfa_fru_write_send()
6203 bfa_ioc_mbox_queue(fru->ioc, &fru->mb); in bfa_fru_write_send()
6205 fru->residue -= len; in bfa_fru_write_send()
6206 fru->offset += len; in bfa_fru_write_send()
6212 * @param[in] cbarg - callback argument
6219 (struct bfi_fru_read_req_s *) fru->mb.msg; in bfa_fru_read_send()
6222 msg->offset = cpu_to_be32(fru->addr_off + fru->offset); in bfa_fru_read_send()
6223 len = (fru->residue < BFA_FRU_DMA_BUF_SZ) ? in bfa_fru_read_send()
6224 fru->residue : BFA_FRU_DMA_BUF_SZ; in bfa_fru_read_send()
6225 msg->length = cpu_to_be32(len); in bfa_fru_read_send()
6226 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc)); in bfa_fru_read_send()
6227 bfa_alen_set(&msg->alen, len, fru->dbuf_pa); in bfa_fru_read_send()
6228 bfa_ioc_mbox_queue(fru->ioc, &fru->mb); in bfa_fru_read_send()
6234 * @param[in] mincfg - minimal cfg variable
6249 * @param[in] fru - fru structure
6250 * @param[in] ioc - ioc structure
6251 * @param[in] dev - device structure
6252 * @param[in] trcmod - trace module
6253 * @param[in] logmod - log module
6259 fru->ioc = ioc; in bfa_fru_attach()
6260 fru->trcmod = trcmod; in bfa_fru_attach()
6261 fru->cbfn = NULL; in bfa_fru_attach()
6262 fru->cbarg = NULL; in bfa_fru_attach()
6263 fru->op_busy = 0; in bfa_fru_attach()
6265 bfa_ioc_mbox_regisr(fru->ioc, BFI_MC_FRU, bfa_fru_intr, fru); in bfa_fru_attach()
6266 bfa_q_qe_init(&fru->ioc_notify); in bfa_fru_attach()
6267 bfa_ioc_notify_init(&fru->ioc_notify, bfa_fru_notify, fru); in bfa_fru_attach()
6268 list_add_tail(&fru->ioc_notify.qe, &fru->ioc->notify_q); in bfa_fru_attach()
6272 fru->dbuf_kva = NULL; in bfa_fru_attach()
6273 fru->dbuf_pa = 0; in bfa_fru_attach()
6280 * @param[in] fru - fru structure
6281 * @param[in] dm_kva - pointer to virtual memory address
6282 * @param[in] dm_pa - frusical memory address
6283 * @param[in] mincfg - minimal cfg variable
6292 fru->dbuf_kva = dm_kva; in bfa_fru_memclaim()
6293 fru->dbuf_pa = dm_pa; in bfa_fru_memclaim()
6294 memset(fru->dbuf_kva, 0, BFA_FRU_DMA_BUF_SZ); in bfa_fru_memclaim()
6302 * @param[in] fru - fru structure
6303 * @param[in] buf - update data buffer
6304 * @param[in] len - data buffer length
6305 * @param[in] offset - offset relative to starting address
6306 * @param[in] cbfn - callback function
6307 * @param[in] cbarg - callback argument
6319 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2 && in bfa_fruvpd_update()
6320 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2) in bfa_fruvpd_update()
6323 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK) in bfa_fruvpd_update()
6326 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_fruvpd_update()
6329 if (fru->op_busy) { in bfa_fruvpd_update()
6330 bfa_trc(fru, fru->op_busy); in bfa_fruvpd_update()
6334 fru->op_busy = 1; in bfa_fruvpd_update()
6336 fru->cbfn = cbfn; in bfa_fruvpd_update()
6337 fru->cbarg = cbarg; in bfa_fruvpd_update()
6338 fru->residue = len; in bfa_fruvpd_update()
6339 fru->offset = 0; in bfa_fruvpd_update()
6340 fru->addr_off = offset; in bfa_fruvpd_update()
6341 fru->ubuf = buf; in bfa_fruvpd_update()
6342 fru->trfr_cmpl = trfr_cmpl; in bfa_fruvpd_update()
6352 * @param[in] fru - fru structure
6353 * @param[in] buf - read data buffer
6354 * @param[in] len - data buffer length
6355 * @param[in] offset - offset relative to starting address
6356 * @param[in] cbfn - callback function
6357 * @param[in] cbarg - callback argument
6369 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_fruvpd_read()
6372 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK && in bfa_fruvpd_read()
6373 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2) in bfa_fruvpd_read()
6376 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_fruvpd_read()
6379 if (fru->op_busy) { in bfa_fruvpd_read()
6380 bfa_trc(fru, fru->op_busy); in bfa_fruvpd_read()
6384 fru->op_busy = 1; in bfa_fruvpd_read()
6386 fru->cbfn = cbfn; in bfa_fruvpd_read()
6387 fru->cbarg = cbarg; in bfa_fruvpd_read()
6388 fru->residue = len; in bfa_fruvpd_read()
6389 fru->offset = 0; in bfa_fruvpd_read()
6390 fru->addr_off = offset; in bfa_fruvpd_read()
6391 fru->ubuf = buf; in bfa_fruvpd_read()
6400 * @param[in] fru - fru structure
6401 * @param[out] size - maximum size of fru vpd data
6408 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_fruvpd_get_max_size()
6411 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_fruvpd_get_max_size()
6414 if (fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK || in bfa_fruvpd_get_max_size()
6415 fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK2) in bfa_fruvpd_get_max_size()
6424 * @param[in] fru - fru structure
6425 * @param[in] buf - update data buffer
6426 * @param[in] len - data buffer length
6427 * @param[in] offset - offset relative to starting address
6428 * @param[in] cbfn - callback function
6429 * @param[in] cbarg - callback argument
6442 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_tfru_write()
6445 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_tfru_write()
6448 if (fru->op_busy) { in bfa_tfru_write()
6449 bfa_trc(fru, fru->op_busy); in bfa_tfru_write()
6453 fru->op_busy = 1; in bfa_tfru_write()
6455 fru->cbfn = cbfn; in bfa_tfru_write()
6456 fru->cbarg = cbarg; in bfa_tfru_write()
6457 fru->residue = len; in bfa_tfru_write()
6458 fru->offset = 0; in bfa_tfru_write()
6459 fru->addr_off = offset; in bfa_tfru_write()
6460 fru->ubuf = buf; in bfa_tfru_write()
6470 * @param[in] fru - fru structure
6471 * @param[in] buf - read data buffer
6472 * @param[in] len - data buffer length
6473 * @param[in] offset - offset relative to starting address
6474 * @param[in] cbfn - callback function
6475 * @param[in] cbarg - callback argument
6487 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_tfru_read()
6490 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_tfru_read()
6493 if (fru->op_busy) { in bfa_tfru_read()
6494 bfa_trc(fru, fru->op_busy); in bfa_tfru_read()
6498 fru->op_busy = 1; in bfa_tfru_read()
6500 fru->cbfn = cbfn; in bfa_tfru_read()
6501 fru->cbarg = cbarg; in bfa_tfru_read()
6502 fru->residue = len; in bfa_tfru_read()
6503 fru->offset = 0; in bfa_tfru_read()
6504 fru->addr_off = offset; in bfa_tfru_read()
6505 fru->ubuf = buf; in bfa_tfru_read()
6514 * @param[in] fruarg - fru structure
6515 * @param[in] msg - message structure
6524 bfa_trc(fru, msg->mh.msg_id); in bfa_fru_intr()
6526 if (!fru->op_busy) { in bfa_fru_intr()
6534 switch (msg->mh.msg_id) { in bfa_fru_intr()
6537 status = be32_to_cpu(rsp->status); in bfa_fru_intr()
6540 if (status != BFA_STATUS_OK || fru->residue == 0) { in bfa_fru_intr()
6541 fru->status = status; in bfa_fru_intr()
6542 fru->op_busy = 0; in bfa_fru_intr()
6543 if (fru->cbfn) in bfa_fru_intr()
6544 fru->cbfn(fru->cbarg, fru->status); in bfa_fru_intr()
6546 bfa_trc(fru, fru->offset); in bfa_fru_intr()
6547 if (msg->mh.msg_id == BFI_FRUVPD_I2H_WRITE_RSP) in bfa_fru_intr()
6557 status = be32_to_cpu(rsp->status); in bfa_fru_intr()
6561 fru->status = status; in bfa_fru_intr()
6562 fru->op_busy = 0; in bfa_fru_intr()
6563 if (fru->cbfn) in bfa_fru_intr()
6564 fru->cbfn(fru->cbarg, fru->status); in bfa_fru_intr()
6566 u32 len = be32_to_cpu(rsp->length); in bfa_fru_intr()
6568 bfa_trc(fru, fru->offset); in bfa_fru_intr()
6571 memcpy(fru->ubuf + fru->offset, fru->dbuf_kva, len); in bfa_fru_intr()
6572 fru->residue -= len; in bfa_fru_intr()
6573 fru->offset += len; in bfa_fru_intr()
6575 if (fru->residue == 0) { in bfa_fru_intr()
6576 fru->status = status; in bfa_fru_intr()
6577 fru->op_busy = 0; in bfa_fru_intr()
6578 if (fru->cbfn) in bfa_fru_intr()
6579 fru->cbfn(fru->cbarg, fru->status); in bfa_fru_intr()
6581 if (msg->mh.msg_id == BFI_FRUVPD_I2H_READ_RSP) in bfa_fru_intr()
6617 BFA_FLASH_NOT_PRESENT = -1, /*!< flash not present */
6618 BFA_FLASH_UNINIT = -2, /*!< flash not initialized */
6619 BFA_FLASH_BAD = -3, /*!< flash bad */
6620 BFA_FLASH_BUSY = -4, /*!< flash busy */
6621 BFA_FLASH_ERR_CMD_ACT = -5, /*!< command active never cleared */
6622 BFA_FLASH_ERR_FIFO_CNT = -6, /*!< fifo count never cleared */
6623 BFA_FLASH_ERR_WIP = -7, /*!< write-in-progress never cleared */
6624 BFA_FLASH_ERR_TIMEOUT = -8, /*!< fli timeout */
6625 BFA_FLASH_ERR_LEN = -9, /*!< invalid length */
6739 * @param[in] pci_bar - pci bar address
6740 * @param[in] dev_status - device status
6778 * @param[in] pci_bar - pci bar address
6823 * @param[in] pci_bar - pci bar address
6824 * @param[in] offset - flash address offset
6825 * @param[in] len - read data length
6826 * @param[in] buf - read data buffer
6853 * check if write-in-progress bit is cleared in bfa_flash_read_start()
6869 * @param[in] pci_bar - pci bar address
6886 * @param[in] pci_bar - pci bar address
6887 * @param[in] len - read data length
6888 * @param[in] buf - read data buffer
6912 * @param[in] pci_bar - pci bar address
6913 * @param[in] offset - flash partition address offset
6914 * @param[in] buf - read data buffer
6915 * @param[in] len - read data length
6940 if (--n <= 0) in bfa_flash_sem_get()
6971 l = (n + 1) * fifo_sz - s; in bfa_flash_raw_read()
6984 if (--n <= 0) { in bfa_flash_raw_read()
6992 residue -= l; in bfa_flash_raw_read()