Lines Matching +full:hb +full:- +full:pll +full:- +full:clock
14 * Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
32 ((__ioc)->ioc_hwif->ioc_firmware_lock(__ioc))
34 ((__ioc)->ioc_hwif->ioc_firmware_unlock(__ioc))
35 #define bfa_ioc_reg_init(__ioc) ((__ioc)->ioc_hwif->ioc_reg_init(__ioc))
36 #define bfa_ioc_map_port(__ioc) ((__ioc)->ioc_hwif->ioc_map_port(__ioc))
38 ((__ioc)->ioc_hwif->ioc_notify_fail(__ioc))
40 ((__ioc)->ioc_hwif->ioc_sync_start(__ioc))
42 ((__ioc)->ioc_hwif->ioc_sync_join(__ioc))
44 ((__ioc)->ioc_hwif->ioc_sync_leave(__ioc))
46 ((__ioc)->ioc_hwif->ioc_sync_ack(__ioc))
48 ((__ioc)->ioc_hwif->ioc_sync_complete(__ioc))
51 (!list_empty(&((__ioc)->mbox_mod.cmd_q)) || \
52 readl((__ioc)->ioc_regs.hfn_mbox_cmd))
248 * Reset entry actions -- initialize state machine
253 bfa_fsm_set_state(&ioc->iocpf, bfa_iocpf_sm_reset); in bfa_ioc_sm_reset_entry()
301 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
308 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
335 mod_timer(&ioc->ioc_timer, jiffies + in bfa_ioc_sm_getattr_entry()
348 del_timer(&ioc->ioc_timer); in bfa_ioc_sm_getattr()
356 del_timer(&ioc->ioc_timer); in bfa_ioc_sm_getattr()
359 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_getattr()
366 del_timer(&ioc->ioc_timer); in bfa_ioc_sm_getattr()
381 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_OK); in bfa_ioc_sm_op_entry()
402 if (ioc->iocpf.auto_recover) in bfa_ioc_sm_op()
472 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_disabled()
506 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
513 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
547 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail()
560 /* HB failure notification, ignore. */ in bfa_ioc_sm_fail()
582 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_hwfail()
586 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_hwfail()
603 * Reset entry actions -- initialize state machine
608 iocpf->fw_mismatch_notified = false; in bfa_iocpf_sm_reset_entry()
609 iocpf->auto_recover = bfa_nw_auto_recover; in bfa_iocpf_sm_reset_entry()
637 bfa_ioc_hw_sem_init(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
638 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
647 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_fwcheck()
658 mod_timer(&ioc->sem_timer, jiffies + in bfa_iocpf_sm_fwcheck()
695 if (iocpf->fw_mismatch_notified == false) in bfa_iocpf_sm_mismatch_entry()
696 bfa_ioc_pf_fwmismatch(iocpf->ioc); in bfa_iocpf_sm_mismatch_entry()
698 iocpf->fw_mismatch_notified = true; in bfa_iocpf_sm_mismatch_entry()
699 mod_timer(&(iocpf->ioc)->iocpf_timer, jiffies + in bfa_iocpf_sm_mismatch_entry()
709 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_mismatch()
717 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_mismatch()
723 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_mismatch()
738 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_semwait_entry()
747 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_semwait()
756 mod_timer(&ioc->sem_timer, jiffies + in bfa_iocpf_sm_semwait()
779 iocpf->poll_time = 0; in bfa_iocpf_sm_hwinit_entry()
780 bfa_ioc_reset(iocpf->ioc, false); in bfa_iocpf_sm_hwinit_entry()
790 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_hwinit()
804 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_hwinit()
818 mod_timer(&(iocpf->ioc)->iocpf_timer, jiffies + in bfa_iocpf_sm_enabling_entry()
823 iocpf->ioc->cbfn->reset_cbfn(iocpf->ioc->bfa); in bfa_iocpf_sm_enabling_entry()
824 bfa_ioc_send_enable(iocpf->ioc); in bfa_iocpf_sm_enabling_entry()
834 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_enabling()
838 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_enabling()
844 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_enabling()
856 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_enabling()
869 bfa_ioc_pf_enabled(iocpf->ioc); in bfa_iocpf_sm_ready_entry()
896 mod_timer(&(iocpf->ioc)->iocpf_timer, jiffies + in bfa_iocpf_sm_disabling_entry()
898 bfa_ioc_send_disable(iocpf->ioc); in bfa_iocpf_sm_disabling_entry()
907 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling()
911 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_disabling()
916 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_disabling()
922 writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate); in bfa_iocpf_sm_disabling()
937 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_disabling_sync_entry()
941 * IOC hb ack request is being removed.
946 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling_sync()
974 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_disabled_entry()
975 bfa_ioc_pf_disabled(iocpf->ioc); in bfa_iocpf_sm_disabled_entry()
981 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_disabled()
1001 bfa_nw_ioc_debug_save_ftrc(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
1002 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
1011 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail_sync()
1017 writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate); in bfa_iocpf_sm_initfail_sync()
1057 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail()
1080 bfa_ioc_lpu_stop(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1085 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1086 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1095 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_fail_sync()
1101 if (!iocpf->auto_recover) { in bfa_iocpf_sm_fail_sync()
1103 writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate); in bfa_iocpf_sm_fail_sync()
1169 list_for_each(qe, &ioc->notify_q) { in bfa_ioc_event_notify()
1171 notify->cbfn(notify->cbarg, event); in bfa_ioc_event_notify()
1178 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_disable_comp()
1214 u32 fwstate = readl(ioc->ioc_regs.ioc_fwstate); in bfa_ioc_hw_sem_init()
1224 writel(BFI_IOC_UNINIT, ioc->ioc_regs.ioc_fwstate); in bfa_ioc_hw_sem_init()
1229 readl(ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_init()
1230 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_init()
1242 r32 = readl(ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_get()
1244 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEM_ERROR); in bfa_ioc_hw_sem_get()
1248 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEMLOCKED); in bfa_ioc_hw_sem_get()
1252 mod_timer(&ioc->sem_timer, jiffies + in bfa_ioc_hw_sem_get()
1259 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_nw_ioc_hw_sem_release()
1265 del_timer(&ioc->sem_timer); in bfa_ioc_hw_sem_get_cancel()
1279 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1284 * i2c workaround 12.5khz clock in bfa_ioc_lmem_init()
1287 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1294 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1305 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1316 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1319 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1330 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1333 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1348 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_fwver_get()
1353 swab32(readl((loff) + (ioc->ioc_regs.smem_page_start))); in bfa_nw_ioc_fwver_get()
1371 if (fwhdr->md5sum[i] != drv_fwhdr->md5sum[i]) in bfa_nw_ioc_fwver_cmp()
1391 if (fwhdr.signature != drv_fwhdr->signature) in bfa_ioc_fwver_valid()
1408 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1410 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1423 ioc_fwstate = readl(ioc->ioc_regs.ioc_fwstate); in bfa_ioc_hwinit()
1453 * just re-enable IOC. in bfa_ioc_hwinit()
1457 * When using MSI-X any pending firmware ready event should in bfa_ioc_hwinit()
1458 * be flushed. Otherwise MSI-X interrupts are not delivered. in bfa_ioc_hwinit()
1461 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_hwinit()
1493 ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1496 writel(0, ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1501 writel(1, ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1502 (void) readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1513 enable_req.clscode = htons(ioc->clscode); in bfa_ioc_send_enable()
1536 bfa_dma_be_addr_set(attr_req.attr_addr, ioc->attr_dma.pa); in bfa_ioc_send_getattr()
1546 hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_nw_ioc_hb_check()
1547 if (ioc->hb_count == hb_count) { in bfa_nw_ioc_hb_check()
1551 ioc->hb_count = hb_count; in bfa_nw_ioc_hb_check()
1555 mod_timer(&ioc->hb_timer, jiffies + in bfa_nw_ioc_hb_check()
1562 ioc->hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_ioc_hb_monitor()
1563 mod_timer(&ioc->hb_timer, jiffies + in bfa_ioc_hb_monitor()
1570 del_timer(&ioc->hb_timer); in bfa_ioc_hb_stop()
1597 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
1610 ((ioc->ioc_regs.smem_page_start) + (loff))); in bfa_ioc_download_fw()
1621 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
1626 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
1631 asicmode = BFI_FWBOOT_DEVMODE(ioc->asic_gen, ioc->asic_mode, in bfa_ioc_download_fw()
1632 ioc->port0_mode, ioc->port1_mode); in bfa_ioc_download_fw()
1633 writel(asicmode, ((ioc->ioc_regs.smem_page_start) in bfa_ioc_download_fw()
1635 writel(boot_type, ((ioc->ioc_regs.smem_page_start) in bfa_ioc_download_fw()
1637 writel(boot_env, ((ioc->ioc_regs.smem_page_start) in bfa_ioc_download_fw()
1654 struct bfa_iocpf *iocpf = &ioc->iocpf; in bfa_ioc_enable_reply()
1656 ioc->port_mode = ioc->port_mode_cfg = port_mode; in bfa_ioc_enable_reply()
1657 ioc->ad_cap_bm = cap_bm; in bfa_ioc_enable_reply()
1668 struct bfi_ioc_attr *attr = ioc->attr; in bfa_ioc_getattr_reply()
1670 attr->adapter_prop = ntohl(attr->adapter_prop); in bfa_ioc_getattr_reply()
1671 attr->card_type = ntohl(attr->card_type); in bfa_ioc_getattr_reply()
1672 attr->maxfrsize = ntohs(attr->maxfrsize); in bfa_ioc_getattr_reply()
1683 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_ioc_mbox_attach()
1686 INIT_LIST_HEAD(&mod->cmd_q); in bfa_ioc_mbox_attach()
1688 mod->mbhdlr[mc].cbfn = NULL; in bfa_ioc_mbox_attach()
1689 mod->mbhdlr[mc].cbarg = ioc->bfa; in bfa_ioc_mbox_attach()
1694 * Mbox poll timer -- restarts any pending mailbox requests.
1699 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_ioc_mbox_poll()
1708 if (list_empty(&mod->cmd_q)) in bfa_ioc_mbox_poll()
1714 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_poll()
1721 bfa_q_deq(&mod->cmd_q, &cmd); in bfa_ioc_mbox_poll()
1722 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_ioc_mbox_poll()
1727 if (cmd->cbfn) { in bfa_ioc_mbox_poll()
1728 cbfn = cmd->cbfn; in bfa_ioc_mbox_poll()
1729 cbarg = cmd->cbarg; in bfa_ioc_mbox_poll()
1730 cmd->cbfn = NULL; in bfa_ioc_mbox_poll()
1741 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_ioc_mbox_flush()
1744 while (!list_empty(&mod->cmd_q)) in bfa_ioc_mbox_flush()
1745 bfa_q_deq(&mod->cmd_q, &cmd); in bfa_ioc_mbox_flush()
1763 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, soff); in bfa_nw_ioc_smem_read()
1767 * Hold semaphore to serialize pll init and fwtrc. in bfa_nw_ioc_smem_read()
1769 if (bfa_nw_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg) == 0) in bfa_nw_ioc_smem_read()
1772 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_smem_read()
1776 r32 = swab32(readl((loff) + (ioc->ioc_regs.smem_page_start))); in bfa_nw_ioc_smem_read()
1786 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_smem_read()
1790 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0), in bfa_nw_ioc_smem_read()
1791 ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_smem_read()
1796 readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_nw_ioc_smem_read()
1797 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_nw_ioc_smem_read()
1807 u32 loff = BFI_IOC_TRC_OFF + BNA_DBG_FWTRC_LEN * ioc->port_id; in bfa_nw_ioc_debug_fwtrc()
1827 if (ioc->dbg_fwsave_once) { in bfa_nw_ioc_debug_save_ftrc()
1828 ioc->dbg_fwsave_once = 0; in bfa_nw_ioc_debug_save_ftrc()
1829 if (ioc->dbg_fwsave_len) { in bfa_nw_ioc_debug_save_ftrc()
1830 tlen = ioc->dbg_fwsave_len; in bfa_nw_ioc_debug_save_ftrc()
1831 bfa_nw_ioc_debug_fwtrc(ioc, ioc->dbg_fwsave, &tlen); in bfa_nw_ioc_debug_save_ftrc()
1844 if (ioc->dbg_fwsave_len == 0) in bfa_nw_ioc_debug_fwsave()
1848 if (tlen > ioc->dbg_fwsave_len) in bfa_nw_ioc_debug_fwsave()
1849 tlen = ioc->dbg_fwsave_len; in bfa_nw_ioc_debug_fwsave()
1851 memcpy(trcdata, ioc->dbg_fwsave, tlen); in bfa_nw_ioc_debug_fwsave()
1862 ioc->cbfn->hbfail_cbfn(ioc->bfa); in bfa_ioc_fail_notify()
1900 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_pf_fwmismatch()
1912 bfa_nw_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
1916 ioc->pllinit = true; in bfa_ioc_pll_init()
1920 bfa_nw_ioc_sem_release(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
1942 writel(BFI_IOC_MEMTEST, ioc->ioc_regs.ioc_fwstate); in bfa_ioc_boot()
1943 writel(BFI_IOC_MEMTEST, ioc->ioc_regs.alt_ioc_fwstate); in bfa_ioc_boot()
1945 writel(BFI_IOC_INITING, ioc->ioc_regs.ioc_fwstate); in bfa_ioc_boot()
1946 writel(BFI_IOC_INITING, ioc->ioc_regs.alt_ioc_fwstate); in bfa_ioc_boot()
1970 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
1979 r32 = readl(ioc->ioc_regs.lpu_mbox + in bfa_ioc_msgget()
1987 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
1988 readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
1997 struct bfa_iocpf *iocpf = &ioc->iocpf; in bfa_ioc_isr()
2003 switch (msg->mh.msg_id) { in bfa_ioc_isr()
2009 (enum bfa_mode)msg->fw_event.port_mode, in bfa_ioc_isr()
2010 msg->fw_event.cap_bm); in bfa_ioc_isr()
2035 ioc->bfa = bfa; in bfa_nw_ioc_attach()
2036 ioc->cbfn = cbfn; in bfa_nw_ioc_attach()
2037 ioc->fcmode = false; in bfa_nw_ioc_attach()
2038 ioc->pllinit = false; in bfa_nw_ioc_attach()
2039 ioc->dbg_fwsave_once = true; in bfa_nw_ioc_attach()
2040 ioc->iocpf.ioc = ioc; in bfa_nw_ioc_attach()
2043 INIT_LIST_HEAD(&ioc->notify_q); in bfa_nw_ioc_attach()
2058 INIT_LIST_HEAD(&ioc->notify_q); in bfa_nw_ioc_detach()
2070 ioc->clscode = clscode; in bfa_nw_ioc_pci_init()
2071 ioc->pcidev = *pcidev; in bfa_nw_ioc_pci_init()
2076 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_FC; in bfa_nw_ioc_pci_init()
2077 ioc->asic_mode = BFI_ASIC_MODE_FC; in bfa_nw_ioc_pci_init()
2079 switch (pcidev->device_id) { in bfa_nw_ioc_pci_init()
2081 ioc->asic_gen = BFI_ASIC_GEN_CT; in bfa_nw_ioc_pci_init()
2082 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_nw_ioc_pci_init()
2083 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_nw_ioc_pci_init()
2084 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_nw_ioc_pci_init()
2085 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_nw_ioc_pci_init()
2089 ioc->asic_gen = BFI_ASIC_GEN_CT2; in bfa_nw_ioc_pci_init()
2091 pcidev->ssid == BFA_PCI_CT2_SSID_FC) { in bfa_nw_ioc_pci_init()
2092 ioc->asic_mode = BFI_ASIC_MODE_FC16; in bfa_nw_ioc_pci_init()
2093 ioc->fcmode = true; in bfa_nw_ioc_pci_init()
2094 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA; in bfa_nw_ioc_pci_init()
2095 ioc->ad_cap_bm = BFA_CM_HBA; in bfa_nw_ioc_pci_init()
2097 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_nw_ioc_pci_init()
2098 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_nw_ioc_pci_init()
2099 if (pcidev->ssid == BFA_PCI_CT2_SSID_FCoE) { in bfa_nw_ioc_pci_init()
2100 ioc->port_mode = in bfa_nw_ioc_pci_init()
2101 ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_nw_ioc_pci_init()
2102 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_nw_ioc_pci_init()
2104 ioc->port_mode = in bfa_nw_ioc_pci_init()
2105 ioc->port_mode_cfg = BFA_MODE_NIC; in bfa_nw_ioc_pci_init()
2106 ioc->ad_cap_bm = BFA_CM_NIC; in bfa_nw_ioc_pci_init()
2118 if (ioc->asic_gen == BFI_ASIC_GEN_CT) in bfa_nw_ioc_pci_init()
2121 WARN_ON(ioc->asic_gen != BFI_ASIC_GEN_CT2); in bfa_nw_ioc_pci_init()
2142 ioc->attr_dma.kva = dm_kva; in bfa_nw_ioc_mem_claim()
2143 ioc->attr_dma.pa = dm_pa; in bfa_nw_ioc_mem_claim()
2144 ioc->attr = (struct bfi_ioc_attr *) dm_kva; in bfa_nw_ioc_mem_claim()
2160 ioc->dbg_fwsave_once = true; in bfa_nw_ioc_enable()
2178 ioc->dbg_fwsave = dbg_fwsave; in bfa_nw_ioc_debug_memclaim()
2179 ioc->dbg_fwsave_len = ioc->iocpf.auto_recover ? BNA_DBG_FWTRC_LEN : 0; in bfa_nw_ioc_debug_memclaim()
2185 return PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, fmaddr); in bfa_ioc_smem_pgnum()
2195 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_nw_ioc_mbox_regisr()
2197 mod->mbhdlr[mc].cbfn = cbfn; in bfa_nw_ioc_mbox_regisr()
2198 mod->mbhdlr[mc].cbarg = cbarg; in bfa_nw_ioc_mbox_regisr()
2212 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_nw_ioc_mbox_queue()
2215 cmd->cbfn = cbfn; in bfa_nw_ioc_mbox_queue()
2216 cmd->cbarg = cbarg; in bfa_nw_ioc_mbox_queue()
2221 if (!list_empty(&mod->cmd_q)) { in bfa_nw_ioc_mbox_queue()
2222 list_add_tail(&cmd->qe, &mod->cmd_q); in bfa_nw_ioc_mbox_queue()
2229 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_nw_ioc_mbox_queue()
2231 list_add_tail(&cmd->qe, &mod->cmd_q); in bfa_nw_ioc_mbox_queue()
2236 * mailbox is free -- queue command to firmware in bfa_nw_ioc_mbox_queue()
2238 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_nw_ioc_mbox_queue()
2249 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_nw_ioc_mbox_isr()
2263 if ((mc >= BFI_MC_MAX) || (mod->mbhdlr[mc].cbfn == NULL)) in bfa_nw_ioc_mbox_isr()
2266 mod->mbhdlr[mc].cbfn(mod->mbhdlr[mc].cbarg, &m); in bfa_nw_ioc_mbox_isr()
2281 bfa_ioc_stats_hb_count(ioc, ioc->hb_count); in bfa_nw_ioc_error_isr()
2312 list_add_tail(¬ify->qe, &ioc->notify_q); in bfa_nw_ioc_notify_register()
2322 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_attr()
2324 bfa_ioc_get_adapter_serial_num(ioc, ad_attr->serial_num); in bfa_ioc_get_adapter_attr()
2325 bfa_ioc_get_adapter_fw_ver(ioc, ad_attr->fw_ver); in bfa_ioc_get_adapter_attr()
2326 bfa_ioc_get_adapter_optrom_ver(ioc, ad_attr->optrom_ver); in bfa_ioc_get_adapter_attr()
2327 bfa_ioc_get_adapter_manufacturer(ioc, ad_attr->manufacturer); in bfa_ioc_get_adapter_attr()
2328 memcpy(&ad_attr->vpd, &ioc_attr->vpd, in bfa_ioc_get_adapter_attr()
2331 ad_attr->nports = bfa_ioc_get_nports(ioc); in bfa_ioc_get_adapter_attr()
2332 ad_attr->max_speed = bfa_ioc_speed_sup(ioc); in bfa_ioc_get_adapter_attr()
2334 bfa_ioc_get_adapter_model(ioc, ad_attr->model); in bfa_ioc_get_adapter_attr()
2336 bfa_ioc_get_adapter_model(ioc, ad_attr->model_descr); in bfa_ioc_get_adapter_attr()
2338 ad_attr->card_type = ioc_attr->card_type; in bfa_ioc_get_adapter_attr()
2339 ad_attr->is_mezz = bfa_mfg_is_mezz(ioc_attr->card_type); in bfa_ioc_get_adapter_attr()
2341 if (BFI_ADAPTER_IS_SPECIAL(ioc_attr->adapter_prop)) in bfa_ioc_get_adapter_attr()
2342 ad_attr->prototype = 1; in bfa_ioc_get_adapter_attr()
2344 ad_attr->prototype = 0; in bfa_ioc_get_adapter_attr()
2346 ad_attr->pwwn = bfa_ioc_get_pwwn(ioc); in bfa_ioc_get_adapter_attr()
2347 ad_attr->mac = bfa_nw_ioc_get_mac(ioc); in bfa_ioc_get_adapter_attr()
2349 ad_attr->pcie_gen = ioc_attr->pcie_gen; in bfa_ioc_get_adapter_attr()
2350 ad_attr->pcie_lanes = ioc_attr->pcie_lanes; in bfa_ioc_get_adapter_attr()
2351 ad_attr->pcie_lanes_orig = ioc_attr->pcie_lanes_orig; in bfa_ioc_get_adapter_attr()
2352 ad_attr->asic_rev = ioc_attr->asic_rev; in bfa_ioc_get_adapter_attr()
2354 bfa_ioc_get_pci_chip_rev(ioc, ad_attr->hw_ver); in bfa_ioc_get_adapter_attr()
2360 if (ioc->clscode == BFI_PCIFN_CLASS_ETH) in bfa_ioc_get_type()
2363 BUG_ON(!(ioc->clscode == BFI_PCIFN_CLASS_FC)); in bfa_ioc_get_type()
2365 return (ioc->attr->port_mode == BFI_PORT_MODE_FC) in bfa_ioc_get_type()
2374 (void *)ioc->attr->brcd_serialnum, in bfa_ioc_get_adapter_serial_num()
2382 memcpy(fw_ver, ioc->attr->fw_version, BFA_VERSION_LEN); in bfa_ioc_get_adapter_fw_ver()
2395 chip_rev[3] = '-'; in bfa_ioc_get_pci_chip_rev()
2396 chip_rev[4] = ioc->attr->asic_rev; in bfa_ioc_get_pci_chip_rev()
2404 memcpy(optrom_ver, ioc->attr->optrom_version, in bfa_ioc_get_adapter_optrom_ver()
2423 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_model()
2425 snprintf(model, BFA_ADAPTER_MODEL_NAME_LEN, "%s-%u", in bfa_ioc_get_adapter_model()
2426 BFA_MFG_NAME, ioc_attr->card_type); in bfa_ioc_get_adapter_model()
2433 enum bfa_ioc_state ioc_st = bfa_sm_to_state(ioc_sm_table, ioc->fsm); in bfa_ioc_get_state()
2438 iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); in bfa_ioc_get_state()
2473 ioc_attr->state = bfa_ioc_get_state(ioc); in bfa_nw_ioc_get_attr()
2474 ioc_attr->port_id = ioc->port_id; in bfa_nw_ioc_get_attr()
2475 ioc_attr->port_mode = ioc->port_mode; in bfa_nw_ioc_get_attr()
2477 ioc_attr->port_mode_cfg = ioc->port_mode_cfg; in bfa_nw_ioc_get_attr()
2478 ioc_attr->cap_bm = ioc->ad_cap_bm; in bfa_nw_ioc_get_attr()
2480 ioc_attr->ioc_type = bfa_ioc_get_type(ioc); in bfa_nw_ioc_get_attr()
2482 bfa_ioc_get_adapter_attr(ioc, &ioc_attr->adapter_attr); in bfa_nw_ioc_get_attr()
2484 ioc_attr->pci_attr.device_id = ioc->pcidev.device_id; in bfa_nw_ioc_get_attr()
2485 ioc_attr->pci_attr.pcifn = ioc->pcidev.pci_func; in bfa_nw_ioc_get_attr()
2486 bfa_ioc_get_pci_chip_rev(ioc, ioc_attr->pci_attr.chip_rev); in bfa_nw_ioc_get_attr()
2495 return ioc->attr->pwwn; in bfa_ioc_get_pwwn()
2501 return ioc->attr->mac; in bfa_nw_ioc_get_mac()
2512 bfa_ioc_stats_hb_count(ioc, ioc->hb_count); in bfa_ioc_recover()
2531 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_ENABLE); in bfa_iocpf_enable()
2537 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_DISABLE); in bfa_iocpf_disable()
2543 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FAIL); in bfa_iocpf_fail()
2549 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_INITFAIL); in bfa_iocpf_initfail()
2555 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_GETATTRFAIL); in bfa_iocpf_getattrfail()
2561 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_iocpf_stop()
2570 iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); in bfa_nw_iocpf_timeout()
2575 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT); in bfa_nw_iocpf_timeout()
2589 u32 fwstate = readl(ioc->ioc_regs.ioc_fwstate); in bfa_ioc_poll_fwinit()
2592 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_poll_fwinit()
2596 if (ioc->iocpf.poll_time >= BFA_IOC_TOV) { in bfa_ioc_poll_fwinit()
2599 ioc->iocpf.poll_time += BFA_IOC_POLL_TOV; in bfa_ioc_poll_fwinit()
2600 mod_timer(&ioc->iocpf_timer, jiffies + in bfa_ioc_poll_fwinit()
2621 flash->op_busy = 0; in bfa_flash_cb()
2622 if (flash->cbfn) in bfa_flash_cb()
2623 flash->cbfn(flash->cbarg, flash->status); in bfa_flash_cb()
2634 if (flash->op_busy) { in bfa_flash_notify()
2635 flash->status = BFA_STATUS_IOC_FAILURE; in bfa_flash_notify()
2636 flash->cbfn(flash->cbarg, flash->status); in bfa_flash_notify()
2637 flash->op_busy = 0; in bfa_flash_notify()
2648 * @param[in] cbarg - callback argument
2654 (struct bfi_flash_write_req *) flash->mb.msg; in bfa_flash_write_send()
2657 msg->type = be32_to_cpu(flash->type); in bfa_flash_write_send()
2658 msg->instance = flash->instance; in bfa_flash_write_send()
2659 msg->offset = be32_to_cpu(flash->addr_off + flash->offset); in bfa_flash_write_send()
2660 len = (flash->residue < BFA_FLASH_DMA_BUF_SZ) ? in bfa_flash_write_send()
2661 flash->residue : BFA_FLASH_DMA_BUF_SZ; in bfa_flash_write_send()
2662 msg->length = be32_to_cpu(len); in bfa_flash_write_send()
2665 msg->last = (len == flash->residue) ? 1 : 0; in bfa_flash_write_send()
2667 bfi_h2i_set(msg->mh, BFI_MC_FLASH, BFI_FLASH_H2I_WRITE_REQ, in bfa_flash_write_send()
2668 bfa_ioc_portid(flash->ioc)); in bfa_flash_write_send()
2669 bfa_alen_set(&msg->alen, len, flash->dbuf_pa); in bfa_flash_write_send()
2670 memcpy(flash->dbuf_kva, flash->ubuf + flash->offset, len); in bfa_flash_write_send()
2671 bfa_nw_ioc_mbox_queue(flash->ioc, &flash->mb, NULL, NULL); in bfa_flash_write_send()
2673 flash->residue -= len; in bfa_flash_write_send()
2674 flash->offset += len; in bfa_flash_write_send()
2680 * @param[in] cbarg - callback argument
2687 (struct bfi_flash_read_req *) flash->mb.msg; in bfa_flash_read_send()
2690 msg->type = be32_to_cpu(flash->type); in bfa_flash_read_send()
2691 msg->instance = flash->instance; in bfa_flash_read_send()
2692 msg->offset = be32_to_cpu(flash->addr_off + flash->offset); in bfa_flash_read_send()
2693 len = (flash->residue < BFA_FLASH_DMA_BUF_SZ) ? in bfa_flash_read_send()
2694 flash->residue : BFA_FLASH_DMA_BUF_SZ; in bfa_flash_read_send()
2695 msg->length = be32_to_cpu(len); in bfa_flash_read_send()
2696 bfi_h2i_set(msg->mh, BFI_MC_FLASH, BFI_FLASH_H2I_READ_REQ, in bfa_flash_read_send()
2697 bfa_ioc_portid(flash->ioc)); in bfa_flash_read_send()
2698 bfa_alen_set(&msg->alen, len, flash->dbuf_pa); in bfa_flash_read_send()
2699 bfa_nw_ioc_mbox_queue(flash->ioc, &flash->mb, NULL, NULL); in bfa_flash_read_send()
2705 * @param[in] flasharg - flash structure
2706 * @param[in] msg - message structure
2724 if (!flash->op_busy && msg->mh.msg_id != BFI_FLASH_I2H_EVENT) in bfa_flash_intr()
2727 switch (msg->mh.msg_id) { in bfa_flash_intr()
2729 status = be32_to_cpu(m.query->status); in bfa_flash_intr()
2734 attr = (struct bfa_flash_attr *) flash->ubuf; in bfa_flash_intr()
2735 f = (struct bfa_flash_attr *) flash->dbuf_kva; in bfa_flash_intr()
2736 attr->status = be32_to_cpu(f->status); in bfa_flash_intr()
2737 attr->npart = be32_to_cpu(f->npart); in bfa_flash_intr()
2738 for (i = 0; i < attr->npart; i++) { in bfa_flash_intr()
2739 attr->part[i].part_type = in bfa_flash_intr()
2740 be32_to_cpu(f->part[i].part_type); in bfa_flash_intr()
2741 attr->part[i].part_instance = in bfa_flash_intr()
2742 be32_to_cpu(f->part[i].part_instance); in bfa_flash_intr()
2743 attr->part[i].part_off = in bfa_flash_intr()
2744 be32_to_cpu(f->part[i].part_off); in bfa_flash_intr()
2745 attr->part[i].part_size = in bfa_flash_intr()
2746 be32_to_cpu(f->part[i].part_size); in bfa_flash_intr()
2747 attr->part[i].part_len = in bfa_flash_intr()
2748 be32_to_cpu(f->part[i].part_len); in bfa_flash_intr()
2749 attr->part[i].part_status = in bfa_flash_intr()
2750 be32_to_cpu(f->part[i].part_status); in bfa_flash_intr()
2753 flash->status = status; in bfa_flash_intr()
2757 status = be32_to_cpu(m.write->status); in bfa_flash_intr()
2758 if (status != BFA_STATUS_OK || flash->residue == 0) { in bfa_flash_intr()
2759 flash->status = status; in bfa_flash_intr()
2765 status = be32_to_cpu(m.read->status); in bfa_flash_intr()
2767 flash->status = status; in bfa_flash_intr()
2770 u32 len = be32_to_cpu(m.read->length); in bfa_flash_intr()
2771 memcpy(flash->ubuf + flash->offset, in bfa_flash_intr()
2772 flash->dbuf_kva, len); in bfa_flash_intr()
2773 flash->residue -= len; in bfa_flash_intr()
2774 flash->offset += len; in bfa_flash_intr()
2775 if (flash->residue == 0) { in bfa_flash_intr()
2776 flash->status = status; in bfa_flash_intr()
2802 * @param[in] flash - flash structure
2803 * @param[in] ioc - ioc structure
2804 * @param[in] dev - device structure
2809 flash->ioc = ioc; in bfa_nw_flash_attach()
2810 flash->cbfn = NULL; in bfa_nw_flash_attach()
2811 flash->cbarg = NULL; in bfa_nw_flash_attach()
2812 flash->op_busy = 0; in bfa_nw_flash_attach()
2814 bfa_nw_ioc_mbox_regisr(flash->ioc, BFI_MC_FLASH, bfa_flash_intr, flash); in bfa_nw_flash_attach()
2815 bfa_q_qe_init(&flash->ioc_notify); in bfa_nw_flash_attach()
2816 bfa_ioc_notify_init(&flash->ioc_notify, bfa_flash_notify, flash); in bfa_nw_flash_attach()
2817 list_add_tail(&flash->ioc_notify.qe, &flash->ioc->notify_q); in bfa_nw_flash_attach()
2823 * @param[in] flash - flash structure
2824 * @param[in] dm_kva - pointer to virtual memory address
2825 * @param[in] dm_pa - physical memory address
2830 flash->dbuf_kva = dm_kva; in bfa_nw_flash_memclaim()
2831 flash->dbuf_pa = dm_pa; in bfa_nw_flash_memclaim()
2832 memset(flash->dbuf_kva, 0, BFA_FLASH_DMA_BUF_SZ); in bfa_nw_flash_memclaim()
2840 * @param[in] flash - flash structure
2841 * @param[in] attr - flash attribute structure
2842 * @param[in] cbfn - callback function
2843 * @param[in] cbarg - callback argument
2852 (struct bfi_flash_query_req *) flash->mb.msg; in bfa_nw_flash_get_attr()
2854 if (!bfa_nw_ioc_is_operational(flash->ioc)) in bfa_nw_flash_get_attr()
2857 if (flash->op_busy) in bfa_nw_flash_get_attr()
2860 flash->op_busy = 1; in bfa_nw_flash_get_attr()
2861 flash->cbfn = cbfn; in bfa_nw_flash_get_attr()
2862 flash->cbarg = cbarg; in bfa_nw_flash_get_attr()
2863 flash->ubuf = (u8 *) attr; in bfa_nw_flash_get_attr()
2865 bfi_h2i_set(msg->mh, BFI_MC_FLASH, BFI_FLASH_H2I_QUERY_REQ, in bfa_nw_flash_get_attr()
2866 bfa_ioc_portid(flash->ioc)); in bfa_nw_flash_get_attr()
2867 bfa_alen_set(&msg->alen, sizeof(struct bfa_flash_attr), flash->dbuf_pa); in bfa_nw_flash_get_attr()
2868 bfa_nw_ioc_mbox_queue(flash->ioc, &flash->mb, NULL, NULL); in bfa_nw_flash_get_attr()
2876 * @param[in] flash - flash structure
2877 * @param[in] type - flash partition type
2878 * @param[in] instance - flash partition instance
2879 * @param[in] buf - update data buffer
2880 * @param[in] len - data buffer length
2881 * @param[in] offset - offset relative to the partition starting address
2882 * @param[in] cbfn - callback function
2883 * @param[in] cbarg - callback argument
2892 if (!bfa_nw_ioc_is_operational(flash->ioc)) in bfa_nw_flash_update_part()
2896 * 'len' must be in word (4-byte) boundary in bfa_nw_flash_update_part()
2904 if (flash->op_busy) in bfa_nw_flash_update_part()
2907 flash->op_busy = 1; in bfa_nw_flash_update_part()
2908 flash->cbfn = cbfn; in bfa_nw_flash_update_part()
2909 flash->cbarg = cbarg; in bfa_nw_flash_update_part()
2910 flash->type = type; in bfa_nw_flash_update_part()
2911 flash->instance = instance; in bfa_nw_flash_update_part()
2912 flash->residue = len; in bfa_nw_flash_update_part()
2913 flash->offset = 0; in bfa_nw_flash_update_part()
2914 flash->addr_off = offset; in bfa_nw_flash_update_part()
2915 flash->ubuf = buf; in bfa_nw_flash_update_part()
2925 * @param[in] flash - flash structure
2926 * @param[in] type - flash partition type
2927 * @param[in] instance - flash partition instance
2928 * @param[in] buf - read data buffer
2929 * @param[in] len - data buffer length
2930 * @param[in] offset - offset relative to the partition starting address
2931 * @param[in] cbfn - callback function
2932 * @param[in] cbarg - callback argument
2941 if (!bfa_nw_ioc_is_operational(flash->ioc)) in bfa_nw_flash_read_part()
2945 * 'len' must be in word (4-byte) boundary in bfa_nw_flash_read_part()
2950 if (flash->op_busy) in bfa_nw_flash_read_part()
2953 flash->op_busy = 1; in bfa_nw_flash_read_part()
2954 flash->cbfn = cbfn; in bfa_nw_flash_read_part()
2955 flash->cbarg = cbarg; in bfa_nw_flash_read_part()
2956 flash->type = type; in bfa_nw_flash_read_part()
2957 flash->instance = instance; in bfa_nw_flash_read_part()
2958 flash->residue = len; in bfa_nw_flash_read_part()
2959 flash->offset = 0; in bfa_nw_flash_read_part()
2960 flash->addr_off = offset; in bfa_nw_flash_read_part()
2961 flash->ubuf = buf; in bfa_nw_flash_read_part()