Lines Matching refs:ioc
72 static void bfa_ioc_hw_sem_init(struct bfa_ioc *ioc);
73 static void bfa_ioc_hw_sem_get(struct bfa_ioc *ioc);
74 static void bfa_ioc_hw_sem_get_cancel(struct bfa_ioc *ioc);
75 static void bfa_ioc_hwinit(struct bfa_ioc *ioc, bool force);
76 static void bfa_ioc_poll_fwinit(struct bfa_ioc *ioc);
77 static void bfa_ioc_send_enable(struct bfa_ioc *ioc);
78 static void bfa_ioc_send_disable(struct bfa_ioc *ioc);
79 static void bfa_ioc_send_getattr(struct bfa_ioc *ioc);
80 static void bfa_ioc_hb_monitor(struct bfa_ioc *ioc);
81 static void bfa_ioc_hb_stop(struct bfa_ioc *ioc);
82 static void bfa_ioc_reset(struct bfa_ioc *ioc, bool force);
83 static void bfa_ioc_mbox_poll(struct bfa_ioc *ioc);
84 static void bfa_ioc_mbox_flush(struct bfa_ioc *ioc);
85 static void bfa_ioc_recover(struct bfa_ioc *ioc);
87 static void bfa_ioc_disable_comp(struct bfa_ioc *ioc);
88 static void bfa_ioc_lpu_stop(struct bfa_ioc *ioc);
89 static void bfa_nw_ioc_debug_save_ftrc(struct bfa_ioc *ioc);
90 static void bfa_ioc_fail_notify(struct bfa_ioc *ioc);
91 static void bfa_ioc_pf_enabled(struct bfa_ioc *ioc);
92 static void bfa_ioc_pf_disabled(struct bfa_ioc *ioc);
93 static void bfa_ioc_pf_failed(struct bfa_ioc *ioc);
94 static void bfa_ioc_pf_hwfailed(struct bfa_ioc *ioc);
95 static void bfa_ioc_pf_fwmismatch(struct bfa_ioc *ioc);
96 static enum bfa_status bfa_ioc_boot(struct bfa_ioc *ioc,
98 static u32 bfa_ioc_smem_pgnum(struct bfa_ioc *ioc, u32 fmaddr);
99 static void bfa_ioc_get_adapter_serial_num(struct bfa_ioc *ioc,
101 static void bfa_ioc_get_adapter_fw_ver(struct bfa_ioc *ioc,
103 static void bfa_ioc_get_pci_chip_rev(struct bfa_ioc *ioc,
105 static void bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc *ioc,
107 static void bfa_ioc_get_adapter_manufacturer(struct bfa_ioc *ioc,
109 static void bfa_ioc_get_adapter_model(struct bfa_ioc *ioc, char *model);
110 static u64 bfa_ioc_get_pwwn(struct bfa_ioc *ioc);
155 static void bfa_iocpf_enable(struct bfa_ioc *ioc);
156 static void bfa_iocpf_disable(struct bfa_ioc *ioc);
157 static void bfa_iocpf_fail(struct bfa_ioc *ioc);
158 static void bfa_iocpf_initfail(struct bfa_ioc *ioc);
159 static void bfa_iocpf_getattrfail(struct bfa_ioc *ioc);
160 static void bfa_iocpf_stop(struct bfa_ioc *ioc);
229 bfa_ioc_sm_uninit_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_uninit_entry() argument
235 bfa_ioc_sm_uninit(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_uninit() argument
239 bfa_fsm_set_state(ioc, bfa_ioc_sm_reset); in bfa_ioc_sm_uninit()
249 bfa_ioc_sm_reset_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_reset_entry() argument
251 bfa_fsm_set_state(&ioc->iocpf, bfa_iocpf_sm_reset); in bfa_ioc_sm_reset_entry()
256 bfa_ioc_sm_reset(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_reset() argument
260 bfa_fsm_set_state(ioc, bfa_ioc_sm_enabling); in bfa_ioc_sm_reset()
264 bfa_ioc_disable_comp(ioc); in bfa_ioc_sm_reset()
268 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_reset()
277 bfa_ioc_sm_enabling_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_enabling_entry() argument
279 bfa_iocpf_enable(ioc); in bfa_ioc_sm_enabling_entry()
286 bfa_ioc_sm_enabling(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_enabling() argument
290 bfa_fsm_set_state(ioc, bfa_ioc_sm_getattr); in bfa_ioc_sm_enabling()
296 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
297 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_enabling()
299 bfa_iocpf_initfail(ioc); in bfa_ioc_sm_enabling()
303 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
304 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail); in bfa_ioc_sm_enabling()
308 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_enabling()
312 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_enabling()
313 bfa_iocpf_stop(ioc); in bfa_ioc_sm_enabling()
326 bfa_ioc_sm_getattr_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_getattr_entry() argument
328 mod_timer(&ioc->ioc_timer, jiffies + in bfa_ioc_sm_getattr_entry()
330 bfa_ioc_send_getattr(ioc); in bfa_ioc_sm_getattr_entry()
335 bfa_ioc_sm_getattr(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_getattr() argument
339 del_timer(&ioc->ioc_timer); in bfa_ioc_sm_getattr()
340 bfa_fsm_set_state(ioc, bfa_ioc_sm_op); in bfa_ioc_sm_getattr()
345 del_timer(&ioc->ioc_timer); in bfa_ioc_sm_getattr()
348 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_getattr()
349 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_getattr()
351 bfa_iocpf_getattrfail(ioc); in bfa_ioc_sm_getattr()
355 del_timer(&ioc->ioc_timer); in bfa_ioc_sm_getattr()
356 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_getattr()
368 bfa_ioc_sm_op_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_op_entry() argument
370 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_OK); in bfa_ioc_sm_op_entry()
371 bfa_ioc_event_notify(ioc, BFA_IOC_E_ENABLED); in bfa_ioc_sm_op_entry()
372 bfa_ioc_hb_monitor(ioc); in bfa_ioc_sm_op_entry()
376 bfa_ioc_sm_op(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_op() argument
383 bfa_ioc_hb_stop(ioc); in bfa_ioc_sm_op()
384 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_op()
389 bfa_ioc_hb_stop(ioc); in bfa_ioc_sm_op()
392 if (ioc->iocpf.auto_recover) in bfa_ioc_sm_op()
393 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail_retry); in bfa_ioc_sm_op()
395 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_op()
397 bfa_ioc_fail_notify(ioc); in bfa_ioc_sm_op()
400 bfa_iocpf_fail(ioc); in bfa_ioc_sm_op()
409 bfa_ioc_sm_disabling_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_disabling_entry() argument
411 bfa_iocpf_disable(ioc); in bfa_ioc_sm_disabling_entry()
416 bfa_ioc_sm_disabling(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_disabling() argument
420 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabled); in bfa_ioc_sm_disabling()
429 bfa_iocpf_fail(ioc); in bfa_ioc_sm_disabling()
433 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail); in bfa_ioc_sm_disabling()
434 bfa_ioc_disable_comp(ioc); in bfa_ioc_sm_disabling()
444 bfa_ioc_sm_disabled_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_disabled_entry() argument
446 bfa_ioc_disable_comp(ioc); in bfa_ioc_sm_disabled_entry()
450 bfa_ioc_sm_disabled(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_disabled() argument
454 bfa_fsm_set_state(ioc, bfa_ioc_sm_enabling); in bfa_ioc_sm_disabled()
458 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_disabled()
462 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_disabled()
463 bfa_iocpf_stop(ioc); in bfa_ioc_sm_disabled()
472 bfa_ioc_sm_fail_retry_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_fail_retry_entry() argument
478 bfa_ioc_sm_fail_retry(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_fail_retry() argument
482 bfa_fsm_set_state(ioc, bfa_ioc_sm_getattr); in bfa_ioc_sm_fail_retry()
490 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
491 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_fail_retry()
493 bfa_iocpf_initfail(ioc); in bfa_ioc_sm_fail_retry()
497 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
498 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail); in bfa_ioc_sm_fail_retry()
505 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_fail_retry()
509 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_fail_retry()
510 bfa_iocpf_stop(ioc); in bfa_ioc_sm_fail_retry()
519 bfa_ioc_sm_fail_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_fail_entry() argument
525 bfa_ioc_sm_fail(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_fail() argument
529 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail()
533 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_fail()
537 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_fail()
538 bfa_iocpf_stop(ioc); in bfa_ioc_sm_fail()
551 bfa_ioc_sm_hwfail_entry(struct bfa_ioc *ioc) in bfa_ioc_sm_hwfail_entry() argument
557 bfa_ioc_sm_hwfail(struct bfa_ioc *ioc, enum ioc_event event) in bfa_ioc_sm_hwfail() argument
562 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_hwfail()
566 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_hwfail()
570 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_hwfail()
609 bfa_ioc_hw_sem_init(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
610 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
617 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_fwcheck() local
621 if (bfa_ioc_firmware_lock(ioc)) { in bfa_iocpf_sm_fwcheck()
622 if (bfa_ioc_sync_start(ioc)) { in bfa_iocpf_sm_fwcheck()
623 bfa_ioc_sync_join(ioc); in bfa_iocpf_sm_fwcheck()
626 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_fwcheck()
627 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_fwcheck()
628 mod_timer(&ioc->sem_timer, jiffies + in bfa_iocpf_sm_fwcheck()
632 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_fwcheck()
639 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_fwcheck()
643 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_fwcheck()
645 bfa_ioc_pf_disabled(ioc); in bfa_iocpf_sm_fwcheck()
649 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_fwcheck()
664 bfa_ioc_pf_fwmismatch(iocpf->ioc); in bfa_iocpf_sm_mismatch_entry()
667 mod_timer(&(iocpf->ioc)->iocpf_timer, jiffies + in bfa_iocpf_sm_mismatch_entry()
675 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_mismatch() local
683 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_mismatch()
685 bfa_ioc_pf_disabled(ioc); in bfa_iocpf_sm_mismatch()
689 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_mismatch()
702 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_semwait_entry()
709 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_semwait() local
713 if (bfa_ioc_sync_complete(ioc)) { in bfa_iocpf_sm_semwait()
714 bfa_ioc_sync_join(ioc); in bfa_iocpf_sm_semwait()
717 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_semwait()
718 mod_timer(&ioc->sem_timer, jiffies + in bfa_iocpf_sm_semwait()
725 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_semwait()
729 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_semwait()
742 bfa_ioc_reset(iocpf->ioc, false); in bfa_iocpf_sm_hwinit_entry()
751 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_hwinit() local
759 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_hwinit()
760 bfa_ioc_pf_failed(ioc); in bfa_iocpf_sm_hwinit()
765 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_hwinit()
766 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_hwinit()
767 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_hwinit()
779 mod_timer(&(iocpf->ioc)->iocpf_timer, jiffies + in bfa_iocpf_sm_enabling_entry()
784 iocpf->ioc->cbfn->reset_cbfn(iocpf->ioc->bfa); in bfa_iocpf_sm_enabling_entry()
785 bfa_ioc_send_enable(iocpf->ioc); in bfa_iocpf_sm_enabling_entry()
794 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_enabling() local
798 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_enabling()
799 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_enabling()
804 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_enabling()
809 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_enabling()
811 bfa_ioc_pf_failed(ioc); in bfa_iocpf_sm_enabling()
816 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_enabling()
817 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_enabling()
829 bfa_ioc_pf_enabled(iocpf->ioc); in bfa_iocpf_sm_ready_entry()
856 mod_timer(&(iocpf->ioc)->iocpf_timer, jiffies + in bfa_iocpf_sm_disabling_entry()
858 bfa_ioc_send_disable(iocpf->ioc); in bfa_iocpf_sm_disabling_entry()
865 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling() local
869 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_disabling()
874 del_timer(&ioc->iocpf_timer); in bfa_iocpf_sm_disabling()
880 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); in bfa_iocpf_sm_disabling()
895 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_disabling_sync_entry()
902 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling_sync() local
906 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_disabling_sync()
907 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_disabling_sync()
913 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_disabling_sync()
928 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_disabled_entry()
929 bfa_ioc_pf_disabled(iocpf->ioc); in bfa_iocpf_sm_disabled_entry()
935 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_disabled() local
943 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_disabled()
955 bfa_nw_ioc_debug_save_ftrc(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
956 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
963 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail_sync() local
967 bfa_ioc_notify_fail(ioc); in bfa_iocpf_sm_initfail_sync()
968 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_initfail_sync()
969 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); in bfa_iocpf_sm_initfail_sync()
970 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_initfail_sync()
976 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_initfail_sync()
980 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_initfail_sync()
985 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_initfail_sync()
986 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_initfail_sync()
1007 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail() local
1015 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_initfail()
1030 bfa_ioc_lpu_stop(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1035 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1036 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1043 struct bfa_ioc *ioc = iocpf->ioc; in bfa_iocpf_sm_fail_sync() local
1047 bfa_ioc_sync_ack(ioc); in bfa_iocpf_sm_fail_sync()
1048 bfa_ioc_notify_fail(ioc); in bfa_iocpf_sm_fail_sync()
1050 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_fail_sync()
1051 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); in bfa_iocpf_sm_fail_sync()
1052 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_fail_sync()
1055 if (bfa_ioc_sync_complete(ioc)) in bfa_iocpf_sm_fail_sync()
1058 bfa_nw_ioc_hw_sem_release(ioc); in bfa_iocpf_sm_fail_sync()
1066 bfa_ioc_pf_hwfailed(ioc); in bfa_iocpf_sm_fail_sync()
1070 bfa_ioc_hw_sem_get_cancel(ioc); in bfa_iocpf_sm_fail_sync()
1105 bfa_ioc_event_notify(struct bfa_ioc *ioc, enum bfa_ioc_event event) in bfa_ioc_event_notify() argument
1110 list_for_each(qe, &ioc->notify_q) { in bfa_ioc_event_notify()
1117 bfa_ioc_disable_comp(struct bfa_ioc *ioc) in bfa_ioc_disable_comp() argument
1119 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_disable_comp()
1120 bfa_ioc_event_notify(ioc, BFA_IOC_E_DISABLED); in bfa_ioc_disable_comp()
1153 bfa_ioc_fwver_clear(struct bfa_ioc *ioc) in bfa_ioc_fwver_clear() argument
1158 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_ioc_fwver_clear()
1160 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_fwver_clear()
1163 writel(0, ioc->ioc_regs.smem_page_start + loff); in bfa_ioc_fwver_clear()
1170 bfa_ioc_hw_sem_init(struct bfa_ioc *ioc) in bfa_ioc_hw_sem_init() argument
1176 r32 = readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1179 r32 = readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1182 fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_hw_sem_init()
1184 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1188 bfa_nw_ioc_fwver_get(ioc, &fwhdr); in bfa_ioc_hw_sem_init()
1191 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1195 bfa_ioc_fwver_clear(ioc); in bfa_ioc_hw_sem_init()
1196 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_UNINIT); in bfa_ioc_hw_sem_init()
1197 bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_UNINIT); in bfa_ioc_hw_sem_init()
1202 readl(ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_init()
1203 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_init()
1206 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_hw_sem_init()
1210 bfa_ioc_hw_sem_get(struct bfa_ioc *ioc) in bfa_ioc_hw_sem_get() argument
1218 r32 = readl(ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_get()
1220 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEM_ERROR); in bfa_ioc_hw_sem_get()
1224 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEMLOCKED); in bfa_ioc_hw_sem_get()
1228 mod_timer(&ioc->sem_timer, jiffies + in bfa_ioc_hw_sem_get()
1233 bfa_nw_ioc_hw_sem_release(struct bfa_ioc *ioc) in bfa_nw_ioc_hw_sem_release() argument
1235 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_nw_ioc_hw_sem_release()
1239 bfa_ioc_hw_sem_get_cancel(struct bfa_ioc *ioc) in bfa_ioc_hw_sem_get_cancel() argument
1241 del_timer(&ioc->sem_timer); in bfa_ioc_hw_sem_get_cancel()
1246 bfa_ioc_lmem_init(struct bfa_ioc *ioc) in bfa_ioc_lmem_init() argument
1252 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1260 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1267 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1278 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1282 bfa_ioc_lpu_start(struct bfa_ioc *ioc) in bfa_ioc_lpu_start() argument
1289 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1292 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1296 bfa_ioc_lpu_stop(struct bfa_ioc *ioc) in bfa_ioc_lpu_stop() argument
1303 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1306 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1311 bfa_nw_ioc_fwver_get(struct bfa_ioc *ioc, struct bfi_ioc_image_hdr *fwhdr) in bfa_nw_ioc_fwver_get() argument
1318 pgnum = bfa_ioc_smem_pgnum(ioc, loff); in bfa_nw_ioc_fwver_get()
1319 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_fwver_get()
1324 swab32(readl((loff) + (ioc->ioc_regs.smem_page_start))); in bfa_nw_ioc_fwver_get()
1768 bfa_nw_ioc_flash_img_get_chnk(struct bfa_ioc *ioc, u32 off, in bfa_nw_ioc_flash_img_get_chnk() argument
1771 return bfa_flash_raw_read(ioc->pcidev.pci_bar_kva, in bfa_nw_ioc_flash_img_get_chnk()
1777 bfa_ioc_flash_fwver_cmp(struct bfa_ioc *ioc, in bfa_ioc_flash_fwver_cmp() argument
1784 status = bfa_nw_ioc_flash_img_get_chnk(ioc, 0, fwimg); in bfa_ioc_flash_fwver_cmp()
1799 bfa_nw_ioc_fwver_cmp(struct bfa_ioc *ioc, struct bfi_ioc_image_hdr *fwhdr) in bfa_nw_ioc_fwver_cmp() argument
1805 bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), 0); in bfa_nw_ioc_fwver_cmp()
1818 smem_flash_cmp = bfa_ioc_flash_fwver_cmp(ioc, fwhdr); in bfa_nw_ioc_fwver_cmp()
1833 bfa_ioc_fwver_valid(struct bfa_ioc *ioc, u32 boot_env) in bfa_ioc_fwver_valid() argument
1837 bfa_nw_ioc_fwver_get(ioc, &fwhdr); in bfa_ioc_fwver_valid()
1841 return bfa_nw_ioc_fwver_cmp(ioc, &fwhdr); in bfa_ioc_fwver_valid()
1846 bfa_ioc_msgflush(struct bfa_ioc *ioc) in bfa_ioc_msgflush() argument
1850 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1852 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1856 bfa_ioc_hwinit(struct bfa_ioc *ioc, bool force) in bfa_ioc_hwinit() argument
1862 ioc_fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_hwinit()
1873 false : bfa_ioc_fwver_valid(ioc, boot_env); in bfa_ioc_hwinit()
1876 if (bfa_ioc_boot(ioc, BFI_FWBOOT_TYPE_NORMAL, boot_env) == in bfa_ioc_hwinit()
1878 bfa_ioc_poll_fwinit(ioc); in bfa_ioc_hwinit()
1888 bfa_ioc_poll_fwinit(ioc); in bfa_ioc_hwinit()
1901 bfa_ioc_msgflush(ioc); in bfa_ioc_hwinit()
1902 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_hwinit()
1909 if (bfa_ioc_boot(ioc, BFI_FWBOOT_TYPE_NORMAL, boot_env) == in bfa_ioc_hwinit()
1911 bfa_ioc_poll_fwinit(ioc); in bfa_ioc_hwinit()
1917 struct bfa_ioc *ioc = (struct bfa_ioc *) ioc_arg; in bfa_nw_ioc_timeout() local
1919 bfa_fsm_send_event(ioc, IOC_E_TIMEOUT); in bfa_nw_ioc_timeout()
1923 bfa_ioc_mbox_send(struct bfa_ioc *ioc, void *ioc_msg, int len) in bfa_ioc_mbox_send() argument
1935 ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1938 writel(0, ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1943 writel(1, ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1944 (void) readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1948 bfa_ioc_send_enable(struct bfa_ioc *ioc) in bfa_ioc_send_enable() argument
1954 bfa_ioc_portid(ioc)); in bfa_ioc_send_enable()
1955 enable_req.clscode = htons(ioc->clscode); in bfa_ioc_send_enable()
1958 bfa_ioc_mbox_send(ioc, &enable_req, sizeof(struct bfi_ioc_ctrl_req)); in bfa_ioc_send_enable()
1962 bfa_ioc_send_disable(struct bfa_ioc *ioc) in bfa_ioc_send_disable() argument
1967 bfa_ioc_portid(ioc)); in bfa_ioc_send_disable()
1968 bfa_ioc_mbox_send(ioc, &disable_req, sizeof(struct bfi_ioc_ctrl_req)); in bfa_ioc_send_disable()
1972 bfa_ioc_send_getattr(struct bfa_ioc *ioc) in bfa_ioc_send_getattr() argument
1977 bfa_ioc_portid(ioc)); in bfa_ioc_send_getattr()
1978 bfa_dma_be_addr_set(attr_req.attr_addr, ioc->attr_dma.pa); in bfa_ioc_send_getattr()
1979 bfa_ioc_mbox_send(ioc, &attr_req, sizeof(attr_req)); in bfa_ioc_send_getattr()
1985 struct bfa_ioc *ioc = cbarg; in bfa_nw_ioc_hb_check() local
1988 hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_nw_ioc_hb_check()
1989 if (ioc->hb_count == hb_count) { in bfa_nw_ioc_hb_check()
1990 bfa_ioc_recover(ioc); in bfa_nw_ioc_hb_check()
1993 ioc->hb_count = hb_count; in bfa_nw_ioc_hb_check()
1996 bfa_ioc_mbox_poll(ioc); in bfa_nw_ioc_hb_check()
1997 mod_timer(&ioc->hb_timer, jiffies + in bfa_nw_ioc_hb_check()
2002 bfa_ioc_hb_monitor(struct bfa_ioc *ioc) in bfa_ioc_hb_monitor() argument
2004 ioc->hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_ioc_hb_monitor()
2005 mod_timer(&ioc->hb_timer, jiffies + in bfa_ioc_hb_monitor()
2010 bfa_ioc_hb_stop(struct bfa_ioc *ioc) in bfa_ioc_hb_stop() argument
2012 del_timer(&ioc->hb_timer); in bfa_ioc_hb_stop()
2017 bfa_ioc_download_fw(struct bfa_ioc *ioc, u32 boot_type, in bfa_ioc_download_fw() argument
2034 status = bfa_nw_ioc_flash_img_get_chnk(ioc, in bfa_ioc_download_fw()
2041 fwimg_size = bfa_cb_image_get_size(bfa_ioc_asic_gen(ioc)); in bfa_ioc_download_fw()
2042 fwimg = bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), in bfa_ioc_download_fw()
2046 pgnum = bfa_ioc_smem_pgnum(ioc, loff); in bfa_ioc_download_fw()
2048 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
2055 status = bfa_nw_ioc_flash_img_get_chnk(ioc, in bfa_ioc_download_fw()
2064 bfa_ioc_asic_gen(ioc), in bfa_ioc_download_fw()
2073 ((ioc->ioc_regs.smem_page_start) + (loff))); in bfa_ioc_download_fw()
2084 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
2088 writel(bfa_ioc_smem_pgnum(ioc, 0), in bfa_ioc_download_fw()
2089 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
2098 asicmode = BFI_FWBOOT_DEVMODE(ioc->asic_gen, ioc->asic_mode, in bfa_ioc_download_fw()
2099 ioc->port0_mode, ioc->port1_mode); in bfa_ioc_download_fw()
2100 writel(asicmode, ((ioc->ioc_regs.smem_page_start) in bfa_ioc_download_fw()
2102 writel(boot_type, ((ioc->ioc_regs.smem_page_start) in bfa_ioc_download_fw()
2104 writel(boot_env, ((ioc->ioc_regs.smem_page_start) in bfa_ioc_download_fw()
2110 bfa_ioc_reset(struct bfa_ioc *ioc, bool force) in bfa_ioc_reset() argument
2112 bfa_ioc_hwinit(ioc, force); in bfa_ioc_reset()
2117 bfa_ioc_enable_reply(struct bfa_ioc *ioc, enum bfa_mode port_mode, in bfa_ioc_enable_reply() argument
2120 struct bfa_iocpf *iocpf = &ioc->iocpf; in bfa_ioc_enable_reply()
2122 ioc->port_mode = ioc->port_mode_cfg = port_mode; in bfa_ioc_enable_reply()
2123 ioc->ad_cap_bm = cap_bm; in bfa_ioc_enable_reply()
2129 bfa_ioc_getattr_reply(struct bfa_ioc *ioc) in bfa_ioc_getattr_reply() argument
2131 struct bfi_ioc_attr *attr = ioc->attr; in bfa_ioc_getattr_reply()
2137 bfa_fsm_send_event(ioc, IOC_E_FWRSP_GETATTR); in bfa_ioc_getattr_reply()
2142 bfa_ioc_mbox_attach(struct bfa_ioc *ioc) in bfa_ioc_mbox_attach() argument
2144 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_ioc_mbox_attach()
2150 mod->mbhdlr[mc].cbarg = ioc->bfa; in bfa_ioc_mbox_attach()
2156 bfa_ioc_mbox_poll(struct bfa_ioc *ioc) in bfa_ioc_mbox_poll() argument
2158 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_ioc_mbox_poll()
2173 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_poll()
2181 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_ioc_mbox_poll()
2196 bfa_ioc_mbox_flush(struct bfa_ioc *ioc) in bfa_ioc_mbox_flush() argument
2198 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_ioc_mbox_flush()
2214 bfa_nw_ioc_smem_read(struct bfa_ioc *ioc, void *tbuf, u32 soff, u32 sz) in bfa_nw_ioc_smem_read() argument
2220 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, soff); in bfa_nw_ioc_smem_read()
2226 if (bfa_nw_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg) == 0) in bfa_nw_ioc_smem_read()
2229 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_smem_read()
2233 r32 = swab32(readl((loff) + (ioc->ioc_regs.smem_page_start))); in bfa_nw_ioc_smem_read()
2243 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_smem_read()
2247 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0), in bfa_nw_ioc_smem_read()
2248 ioc->ioc_regs.host_page_num_fn); in bfa_nw_ioc_smem_read()
2253 readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_nw_ioc_smem_read()
2254 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_nw_ioc_smem_read()
2260 bfa_nw_ioc_debug_fwtrc(struct bfa_ioc *ioc, void *trcdata, int *trclen) in bfa_nw_ioc_debug_fwtrc() argument
2262 u32 loff = BFI_IOC_TRC_OFF + BNA_DBG_FWTRC_LEN * ioc->port_id; in bfa_nw_ioc_debug_fwtrc()
2269 status = bfa_nw_ioc_smem_read(ioc, trcdata, loff, tlen); in bfa_nw_ioc_debug_fwtrc()
2276 bfa_nw_ioc_debug_save_ftrc(struct bfa_ioc *ioc) in bfa_nw_ioc_debug_save_ftrc() argument
2280 if (ioc->dbg_fwsave_once) { in bfa_nw_ioc_debug_save_ftrc()
2281 ioc->dbg_fwsave_once = 0; in bfa_nw_ioc_debug_save_ftrc()
2282 if (ioc->dbg_fwsave_len) { in bfa_nw_ioc_debug_save_ftrc()
2283 tlen = ioc->dbg_fwsave_len; in bfa_nw_ioc_debug_save_ftrc()
2284 bfa_nw_ioc_debug_fwtrc(ioc, ioc->dbg_fwsave, &tlen); in bfa_nw_ioc_debug_save_ftrc()
2291 bfa_nw_ioc_debug_fwsave(struct bfa_ioc *ioc, void *trcdata, int *trclen) in bfa_nw_ioc_debug_fwsave() argument
2295 if (ioc->dbg_fwsave_len == 0) in bfa_nw_ioc_debug_fwsave()
2299 if (tlen > ioc->dbg_fwsave_len) in bfa_nw_ioc_debug_fwsave()
2300 tlen = ioc->dbg_fwsave_len; in bfa_nw_ioc_debug_fwsave()
2302 memcpy(trcdata, ioc->dbg_fwsave, tlen); in bfa_nw_ioc_debug_fwsave()
2308 bfa_ioc_fail_notify(struct bfa_ioc *ioc) in bfa_ioc_fail_notify() argument
2313 ioc->cbfn->hbfail_cbfn(ioc->bfa); in bfa_ioc_fail_notify()
2314 bfa_ioc_event_notify(ioc, BFA_IOC_E_FAILED); in bfa_ioc_fail_notify()
2315 bfa_nw_ioc_debug_save_ftrc(ioc); in bfa_ioc_fail_notify()
2320 bfa_ioc_pf_enabled(struct bfa_ioc *ioc) in bfa_ioc_pf_enabled() argument
2322 bfa_fsm_send_event(ioc, IOC_E_ENABLED); in bfa_ioc_pf_enabled()
2326 bfa_ioc_pf_disabled(struct bfa_ioc *ioc) in bfa_ioc_pf_disabled() argument
2328 bfa_fsm_send_event(ioc, IOC_E_DISABLED); in bfa_ioc_pf_disabled()
2332 bfa_ioc_pf_failed(struct bfa_ioc *ioc) in bfa_ioc_pf_failed() argument
2334 bfa_fsm_send_event(ioc, IOC_E_PFFAILED); in bfa_ioc_pf_failed()
2338 bfa_ioc_pf_hwfailed(struct bfa_ioc *ioc) in bfa_ioc_pf_hwfailed() argument
2340 bfa_fsm_send_event(ioc, IOC_E_HWFAILED); in bfa_ioc_pf_hwfailed()
2344 bfa_ioc_pf_fwmismatch(struct bfa_ioc *ioc) in bfa_ioc_pf_fwmismatch() argument
2349 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_pf_fwmismatch()
2354 bfa_ioc_pll_init(struct bfa_ioc *ioc) in bfa_ioc_pll_init() argument
2359 bfa_nw_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2361 bfa_ioc_pll_init_asic(ioc); in bfa_ioc_pll_init()
2363 ioc->pllinit = true; in bfa_ioc_pll_init()
2366 bfa_ioc_lmem_init(ioc); in bfa_ioc_pll_init()
2371 bfa_nw_ioc_sem_release(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2380 bfa_ioc_boot(struct bfa_ioc *ioc, enum bfi_fwboot_type boot_type, in bfa_ioc_boot() argument
2385 bfa_ioc_stats(ioc, ioc_boots); in bfa_ioc_boot()
2387 if (bfa_ioc_pll_init(ioc) != BFA_STATUS_OK) in bfa_ioc_boot()
2392 bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), 0); in bfa_ioc_boot()
2396 if (bfa_ioc_flash_fwver_cmp(ioc, drv_fwhdr) == in bfa_ioc_boot()
2405 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_MEMTEST); in bfa_ioc_boot()
2406 bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_MEMTEST); in bfa_ioc_boot()
2408 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_INITING); in bfa_ioc_boot()
2409 bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_INITING); in bfa_ioc_boot()
2412 bfa_ioc_msgflush(ioc); in bfa_ioc_boot()
2413 status = bfa_ioc_download_fw(ioc, boot_type, boot_env); in bfa_ioc_boot()
2415 bfa_ioc_lpu_start(ioc); in bfa_ioc_boot()
2417 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT); in bfa_ioc_boot()
2430 bfa_ioc_msgget(struct bfa_ioc *ioc, void *mbmsg) in bfa_ioc_msgget() argument
2436 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2445 r32 = readl(ioc->ioc_regs.lpu_mbox + in bfa_ioc_msgget()
2453 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2454 readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2460 bfa_ioc_isr(struct bfa_ioc *ioc, struct bfi_mbmsg *m) in bfa_ioc_isr() argument
2463 struct bfa_iocpf *iocpf = &ioc->iocpf; in bfa_ioc_isr()
2467 bfa_ioc_stats(ioc, ioc_isrs); in bfa_ioc_isr()
2474 bfa_ioc_enable_reply(ioc, in bfa_ioc_isr()
2484 bfa_ioc_getattr_reply(ioc); in bfa_ioc_isr()
2499 bfa_nw_ioc_attach(struct bfa_ioc *ioc, void *bfa, struct bfa_ioc_cbfn *cbfn) in bfa_nw_ioc_attach() argument
2501 ioc->bfa = bfa; in bfa_nw_ioc_attach()
2502 ioc->cbfn = cbfn; in bfa_nw_ioc_attach()
2503 ioc->fcmode = false; in bfa_nw_ioc_attach()
2504 ioc->pllinit = false; in bfa_nw_ioc_attach()
2505 ioc->dbg_fwsave_once = true; in bfa_nw_ioc_attach()
2506 ioc->iocpf.ioc = ioc; in bfa_nw_ioc_attach()
2508 bfa_ioc_mbox_attach(ioc); in bfa_nw_ioc_attach()
2509 INIT_LIST_HEAD(&ioc->notify_q); in bfa_nw_ioc_attach()
2511 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_nw_ioc_attach()
2512 bfa_fsm_send_event(ioc, IOC_E_RESET); in bfa_nw_ioc_attach()
2517 bfa_nw_ioc_detach(struct bfa_ioc *ioc) in bfa_nw_ioc_detach() argument
2519 bfa_fsm_send_event(ioc, IOC_E_DETACH); in bfa_nw_ioc_detach()
2522 INIT_LIST_HEAD(&ioc->notify_q); in bfa_nw_ioc_detach()
2531 bfa_nw_ioc_pci_init(struct bfa_ioc *ioc, struct bfa_pcidev *pcidev, in bfa_nw_ioc_pci_init() argument
2534 ioc->clscode = clscode; in bfa_nw_ioc_pci_init()
2535 ioc->pcidev = *pcidev; in bfa_nw_ioc_pci_init()
2540 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_FC; in bfa_nw_ioc_pci_init()
2541 ioc->asic_mode = BFI_ASIC_MODE_FC; in bfa_nw_ioc_pci_init()
2545 ioc->asic_gen = BFI_ASIC_GEN_CT; in bfa_nw_ioc_pci_init()
2546 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_nw_ioc_pci_init()
2547 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_nw_ioc_pci_init()
2548 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_nw_ioc_pci_init()
2549 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_nw_ioc_pci_init()
2553 ioc->asic_gen = BFI_ASIC_GEN_CT2; in bfa_nw_ioc_pci_init()
2556 ioc->asic_mode = BFI_ASIC_MODE_FC16; in bfa_nw_ioc_pci_init()
2557 ioc->fcmode = true; in bfa_nw_ioc_pci_init()
2558 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA; in bfa_nw_ioc_pci_init()
2559 ioc->ad_cap_bm = BFA_CM_HBA; in bfa_nw_ioc_pci_init()
2561 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_nw_ioc_pci_init()
2562 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_nw_ioc_pci_init()
2564 ioc->port_mode = in bfa_nw_ioc_pci_init()
2565 ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_nw_ioc_pci_init()
2566 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_nw_ioc_pci_init()
2568 ioc->port_mode = in bfa_nw_ioc_pci_init()
2569 ioc->port_mode_cfg = BFA_MODE_NIC; in bfa_nw_ioc_pci_init()
2570 ioc->ad_cap_bm = BFA_CM_NIC; in bfa_nw_ioc_pci_init()
2582 if (ioc->asic_gen == BFI_ASIC_GEN_CT) in bfa_nw_ioc_pci_init()
2583 bfa_nw_ioc_set_ct_hwif(ioc); in bfa_nw_ioc_pci_init()
2585 WARN_ON(ioc->asic_gen != BFI_ASIC_GEN_CT2); in bfa_nw_ioc_pci_init()
2586 bfa_nw_ioc_set_ct2_hwif(ioc); in bfa_nw_ioc_pci_init()
2587 bfa_nw_ioc_ct2_poweron(ioc); in bfa_nw_ioc_pci_init()
2590 bfa_ioc_map_port(ioc); in bfa_nw_ioc_pci_init()
2591 bfa_ioc_reg_init(ioc); in bfa_nw_ioc_pci_init()
2601 bfa_nw_ioc_mem_claim(struct bfa_ioc *ioc, u8 *dm_kva, u64 dm_pa) in bfa_nw_ioc_mem_claim() argument
2606 ioc->attr_dma.kva = dm_kva; in bfa_nw_ioc_mem_claim()
2607 ioc->attr_dma.pa = dm_pa; in bfa_nw_ioc_mem_claim()
2608 ioc->attr = (struct bfi_ioc_attr *) dm_kva; in bfa_nw_ioc_mem_claim()
2619 bfa_nw_ioc_enable(struct bfa_ioc *ioc) in bfa_nw_ioc_enable() argument
2621 bfa_ioc_stats(ioc, ioc_enables); in bfa_nw_ioc_enable()
2622 ioc->dbg_fwsave_once = true; in bfa_nw_ioc_enable()
2624 bfa_fsm_send_event(ioc, IOC_E_ENABLE); in bfa_nw_ioc_enable()
2628 bfa_nw_ioc_disable(struct bfa_ioc *ioc) in bfa_nw_ioc_disable() argument
2630 bfa_ioc_stats(ioc, ioc_disables); in bfa_nw_ioc_disable()
2631 bfa_fsm_send_event(ioc, IOC_E_DISABLE); in bfa_nw_ioc_disable()
2636 bfa_nw_ioc_debug_memclaim(struct bfa_ioc *ioc, void *dbg_fwsave) in bfa_nw_ioc_debug_memclaim() argument
2638 ioc->dbg_fwsave = dbg_fwsave; in bfa_nw_ioc_debug_memclaim()
2639 ioc->dbg_fwsave_len = ioc->iocpf.auto_recover ? BNA_DBG_FWTRC_LEN : 0; in bfa_nw_ioc_debug_memclaim()
2643 bfa_ioc_smem_pgnum(struct bfa_ioc *ioc, u32 fmaddr) in bfa_ioc_smem_pgnum() argument
2645 return PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, fmaddr); in bfa_ioc_smem_pgnum()
2650 bfa_nw_ioc_mbox_regisr(struct bfa_ioc *ioc, enum bfi_mclass mc, in bfa_nw_ioc_mbox_regisr() argument
2653 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_nw_ioc_mbox_regisr()
2668 bfa_nw_ioc_mbox_queue(struct bfa_ioc *ioc, struct bfa_mbox_cmd *cmd, in bfa_nw_ioc_mbox_queue() argument
2671 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_nw_ioc_mbox_queue()
2688 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_nw_ioc_mbox_queue()
2697 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_nw_ioc_mbox_queue()
2704 bfa_nw_ioc_mbox_isr(struct bfa_ioc *ioc) in bfa_nw_ioc_mbox_isr() argument
2706 struct bfa_ioc_mbox_mod *mod = &ioc->mbox_mod; in bfa_nw_ioc_mbox_isr()
2710 if (bfa_ioc_msgget(ioc, &m)) { in bfa_nw_ioc_mbox_isr()
2716 bfa_ioc_isr(ioc, &m); in bfa_nw_ioc_mbox_isr()
2726 bfa_ioc_lpu_read_stat(ioc); in bfa_nw_ioc_mbox_isr()
2731 bfa_ioc_mbox_poll(ioc); in bfa_nw_ioc_mbox_isr()
2735 bfa_nw_ioc_error_isr(struct bfa_ioc *ioc) in bfa_nw_ioc_error_isr() argument
2737 bfa_ioc_stats(ioc, ioc_hbfails); in bfa_nw_ioc_error_isr()
2738 bfa_ioc_stats_hb_count(ioc, ioc->hb_count); in bfa_nw_ioc_error_isr()
2739 bfa_fsm_send_event(ioc, IOC_E_HWERROR); in bfa_nw_ioc_error_isr()
2744 bfa_nw_ioc_is_disabled(struct bfa_ioc *ioc) in bfa_nw_ioc_is_disabled() argument
2746 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabling) || in bfa_nw_ioc_is_disabled()
2747 bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabled); in bfa_nw_ioc_is_disabled()
2752 bfa_nw_ioc_is_operational(struct bfa_ioc *ioc) in bfa_nw_ioc_is_operational() argument
2754 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_op); in bfa_nw_ioc_is_operational()
2761 bfa_nw_ioc_notify_register(struct bfa_ioc *ioc, in bfa_nw_ioc_notify_register() argument
2764 list_add_tail(¬ify->qe, &ioc->notify_q); in bfa_nw_ioc_notify_register()
2769 bfa_ioc_get_adapter_attr(struct bfa_ioc *ioc, in bfa_ioc_get_adapter_attr() argument
2774 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_attr()
2776 bfa_ioc_get_adapter_serial_num(ioc, ad_attr->serial_num); in bfa_ioc_get_adapter_attr()
2777 bfa_ioc_get_adapter_fw_ver(ioc, ad_attr->fw_ver); in bfa_ioc_get_adapter_attr()
2778 bfa_ioc_get_adapter_optrom_ver(ioc, ad_attr->optrom_ver); in bfa_ioc_get_adapter_attr()
2779 bfa_ioc_get_adapter_manufacturer(ioc, ad_attr->manufacturer); in bfa_ioc_get_adapter_attr()
2783 ad_attr->nports = bfa_ioc_get_nports(ioc); in bfa_ioc_get_adapter_attr()
2784 ad_attr->max_speed = bfa_ioc_speed_sup(ioc); in bfa_ioc_get_adapter_attr()
2786 bfa_ioc_get_adapter_model(ioc, ad_attr->model); in bfa_ioc_get_adapter_attr()
2788 bfa_ioc_get_adapter_model(ioc, ad_attr->model_descr); in bfa_ioc_get_adapter_attr()
2798 ad_attr->pwwn = bfa_ioc_get_pwwn(ioc); in bfa_ioc_get_adapter_attr()
2799 ad_attr->mac = bfa_nw_ioc_get_mac(ioc); in bfa_ioc_get_adapter_attr()
2806 bfa_ioc_get_pci_chip_rev(ioc, ad_attr->hw_ver); in bfa_ioc_get_adapter_attr()
2810 bfa_ioc_get_type(struct bfa_ioc *ioc) in bfa_ioc_get_type() argument
2812 if (ioc->clscode == BFI_PCIFN_CLASS_ETH) in bfa_ioc_get_type()
2815 BUG_ON(!(ioc->clscode == BFI_PCIFN_CLASS_FC)); in bfa_ioc_get_type()
2817 return (ioc->attr->port_mode == BFI_PORT_MODE_FC) in bfa_ioc_get_type()
2822 bfa_ioc_get_adapter_serial_num(struct bfa_ioc *ioc, char *serial_num) in bfa_ioc_get_adapter_serial_num() argument
2825 (void *)ioc->attr->brcd_serialnum, in bfa_ioc_get_adapter_serial_num()
2830 bfa_ioc_get_adapter_fw_ver(struct bfa_ioc *ioc, char *fw_ver) in bfa_ioc_get_adapter_fw_ver() argument
2832 memcpy(fw_ver, ioc->attr->fw_version, BFA_VERSION_LEN); in bfa_ioc_get_adapter_fw_ver()
2836 bfa_ioc_get_pci_chip_rev(struct bfa_ioc *ioc, char *chip_rev) in bfa_ioc_get_pci_chip_rev() argument
2846 chip_rev[4] = ioc->attr->asic_rev; in bfa_ioc_get_pci_chip_rev()
2851 bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc *ioc, char *optrom_ver) in bfa_ioc_get_adapter_optrom_ver() argument
2853 memcpy(optrom_ver, ioc->attr->optrom_version, in bfa_ioc_get_adapter_optrom_ver()
2858 bfa_ioc_get_adapter_manufacturer(struct bfa_ioc *ioc, char *manufacturer) in bfa_ioc_get_adapter_manufacturer() argument
2864 bfa_ioc_get_adapter_model(struct bfa_ioc *ioc, char *model) in bfa_ioc_get_adapter_model() argument
2871 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_model()
2878 bfa_ioc_get_state(struct bfa_ioc *ioc) in bfa_ioc_get_state() argument
2881 enum bfa_ioc_state ioc_st = bfa_sm_to_state(ioc_sm_table, ioc->fsm); in bfa_ioc_get_state()
2886 iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); in bfa_ioc_get_state()
2917 bfa_nw_ioc_get_attr(struct bfa_ioc *ioc, struct bfa_ioc_attr *ioc_attr) in bfa_nw_ioc_get_attr() argument
2921 ioc_attr->state = bfa_ioc_get_state(ioc); in bfa_nw_ioc_get_attr()
2922 ioc_attr->port_id = bfa_ioc_portid(ioc); in bfa_nw_ioc_get_attr()
2923 ioc_attr->port_mode = ioc->port_mode; in bfa_nw_ioc_get_attr()
2925 ioc_attr->port_mode_cfg = ioc->port_mode_cfg; in bfa_nw_ioc_get_attr()
2926 ioc_attr->cap_bm = ioc->ad_cap_bm; in bfa_nw_ioc_get_attr()
2928 ioc_attr->ioc_type = bfa_ioc_get_type(ioc); in bfa_nw_ioc_get_attr()
2930 bfa_ioc_get_adapter_attr(ioc, &ioc_attr->adapter_attr); in bfa_nw_ioc_get_attr()
2932 ioc_attr->pci_attr.device_id = bfa_ioc_devid(ioc); in bfa_nw_ioc_get_attr()
2933 ioc_attr->pci_attr.pcifn = bfa_ioc_pcifn(ioc); in bfa_nw_ioc_get_attr()
2934 ioc_attr->def_fn = bfa_ioc_is_default(ioc); in bfa_nw_ioc_get_attr()
2935 bfa_ioc_get_pci_chip_rev(ioc, ioc_attr->pci_attr.chip_rev); in bfa_nw_ioc_get_attr()
2940 bfa_ioc_get_pwwn(struct bfa_ioc *ioc) in bfa_ioc_get_pwwn() argument
2942 return ioc->attr->pwwn; in bfa_ioc_get_pwwn()
2946 bfa_nw_ioc_get_mac(struct bfa_ioc *ioc) in bfa_nw_ioc_get_mac() argument
2948 return ioc->attr->mac; in bfa_nw_ioc_get_mac()
2953 bfa_ioc_recover(struct bfa_ioc *ioc) in bfa_ioc_recover() argument
2956 bfa_ioc_stats(ioc, ioc_hbfails); in bfa_ioc_recover()
2957 bfa_ioc_stats_hb_count(ioc, ioc->hb_count); in bfa_ioc_recover()
2958 bfa_fsm_send_event(ioc, IOC_E_HBFAIL); in bfa_ioc_recover()
2964 bfa_iocpf_enable(struct bfa_ioc *ioc) in bfa_iocpf_enable() argument
2966 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_ENABLE); in bfa_iocpf_enable()
2970 bfa_iocpf_disable(struct bfa_ioc *ioc) in bfa_iocpf_disable() argument
2972 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_DISABLE); in bfa_iocpf_disable()
2976 bfa_iocpf_fail(struct bfa_ioc *ioc) in bfa_iocpf_fail() argument
2978 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FAIL); in bfa_iocpf_fail()
2982 bfa_iocpf_initfail(struct bfa_ioc *ioc) in bfa_iocpf_initfail() argument
2984 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_INITFAIL); in bfa_iocpf_initfail()
2988 bfa_iocpf_getattrfail(struct bfa_ioc *ioc) in bfa_iocpf_getattrfail() argument
2990 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_GETATTRFAIL); in bfa_iocpf_getattrfail()
2994 bfa_iocpf_stop(struct bfa_ioc *ioc) in bfa_iocpf_stop() argument
2996 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_iocpf_stop()
3002 struct bfa_ioc *ioc = (struct bfa_ioc *) ioc_arg; in bfa_nw_iocpf_timeout() local
3005 iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); in bfa_nw_iocpf_timeout()
3008 bfa_ioc_poll_fwinit(ioc); in bfa_nw_iocpf_timeout()
3010 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT); in bfa_nw_iocpf_timeout()
3016 struct bfa_ioc *ioc = (struct bfa_ioc *) ioc_arg; in bfa_nw_iocpf_sem_timeout() local
3018 bfa_ioc_hw_sem_get(ioc); in bfa_nw_iocpf_sem_timeout()
3022 bfa_ioc_poll_fwinit(struct bfa_ioc *ioc) in bfa_ioc_poll_fwinit() argument
3024 u32 fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_poll_fwinit()
3027 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_poll_fwinit()
3031 if (ioc->iocpf.poll_time >= BFA_IOC_TOV) { in bfa_ioc_poll_fwinit()
3032 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT); in bfa_ioc_poll_fwinit()
3034 ioc->iocpf.poll_time += BFA_IOC_POLL_TOV; in bfa_ioc_poll_fwinit()
3035 mod_timer(&ioc->iocpf_timer, jiffies + in bfa_ioc_poll_fwinit()
3101 bfa_ioc_portid(flash->ioc)); in bfa_flash_write_send()
3104 bfa_nw_ioc_mbox_queue(flash->ioc, &flash->mb, NULL, NULL); in bfa_flash_write_send()
3130 bfa_ioc_portid(flash->ioc)); in bfa_flash_read_send()
3132 bfa_nw_ioc_mbox_queue(flash->ioc, &flash->mb, NULL, NULL); in bfa_flash_read_send()
3240 bfa_nw_flash_attach(struct bfa_flash *flash, struct bfa_ioc *ioc, void *dev) in bfa_nw_flash_attach() argument
3242 flash->ioc = ioc; in bfa_nw_flash_attach()
3247 bfa_nw_ioc_mbox_regisr(flash->ioc, BFI_MC_FLASH, bfa_flash_intr, flash); in bfa_nw_flash_attach()
3250 list_add_tail(&flash->ioc_notify.qe, &flash->ioc->notify_q); in bfa_nw_flash_attach()
3287 if (!bfa_nw_ioc_is_operational(flash->ioc)) in bfa_nw_flash_get_attr()
3299 bfa_ioc_portid(flash->ioc)); in bfa_nw_flash_get_attr()
3301 bfa_nw_ioc_mbox_queue(flash->ioc, &flash->mb, NULL, NULL); in bfa_nw_flash_get_attr()
3325 if (!bfa_nw_ioc_is_operational(flash->ioc)) in bfa_nw_flash_update_part()
3374 if (!bfa_nw_ioc_is_operational(flash->ioc)) in bfa_nw_flash_read_part()