Lines Matching refs:ioc
58 static void bfa_ioc_hw_sem_init(struct bfa_ioc *ioc);
59 static void bfa_ioc_hw_sem_get(struct bfa_ioc *ioc);
60 static void bfa_ioc_hw_sem_get_cancel(struct bfa_ioc *ioc);
61 static void bfa_ioc_hwinit(struct bfa_ioc *ioc, bool force);
62 static void bfa_ioc_poll_fwinit(struct bfa_ioc *ioc);
63 static void bfa_ioc_send_enable(struct bfa_ioc *ioc);
64 static void bfa_ioc_send_disable(struct bfa_ioc *ioc);
65 static void bfa_ioc_send_getattr(struct bfa_ioc *ioc);
66 static void bfa_ioc_hb_monitor(struct bfa_ioc *ioc);
67 static void bfa_ioc_hb_stop(struct bfa_ioc *ioc);
68 static void bfa_ioc_reset(struct bfa_ioc *ioc, bool force);
69 static void bfa_ioc_mbox_poll(struct bfa_ioc *ioc);
70 static void bfa_ioc_mbox_flush(struct bfa_ioc *ioc);
71 static void bfa_ioc_recover(struct bfa_ioc *ioc);
73 static void bfa_ioc_disable_comp(struct bfa_ioc *ioc);
74 static void bfa_ioc_lpu_stop(struct bfa_ioc *ioc);
75 static void bfa_nw_ioc_debug_save_ftrc(struct bfa_ioc *ioc);
76 static void bfa_ioc_fail_notify(struct bfa_ioc *ioc);
77 static void bfa_ioc_pf_enabled(struct bfa_ioc *ioc);
78 static void bfa_ioc_pf_disabled(struct bfa_ioc *ioc);
79 static void bfa_ioc_pf_failed(struct bfa_ioc *ioc);
80 static void bfa_ioc_pf_hwfailed(struct bfa_ioc *ioc);
81 static void bfa_ioc_pf_fwmismatch(struct bfa_ioc *ioc);
82 static enum bfa_status bfa_ioc_boot(struct bfa_ioc *ioc,
84 static u32 bfa_ioc_smem_pgnum(struct bfa_ioc *ioc, u32 fmaddr);
85 static void bfa_ioc_get_adapter_serial_num(struct bfa_ioc *ioc,
87 static void bfa_ioc_get_adapter_fw_ver(struct bfa_ioc *ioc,
89 static void bfa_ioc_get_pci_chip_rev(struct bfa_ioc *ioc,
91 static void bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc *ioc,
93 static void bfa_ioc_get_adapter_manufacturer(struct bfa_ioc *ioc,
95 static void bfa_ioc_get_adapter_model(struct bfa_ioc *ioc, char *model);
96 static u64 bfa_ioc_get_pwwn(struct bfa_ioc *ioc);
141 static void bfa_iocpf_enable(struct bfa_ioc *ioc);
142 static void bfa_iocpf_disable(struct bfa_ioc *ioc);
143 static void bfa_iocpf_fail(struct bfa_ioc *ioc);
144 static void bfa_iocpf_initfail(struct bfa_ioc *ioc);
145 static void bfa_iocpf_getattrfail(struct bfa_ioc *ioc);
146 static void bfa_iocpf_stop(struct bfa_ioc *ioc);
215 bfa_ioc_sm_uninit_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_uninit_entry() argument
221 bfa_ioc_sm_uninit(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_uninit() argument
225 bfa_fsm_set_state(ioc, bfa_ioc_sm_reset); in bfa_ioc_sm_uninit()
235 bfa_ioc_sm_reset_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_reset_entry() argument
237 bfa_fsm_set_state(&ioc->iocpf, bfa_iocpf_sm_reset); in bfa_ioc_sm_reset_entry()
242 bfa_ioc_sm_reset(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_reset() argument
246 bfa_fsm_set_state(ioc, bfa_ioc_sm_enabling); in bfa_ioc_sm_reset()
250 bfa_ioc_disable_comp(ioc); in bfa_ioc_sm_reset()
254 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_reset()
263 bfa_ioc_sm_enabling_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_enabling_entry() argument
265 bfa_iocpf_enable(ioc); in bfa_ioc_sm_enabling_entry()
272 bfa_ioc_sm_enabling(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_enabling() argument
276 bfa_fsm_set_state(ioc, bfa_ioc_sm_getattr); in bfa_ioc_sm_enabling()
282 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
283 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_enabling()
285 bfa_iocpf_initfail(ioc); in bfa_ioc_sm_enabling()
289 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
290 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail); in bfa_ioc_sm_enabling()
294 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_enabling()
298 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_enabling()
299 bfa_iocpf_stop(ioc); in bfa_ioc_sm_enabling()
312 bfa_ioc_sm_getattr_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_getattr_entry() argument
314 mod_timer(&ioc->ioc_timer, jiffies + in bfa_ioc_sm_getattr_entry()
316 bfa_ioc_send_getattr(ioc); in bfa_ioc_sm_getattr_entry()
321 bfa_ioc_sm_getattr(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_getattr() argument
325 del_timer(&ioc->ioc_timer); in bfa_ioc_sm_getattr()
326 bfa_fsm_set_state(ioc, bfa_ioc_sm_op); in bfa_ioc_sm_getattr()
331 del_timer(&ioc->ioc_timer); in bfa_ioc_sm_getattr()
334 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_getattr()
335 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_getattr()
337 bfa_iocpf_getattrfail(ioc); in bfa_ioc_sm_getattr()
341 del_timer(&ioc->ioc_timer); in bfa_ioc_sm_getattr()
342 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_getattr()
354 bfa_ioc_sm_op_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_op_entry() argument
356 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_OK); in bfa_ioc_sm_op_entry()
357 bfa_ioc_event_notify(ioc, BFA_IOC_E_ENABLED); in bfa_ioc_sm_op_entry()
358 bfa_ioc_hb_monitor(ioc); in bfa_ioc_sm_op_entry()
362 bfa_ioc_sm_op(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_op() argument
369 bfa_ioc_hb_stop(ioc); in bfa_ioc_sm_op()
370 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_op()
375 bfa_ioc_hb_stop(ioc); in bfa_ioc_sm_op()
378 if (ioc->iocpf.auto_recover) in bfa_ioc_sm_op()
379 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail_retry); in bfa_ioc_sm_op()
381 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_op()
383 bfa_ioc_fail_notify(ioc); in bfa_ioc_sm_op()
386 bfa_iocpf_fail(ioc); in bfa_ioc_sm_op()
395 bfa_ioc_sm_disabling_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_disabling_entry() argument
397 bfa_iocpf_disable(ioc); in bfa_ioc_sm_disabling_entry()
402 bfa_ioc_sm_disabling(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_disabling() argument
406 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabled); in bfa_ioc_sm_disabling()
415 bfa_iocpf_fail(ioc); in bfa_ioc_sm_disabling()
419 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail); in bfa_ioc_sm_disabling()
420 bfa_ioc_disable_comp(ioc); in bfa_ioc_sm_disabling()
430 bfa_ioc_sm_disabled_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_disabled_entry() argument
432 bfa_ioc_disable_comp(ioc); in bfa_ioc_sm_disabled_entry()
436 bfa_ioc_sm_disabled(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_disabled() argument
440 bfa_fsm_set_state(ioc, bfa_ioc_sm_enabling); in bfa_ioc_sm_disabled()
444 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_disabled()
448 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_disabled()
449 bfa_iocpf_stop(ioc); in bfa_ioc_sm_disabled()
458 bfa_ioc_sm_fail_retry_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_fail_retry_entry() argument
464 bfa_ioc_sm_fail_retry(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_fail_retry() argument
468 bfa_fsm_set_state(ioc, bfa_ioc_sm_getattr); in bfa_ioc_sm_fail_retry()
476 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
477 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_fail_retry()
479 bfa_iocpf_initfail(ioc); in bfa_ioc_sm_fail_retry()
483 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
484 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail); in bfa_ioc_sm_fail_retry()
491 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_fail_retry()
495 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_fail_retry()
496 bfa_iocpf_stop(ioc); in bfa_ioc_sm_fail_retry()
505 bfa_ioc_sm_fail_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_fail_entry() argument
511 bfa_ioc_sm_fail(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_fail() argument
515 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail()
519 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_fail()
523 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_fail()
524 bfa_iocpf_stop(ioc); in bfa_ioc_sm_fail()
537 bfa_ioc_sm_hwfail_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_hwfail_entry() argument
543 bfa_ioc_sm_hwfail(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_hwfail() argument
548 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_hwfail()
552 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_hwfail()
556 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_hwfail()
595 bfa_ioc_hw_sem_init(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
596 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
603 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_fwcheck() local
607 if (bfa_ioc_firmware_lock(ioc)) { in bfa_iocpf_sm_fwcheck()
608 if (bfa_ioc_sync_start(ioc)) { in bfa_iocpf_sm_fwcheck()
609 bfa_ioc_sync_join(ioc); in bfa_iocpf_sm_fwcheck()
612 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_fwcheck()
613 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_fwcheck()
614 mod_timer(&ioc->sem_timer, jiffies + in bfa_iocpf_sm_fwcheck()
618 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_fwcheck()
625 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_fwcheck()
629 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_fwcheck()
631 bfa_ioc_pf_disabled(ioc); in bfa_iocpf_sm_fwcheck()
635 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_fwcheck()
650 bfa_ioc_pf_fwmismatch(iocpf->ioc); in bfa_iocpf_sm_mismatch_entry()
653 mod_timer(&(iocpf->ioc)->iocpf_timer, jiffies + in bfa_iocpf_sm_mismatch_entry()
661 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_mismatch() local
669 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_mismatch()
671 bfa_ioc_pf_disabled(ioc); in bfa_iocpf_sm_mismatch()
675 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_mismatch()
688 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_semwait_entry()
695 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_semwait() local
699 if (bfa_ioc_sync_complete(ioc)) { in bfa_iocpf_sm_semwait()
700 bfa_ioc_sync_join(ioc); in bfa_iocpf_sm_semwait()
703 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_semwait()
704 mod_timer(&ioc->sem_timer, jiffies + in bfa_iocpf_sm_semwait()
711 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_semwait()
715 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_semwait()
728 bfa_ioc_reset(iocpf->ioc, false); in bfa_iocpf_sm_hwinit_entry()
737 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_hwinit() local
745 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_hwinit()
746 bfa_ioc_pf_failed(ioc); in bfa_iocpf_sm_hwinit()
751 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_hwinit()
752 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_hwinit()
753 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_hwinit()
765 mod_timer(&(iocpf->ioc)->iocpf_timer, jiffies + in bfa_iocpf_sm_enabling_entry()
770 iocpf->ioc->cbfn->reset_cbfn(iocpf->ioc->bfa); in bfa_iocpf_sm_enabling_entry()
771 bfa_ioc_send_enable(iocpf->ioc); in bfa_iocpf_sm_enabling_entry()
780 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_enabling() local
784 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_enabling()
785 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_enabling()
790 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_enabling()
795 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_enabling()
797 bfa_ioc_pf_failed(ioc); in bfa_iocpf_sm_enabling()
802 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_enabling()
803 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_enabling()
815 bfa_ioc_pf_enabled(iocpf->ioc); in bfa_iocpf_sm_ready_entry()
842 mod_timer(&(iocpf->ioc)->iocpf_timer, jiffies + in bfa_iocpf_sm_disabling_entry()
844 bfa_ioc_send_disable(iocpf->ioc); in bfa_iocpf_sm_disabling_entry()
851 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling() local
855 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_disabling()
860 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_disabling()
866 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); in bfa_iocpf_sm_disabling()
881 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_disabling_sync_entry()
888 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling_sync() local
892 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_disabling_sync()
893 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_disabling_sync()
899 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_disabling_sync()
914 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_disabled_entry()
915 bfa_ioc_pf_disabled(iocpf->ioc); in bfa_iocpf_sm_disabled_entry()
921 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_disabled() local
929 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_disabled()
941 bfa_nw_ioc_debug_save_ftrc(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
942 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
949 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail_sync() local
953 bfa_ioc_notify_fail(ioc); in bfa_iocpf_sm_initfail_sync()
954 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_initfail_sync()
955 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); in bfa_iocpf_sm_initfail_sync()
956 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_initfail_sync()
962 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_initfail_sync()
966 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_initfail_sync()
971 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_initfail_sync()
972 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_initfail_sync()
993 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail() local
1001 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_initfail()
1016 bfa_ioc_lpu_stop(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1021 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1022 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1029 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_fail_sync() local
1033 bfa_ioc_sync_ack(ioc); in bfa_iocpf_sm_fail_sync()
1034 bfa_ioc_notify_fail(ioc); in bfa_iocpf_sm_fail_sync()
1036 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_fail_sync()
1037 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); in bfa_iocpf_sm_fail_sync()
1038 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_fail_sync()
1041 if (bfa_ioc_sync_complete(ioc)) in bfa_iocpf_sm_fail_sync()
1044 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_fail_sync()
1052 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_fail_sync()
1056 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_fail_sync()
1091 bfa_ioc_event_notify(struct bfa_ioc *ioc, enum bfa_ioc_event event) in bfa_ioc_event_notify() argument
1095 list_for_each_entry(notify, &ioc->notify_q, qe) in bfa_ioc_event_notify()
1100 bfa_ioc_disable_comp(struct bfa_ioc *ioc) in bfa_ioc_disable_comp() argument
1102 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_disable_comp()
1103 bfa_ioc_event_notify(ioc, BFA_IOC_E_DISABLED); in bfa_ioc_disable_comp()
1136 bfa_ioc_fwver_clear(struct bfa_ioc *ioc) in bfa_ioc_fwver_clear() argument
1141 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_ioc_fwver_clear()
1143 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_fwver_clear()
1146 writel(0, ioc->ioc_regs.smem_page_start + loff); in bfa_ioc_fwver_clear()
1153 bfa_ioc_hw_sem_init(struct bfa_ioc *ioc) in bfa_ioc_hw_sem_init() argument
1159 r32 = readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1162 r32 = readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1165 fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_hw_sem_init()
1167 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1171 bfa_nw_ioc_fwver_get(ioc, &fwhdr); in bfa_ioc_hw_sem_init()
1174 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1178 bfa_ioc_fwver_clear(ioc); in bfa_ioc_hw_sem_init()
1179 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_UNINIT); in bfa_ioc_hw_sem_init()
1180 bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_UNINIT); in bfa_ioc_hw_sem_init()
1185 readl(ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_init()
1186 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_init()
1189 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1193 bfa_ioc_hw_sem_get(struct bfa_ioc *ioc) in bfa_ioc_hw_sem_get() argument
1201 r32 = readl(ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_get()
1203 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEM_ERROR); in bfa_ioc_hw_sem_get()
1207 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEMLOCKED); in bfa_ioc_hw_sem_get()
1211 mod_timer(&ioc->sem_timer, jiffies + in bfa_ioc_hw_sem_get()
1216 bfa_nw_ioc_hw_sem_release(struct bfa_ioc *ioc) in bfa_nw_ioc_hw_sem_release() argument
1218 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_nw_ioc_hw_sem_release()
1222 bfa_ioc_hw_sem_get_cancel(struct bfa_ioc *ioc) in bfa_ioc_hw_sem_get_cancel() argument
1224 del_timer(&ioc->sem_timer); in bfa_ioc_hw_sem_get_cancel()
1229 bfa_ioc_lmem_init(struct bfa_ioc *ioc) in bfa_ioc_lmem_init() argument
1235 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1243 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1250 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1261 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1265 bfa_ioc_lpu_start(struct bfa_ioc *ioc) in bfa_ioc_lpu_start() argument
1272 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1275 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1279 bfa_ioc_lpu_stop(struct bfa_ioc *ioc) in bfa_ioc_lpu_stop() argument
1286 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1289 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1294 bfa_nw_ioc_fwver_get(struct bfa_ioc *ioc, struct bfi_ioc_image_hdr *fwhdr) in bfa_nw_ioc_fwver_get() argument
1301 pgnum = bfa_ioc_smem_pgnum(ioc, loff); in bfa_nw_ioc_fwver_get()
1302 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_fwver_get()
1307 swab32(readl(loff + ioc->ioc_regs.smem_page_start)); in bfa_nw_ioc_fwver_get()
1752 bfa_nw_ioc_flash_img_get_chnk(struct bfa_ioc *ioc, u32 off, in bfa_nw_ioc_flash_img_get_chnk() argument
1755 return bfa_flash_raw_read(ioc->pcidev.pci_bar_kva, in bfa_nw_ioc_flash_img_get_chnk()
1761 bfa_ioc_flash_fwver_cmp(struct bfa_ioc *ioc, in bfa_ioc_flash_fwver_cmp() argument
1768 status = bfa_nw_ioc_flash_img_get_chnk(ioc, 0, fwimg); in bfa_ioc_flash_fwver_cmp()
1783 bfa_nw_ioc_fwver_cmp(struct bfa_ioc *ioc, struct bfi_ioc_image_hdr *fwhdr) in bfa_nw_ioc_fwver_cmp() argument
1789 bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), 0); in bfa_nw_ioc_fwver_cmp()
1802 smem_flash_cmp = bfa_ioc_flash_fwver_cmp(ioc, fwhdr); in bfa_nw_ioc_fwver_cmp()
1817 bfa_ioc_fwver_valid(struct bfa_ioc *ioc, u32 boot_env) in bfa_ioc_fwver_valid() argument
1821 bfa_nw_ioc_fwver_get(ioc, &fwhdr); in bfa_ioc_fwver_valid()
1825 return bfa_nw_ioc_fwver_cmp(ioc, &fwhdr); in bfa_ioc_fwver_valid()
1830 bfa_ioc_msgflush(struct bfa_ioc *ioc) in bfa_ioc_msgflush() argument
1834 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1836 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1840 bfa_ioc_hwinit(struct bfa_ioc *ioc, bool force) in bfa_ioc_hwinit() argument
1846 ioc_fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_hwinit()
1857 false : bfa_ioc_fwver_valid(ioc, boot_env); in bfa_ioc_hwinit()
1860 if (bfa_ioc_boot(ioc, BFI_FWBOOT_TYPE_NORMAL, boot_env) == in bfa_ioc_hwinit()
1862 bfa_ioc_poll_fwinit(ioc); in bfa_ioc_hwinit()
1872 bfa_ioc_poll_fwinit(ioc); in bfa_ioc_hwinit()
1885 bfa_ioc_msgflush(ioc); in bfa_ioc_hwinit()
1886 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_hwinit()
1893 if (bfa_ioc_boot(ioc, BFI_FWBOOT_TYPE_NORMAL, boot_env) == in bfa_ioc_hwinit()
1895 bfa_ioc_poll_fwinit(ioc); in bfa_ioc_hwinit()
1899 bfa_nw_ioc_timeout(struct bfa_ioc *ioc) in bfa_nw_ioc_timeout() argument
1901 bfa_fsm_send_event(ioc, IOC_E_TIMEOUT); in bfa_nw_ioc_timeout()
1905 bfa_ioc_mbox_send(struct bfa_ioc *ioc, void *ioc_msg, int len) in bfa_ioc_mbox_send() argument
1917 ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1920 writel(0, ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1925 writel(1, ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1926 (void) readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1930 bfa_ioc_send_enable(struct bfa_ioc *ioc) in bfa_ioc_send_enable() argument
1936 bfa_ioc_portid(ioc)); in bfa_ioc_send_enable()
1937 enable_req.clscode = htons(ioc->clscode); in bfa_ioc_send_enable()
1940 bfa_ioc_mbox_send(ioc, &enable_req, sizeof(struct bfi_ioc_ctrl_req)); in bfa_ioc_send_enable()
1944 bfa_ioc_send_disable(struct bfa_ioc *ioc) in bfa_ioc_send_disable() argument
1949 bfa_ioc_portid(ioc)); in bfa_ioc_send_disable()
1950 bfa_ioc_mbox_send(ioc, &disable_req, sizeof(struct bfi_ioc_ctrl_req)); in bfa_ioc_send_disable()
1954 bfa_ioc_send_getattr(struct bfa_ioc *ioc) in bfa_ioc_send_getattr() argument
1959 bfa_ioc_portid(ioc)); in bfa_ioc_send_getattr()
1960 bfa_dma_be_addr_set(attr_req.attr_addr, ioc->attr_dma.pa); in bfa_ioc_send_getattr()
1961 bfa_ioc_mbox_send(ioc, &attr_req, sizeof(attr_req)); in bfa_ioc_send_getattr()
1965 bfa_nw_ioc_hb_check(struct bfa_ioc *ioc) in bfa_nw_ioc_hb_check() argument
1969 hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_nw_ioc_hb_check()
1970 if (ioc->hb_count == hb_count) { in bfa_nw_ioc_hb_check()
1971 bfa_ioc_recover(ioc); in bfa_nw_ioc_hb_check()
1974 ioc->hb_count = hb_count; in bfa_nw_ioc_hb_check()
1977 bfa_ioc_mbox_poll(ioc); in bfa_nw_ioc_hb_check()
1978 mod_timer(&ioc->hb_timer, jiffies + in bfa_nw_ioc_hb_check()
1983 bfa_ioc_hb_monitor(struct bfa_ioc *ioc) in bfa_ioc_hb_monitor() argument
1985 ioc->hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_ioc_hb_monitor()
1986 mod_timer(&ioc->hb_timer, jiffies + in bfa_ioc_hb_monitor()
1991 bfa_ioc_hb_stop(struct bfa_ioc *ioc) in bfa_ioc_hb_stop() argument
1993 del_timer(&ioc->hb_timer); in bfa_ioc_hb_stop()
1998 bfa_ioc_download_fw(struct bfa_ioc *ioc, u32 boot_type, in bfa_ioc_download_fw() argument
2015 status = bfa_nw_ioc_flash_img_get_chnk(ioc, in bfa_ioc_download_fw()
2022 fwimg_size = bfa_cb_image_get_size(bfa_ioc_asic_gen(ioc)); in bfa_ioc_download_fw()
2023 fwimg = bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), in bfa_ioc_download_fw()
2027 pgnum = bfa_ioc_smem_pgnum(ioc, loff); in bfa_ioc_download_fw()
2029 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
2036 status = bfa_nw_ioc_flash_img_get_chnk(ioc, in bfa_ioc_download_fw()
2045 bfa_ioc_asic_gen(ioc), in bfa_ioc_download_fw()
2054 ioc->ioc_regs.smem_page_start + loff); in bfa_ioc_download_fw()
2065 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
2069 writel(bfa_ioc_smem_pgnum(ioc, 0), in bfa_ioc_download_fw()
2070 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
2079 asicmode = BFI_FWBOOT_DEVMODE(ioc->asic_gen, ioc->asic_mode, in bfa_ioc_download_fw()
2080 ioc->port0_mode, ioc->port1_mode); in bfa_ioc_download_fw()
2081 writel(asicmode, ((ioc->ioc_regs.smem_page_start) in bfa_ioc_download_fw()
2083 writel(boot_type, ((ioc->ioc_regs.smem_page_start) in bfa_ioc_download_fw()
2085 writel(boot_env, ((ioc->ioc_regs.smem_page_start) in bfa_ioc_download_fw()
2091 bfa_ioc_reset(struct bfa_ioc *ioc, bool force) in bfa_ioc_reset() argument
2093 bfa_ioc_hwinit(ioc, force); in bfa_ioc_reset()
2098 bfa_ioc_enable_reply(struct bfa_ioc *ioc, enum bfa_mode port_mode, in bfa_ioc_enable_reply() argument
2101 struct bfa_iocpf *iocpf = &ioc->iocpf; in bfa_ioc_enable_reply()
2103 ioc->port_mode = ioc->port_mode_cfg = port_mode; in bfa_ioc_enable_reply()
2104 ioc->ad_cap_bm = cap_bm; in bfa_ioc_enable_reply()
2110 bfa_ioc_getattr_reply(struct bfa_ioc *ioc) in bfa_ioc_getattr_reply() argument
2112 struct bfi_ioc_attr *attr = ioc->attr; in bfa_ioc_getattr_reply()
2118 bfa_fsm_send_event(ioc, IOC_E_FWRSP_GETATTR); in bfa_ioc_getattr_reply()
2123 bfa_ioc_mbox_attach(struct bfa_ioc *ioc) in bfa_ioc_mbox_attach() argument
2125 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_ioc_mbox_attach()
2131 mod->mbhdlr[mc].cbarg = ioc->bfa; in bfa_ioc_mbox_attach()
2137 bfa_ioc_mbox_poll(struct bfa_ioc *ioc) in bfa_ioc_mbox_poll() argument
2139 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_ioc_mbox_poll()
2154 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_poll()
2163 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_ioc_mbox_poll()
2178 bfa_ioc_mbox_flush(struct bfa_ioc *ioc) in bfa_ioc_mbox_flush() argument
2180 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_ioc_mbox_flush()
2198 bfa_nw_ioc_smem_read(struct bfa_ioc *ioc, void *tbuf, u32 soff, u32 sz) in bfa_nw_ioc_smem_read() argument
2204 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, soff); in bfa_nw_ioc_smem_read()
2210 if (!bfa_nw_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg)) in bfa_nw_ioc_smem_read()
2213 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_smem_read()
2217 r32 = swab32(readl(loff + ioc->ioc_regs.smem_page_start)); in bfa_nw_ioc_smem_read()
2227 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_smem_read()
2231 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0), in bfa_nw_ioc_smem_read()
2232 ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_smem_read()
2237 readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_nw_ioc_smem_read()
2238 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_nw_ioc_smem_read()
2244 bfa_nw_ioc_debug_fwtrc(struct bfa_ioc *ioc, void *trcdata, int *trclen) in bfa_nw_ioc_debug_fwtrc() argument
2246 u32 loff = BFI_IOC_TRC_OFF + BNA_DBG_FWTRC_LEN * ioc->port_id; in bfa_nw_ioc_debug_fwtrc()
2253 status = bfa_nw_ioc_smem_read(ioc, trcdata, loff, tlen); in bfa_nw_ioc_debug_fwtrc()
2260 bfa_nw_ioc_debug_save_ftrc(struct bfa_ioc *ioc) in bfa_nw_ioc_debug_save_ftrc() argument
2264 if (ioc->dbg_fwsave_once) { in bfa_nw_ioc_debug_save_ftrc()
2265 ioc->dbg_fwsave_once = false; in bfa_nw_ioc_debug_save_ftrc()
2266 if (ioc->dbg_fwsave_len) { in bfa_nw_ioc_debug_save_ftrc()
2267 tlen = ioc->dbg_fwsave_len; in bfa_nw_ioc_debug_save_ftrc()
2268 bfa_nw_ioc_debug_fwtrc(ioc, ioc->dbg_fwsave, &tlen); in bfa_nw_ioc_debug_save_ftrc()
2275 bfa_nw_ioc_debug_fwsave(struct bfa_ioc *ioc, void *trcdata, int *trclen) in bfa_nw_ioc_debug_fwsave() argument
2279 if (ioc->dbg_fwsave_len == 0) in bfa_nw_ioc_debug_fwsave()
2283 if (tlen > ioc->dbg_fwsave_len) in bfa_nw_ioc_debug_fwsave()
2284 tlen = ioc->dbg_fwsave_len; in bfa_nw_ioc_debug_fwsave()
2286 memcpy(trcdata, ioc->dbg_fwsave, tlen); in bfa_nw_ioc_debug_fwsave()
2292 bfa_ioc_fail_notify(struct bfa_ioc *ioc) in bfa_ioc_fail_notify() argument
2297 ioc->cbfn->hbfail_cbfn(ioc->bfa); in bfa_ioc_fail_notify()
2298 bfa_ioc_event_notify(ioc, BFA_IOC_E_FAILED); in bfa_ioc_fail_notify()
2299 bfa_nw_ioc_debug_save_ftrc(ioc); in bfa_ioc_fail_notify()
2304 bfa_ioc_pf_enabled(struct bfa_ioc *ioc) in bfa_ioc_pf_enabled() argument
2306 bfa_fsm_send_event(ioc, IOC_E_ENABLED); in bfa_ioc_pf_enabled()
2310 bfa_ioc_pf_disabled(struct bfa_ioc *ioc) in bfa_ioc_pf_disabled() argument
2312 bfa_fsm_send_event(ioc, IOC_E_DISABLED); in bfa_ioc_pf_disabled()
2316 bfa_ioc_pf_failed(struct bfa_ioc *ioc) in bfa_ioc_pf_failed() argument
2318 bfa_fsm_send_event(ioc, IOC_E_PFFAILED); in bfa_ioc_pf_failed()
2322 bfa_ioc_pf_hwfailed(struct bfa_ioc *ioc) in bfa_ioc_pf_hwfailed() argument
2324 bfa_fsm_send_event(ioc, IOC_E_HWFAILED); in bfa_ioc_pf_hwfailed()
2328 bfa_ioc_pf_fwmismatch(struct bfa_ioc *ioc) in bfa_ioc_pf_fwmismatch() argument
2333 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_pf_fwmismatch()
2338 bfa_ioc_pll_init(struct bfa_ioc *ioc) in bfa_ioc_pll_init() argument
2343 bfa_nw_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2345 bfa_ioc_pll_init_asic(ioc); in bfa_ioc_pll_init()
2347 ioc->pllinit = true; in bfa_ioc_pll_init()
2350 bfa_ioc_lmem_init(ioc); in bfa_ioc_pll_init()
2355 bfa_nw_ioc_sem_release(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2364 bfa_ioc_boot(struct bfa_ioc *ioc, enum bfi_fwboot_type boot_type, in bfa_ioc_boot() argument
2369 bfa_ioc_stats(ioc, ioc_boots); in bfa_ioc_boot()
2371 if (bfa_ioc_pll_init(ioc) != BFA_STATUS_OK) in bfa_ioc_boot()
2376 bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), 0); in bfa_ioc_boot()
2380 if (bfa_ioc_flash_fwver_cmp(ioc, drv_fwhdr) == in bfa_ioc_boot()
2389 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_MEMTEST); in bfa_ioc_boot()
2390 bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_MEMTEST); in bfa_ioc_boot()
2392 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_INITING); in bfa_ioc_boot()
2393 bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_INITING); in bfa_ioc_boot()
2396 bfa_ioc_msgflush(ioc); in bfa_ioc_boot()
2397 status = bfa_ioc_download_fw(ioc, boot_type, boot_env); in bfa_ioc_boot()
2399 bfa_ioc_lpu_start(ioc); in bfa_ioc_boot()
2401 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT); in bfa_ioc_boot()
2414 bfa_ioc_msgget(struct bfa_ioc *ioc, void *mbmsg) in bfa_ioc_msgget() argument
2420 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2429 r32 = readl(ioc->ioc_regs.lpu_mbox + in bfa_ioc_msgget()
2437 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2438 readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2444 bfa_ioc_isr(struct bfa_ioc *ioc, struct bfi_mbmsg *m) in bfa_ioc_isr() argument
2447 struct bfa_iocpf *iocpf = &ioc->iocpf; in bfa_ioc_isr()
2451 bfa_ioc_stats(ioc, ioc_isrs); in bfa_ioc_isr()
2458 bfa_ioc_enable_reply(ioc, in bfa_ioc_isr()
2468 bfa_ioc_getattr_reply(ioc); in bfa_ioc_isr()
2483 bfa_nw_ioc_attach(struct bfa_ioc *ioc, void *bfa, struct bfa_ioc_cbfn *cbfn) in bfa_nw_ioc_attach() argument
2485 ioc->bfa = bfa; in bfa_nw_ioc_attach()
2486 ioc->cbfn = cbfn; in bfa_nw_ioc_attach()
2487 ioc->fcmode = false; in bfa_nw_ioc_attach()
2488 ioc->pllinit = false; in bfa_nw_ioc_attach()
2489 ioc->dbg_fwsave_once = true; in bfa_nw_ioc_attach()
2490 ioc->iocpf.ioc = ioc; in bfa_nw_ioc_attach()
2492 bfa_ioc_mbox_attach(ioc); in bfa_nw_ioc_attach()
2493 INIT_LIST_HEAD(&ioc->notify_q); in bfa_nw_ioc_attach()
2495 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_nw_ioc_attach()
2496 bfa_fsm_send_event(ioc, IOC_E_RESET); in bfa_nw_ioc_attach()
2501 bfa_nw_ioc_detach(struct bfa_ioc *ioc) in bfa_nw_ioc_detach() argument
2503 bfa_fsm_send_event(ioc, IOC_E_DETACH); in bfa_nw_ioc_detach()
2506 INIT_LIST_HEAD(&ioc->notify_q); in bfa_nw_ioc_detach()
2515 bfa_nw_ioc_pci_init(struct bfa_ioc *ioc, struct bfa_pcidev *pcidev, in bfa_nw_ioc_pci_init() argument
2518 ioc->clscode = clscode; in bfa_nw_ioc_pci_init()
2519 ioc->pcidev = *pcidev; in bfa_nw_ioc_pci_init()
2524 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_FC; in bfa_nw_ioc_pci_init()
2525 ioc->asic_mode = BFI_ASIC_MODE_FC; in bfa_nw_ioc_pci_init()
2529 ioc->asic_gen = BFI_ASIC_GEN_CT; in bfa_nw_ioc_pci_init()
2530 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_nw_ioc_pci_init()
2531 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_nw_ioc_pci_init()
2532 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_nw_ioc_pci_init()
2533 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_nw_ioc_pci_init()
2537 ioc->asic_gen = BFI_ASIC_GEN_CT2; in bfa_nw_ioc_pci_init()
2540 ioc->asic_mode = BFI_ASIC_MODE_FC16; in bfa_nw_ioc_pci_init()
2541 ioc->fcmode = true; in bfa_nw_ioc_pci_init()
2542 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA; in bfa_nw_ioc_pci_init()
2543 ioc->ad_cap_bm = BFA_CM_HBA; in bfa_nw_ioc_pci_init()
2545 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_nw_ioc_pci_init()
2546 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_nw_ioc_pci_init()
2548 ioc->port_mode = in bfa_nw_ioc_pci_init()
2549 ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_nw_ioc_pci_init()
2550 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_nw_ioc_pci_init()
2552 ioc->port_mode = in bfa_nw_ioc_pci_init()
2553 ioc->port_mode_cfg = BFA_MODE_NIC; in bfa_nw_ioc_pci_init()
2554 ioc->ad_cap_bm = BFA_CM_NIC; in bfa_nw_ioc_pci_init()
2566 if (ioc->asic_gen == BFI_ASIC_GEN_CT) in bfa_nw_ioc_pci_init()
2567 bfa_nw_ioc_set_ct_hwif(ioc); in bfa_nw_ioc_pci_init()
2569 WARN_ON(ioc->asic_gen != BFI_ASIC_GEN_CT2); in bfa_nw_ioc_pci_init()
2570 bfa_nw_ioc_set_ct2_hwif(ioc); in bfa_nw_ioc_pci_init()
2571 bfa_nw_ioc_ct2_poweron(ioc); in bfa_nw_ioc_pci_init()
2574 bfa_ioc_map_port(ioc); in bfa_nw_ioc_pci_init()
2575 bfa_ioc_reg_init(ioc); in bfa_nw_ioc_pci_init()
2585 bfa_nw_ioc_mem_claim(struct bfa_ioc *ioc, u8 *dm_kva, u64 dm_pa) in bfa_nw_ioc_mem_claim() argument
2590 ioc->attr_dma.kva = dm_kva; in bfa_nw_ioc_mem_claim()
2591 ioc->attr_dma.pa = dm_pa; in bfa_nw_ioc_mem_claim()
2592 ioc->attr = (struct bfi_ioc_attr *) dm_kva; in bfa_nw_ioc_mem_claim()
2603 bfa_nw_ioc_enable(struct bfa_ioc *ioc) in bfa_nw_ioc_enable() argument
2605 bfa_ioc_stats(ioc, ioc_enables); in bfa_nw_ioc_enable()
2606 ioc->dbg_fwsave_once = true; in bfa_nw_ioc_enable()
2608 bfa_fsm_send_event(ioc, IOC_E_ENABLE); in bfa_nw_ioc_enable()
2612 bfa_nw_ioc_disable(struct bfa_ioc *ioc) in bfa_nw_ioc_disable() argument
2614 bfa_ioc_stats(ioc, ioc_disables); in bfa_nw_ioc_disable()
2615 bfa_fsm_send_event(ioc, IOC_E_DISABLE); in bfa_nw_ioc_disable()
2620 bfa_nw_ioc_debug_memclaim(struct bfa_ioc *ioc, void *dbg_fwsave) in bfa_nw_ioc_debug_memclaim() argument
2622 ioc->dbg_fwsave = dbg_fwsave; in bfa_nw_ioc_debug_memclaim()
2623 ioc->dbg_fwsave_len = ioc->iocpf.auto_recover ? BNA_DBG_FWTRC_LEN : 0; in bfa_nw_ioc_debug_memclaim()
2627 bfa_ioc_smem_pgnum(struct bfa_ioc *ioc, u32 fmaddr) in bfa_ioc_smem_pgnum() argument
2629 return PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, fmaddr); in bfa_ioc_smem_pgnum()
2634 bfa_nw_ioc_mbox_regisr(struct bfa_ioc *ioc, enum bfi_mclass mc, in bfa_nw_ioc_mbox_regisr() argument
2637 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_nw_ioc_mbox_regisr()
2652 bfa_nw_ioc_mbox_queue(struct bfa_ioc *ioc, struct bfa_mbox_cmd *cmd, in bfa_nw_ioc_mbox_queue() argument
2655 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_nw_ioc_mbox_queue()
2672 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_nw_ioc_mbox_queue()
2681 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_nw_ioc_mbox_queue()
2688 bfa_nw_ioc_mbox_isr(struct bfa_ioc *ioc) in bfa_nw_ioc_mbox_isr() argument
2690 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_nw_ioc_mbox_isr()
2694 if (bfa_ioc_msgget(ioc, &m)) { in bfa_nw_ioc_mbox_isr()
2700 bfa_ioc_isr(ioc, &m); in bfa_nw_ioc_mbox_isr()
2710 bfa_ioc_lpu_read_stat(ioc); in bfa_nw_ioc_mbox_isr()
2715 bfa_ioc_mbox_poll(ioc); in bfa_nw_ioc_mbox_isr()
2719 bfa_nw_ioc_error_isr(struct bfa_ioc *ioc) in bfa_nw_ioc_error_isr() argument
2721 bfa_ioc_stats(ioc, ioc_hbfails); in bfa_nw_ioc_error_isr()
2722 bfa_ioc_stats_hb_count(ioc, ioc->hb_count); in bfa_nw_ioc_error_isr()
2723 bfa_fsm_send_event(ioc, IOC_E_HWERROR); in bfa_nw_ioc_error_isr()
2728 bfa_nw_ioc_is_disabled(struct bfa_ioc *ioc) in bfa_nw_ioc_is_disabled() argument
2730 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabling) || in bfa_nw_ioc_is_disabled()
2731 bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabled); in bfa_nw_ioc_is_disabled()
2736 bfa_nw_ioc_is_operational(struct bfa_ioc *ioc) in bfa_nw_ioc_is_operational() argument
2738 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_op); in bfa_nw_ioc_is_operational()
2745 bfa_nw_ioc_notify_register(struct bfa_ioc *ioc, in bfa_nw_ioc_notify_register() argument
2748 list_add_tail(¬ify->qe, &ioc->notify_q); in bfa_nw_ioc_notify_register()
2753 bfa_ioc_get_adapter_attr(struct bfa_ioc *ioc, in bfa_ioc_get_adapter_attr() argument
2758 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_attr()
2760 bfa_ioc_get_adapter_serial_num(ioc, ad_attr->serial_num); in bfa_ioc_get_adapter_attr()
2761 bfa_ioc_get_adapter_fw_ver(ioc, ad_attr->fw_ver); in bfa_ioc_get_adapter_attr()
2762 bfa_ioc_get_adapter_optrom_ver(ioc, ad_attr->optrom_ver); in bfa_ioc_get_adapter_attr()
2763 bfa_ioc_get_adapter_manufacturer(ioc, ad_attr->manufacturer); in bfa_ioc_get_adapter_attr()
2767 ad_attr->nports = bfa_ioc_get_nports(ioc); in bfa_ioc_get_adapter_attr()
2768 ad_attr->max_speed = bfa_ioc_speed_sup(ioc); in bfa_ioc_get_adapter_attr()
2770 bfa_ioc_get_adapter_model(ioc, ad_attr->model); in bfa_ioc_get_adapter_attr()
2772 bfa_ioc_get_adapter_model(ioc, ad_attr->model_descr); in bfa_ioc_get_adapter_attr()
2782 ad_attr->pwwn = bfa_ioc_get_pwwn(ioc); in bfa_ioc_get_adapter_attr()
2783 bfa_nw_ioc_get_mac(ioc, ad_attr->mac); in bfa_ioc_get_adapter_attr()
2790 bfa_ioc_get_pci_chip_rev(ioc, ad_attr->hw_ver); in bfa_ioc_get_adapter_attr()
2794 bfa_ioc_get_type(struct bfa_ioc *ioc) in bfa_ioc_get_type() argument
2796 if (ioc->clscode == BFI_PCIFN_CLASS_ETH) in bfa_ioc_get_type()
2799 BUG_ON(!(ioc->clscode == BFI_PCIFN_CLASS_FC)); in bfa_ioc_get_type()
2801 return (ioc->attr->port_mode == BFI_PORT_MODE_FC) in bfa_ioc_get_type()
2806 bfa_ioc_get_adapter_serial_num(struct bfa_ioc *ioc, char *serial_num) in bfa_ioc_get_adapter_serial_num() argument
2809 (void *)ioc->attr->brcd_serialnum, in bfa_ioc_get_adapter_serial_num()
2814 bfa_ioc_get_adapter_fw_ver(struct bfa_ioc *ioc, char *fw_ver) in bfa_ioc_get_adapter_fw_ver() argument
2816 memcpy(fw_ver, ioc->attr->fw_version, BFA_VERSION_LEN); in bfa_ioc_get_adapter_fw_ver()
2820 bfa_ioc_get_pci_chip_rev(struct bfa_ioc *ioc, char *chip_rev) in bfa_ioc_get_pci_chip_rev() argument
2830 chip_rev[4] = ioc->attr->asic_rev; in bfa_ioc_get_pci_chip_rev()
2835 bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc *ioc, char *optrom_ver) in bfa_ioc_get_adapter_optrom_ver() argument
2837 memcpy(optrom_ver, ioc->attr->optrom_version, in bfa_ioc_get_adapter_optrom_ver()
2842 bfa_ioc_get_adapter_manufacturer(struct bfa_ioc *ioc, char *manufacturer) in bfa_ioc_get_adapter_manufacturer() argument
2848 bfa_ioc_get_adapter_model(struct bfa_ioc *ioc, char *model) in bfa_ioc_get_adapter_model() argument
2855 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_model()
2862 bfa_ioc_get_state(struct bfa_ioc *ioc) in bfa_ioc_get_state() argument
2865 enum bfa_ioc_state ioc_st = bfa_sm_to_state(ioc_sm_table, ioc->fsm); in bfa_ioc_get_state()
2870 iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); in bfa_ioc_get_state()
2901 bfa_nw_ioc_get_attr(struct bfa_ioc *ioc, struct bfa_ioc_attr *ioc_attr) in bfa_nw_ioc_get_attr() argument
2905 ioc_attr->state = bfa_ioc_get_state(ioc); in bfa_nw_ioc_get_attr()
2906 ioc_attr->port_id = bfa_ioc_portid(ioc); in bfa_nw_ioc_get_attr()
2907 ioc_attr->port_mode = ioc->port_mode; in bfa_nw_ioc_get_attr()
2909 ioc_attr->port_mode_cfg = ioc->port_mode_cfg; in bfa_nw_ioc_get_attr()
2910 ioc_attr->cap_bm = ioc->ad_cap_bm; in bfa_nw_ioc_get_attr()
2912 ioc_attr->ioc_type = bfa_ioc_get_type(ioc); in bfa_nw_ioc_get_attr()
2914 bfa_ioc_get_adapter_attr(ioc, &ioc_attr->adapter_attr); in bfa_nw_ioc_get_attr()
2916 ioc_attr->pci_attr.device_id = bfa_ioc_devid(ioc); in bfa_nw_ioc_get_attr()
2917 ioc_attr->pci_attr.pcifn = bfa_ioc_pcifn(ioc); in bfa_nw_ioc_get_attr()
2918 ioc_attr->def_fn = bfa_ioc_is_default(ioc); in bfa_nw_ioc_get_attr()
2919 bfa_ioc_get_pci_chip_rev(ioc, ioc_attr->pci_attr.chip_rev); in bfa_nw_ioc_get_attr()
2924 bfa_ioc_get_pwwn(struct bfa_ioc *ioc) in bfa_ioc_get_pwwn() argument
2926 return ioc->attr->pwwn; in bfa_ioc_get_pwwn()
2930 bfa_nw_ioc_get_mac(struct bfa_ioc *ioc, u8 *mac) in bfa_nw_ioc_get_mac() argument
2932 ether_addr_copy(mac, ioc->attr->mac); in bfa_nw_ioc_get_mac()
2937 bfa_ioc_recover(struct bfa_ioc *ioc) in bfa_ioc_recover() argument
2940 bfa_ioc_stats(ioc, ioc_hbfails); in bfa_ioc_recover()
2941 bfa_ioc_stats_hb_count(ioc, ioc->hb_count); in bfa_ioc_recover()
2942 bfa_fsm_send_event(ioc, IOC_E_HBFAIL); in bfa_ioc_recover()
2948 bfa_iocpf_enable(struct bfa_ioc *ioc) in bfa_iocpf_enable() argument
2950 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_ENABLE); in bfa_iocpf_enable()
2954 bfa_iocpf_disable(struct bfa_ioc *ioc) in bfa_iocpf_disable() argument
2956 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_DISABLE); in bfa_iocpf_disable()
2960 bfa_iocpf_fail(struct bfa_ioc *ioc) in bfa_iocpf_fail() argument
2962 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FAIL); in bfa_iocpf_fail()
2966 bfa_iocpf_initfail(struct bfa_ioc *ioc) in bfa_iocpf_initfail() argument
2968 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_INITFAIL); in bfa_iocpf_initfail()
2972 bfa_iocpf_getattrfail(struct bfa_ioc *ioc) in bfa_iocpf_getattrfail() argument
2974 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_GETATTRFAIL); in bfa_iocpf_getattrfail()
2978 bfa_iocpf_stop(struct bfa_ioc *ioc) in bfa_iocpf_stop() argument
2980 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_iocpf_stop()
2984 bfa_nw_iocpf_timeout(struct bfa_ioc *ioc) in bfa_nw_iocpf_timeout() argument
2988 iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); in bfa_nw_iocpf_timeout()
2991 bfa_ioc_poll_fwinit(ioc); in bfa_nw_iocpf_timeout()
2993 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT); in bfa_nw_iocpf_timeout()
2997 bfa_nw_iocpf_sem_timeout(struct bfa_ioc *ioc) in bfa_nw_iocpf_sem_timeout() argument
2999 bfa_ioc_hw_sem_get(ioc); in bfa_nw_iocpf_sem_timeout()
3003 bfa_ioc_poll_fwinit(struct bfa_ioc *ioc) in bfa_ioc_poll_fwinit() argument
3005 u32 fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_poll_fwinit()
3008 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_poll_fwinit()
3012 if (ioc->iocpf.poll_time >= BFA_IOC_TOV) { in bfa_ioc_poll_fwinit()
3013 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT); in bfa_ioc_poll_fwinit()
3015 ioc->iocpf.poll_time += BFA_IOC_POLL_TOV; in bfa_ioc_poll_fwinit()
3016 mod_timer(&ioc->iocpf_timer, jiffies + in bfa_ioc_poll_fwinit()
3082 bfa_ioc_portid(flash->ioc)); in bfa_flash_write_send()
3085 bfa_nw_ioc_mbox_queue(flash->ioc, &flash->mb, NULL, NULL); in bfa_flash_write_send()
3111 bfa_ioc_portid(flash->ioc)); in bfa_flash_read_send()
3113 bfa_nw_ioc_mbox_queue(flash->ioc, &flash->mb, NULL, NULL); in bfa_flash_read_send()
3221 bfa_nw_flash_attach(struct bfa_flash *flash, struct bfa_ioc *ioc, void *dev) in bfa_nw_flash_attach() argument
3223 flash->ioc = ioc; in bfa_nw_flash_attach()
3228 bfa_nw_ioc_mbox_regisr(flash->ioc, BFI_MC_FLASH, bfa_flash_intr, flash); in bfa_nw_flash_attach()
3230 list_add_tail(&flash->ioc_notify.qe, &flash->ioc->notify_q); in bfa_nw_flash_attach()
3267 if (!bfa_nw_ioc_is_operational(flash->ioc)) in bfa_nw_flash_get_attr()
3279 bfa_ioc_portid(flash->ioc)); in bfa_nw_flash_get_attr()
3281 bfa_nw_ioc_mbox_queue(flash->ioc, &flash->mb, NULL, NULL); in bfa_nw_flash_get_attr()
3305 if (!bfa_nw_ioc_is_operational(flash->ioc)) in bfa_nw_flash_update_part()
3354 if (!bfa_nw_ioc_is_operational(flash->ioc)) in bfa_nw_flash_read_part()