Lines Matching refs:ioc

97 static void bfa_ioc_hw_sem_get(struct bfa_ioc_s *ioc);
98 static void bfa_ioc_hwinit(struct bfa_ioc_s *ioc, bfa_boolean_t force);
99 static void bfa_ioc_timeout(void *ioc);
100 static void bfa_ioc_poll_fwinit(struct bfa_ioc_s *ioc);
101 static void bfa_ioc_send_enable(struct bfa_ioc_s *ioc);
102 static void bfa_ioc_send_disable(struct bfa_ioc_s *ioc);
103 static void bfa_ioc_send_getattr(struct bfa_ioc_s *ioc);
104 static void bfa_ioc_hb_monitor(struct bfa_ioc_s *ioc);
105 static void bfa_ioc_mbox_poll(struct bfa_ioc_s *ioc);
106 static void bfa_ioc_mbox_flush(struct bfa_ioc_s *ioc);
107 static void bfa_ioc_recover(struct bfa_ioc_s *ioc);
108 static void bfa_ioc_event_notify(struct bfa_ioc_s *ioc ,
110 static void bfa_ioc_disable_comp(struct bfa_ioc_s *ioc);
111 static void bfa_ioc_lpu_stop(struct bfa_ioc_s *ioc);
112 static void bfa_ioc_fail_notify(struct bfa_ioc_s *ioc);
113 static void bfa_ioc_pf_fwmismatch(struct bfa_ioc_s *ioc);
118 struct bfa_ioc_s *ioc,
264 bfa_ioc_sm_uninit_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_uninit_entry() argument
272 bfa_ioc_sm_uninit(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_uninit() argument
274 bfa_trc(ioc, event); in bfa_ioc_sm_uninit()
278 bfa_fsm_set_state(ioc, bfa_ioc_sm_reset); in bfa_ioc_sm_uninit()
282 bfa_sm_fault(ioc, event); in bfa_ioc_sm_uninit()
289 bfa_ioc_sm_reset_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_reset_entry() argument
291 bfa_fsm_set_state(&ioc->iocpf, bfa_iocpf_sm_reset); in bfa_ioc_sm_reset_entry()
298 bfa_ioc_sm_reset(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_reset() argument
300 bfa_trc(ioc, event); in bfa_ioc_sm_reset()
304 bfa_fsm_set_state(ioc, bfa_ioc_sm_enabling); in bfa_ioc_sm_reset()
308 bfa_ioc_disable_comp(ioc); in bfa_ioc_sm_reset()
312 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_reset()
316 bfa_sm_fault(ioc, event); in bfa_ioc_sm_reset()
322 bfa_ioc_sm_enabling_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_enabling_entry() argument
324 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_ENABLE); in bfa_ioc_sm_enabling_entry()
332 bfa_ioc_sm_enabling(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_enabling() argument
334 bfa_trc(ioc, event); in bfa_ioc_sm_enabling()
338 bfa_fsm_set_state(ioc, bfa_ioc_sm_getattr); in bfa_ioc_sm_enabling()
344 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
345 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_enabling()
347 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_INITFAIL); in bfa_ioc_sm_enabling()
351 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_enabling()
352 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail); in bfa_ioc_sm_enabling()
356 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_enabling()
360 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_enabling()
361 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_ioc_sm_enabling()
368 bfa_sm_fault(ioc, event); in bfa_ioc_sm_enabling()
374 bfa_ioc_sm_getattr_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_getattr_entry() argument
376 bfa_ioc_timer_start(ioc); in bfa_ioc_sm_getattr_entry()
377 bfa_ioc_send_getattr(ioc); in bfa_ioc_sm_getattr_entry()
384 bfa_ioc_sm_getattr(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_getattr() argument
386 bfa_trc(ioc, event); in bfa_ioc_sm_getattr()
390 bfa_ioc_timer_stop(ioc); in bfa_ioc_sm_getattr()
391 bfa_fsm_set_state(ioc, bfa_ioc_sm_op); in bfa_ioc_sm_getattr()
396 bfa_ioc_timer_stop(ioc); in bfa_ioc_sm_getattr()
399 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_getattr()
400 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_getattr()
402 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_GETATTRFAIL); in bfa_ioc_sm_getattr()
406 bfa_ioc_timer_stop(ioc); in bfa_ioc_sm_getattr()
407 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_getattr()
414 bfa_sm_fault(ioc, event); in bfa_ioc_sm_getattr()
419 bfa_ioc_sm_op_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_op_entry() argument
421 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_sm_op_entry()
423 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_OK); in bfa_ioc_sm_op_entry()
424 bfa_ioc_event_notify(ioc, BFA_IOC_E_ENABLED); in bfa_ioc_sm_op_entry()
425 bfa_ioc_hb_monitor(ioc); in bfa_ioc_sm_op_entry()
427 bfa_ioc_aen_post(ioc, BFA_IOC_AEN_ENABLE); in bfa_ioc_sm_op_entry()
431 bfa_ioc_sm_op(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_op() argument
433 bfa_trc(ioc, event); in bfa_ioc_sm_op()
440 bfa_hb_timer_stop(ioc); in bfa_ioc_sm_op()
441 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_op()
446 bfa_hb_timer_stop(ioc); in bfa_ioc_sm_op()
449 if (ioc->iocpf.auto_recover) in bfa_ioc_sm_op()
450 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail_retry); in bfa_ioc_sm_op()
452 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_op()
454 bfa_ioc_fail_notify(ioc); in bfa_ioc_sm_op()
457 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FAIL); in bfa_ioc_sm_op()
461 bfa_sm_fault(ioc, event); in bfa_ioc_sm_op()
467 bfa_ioc_sm_disabling_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_disabling_entry() argument
469 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_sm_disabling_entry()
470 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_DISABLE); in bfa_ioc_sm_disabling_entry()
472 bfa_ioc_aen_post(ioc, BFA_IOC_AEN_DISABLE); in bfa_ioc_sm_disabling_entry()
479 bfa_ioc_sm_disabling(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_disabling() argument
481 bfa_trc(ioc, event); in bfa_ioc_sm_disabling()
485 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabled); in bfa_ioc_sm_disabling()
494 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FAIL); in bfa_ioc_sm_disabling()
498 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail); in bfa_ioc_sm_disabling()
499 bfa_ioc_disable_comp(ioc); in bfa_ioc_sm_disabling()
503 bfa_sm_fault(ioc, event); in bfa_ioc_sm_disabling()
511 bfa_ioc_sm_disabled_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_disabled_entry() argument
513 bfa_ioc_disable_comp(ioc); in bfa_ioc_sm_disabled_entry()
517 bfa_ioc_sm_disabled(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_disabled() argument
519 bfa_trc(ioc, event); in bfa_ioc_sm_disabled()
523 bfa_fsm_set_state(ioc, bfa_ioc_sm_enabling); in bfa_ioc_sm_disabled()
527 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_disabled()
531 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_disabled()
532 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_ioc_sm_disabled()
536 bfa_sm_fault(ioc, event); in bfa_ioc_sm_disabled()
542 bfa_ioc_sm_fail_retry_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_fail_retry_entry() argument
544 bfa_trc(ioc, 0); in bfa_ioc_sm_fail_retry_entry()
551 bfa_ioc_sm_fail_retry(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_fail_retry() argument
553 bfa_trc(ioc, event); in bfa_ioc_sm_fail_retry()
557 bfa_fsm_set_state(ioc, bfa_ioc_sm_getattr); in bfa_ioc_sm_fail_retry()
565 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
566 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); in bfa_ioc_sm_fail_retry()
568 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_INITFAIL); in bfa_ioc_sm_fail_retry()
572 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail_retry()
573 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail); in bfa_ioc_sm_fail_retry()
580 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_fail_retry()
584 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_fail_retry()
585 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_ioc_sm_fail_retry()
589 bfa_sm_fault(ioc, event); in bfa_ioc_sm_fail_retry()
595 bfa_ioc_sm_fail_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_fail_entry() argument
597 bfa_trc(ioc, 0); in bfa_ioc_sm_fail_entry()
604 bfa_ioc_sm_fail(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_fail() argument
606 bfa_trc(ioc, event); in bfa_ioc_sm_fail()
611 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_fail()
615 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling); in bfa_ioc_sm_fail()
619 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_fail()
620 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP); in bfa_ioc_sm_fail()
630 bfa_sm_fault(ioc, event); in bfa_ioc_sm_fail()
635 bfa_ioc_sm_hwfail_entry(struct bfa_ioc_s *ioc) in bfa_ioc_sm_hwfail_entry() argument
637 bfa_trc(ioc, 0); in bfa_ioc_sm_hwfail_entry()
641 bfa_ioc_sm_hwfail(struct bfa_ioc_s *ioc, enum ioc_event event) in bfa_ioc_sm_hwfail() argument
643 bfa_trc(ioc, event); in bfa_ioc_sm_hwfail()
647 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_sm_hwfail()
651 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_sm_hwfail()
655 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_sm_hwfail()
663 bfa_sm_fault(ioc, event); in bfa_ioc_sm_hwfail()
687 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_reset() local
689 bfa_trc(ioc, event); in bfa_iocpf_sm_reset()
700 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_reset()
717 r32 = readl(iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
720 r32 = readl(iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
724 fwstate = bfa_ioc_get_cur_ioc_fwstate(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
726 writel(1, iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
730 bfa_ioc_fwver_get(iocpf->ioc, &fwhdr); in bfa_iocpf_sm_fwcheck_entry()
733 writel(1, iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
740 pgnum = PSS_SMEM_PGNUM(iocpf->ioc->ioc_regs.smem_pg0, loff); in bfa_iocpf_sm_fwcheck_entry()
742 writel(pgnum, iocpf->ioc->ioc_regs.host_page_num_fn); in bfa_iocpf_sm_fwcheck_entry()
745 bfa_mem_write(iocpf->ioc->ioc_regs.smem_page_start, loff, 0); in bfa_iocpf_sm_fwcheck_entry()
749 bfa_trc(iocpf->ioc, fwstate); in bfa_iocpf_sm_fwcheck_entry()
750 bfa_trc(iocpf->ioc, swab32(fwhdr.exec)); in bfa_iocpf_sm_fwcheck_entry()
751 bfa_ioc_set_cur_ioc_fwstate(iocpf->ioc, BFI_IOC_UNINIT); in bfa_iocpf_sm_fwcheck_entry()
752 bfa_ioc_set_alt_ioc_fwstate(iocpf->ioc, BFI_IOC_UNINIT); in bfa_iocpf_sm_fwcheck_entry()
757 bfa_ioc_ownership_reset(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
762 writel(1, iocpf->ioc->ioc_regs.ioc_init_sem_reg); in bfa_iocpf_sm_fwcheck_entry()
765 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fwcheck_entry()
774 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_fwcheck() local
776 bfa_trc(ioc, event); in bfa_iocpf_sm_fwcheck()
780 if (bfa_ioc_firmware_lock(ioc)) { in bfa_iocpf_sm_fwcheck()
781 if (bfa_ioc_sync_start(ioc)) { in bfa_iocpf_sm_fwcheck()
782 bfa_ioc_sync_join(ioc); in bfa_iocpf_sm_fwcheck()
785 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_fwcheck()
786 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_fwcheck()
787 bfa_sem_timer_start(ioc); in bfa_iocpf_sm_fwcheck()
790 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_fwcheck()
797 bfa_fsm_send_event(ioc, IOC_E_HWFAILED); in bfa_iocpf_sm_fwcheck()
801 bfa_sem_timer_stop(ioc); in bfa_iocpf_sm_fwcheck()
803 bfa_fsm_send_event(ioc, IOC_E_DISABLED); in bfa_iocpf_sm_fwcheck()
807 bfa_sem_timer_stop(ioc); in bfa_iocpf_sm_fwcheck()
812 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_fwcheck()
826 bfa_ioc_pf_fwmismatch(iocpf->ioc); in bfa_iocpf_sm_mismatch_entry()
829 bfa_iocpf_timer_start(iocpf->ioc); in bfa_iocpf_sm_mismatch_entry()
838 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_mismatch() local
840 bfa_trc(ioc, event); in bfa_iocpf_sm_mismatch()
848 bfa_iocpf_timer_stop(ioc); in bfa_iocpf_sm_mismatch()
850 bfa_fsm_send_event(ioc, IOC_E_DISABLED); in bfa_iocpf_sm_mismatch()
854 bfa_iocpf_timer_stop(ioc); in bfa_iocpf_sm_mismatch()
859 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_mismatch()
869 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_semwait_entry()
878 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_semwait() local
880 bfa_trc(ioc, event); in bfa_iocpf_sm_semwait()
884 if (bfa_ioc_sync_complete(ioc)) { in bfa_iocpf_sm_semwait()
885 bfa_ioc_sync_join(ioc); in bfa_iocpf_sm_semwait()
888 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_semwait()
889 bfa_sem_timer_start(ioc); in bfa_iocpf_sm_semwait()
895 bfa_fsm_send_event(ioc, IOC_E_HWFAILED); in bfa_iocpf_sm_semwait()
899 bfa_sem_timer_stop(ioc); in bfa_iocpf_sm_semwait()
904 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_semwait()
912 bfa_ioc_hwinit(iocpf->ioc, BFA_FALSE); in bfa_iocpf_sm_hwinit_entry()
922 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_hwinit() local
924 bfa_trc(ioc, event); in bfa_iocpf_sm_hwinit()
932 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_hwinit()
933 bfa_fsm_send_event(ioc, IOC_E_PFFAILED); in bfa_iocpf_sm_hwinit()
938 bfa_iocpf_timer_stop(ioc); in bfa_iocpf_sm_hwinit()
939 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_hwinit()
940 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_hwinit()
945 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_hwinit()
952 bfa_iocpf_timer_start(iocpf->ioc); in bfa_iocpf_sm_enabling_entry()
956 iocpf->ioc->cbfn->reset_cbfn(iocpf->ioc->bfa); in bfa_iocpf_sm_enabling_entry()
957 bfa_ioc_send_enable(iocpf->ioc); in bfa_iocpf_sm_enabling_entry()
967 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_enabling() local
969 bfa_trc(ioc, event); in bfa_iocpf_sm_enabling()
973 bfa_iocpf_timer_stop(ioc); in bfa_iocpf_sm_enabling()
974 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_enabling()
979 bfa_iocpf_timer_stop(ioc); in bfa_iocpf_sm_enabling()
985 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_enabling()
987 bfa_fsm_send_event(ioc, IOC_E_PFFAILED); in bfa_iocpf_sm_enabling()
992 bfa_iocpf_timer_stop(ioc); in bfa_iocpf_sm_enabling()
993 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_enabling()
998 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_enabling()
1005 bfa_fsm_send_event(iocpf->ioc, IOC_E_ENABLED); in bfa_iocpf_sm_ready_entry()
1011 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_ready() local
1013 bfa_trc(ioc, event); in bfa_iocpf_sm_ready()
1029 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_ready()
1036 bfa_iocpf_timer_start(iocpf->ioc); in bfa_iocpf_sm_disabling_entry()
1037 bfa_ioc_send_disable(iocpf->ioc); in bfa_iocpf_sm_disabling_entry()
1046 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling() local
1048 bfa_trc(ioc, event); in bfa_iocpf_sm_disabling()
1052 bfa_iocpf_timer_stop(ioc); in bfa_iocpf_sm_disabling()
1057 bfa_iocpf_timer_stop(ioc); in bfa_iocpf_sm_disabling()
1063 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); in bfa_iocpf_sm_disabling()
1071 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_disabling()
1078 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_disabling_sync_entry()
1087 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_disabling_sync() local
1089 bfa_trc(ioc, event); in bfa_iocpf_sm_disabling_sync()
1093 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_disabling_sync()
1094 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_disabling_sync()
1100 bfa_fsm_send_event(ioc, IOC_E_HWFAILED); in bfa_iocpf_sm_disabling_sync()
1107 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_disabling_sync()
1117 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_disabled_entry()
1118 bfa_fsm_send_event(iocpf->ioc, IOC_E_DISABLED); in bfa_iocpf_sm_disabled_entry()
1124 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_disabled() local
1126 bfa_trc(ioc, event); in bfa_iocpf_sm_disabled()
1134 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_disabled()
1139 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_disabled()
1146 bfa_ioc_debug_save_ftrc(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
1147 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_initfail_sync_entry()
1156 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail_sync() local
1158 bfa_trc(ioc, event); in bfa_iocpf_sm_initfail_sync()
1162 bfa_ioc_notify_fail(ioc); in bfa_iocpf_sm_initfail_sync()
1163 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_initfail_sync()
1164 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); in bfa_iocpf_sm_initfail_sync()
1165 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_initfail_sync()
1171 bfa_fsm_send_event(ioc, IOC_E_HWFAILED); in bfa_iocpf_sm_initfail_sync()
1175 bfa_sem_timer_stop(ioc); in bfa_iocpf_sm_initfail_sync()
1180 bfa_sem_timer_stop(ioc); in bfa_iocpf_sm_initfail_sync()
1181 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_initfail_sync()
1189 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_initfail_sync()
1196 bfa_trc(iocpf->ioc, 0); in bfa_iocpf_sm_initfail_entry()
1205 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_initfail() local
1207 bfa_trc(ioc, event); in bfa_iocpf_sm_initfail()
1215 bfa_ioc_firmware_unlock(ioc); in bfa_iocpf_sm_initfail()
1220 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_initfail()
1230 bfa_ioc_lpu_stop(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1235 bfa_ioc_mbox_flush(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1237 bfa_ioc_hw_sem_get(iocpf->ioc); in bfa_iocpf_sm_fail_sync_entry()
1243 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_fail_sync() local
1245 bfa_trc(ioc, event); in bfa_iocpf_sm_fail_sync()
1249 bfa_ioc_sync_ack(ioc); in bfa_iocpf_sm_fail_sync()
1250 bfa_ioc_notify_fail(ioc); in bfa_iocpf_sm_fail_sync()
1252 bfa_ioc_sync_leave(ioc); in bfa_iocpf_sm_fail_sync()
1253 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); in bfa_iocpf_sm_fail_sync()
1254 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_fail_sync()
1257 if (bfa_ioc_sync_complete(ioc)) in bfa_iocpf_sm_fail_sync()
1260 writel(1, ioc->ioc_regs.ioc_sem_reg); in bfa_iocpf_sm_fail_sync()
1268 bfa_fsm_send_event(ioc, IOC_E_HWFAILED); in bfa_iocpf_sm_fail_sync()
1272 bfa_sem_timer_stop(ioc); in bfa_iocpf_sm_fail_sync()
1280 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_fail_sync()
1287 bfa_trc(iocpf->ioc, 0); in bfa_iocpf_sm_fail_entry()
1296 struct bfa_ioc_s *ioc = iocpf->ioc; in bfa_iocpf_sm_fail() local
1298 bfa_trc(ioc, event); in bfa_iocpf_sm_fail()
1306 bfa_sm_fault(ioc, event); in bfa_iocpf_sm_fail()
1318 bfa_ioc_event_notify(struct bfa_ioc_s *ioc, enum bfa_ioc_event_e event) in bfa_ioc_event_notify() argument
1323 list_for_each(qe, &ioc->notify_q) { in bfa_ioc_event_notify()
1330 bfa_ioc_disable_comp(struct bfa_ioc_s *ioc) in bfa_ioc_disable_comp() argument
1332 ioc->cbfn->disable_cbfn(ioc->bfa); in bfa_ioc_disable_comp()
1333 bfa_ioc_event_notify(ioc, BFA_IOC_E_DISABLED); in bfa_ioc_disable_comp()
1358 bfa_ioc_hw_sem_get(struct bfa_ioc_s *ioc) in bfa_ioc_hw_sem_get() argument
1366 r32 = readl(ioc->ioc_regs.ioc_sem_reg); in bfa_ioc_hw_sem_get()
1369 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEM_ERROR); in bfa_ioc_hw_sem_get()
1373 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEMLOCKED); in bfa_ioc_hw_sem_get()
1377 bfa_sem_timer_start(ioc); in bfa_ioc_hw_sem_get()
1384 bfa_ioc_lmem_init(struct bfa_ioc_s *ioc) in bfa_ioc_lmem_init() argument
1390 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1398 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1405 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1414 bfa_trc(ioc, pss_ctl); in bfa_ioc_lmem_init()
1417 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lmem_init()
1421 bfa_ioc_lpu_start(struct bfa_ioc_s *ioc) in bfa_ioc_lpu_start() argument
1428 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1431 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_start()
1435 bfa_ioc_lpu_stop(struct bfa_ioc_s *ioc) in bfa_ioc_lpu_stop() argument
1442 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1445 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg); in bfa_ioc_lpu_stop()
1452 bfa_ioc_fwver_get(struct bfa_ioc_s *ioc, struct bfi_ioc_image_hdr_s *fwhdr) in bfa_ioc_fwver_get() argument
1459 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_ioc_fwver_get()
1461 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_fwver_get()
1466 bfa_mem_read(ioc->ioc_regs.smem_page_start, loff); in bfa_ioc_fwver_get()
1475 bfa_ioc_fwver_cmp(struct bfa_ioc_s *ioc, in bfa_ioc_fwver_cmp() argument
1482 bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), 0); in bfa_ioc_fwver_cmp()
1498 smem_flash_cmp = bfa_ioc_flash_fwver_cmp(ioc, smem_fwhdr); in bfa_ioc_fwver_cmp()
1515 bfa_ioc_fwver_valid(struct bfa_ioc_s *ioc, u32 boot_env) in bfa_ioc_fwver_valid() argument
1519 bfa_ioc_fwver_get(ioc, &fwhdr); in bfa_ioc_fwver_valid()
1522 bfa_trc(ioc, fwhdr.bootenv); in bfa_ioc_fwver_valid()
1523 bfa_trc(ioc, boot_env); in bfa_ioc_fwver_valid()
1527 return bfa_ioc_fwver_cmp(ioc, &fwhdr); in bfa_ioc_fwver_valid()
1641 bfa_ioc_flash_img_get_chnk(struct bfa_ioc_s *ioc, u32 off, in bfa_ioc_flash_img_get_chnk() argument
1644 return bfa_flash_raw_read(ioc->pcidev.pci_bar_kva, in bfa_ioc_flash_img_get_chnk()
1650 bfa_ioc_flash_fwver_cmp(struct bfa_ioc_s *ioc, in bfa_ioc_flash_fwver_cmp() argument
1657 status = bfa_ioc_flash_img_get_chnk(ioc, 0, fwimg); in bfa_ioc_flash_fwver_cmp()
1673 bfa_ioc_fwsig_invalidate(struct bfa_ioc_s *ioc) in bfa_ioc_fwsig_invalidate() argument
1680 ioc_fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_fwsig_invalidate()
1684 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_ioc_fwsig_invalidate()
1686 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_fwsig_invalidate()
1687 bfa_mem_write(ioc->ioc_regs.smem_page_start, loff, BFA_IOC_FW_INV_SIGN); in bfa_ioc_fwsig_invalidate()
1696 bfa_ioc_msgflush(struct bfa_ioc_s *ioc) in bfa_ioc_msgflush() argument
1700 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1702 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgflush()
1706 bfa_ioc_hwinit(struct bfa_ioc_s *ioc, bfa_boolean_t force) in bfa_ioc_hwinit() argument
1713 ioc_fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_hwinit()
1718 bfa_trc(ioc, ioc_fwstate); in bfa_ioc_hwinit()
1727 BFA_FALSE : bfa_ioc_fwver_valid(ioc, boot_env); in bfa_ioc_hwinit()
1730 if (bfa_ioc_boot(ioc, boot_type, boot_env) == BFA_STATUS_OK) in bfa_ioc_hwinit()
1731 bfa_ioc_poll_fwinit(ioc); in bfa_ioc_hwinit()
1740 bfa_ioc_poll_fwinit(ioc); in bfa_ioc_hwinit()
1758 bfa_ioc_msgflush(ioc); in bfa_ioc_hwinit()
1759 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_hwinit()
1766 if (bfa_ioc_boot(ioc, boot_type, boot_env) == BFA_STATUS_OK) in bfa_ioc_hwinit()
1767 bfa_ioc_poll_fwinit(ioc); in bfa_ioc_hwinit()
1773 struct bfa_ioc_s *ioc = (struct bfa_ioc_s *) ioc_arg; in bfa_ioc_timeout() local
1775 bfa_trc(ioc, 0); in bfa_ioc_timeout()
1776 bfa_fsm_send_event(ioc, IOC_E_TIMEOUT); in bfa_ioc_timeout()
1780 bfa_ioc_mbox_send(struct bfa_ioc_s *ioc, void *ioc_msg, int len) in bfa_ioc_mbox_send() argument
1785 bfa_trc(ioc, msgp[0]); in bfa_ioc_mbox_send()
1786 bfa_trc(ioc, len); in bfa_ioc_mbox_send()
1795 ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1798 writel(0, ioc->ioc_regs.hfn_mbox + i * sizeof(u32)); in bfa_ioc_mbox_send()
1803 writel(1, ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1804 (void) readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_send()
1808 bfa_ioc_send_enable(struct bfa_ioc_s *ioc) in bfa_ioc_send_enable() argument
1814 bfa_ioc_portid(ioc)); in bfa_ioc_send_enable()
1815 enable_req.clscode = cpu_to_be16(ioc->clscode); in bfa_ioc_send_enable()
1818 bfa_ioc_mbox_send(ioc, &enable_req, sizeof(struct bfi_ioc_ctrl_req_s)); in bfa_ioc_send_enable()
1822 bfa_ioc_send_disable(struct bfa_ioc_s *ioc) in bfa_ioc_send_disable() argument
1827 bfa_ioc_portid(ioc)); in bfa_ioc_send_disable()
1828 bfa_ioc_mbox_send(ioc, &disable_req, sizeof(struct bfi_ioc_ctrl_req_s)); in bfa_ioc_send_disable()
1832 bfa_ioc_send_getattr(struct bfa_ioc_s *ioc) in bfa_ioc_send_getattr() argument
1837 bfa_ioc_portid(ioc)); in bfa_ioc_send_getattr()
1838 bfa_dma_be_addr_set(attr_req.attr_addr, ioc->attr_dma.pa); in bfa_ioc_send_getattr()
1839 bfa_ioc_mbox_send(ioc, &attr_req, sizeof(attr_req)); in bfa_ioc_send_getattr()
1845 struct bfa_ioc_s *ioc = cbarg; in bfa_ioc_hb_check() local
1848 hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_ioc_hb_check()
1849 if (ioc->hb_count == hb_count) { in bfa_ioc_hb_check()
1850 bfa_ioc_recover(ioc); in bfa_ioc_hb_check()
1853 ioc->hb_count = hb_count; in bfa_ioc_hb_check()
1856 bfa_ioc_mbox_poll(ioc); in bfa_ioc_hb_check()
1857 bfa_hb_timer_start(ioc); in bfa_ioc_hb_check()
1861 bfa_ioc_hb_monitor(struct bfa_ioc_s *ioc) in bfa_ioc_hb_monitor() argument
1863 ioc->hb_count = readl(ioc->ioc_regs.heartbeat); in bfa_ioc_hb_monitor()
1864 bfa_hb_timer_start(ioc); in bfa_ioc_hb_monitor()
1871 bfa_ioc_download_fw(struct bfa_ioc_s *ioc, u32 boot_type, in bfa_ioc_download_fw() argument
1888 status = bfa_ioc_flash_img_get_chnk(ioc, in bfa_ioc_download_fw()
1895 fwimg_size = bfa_cb_image_get_size(bfa_ioc_asic_gen(ioc)); in bfa_ioc_download_fw()
1896 fwimg = bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), in bfa_ioc_download_fw()
1900 bfa_trc(ioc, fwimg_size); in bfa_ioc_download_fw()
1903 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_ioc_download_fw()
1906 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
1915 status = bfa_ioc_flash_img_get_chnk(ioc, in bfa_ioc_download_fw()
1924 bfa_ioc_asic_gen(ioc), in bfa_ioc_download_fw()
1932 bfa_mem_write(ioc->ioc_regs.smem_page_start, loff, in bfa_ioc_download_fw()
1943 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
1947 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0), in bfa_ioc_download_fw()
1948 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_download_fw()
1957 asicmode = BFI_FWBOOT_DEVMODE(ioc->asic_gen, ioc->asic_mode, in bfa_ioc_download_fw()
1958 ioc->port0_mode, ioc->port1_mode); in bfa_ioc_download_fw()
1959 bfa_mem_write(ioc->ioc_regs.smem_page_start, BFI_FWBOOT_DEVMODE_OFF, in bfa_ioc_download_fw()
1961 bfa_mem_write(ioc->ioc_regs.smem_page_start, BFI_FWBOOT_TYPE_OFF, in bfa_ioc_download_fw()
1963 bfa_mem_write(ioc->ioc_regs.smem_page_start, BFI_FWBOOT_ENV_OFF, in bfa_ioc_download_fw()
1973 bfa_ioc_getattr_reply(struct bfa_ioc_s *ioc) in bfa_ioc_getattr_reply() argument
1975 struct bfi_ioc_attr_s *attr = ioc->attr; in bfa_ioc_getattr_reply()
1980 ioc->fcmode = (attr->port_mode == BFI_PORT_MODE_FC); in bfa_ioc_getattr_reply()
1983 bfa_fsm_send_event(ioc, IOC_E_FWRSP_GETATTR); in bfa_ioc_getattr_reply()
1990 bfa_ioc_mbox_attach(struct bfa_ioc_s *ioc) in bfa_ioc_mbox_attach() argument
1992 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_attach()
1998 mod->mbhdlr[mc].cbarg = ioc->bfa; in bfa_ioc_mbox_attach()
2006 bfa_ioc_mbox_poll(struct bfa_ioc_s *ioc) in bfa_ioc_mbox_poll() argument
2008 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_poll()
2021 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_poll()
2029 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_ioc_mbox_poll()
2036 bfa_ioc_mbox_flush(struct bfa_ioc_s *ioc) in bfa_ioc_mbox_flush() argument
2038 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_flush()
2054 bfa_ioc_smem_read(struct bfa_ioc_s *ioc, void *tbuf, u32 soff, u32 sz) in bfa_ioc_smem_read() argument
2061 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, soff); in bfa_ioc_smem_read()
2063 bfa_trc(ioc, pgnum); in bfa_ioc_smem_read()
2064 bfa_trc(ioc, loff); in bfa_ioc_smem_read()
2065 bfa_trc(ioc, sz); in bfa_ioc_smem_read()
2070 if (BFA_FALSE == bfa_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg)) { in bfa_ioc_smem_read()
2071 bfa_trc(ioc, 0); in bfa_ioc_smem_read()
2075 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_read()
2078 bfa_trc(ioc, len); in bfa_ioc_smem_read()
2080 r32 = bfa_mem_read(ioc->ioc_regs.smem_page_start, loff); in bfa_ioc_smem_read()
2090 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_read()
2093 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0), in bfa_ioc_smem_read()
2094 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_read()
2098 readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_smem_read()
2099 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_smem_read()
2101 bfa_trc(ioc, pgnum); in bfa_ioc_smem_read()
2113 bfa_ioc_smem_clr(struct bfa_ioc_s *ioc, u32 soff, u32 sz) in bfa_ioc_smem_clr() argument
2118 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, soff); in bfa_ioc_smem_clr()
2120 bfa_trc(ioc, pgnum); in bfa_ioc_smem_clr()
2121 bfa_trc(ioc, loff); in bfa_ioc_smem_clr()
2122 bfa_trc(ioc, sz); in bfa_ioc_smem_clr()
2127 if (BFA_FALSE == bfa_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg)) { in bfa_ioc_smem_clr()
2128 bfa_trc(ioc, 0); in bfa_ioc_smem_clr()
2132 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_clr()
2135 bfa_trc(ioc, len); in bfa_ioc_smem_clr()
2137 bfa_mem_write(ioc->ioc_regs.smem_page_start, loff, 0); in bfa_ioc_smem_clr()
2146 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_clr()
2149 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0), in bfa_ioc_smem_clr()
2150 ioc->ioc_regs.host_page_num_fn); in bfa_ioc_smem_clr()
2155 readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_smem_clr()
2156 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_smem_clr()
2157 bfa_trc(ioc, pgnum); in bfa_ioc_smem_clr()
2162 bfa_ioc_fail_notify(struct bfa_ioc_s *ioc) in bfa_ioc_fail_notify() argument
2164 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_fail_notify()
2169 ioc->cbfn->hbfail_cbfn(ioc->bfa); in bfa_ioc_fail_notify()
2170 bfa_ioc_event_notify(ioc, BFA_IOC_E_FAILED); in bfa_ioc_fail_notify()
2172 bfa_ioc_debug_save_ftrc(ioc); in bfa_ioc_fail_notify()
2176 bfa_ioc_aen_post(ioc, BFA_IOC_AEN_HBFAIL); in bfa_ioc_fail_notify()
2181 bfa_ioc_pf_fwmismatch(struct bfa_ioc_s *ioc) in bfa_ioc_pf_fwmismatch() argument
2183 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_pf_fwmismatch()
2187 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); in bfa_ioc_pf_fwmismatch()
2191 bfa_ioc_aen_post(ioc, BFA_IOC_AEN_FWMISMATCH); in bfa_ioc_pf_fwmismatch()
2195 bfa_ioc_pll_init(struct bfa_ioc_s *ioc) in bfa_ioc_pll_init() argument
2201 bfa_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2203 bfa_ioc_pll_init_asic(ioc); in bfa_ioc_pll_init()
2205 ioc->pllinit = BFA_TRUE; in bfa_ioc_pll_init()
2210 bfa_ioc_lmem_init(ioc); in bfa_ioc_pll_init()
2215 readl(ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2216 writel(1, ioc->ioc_regs.ioc_init_sem_reg); in bfa_ioc_pll_init()
2226 bfa_ioc_boot(struct bfa_ioc_s *ioc, u32 boot_type, u32 boot_env) in bfa_ioc_boot() argument
2230 bfa_ioc_stats(ioc, ioc_boots); in bfa_ioc_boot()
2232 if (bfa_ioc_pll_init(ioc) != BFA_STATUS_OK) in bfa_ioc_boot()
2239 bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), 0); in bfa_ioc_boot()
2245 if (bfa_ioc_flash_fwver_cmp(ioc, drv_fwhdr) == in bfa_ioc_boot()
2254 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_MEMTEST); in bfa_ioc_boot()
2255 bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_MEMTEST); in bfa_ioc_boot()
2257 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_INITING); in bfa_ioc_boot()
2258 bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_INITING); in bfa_ioc_boot()
2261 bfa_ioc_msgflush(ioc); in bfa_ioc_boot()
2262 status = bfa_ioc_download_fw(ioc, boot_type, boot_env); in bfa_ioc_boot()
2264 bfa_ioc_lpu_start(ioc); in bfa_ioc_boot()
2267 bfa_iocpf_timeout(ioc); in bfa_ioc_boot()
2284 bfa_ioc_is_operational(struct bfa_ioc_s *ioc) in bfa_ioc_is_operational() argument
2286 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_op); in bfa_ioc_is_operational()
2290 bfa_ioc_is_initialized(struct bfa_ioc_s *ioc) in bfa_ioc_is_initialized() argument
2292 u32 r32 = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_is_initialized()
2300 bfa_ioc_msgget(struct bfa_ioc_s *ioc, void *mbmsg) in bfa_ioc_msgget() argument
2306 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2315 r32 = readl(ioc->ioc_regs.lpu_mbox + in bfa_ioc_msgget()
2323 writel(1, ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2324 readl(ioc->ioc_regs.lpu_mbox_cmd); in bfa_ioc_msgget()
2330 bfa_ioc_isr(struct bfa_ioc_s *ioc, struct bfi_mbmsg_s *m) in bfa_ioc_isr() argument
2333 struct bfa_iocpf_s *iocpf = &ioc->iocpf; in bfa_ioc_isr()
2337 bfa_ioc_stats(ioc, ioc_isrs); in bfa_ioc_isr()
2344 ioc->port_mode = ioc->port_mode_cfg = in bfa_ioc_isr()
2346 ioc->ad_cap_bm = msg->fw_event.cap_bm; in bfa_ioc_isr()
2355 bfa_ioc_getattr_reply(ioc); in bfa_ioc_isr()
2359 bfa_trc(ioc, msg->mh.msg_id); in bfa_ioc_isr()
2371 bfa_ioc_attach(struct bfa_ioc_s *ioc, void *bfa, struct bfa_ioc_cbfn_s *cbfn, in bfa_ioc_attach() argument
2374 ioc->bfa = bfa; in bfa_ioc_attach()
2375 ioc->cbfn = cbfn; in bfa_ioc_attach()
2376 ioc->timer_mod = timer_mod; in bfa_ioc_attach()
2377 ioc->fcmode = BFA_FALSE; in bfa_ioc_attach()
2378 ioc->pllinit = BFA_FALSE; in bfa_ioc_attach()
2379 ioc->dbg_fwsave_once = BFA_TRUE; in bfa_ioc_attach()
2380 ioc->iocpf.ioc = ioc; in bfa_ioc_attach()
2382 bfa_ioc_mbox_attach(ioc); in bfa_ioc_attach()
2383 INIT_LIST_HEAD(&ioc->notify_q); in bfa_ioc_attach()
2385 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit); in bfa_ioc_attach()
2386 bfa_fsm_send_event(ioc, IOC_E_RESET); in bfa_ioc_attach()
2393 bfa_ioc_detach(struct bfa_ioc_s *ioc) in bfa_ioc_detach() argument
2395 bfa_fsm_send_event(ioc, IOC_E_DETACH); in bfa_ioc_detach()
2396 INIT_LIST_HEAD(&ioc->notify_q); in bfa_ioc_detach()
2405 bfa_ioc_pci_init(struct bfa_ioc_s *ioc, struct bfa_pcidev_s *pcidev, in bfa_ioc_pci_init() argument
2408 ioc->clscode = clscode; in bfa_ioc_pci_init()
2409 ioc->pcidev = *pcidev; in bfa_ioc_pci_init()
2414 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_FC; in bfa_ioc_pci_init()
2415 ioc->asic_mode = BFI_ASIC_MODE_FC; in bfa_ioc_pci_init()
2420 ioc->asic_gen = BFI_ASIC_GEN_CB; in bfa_ioc_pci_init()
2421 ioc->fcmode = BFA_TRUE; in bfa_ioc_pci_init()
2422 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA; in bfa_ioc_pci_init()
2423 ioc->ad_cap_bm = BFA_CM_HBA; in bfa_ioc_pci_init()
2427 ioc->asic_gen = BFI_ASIC_GEN_CT; in bfa_ioc_pci_init()
2428 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_ioc_pci_init()
2429 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_ioc_pci_init()
2430 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_ioc_pci_init()
2431 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_ioc_pci_init()
2435 ioc->asic_gen = BFI_ASIC_GEN_CT; in bfa_ioc_pci_init()
2436 ioc->fcmode = BFA_TRUE; in bfa_ioc_pci_init()
2437 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA; in bfa_ioc_pci_init()
2438 ioc->ad_cap_bm = BFA_CM_HBA; in bfa_ioc_pci_init()
2443 ioc->asic_gen = BFI_ASIC_GEN_CT2; in bfa_ioc_pci_init()
2446 ioc->asic_mode = BFI_ASIC_MODE_FC16; in bfa_ioc_pci_init()
2447 ioc->fcmode = BFA_TRUE; in bfa_ioc_pci_init()
2448 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA; in bfa_ioc_pci_init()
2449 ioc->ad_cap_bm = BFA_CM_HBA; in bfa_ioc_pci_init()
2451 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH; in bfa_ioc_pci_init()
2452 ioc->asic_mode = BFI_ASIC_MODE_ETH; in bfa_ioc_pci_init()
2454 ioc->port_mode = in bfa_ioc_pci_init()
2455 ioc->port_mode_cfg = BFA_MODE_CNA; in bfa_ioc_pci_init()
2456 ioc->ad_cap_bm = BFA_CM_CNA; in bfa_ioc_pci_init()
2458 ioc->port_mode = in bfa_ioc_pci_init()
2459 ioc->port_mode_cfg = BFA_MODE_NIC; in bfa_ioc_pci_init()
2460 ioc->ad_cap_bm = BFA_CM_NIC; in bfa_ioc_pci_init()
2472 if (ioc->asic_gen == BFI_ASIC_GEN_CB) in bfa_ioc_pci_init()
2473 bfa_ioc_set_cb_hwif(ioc); in bfa_ioc_pci_init()
2474 else if (ioc->asic_gen == BFI_ASIC_GEN_CT) in bfa_ioc_pci_init()
2475 bfa_ioc_set_ct_hwif(ioc); in bfa_ioc_pci_init()
2477 WARN_ON(ioc->asic_gen != BFI_ASIC_GEN_CT2); in bfa_ioc_pci_init()
2478 bfa_ioc_set_ct2_hwif(ioc); in bfa_ioc_pci_init()
2479 bfa_ioc_ct2_poweron(ioc); in bfa_ioc_pci_init()
2482 bfa_ioc_map_port(ioc); in bfa_ioc_pci_init()
2483 bfa_ioc_reg_init(ioc); in bfa_ioc_pci_init()
2493 bfa_ioc_mem_claim(struct bfa_ioc_s *ioc, u8 *dm_kva, u64 dm_pa) in bfa_ioc_mem_claim() argument
2498 ioc->attr_dma.kva = dm_kva; in bfa_ioc_mem_claim()
2499 ioc->attr_dma.pa = dm_pa; in bfa_ioc_mem_claim()
2500 ioc->attr = (struct bfi_ioc_attr_s *) dm_kva; in bfa_ioc_mem_claim()
2504 bfa_ioc_enable(struct bfa_ioc_s *ioc) in bfa_ioc_enable() argument
2506 bfa_ioc_stats(ioc, ioc_enables); in bfa_ioc_enable()
2507 ioc->dbg_fwsave_once = BFA_TRUE; in bfa_ioc_enable()
2509 bfa_fsm_send_event(ioc, IOC_E_ENABLE); in bfa_ioc_enable()
2513 bfa_ioc_disable(struct bfa_ioc_s *ioc) in bfa_ioc_disable() argument
2515 bfa_ioc_stats(ioc, ioc_disables); in bfa_ioc_disable()
2516 bfa_fsm_send_event(ioc, IOC_E_DISABLE); in bfa_ioc_disable()
2520 bfa_ioc_suspend(struct bfa_ioc_s *ioc) in bfa_ioc_suspend() argument
2522 ioc->dbg_fwsave_once = BFA_TRUE; in bfa_ioc_suspend()
2523 bfa_fsm_send_event(ioc, IOC_E_HWERROR); in bfa_ioc_suspend()
2531 bfa_ioc_debug_memclaim(struct bfa_ioc_s *ioc, void *dbg_fwsave) in bfa_ioc_debug_memclaim() argument
2533 ioc->dbg_fwsave = dbg_fwsave; in bfa_ioc_debug_memclaim()
2534 ioc->dbg_fwsave_len = BFA_DBG_FWTRC_LEN; in bfa_ioc_debug_memclaim()
2544 bfa_ioc_mbox_register(struct bfa_ioc_s *ioc, bfa_ioc_mbox_mcfunc_t *mcfuncs) in bfa_ioc_mbox_register() argument
2546 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_register()
2557 bfa_ioc_mbox_regisr(struct bfa_ioc_s *ioc, enum bfi_mclass mc, in bfa_ioc_mbox_regisr() argument
2560 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_regisr()
2574 bfa_ioc_mbox_queue(struct bfa_ioc_s *ioc, struct bfa_mbox_cmd_s *cmd) in bfa_ioc_mbox_queue() argument
2576 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_queue()
2590 stat = readl(ioc->ioc_regs.hfn_mbox_cmd); in bfa_ioc_mbox_queue()
2599 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg)); in bfa_ioc_mbox_queue()
2606 bfa_ioc_mbox_isr(struct bfa_ioc_s *ioc) in bfa_ioc_mbox_isr() argument
2608 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod; in bfa_ioc_mbox_isr()
2612 if (bfa_ioc_msgget(ioc, &m)) { in bfa_ioc_mbox_isr()
2618 bfa_ioc_isr(ioc, &m); in bfa_ioc_mbox_isr()
2628 bfa_ioc_lpu_read_stat(ioc); in bfa_ioc_mbox_isr()
2633 bfa_ioc_mbox_poll(ioc); in bfa_ioc_mbox_isr()
2637 bfa_ioc_error_isr(struct bfa_ioc_s *ioc) in bfa_ioc_error_isr() argument
2639 bfa_ioc_stats(ioc, ioc_hbfails); in bfa_ioc_error_isr()
2640 ioc->stats.hb_count = ioc->hb_count; in bfa_ioc_error_isr()
2641 bfa_fsm_send_event(ioc, IOC_E_HWERROR); in bfa_ioc_error_isr()
2648 bfa_ioc_is_disabled(struct bfa_ioc_s *ioc) in bfa_ioc_is_disabled() argument
2650 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabling) || in bfa_ioc_is_disabled()
2651 bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabled); in bfa_ioc_is_disabled()
2658 bfa_ioc_fw_mismatch(struct bfa_ioc_s *ioc) in bfa_ioc_fw_mismatch() argument
2660 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_reset) || in bfa_ioc_fw_mismatch()
2661 bfa_fsm_cmp_state(&ioc->iocpf, bfa_iocpf_sm_fwcheck) || in bfa_ioc_fw_mismatch()
2662 bfa_fsm_cmp_state(&ioc->iocpf, bfa_iocpf_sm_mismatch); in bfa_ioc_fw_mismatch()
2670 bfa_ioc_adapter_is_disabled(struct bfa_ioc_s *ioc) in bfa_ioc_adapter_is_disabled() argument
2674 if (!bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabled)) in bfa_ioc_adapter_is_disabled()
2677 ioc_state = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_adapter_is_disabled()
2681 if (ioc->pcidev.device_id != BFA_PCI_DEVICE_ID_FC_8G1P) { in bfa_ioc_adapter_is_disabled()
2682 ioc_state = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_adapter_is_disabled()
2694 bfa_ioc_reset_fwstate(struct bfa_ioc_s *ioc) in bfa_ioc_reset_fwstate() argument
2696 bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_UNINIT); in bfa_ioc_reset_fwstate()
2697 bfa_ioc_set_alt_ioc_fwstate(ioc, BFI_IOC_UNINIT); in bfa_ioc_reset_fwstate()
2702 bfa_ioc_get_adapter_attr(struct bfa_ioc_s *ioc, in bfa_ioc_get_adapter_attr() argument
2707 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_attr()
2709 bfa_ioc_get_adapter_serial_num(ioc, ad_attr->serial_num); in bfa_ioc_get_adapter_attr()
2710 bfa_ioc_get_adapter_fw_ver(ioc, ad_attr->fw_ver); in bfa_ioc_get_adapter_attr()
2711 bfa_ioc_get_adapter_optrom_ver(ioc, ad_attr->optrom_ver); in bfa_ioc_get_adapter_attr()
2712 bfa_ioc_get_adapter_manufacturer(ioc, ad_attr->manufacturer); in bfa_ioc_get_adapter_attr()
2716 ad_attr->nports = bfa_ioc_get_nports(ioc); in bfa_ioc_get_adapter_attr()
2717 ad_attr->max_speed = bfa_ioc_speed_sup(ioc); in bfa_ioc_get_adapter_attr()
2719 bfa_ioc_get_adapter_model(ioc, ad_attr->model); in bfa_ioc_get_adapter_attr()
2721 bfa_ioc_get_adapter_model(ioc, ad_attr->model_descr); in bfa_ioc_get_adapter_attr()
2731 ad_attr->pwwn = ioc->attr->pwwn; in bfa_ioc_get_adapter_attr()
2732 ad_attr->mac = bfa_ioc_get_mac(ioc); in bfa_ioc_get_adapter_attr()
2739 bfa_ioc_get_pci_chip_rev(ioc, ad_attr->hw_ver); in bfa_ioc_get_adapter_attr()
2741 ad_attr->cna_capable = bfa_ioc_is_cna(ioc); in bfa_ioc_get_adapter_attr()
2743 !bfa_ioc_is_cna(ioc) && !ad_attr->is_mezz; in bfa_ioc_get_adapter_attr()
2751 bfa_ioc_get_type(struct bfa_ioc_s *ioc) in bfa_ioc_get_type() argument
2753 if (ioc->clscode == BFI_PCIFN_CLASS_ETH) in bfa_ioc_get_type()
2756 WARN_ON(ioc->clscode != BFI_PCIFN_CLASS_FC); in bfa_ioc_get_type()
2758 return (ioc->attr->port_mode == BFI_PORT_MODE_FC) in bfa_ioc_get_type()
2763 bfa_ioc_get_adapter_serial_num(struct bfa_ioc_s *ioc, char *serial_num) in bfa_ioc_get_adapter_serial_num() argument
2767 (void *)ioc->attr->brcd_serialnum, in bfa_ioc_get_adapter_serial_num()
2772 bfa_ioc_get_adapter_fw_ver(struct bfa_ioc_s *ioc, char *fw_ver) in bfa_ioc_get_adapter_fw_ver() argument
2775 memcpy(fw_ver, ioc->attr->fw_version, BFA_VERSION_LEN); in bfa_ioc_get_adapter_fw_ver()
2779 bfa_ioc_get_pci_chip_rev(struct bfa_ioc_s *ioc, char *chip_rev) in bfa_ioc_get_pci_chip_rev() argument
2789 chip_rev[4] = ioc->attr->asic_rev; in bfa_ioc_get_pci_chip_rev()
2794 bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc_s *ioc, char *optrom_ver) in bfa_ioc_get_adapter_optrom_ver() argument
2797 memcpy(optrom_ver, ioc->attr->optrom_version, in bfa_ioc_get_adapter_optrom_ver()
2802 bfa_ioc_get_adapter_manufacturer(struct bfa_ioc_s *ioc, char *manufacturer) in bfa_ioc_get_adapter_manufacturer() argument
2809 bfa_ioc_get_adapter_model(struct bfa_ioc_s *ioc, char *model) in bfa_ioc_get_adapter_model() argument
2812 u8 nports = bfa_ioc_get_nports(ioc); in bfa_ioc_get_adapter_model()
2817 ioc_attr = ioc->attr; in bfa_ioc_get_adapter_model()
2819 if (bfa_asic_id_ct2(ioc->pcidev.device_id) && in bfa_ioc_get_adapter_model()
2829 bfa_ioc_get_state(struct bfa_ioc_s *ioc) in bfa_ioc_get_state() argument
2832 enum bfa_ioc_state ioc_st = bfa_sm_to_state(ioc_sm_table, ioc->fsm); in bfa_ioc_get_state()
2837 iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); in bfa_ioc_get_state()
2869 bfa_ioc_get_attr(struct bfa_ioc_s *ioc, struct bfa_ioc_attr_s *ioc_attr) in bfa_ioc_get_attr() argument
2873 ioc_attr->state = bfa_ioc_get_state(ioc); in bfa_ioc_get_attr()
2874 ioc_attr->port_id = bfa_ioc_portid(ioc); in bfa_ioc_get_attr()
2875 ioc_attr->port_mode = ioc->port_mode; in bfa_ioc_get_attr()
2876 ioc_attr->port_mode_cfg = ioc->port_mode_cfg; in bfa_ioc_get_attr()
2877 ioc_attr->cap_bm = ioc->ad_cap_bm; in bfa_ioc_get_attr()
2879 ioc_attr->ioc_type = bfa_ioc_get_type(ioc); in bfa_ioc_get_attr()
2881 bfa_ioc_get_adapter_attr(ioc, &ioc_attr->adapter_attr); in bfa_ioc_get_attr()
2883 ioc_attr->pci_attr.device_id = bfa_ioc_devid(ioc); in bfa_ioc_get_attr()
2884 ioc_attr->pci_attr.pcifn = bfa_ioc_pcifn(ioc); in bfa_ioc_get_attr()
2885 ioc_attr->def_fn = (bfa_ioc_pcifn(ioc) == bfa_ioc_portid(ioc)); in bfa_ioc_get_attr()
2886 bfa_ioc_get_pci_chip_rev(ioc, ioc_attr->pci_attr.chip_rev); in bfa_ioc_get_attr()
2890 bfa_ioc_get_mac(struct bfa_ioc_s *ioc) in bfa_ioc_get_mac() argument
2895 if (bfa_ioc_get_type(ioc) == BFA_IOC_TYPE_FCoE) in bfa_ioc_get_mac()
2896 return ioc->attr->fcoe_mac; in bfa_ioc_get_mac()
2898 return ioc->attr->mac; in bfa_ioc_get_mac()
2902 bfa_ioc_get_mfg_mac(struct bfa_ioc_s *ioc) in bfa_ioc_get_mfg_mac() argument
2906 m = ioc->attr->mfg_mac; in bfa_ioc_get_mfg_mac()
2907 if (bfa_mfg_is_old_wwn_mac_model(ioc->attr->card_type)) in bfa_ioc_get_mfg_mac()
2908 m.mac[MAC_ADDRLEN - 1] += bfa_ioc_pcifn(ioc); in bfa_ioc_get_mfg_mac()
2911 bfa_ioc_pcifn(ioc)); in bfa_ioc_get_mfg_mac()
2920 bfa_ioc_aen_post(struct bfa_ioc_s *ioc, enum bfa_ioc_aen_event event) in bfa_ioc_aen_post() argument
2922 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_ioc_aen_post()
2930 ioc_type = bfa_ioc_get_type(ioc); in bfa_ioc_aen_post()
2933 aen_entry->aen_data.ioc.pwwn = ioc->attr->pwwn; in bfa_ioc_aen_post()
2936 aen_entry->aen_data.ioc.pwwn = ioc->attr->pwwn; in bfa_ioc_aen_post()
2937 aen_entry->aen_data.ioc.mac = bfa_ioc_get_mac(ioc); in bfa_ioc_aen_post()
2940 aen_entry->aen_data.ioc.mac = bfa_ioc_get_mac(ioc); in bfa_ioc_aen_post()
2948 aen_entry->aen_data.ioc.ioc_type = ioc_type; in bfa_ioc_aen_post()
2949 bfad_im_post_vendor_event(aen_entry, bfad, ++ioc->ioc_aen_seq, in bfa_ioc_aen_post()
2957 bfa_ioc_debug_fwsave(struct bfa_ioc_s *ioc, void *trcdata, int *trclen) in bfa_ioc_debug_fwsave() argument
2961 if (ioc->dbg_fwsave_len == 0) in bfa_ioc_debug_fwsave()
2965 if (tlen > ioc->dbg_fwsave_len) in bfa_ioc_debug_fwsave()
2966 tlen = ioc->dbg_fwsave_len; in bfa_ioc_debug_fwsave()
2968 memcpy(trcdata, ioc->dbg_fwsave, tlen); in bfa_ioc_debug_fwsave()
2978 bfa_ioc_debug_fwtrc(struct bfa_ioc_s *ioc, void *trcdata, int *trclen) in bfa_ioc_debug_fwtrc() argument
2980 u32 loff = BFA_DBG_FWTRC_OFF(bfa_ioc_portid(ioc)); in bfa_ioc_debug_fwtrc()
2984 bfa_trc(ioc, *trclen); in bfa_ioc_debug_fwtrc()
2990 status = bfa_ioc_smem_read(ioc, trcdata, loff, tlen); in bfa_ioc_debug_fwtrc()
2996 bfa_ioc_send_fwsync(struct bfa_ioc_s *ioc) in bfa_ioc_send_fwsync() argument
3002 bfa_ioc_portid(ioc)); in bfa_ioc_send_fwsync()
3003 req->clscode = cpu_to_be16(ioc->clscode); in bfa_ioc_send_fwsync()
3004 bfa_ioc_mbox_queue(ioc, &cmd); in bfa_ioc_send_fwsync()
3008 bfa_ioc_fwsync(struct bfa_ioc_s *ioc) in bfa_ioc_fwsync() argument
3012 bfa_ioc_send_fwsync(ioc); in bfa_ioc_fwsync()
3025 while (bfa_ioc_mbox_cmd_pending(ioc) && fwsync_iter > 0) in bfa_ioc_fwsync()
3033 bfa_ioc_debug_fwcore(struct bfa_ioc_s *ioc, void *buf, in bfa_ioc_debug_fwcore() argument
3039 u32 smem_len = BFA_IOC_FW_SMEM_SIZE(ioc); in bfa_ioc_debug_fwcore()
3054 bfa_ioc_fwsync(ioc); in bfa_ioc_debug_fwcore()
3059 status = bfa_ioc_smem_read(ioc, buf, loff, dlen); in bfa_ioc_debug_fwcore()
3080 bfa_ioc_fw_stats_get(struct bfa_ioc_s *ioc, void *stats) in bfa_ioc_fw_stats_get() argument
3083 BFI_IOC_FWSTATS_SZ * (bfa_ioc_portid(ioc)); in bfa_ioc_fw_stats_get()
3087 if (ioc->stats_busy) { in bfa_ioc_fw_stats_get()
3088 bfa_trc(ioc, ioc->stats_busy); in bfa_ioc_fw_stats_get()
3091 ioc->stats_busy = BFA_TRUE; in bfa_ioc_fw_stats_get()
3094 status = bfa_ioc_smem_read(ioc, stats, loff, tlen); in bfa_ioc_fw_stats_get()
3096 ioc->stats_busy = BFA_FALSE; in bfa_ioc_fw_stats_get()
3101 bfa_ioc_fw_stats_clear(struct bfa_ioc_s *ioc) in bfa_ioc_fw_stats_clear() argument
3104 BFI_IOC_FWSTATS_SZ * (bfa_ioc_portid(ioc)); in bfa_ioc_fw_stats_clear()
3108 if (ioc->stats_busy) { in bfa_ioc_fw_stats_clear()
3109 bfa_trc(ioc, ioc->stats_busy); in bfa_ioc_fw_stats_clear()
3112 ioc->stats_busy = BFA_TRUE; in bfa_ioc_fw_stats_clear()
3115 status = bfa_ioc_smem_clr(ioc, loff, tlen); in bfa_ioc_fw_stats_clear()
3117 ioc->stats_busy = BFA_FALSE; in bfa_ioc_fw_stats_clear()
3125 bfa_ioc_debug_save_ftrc(struct bfa_ioc_s *ioc) in bfa_ioc_debug_save_ftrc() argument
3129 if (ioc->dbg_fwsave_once) { in bfa_ioc_debug_save_ftrc()
3130 ioc->dbg_fwsave_once = BFA_FALSE; in bfa_ioc_debug_save_ftrc()
3131 if (ioc->dbg_fwsave_len) { in bfa_ioc_debug_save_ftrc()
3132 tlen = ioc->dbg_fwsave_len; in bfa_ioc_debug_save_ftrc()
3133 bfa_ioc_debug_fwtrc(ioc, ioc->dbg_fwsave, &tlen); in bfa_ioc_debug_save_ftrc()
3142 bfa_ioc_recover(struct bfa_ioc_s *ioc) in bfa_ioc_recover() argument
3144 bfa_ioc_stats(ioc, ioc_hbfails); in bfa_ioc_recover()
3145 ioc->stats.hb_count = ioc->hb_count; in bfa_ioc_recover()
3146 bfa_fsm_send_event(ioc, IOC_E_HBFAIL); in bfa_ioc_recover()
3155 struct bfa_ioc_s *ioc = (struct bfa_ioc_s *) ioc_arg; in bfa_iocpf_timeout() local
3157 bfa_trc(ioc, 0); in bfa_iocpf_timeout()
3158 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT); in bfa_iocpf_timeout()
3164 struct bfa_ioc_s *ioc = (struct bfa_ioc_s *) ioc_arg; in bfa_iocpf_sem_timeout() local
3166 bfa_ioc_hw_sem_get(ioc); in bfa_iocpf_sem_timeout()
3170 bfa_ioc_poll_fwinit(struct bfa_ioc_s *ioc) in bfa_ioc_poll_fwinit() argument
3172 u32 fwstate = bfa_ioc_get_cur_ioc_fwstate(ioc); in bfa_ioc_poll_fwinit()
3174 bfa_trc(ioc, fwstate); in bfa_ioc_poll_fwinit()
3177 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY); in bfa_ioc_poll_fwinit()
3181 if (ioc->iocpf.poll_time >= (3 * BFA_IOC_TOV)) in bfa_ioc_poll_fwinit()
3182 bfa_iocpf_timeout(ioc); in bfa_ioc_poll_fwinit()
3184 ioc->iocpf.poll_time += BFA_IOC_POLL_TOV; in bfa_ioc_poll_fwinit()
3185 bfa_iocpf_poll_timer_start(ioc); in bfa_ioc_poll_fwinit()
3192 struct bfa_ioc_s *ioc = (struct bfa_ioc_s *) ioc_arg; in bfa_iocpf_poll_timeout() local
3194 bfa_ioc_poll_fwinit(ioc); in bfa_iocpf_poll_timeout()
3300 bfa_trc(ablk->ioc, msg->mh.msg_id); in bfa_ablk_isr()
3315 ablk->ioc->port_mode_cfg = rsp->port_mode; in bfa_ablk_isr()
3346 bfa_trc(ablk->ioc, event); in bfa_ablk_notify()
3385 bfa_ablk_attach(struct bfa_ablk_s *ablk, struct bfa_ioc_s *ioc) in bfa_ablk_attach() argument
3387 ablk->ioc = ioc; in bfa_ablk_attach()
3389 bfa_ioc_mbox_regisr(ablk->ioc, BFI_MC_ABLK, bfa_ablk_isr, ablk); in bfa_ablk_attach()
3392 list_add_tail(&ablk->ioc_notify.qe, &ablk->ioc->notify_q); in bfa_ablk_attach()
3403 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_query()
3404 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_query()
3409 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_query()
3420 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_query()
3422 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_query()
3435 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_pf_create()
3436 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_pf_create()
3441 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_pf_create()
3452 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_pf_create()
3457 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_pf_create()
3468 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_pf_delete()
3469 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_pf_delete()
3474 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_pf_delete()
3484 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_pf_delete()
3486 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_pf_delete()
3497 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_adapter_config()
3498 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_adapter_config()
3503 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_adapter_config()
3513 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_adapter_config()
3517 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_adapter_config()
3528 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_port_config()
3529 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_port_config()
3534 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_port_config()
3544 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_port_config()
3549 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_port_config()
3560 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_pf_update()
3561 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_pf_update()
3566 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_pf_update()
3576 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_pf_update()
3580 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_pf_update()
3590 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_optrom_en()
3591 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_optrom_en()
3596 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_optrom_en()
3606 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_optrom_en()
3607 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_optrom_en()
3617 if (!bfa_ioc_is_operational(ablk->ioc)) { in bfa_ablk_optrom_dis()
3618 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE); in bfa_ablk_optrom_dis()
3623 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY); in bfa_ablk_optrom_dis()
3633 bfa_ioc_portid(ablk->ioc)); in bfa_ablk_optrom_dis()
3634 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb); in bfa_ablk_optrom_dis()
3720 struct bfad_s *bfad = (struct bfad_s *)sfp->ioc->bfa->bfad; in bfa_sfp_scn_aen_post()
3731 aen_entry->aen_data.port.ioc_type = bfa_ioc_get_type(sfp->ioc); in bfa_sfp_scn_aen_post()
3732 aen_entry->aen_data.port.pwwn = sfp->ioc->attr->pwwn; in bfa_sfp_scn_aen_post()
3733 aen_entry->aen_data.port.mac = bfa_ioc_get_mac(sfp->ioc); in bfa_sfp_scn_aen_post()
3758 bfad_im_post_vendor_event(aen_entry, bfad, ++sfp->ioc->ioc_aen_seq, in bfa_sfp_scn_aen_post()
3774 bfa_ioc_portid(sfp->ioc)); in bfa_sfp_getdata_send()
3777 bfa_ioc_mbox_queue(sfp->ioc, &sfp->mbcmd); in bfa_sfp_getdata_send()
4031 bfa_sfp_attach(struct bfa_sfp_s *sfp, struct bfa_ioc_s *ioc, void *dev, in bfa_sfp_attach() argument
4035 sfp->ioc = ioc; in bfa_sfp_attach()
4051 bfa_ioc_mbox_regisr(sfp->ioc, BFI_MC_SFP, bfa_sfp_intr, sfp); in bfa_sfp_attach()
4054 list_add_tail(&sfp->ioc_notify.qe, &sfp->ioc->notify_q); in bfa_sfp_attach()
4084 if (!bfa_ioc_is_operational(sfp->ioc)) { in bfa_sfp_show()
4114 if (!bfa_ioc_is_operational(sfp->ioc)) { in bfa_sfp_media()
4149 if (!bfa_ioc_is_operational(sfp->ioc)) in bfa_sfp_speed()
4153 if (bfa_mfg_is_mezz(sfp->ioc->attr->card_type)) in bfa_sfp_speed()
4202 bfa_flash_aen_audit_post(struct bfa_ioc_s *ioc, enum bfa_audit_aen_event event, in bfa_flash_aen_audit_post() argument
4205 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad; in bfa_flash_aen_audit_post()
4212 aen_entry->aen_data.audit.pwwn = ioc->attr->pwwn; in bfa_flash_aen_audit_post()
4217 bfad_im_post_vendor_event(aen_entry, bfad, ++ioc->ioc_aen_seq, in bfa_flash_aen_audit_post()
4263 bfa_ioc_portid(flash->ioc)); in bfa_flash_query_send()
4266 bfa_ioc_mbox_queue(flash->ioc, &flash->mb); in bfa_flash_query_send()
4292 bfa_ioc_portid(flash->ioc)); in bfa_flash_write_send()
4295 bfa_ioc_mbox_queue(flash->ioc, &flash->mb); in bfa_flash_write_send()
4321 bfa_ioc_portid(flash->ioc)); in bfa_flash_read_send()
4323 bfa_ioc_mbox_queue(flash->ioc, &flash->mb); in bfa_flash_read_send()
4341 bfa_ioc_portid(flash->ioc)); in bfa_flash_erase_send()
4342 bfa_ioc_mbox_queue(flash->ioc, &flash->mb); in bfa_flash_erase_send()
4451 bfa_ioc_aen_post(flash->ioc, BFA_IOC_AEN_FWCFG_ERROR); in bfa_flash_intr()
4456 bfa_ioc_aen_post(flash->ioc, in bfa_flash_intr()
4490 bfa_flash_attach(struct bfa_flash_s *flash, struct bfa_ioc_s *ioc, void *dev, in bfa_flash_attach() argument
4493 flash->ioc = ioc; in bfa_flash_attach()
4499 bfa_ioc_mbox_regisr(flash->ioc, BFI_MC_FLASH, bfa_flash_intr, flash); in bfa_flash_attach()
4502 list_add_tail(&flash->ioc_notify.qe, &flash->ioc->notify_q); in bfa_flash_attach()
4549 if (!bfa_ioc_is_operational(flash->ioc)) in bfa_flash_get_attr()
4585 if (!bfa_ioc_is_operational(flash->ioc)) in bfa_flash_erase_part()
4600 bfa_flash_aen_audit_post(flash->ioc, BFA_AUDIT_AEN_FLASH_ERASE, in bfa_flash_erase_part()
4630 if (!bfa_ioc_is_operational(flash->ioc)) in bfa_flash_update_part()
4687 if (!bfa_ioc_is_operational(flash->ioc)) in bfa_flash_read_part()
4772 struct bfa_ioc_s *ioc = diag->ioc; in bfa_diag_memtest_done() local
4777 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff); in bfa_diag_memtest_done()
4780 writel(pgnum, ioc->ioc_regs.host_page_num_fn); in bfa_diag_memtest_done()
4786 bfa_mem_read(ioc->ioc_regs.smem_page_start, loff); in bfa_diag_memtest_done()
4791 bfa_ioc_reset_fwstate(ioc); in bfa_diag_memtest_done()
4850 bfa_ioc_portid(diag->ioc)); in diag_fwping_send()
4853 bfa_ioc_mbox_queue(diag->ioc, &diag->fwping.mbcmd); in diag_fwping_send()
4921 bfa_ioc_portid(diag->ioc)); in diag_tempsensor_send()
4923 bfa_ioc_mbox_queue(diag->ioc, &diag->tsensor.mbcmd); in diag_tempsensor_send()
4976 bfa_ioc_portid(diag->ioc)); in diag_ledtest_send()
4992 msg->portid = bfa_ioc_portid(diag->ioc); in diag_ledtest_send()
4997 bfa_ioc_mbox_queue(diag->ioc, &diag->ledtest.mbcmd); in diag_ledtest_send()
5019 bfa_ioc_portid(diag->ioc)); in diag_portbeacon_send()
5023 bfa_ioc_mbox_queue(diag->ioc, &diag->beacon.mbcmd); in diag_portbeacon_send()
5083 if (!bfa_ioc_adapter_is_disabled(diag->ioc)) in bfa_diag_memtest()
5098 bfa_ioc_boot(diag->ioc, BFI_FWBOOT_TYPE_MEMTEST, BFI_FWBOOT_ENV_OS); in bfa_diag_memtest()
5100 memtest_tov = (bfa_ioc_asic_gen(diag->ioc) == BFI_ASIC_GEN_CT2) ? in bfa_diag_memtest()
5102 bfa_timer_begin(diag->ioc->timer_mod, &diag->timer, in bfa_diag_memtest()
5128 if (!bfa_ioc_is_operational(diag->ioc)) in bfa_diag_fwping()
5131 if (bfa_asic_id_ct2(bfa_ioc_devid((diag->ioc))) && in bfa_diag_fwping()
5132 ((diag->ioc)->clscode == BFI_PCIFN_CLASS_ETH)) in bfa_diag_fwping()
5181 if (!bfa_ioc_is_operational(diag->ioc)) in bfa_diag_tsensor_query()
5210 if (!bfa_ioc_is_operational(diag->ioc)) in bfa_diag_ledtest()
5244 if (!bfa_ioc_is_operational(diag->ioc)) in bfa_diag_beacon_port()
5277 bfa_diag_attach(struct bfa_diag_s *diag, struct bfa_ioc_s *ioc, void *dev, in bfa_diag_attach() argument
5281 diag->ioc = ioc; in bfa_diag_attach()
5290 bfa_ioc_mbox_regisr(diag->ioc, BFI_MC_DIAG, bfa_diag_intr, diag); in bfa_diag_attach()
5293 list_add_tail(&diag->ioc_notify.qe, &diag->ioc->notify_q); in bfa_diag_attach()
5322 return (phy->ioc->attr->card_type == BFA_MFG_TYPE_LIGHTNING); in bfa_phy_present()
5361 bfa_ioc_portid(phy->ioc)); in bfa_phy_query_send()
5363 bfa_ioc_mbox_queue(phy->ioc, &phy->mb); in bfa_phy_query_send()
5391 bfa_ioc_portid(phy->ioc)); in bfa_phy_write_send()
5400 bfa_ioc_mbox_queue(phy->ioc, &phy->mb); in bfa_phy_write_send()
5425 bfa_ioc_portid(phy->ioc)); in bfa_phy_read_send()
5427 bfa_ioc_mbox_queue(phy->ioc, &phy->mb); in bfa_phy_read_send()
5444 bfa_ioc_portid(phy->ioc)); in bfa_phy_stats_send()
5446 bfa_ioc_mbox_queue(phy->ioc, &phy->mb); in bfa_phy_stats_send()
5474 bfa_phy_attach(struct bfa_phy_s *phy, struct bfa_ioc_s *ioc, void *dev, in bfa_phy_attach() argument
5477 phy->ioc = ioc; in bfa_phy_attach()
5483 bfa_ioc_mbox_regisr(phy->ioc, BFI_MC_PHY, bfa_phy_intr, phy); in bfa_phy_attach()
5486 list_add_tail(&phy->ioc_notify.qe, &phy->ioc->notify_q); in bfa_phy_attach()
5518 bfa_phy_busy(struct bfa_ioc_s *ioc) in bfa_phy_busy() argument
5522 rb = bfa_ioc_bar0(ioc); in bfa_phy_busy()
5546 if (!bfa_ioc_is_operational(phy->ioc)) in bfa_phy_get_attr()
5549 if (phy->op_busy || bfa_phy_busy(phy->ioc)) { in bfa_phy_get_attr()
5586 if (!bfa_ioc_is_operational(phy->ioc)) in bfa_phy_get_stats()
5589 if (phy->op_busy || bfa_phy_busy(phy->ioc)) { in bfa_phy_get_stats()
5630 if (!bfa_ioc_is_operational(phy->ioc)) in bfa_phy_update()
5637 if (phy->op_busy || bfa_phy_busy(phy->ioc)) { in bfa_phy_update()
5681 if (!bfa_ioc_is_operational(phy->ioc)) in bfa_phy_read()
5688 if (phy->op_busy || bfa_phy_busy(phy->ioc)) { in bfa_phy_read()
5921 bfa_ioc_suspend(&dconf->bfa->ioc); in bfa_dconf_sm_flash_read()
6097 dconf->instance = bfa->ioc.port_id; in bfa_dconf_attach()
6266 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc)); in bfa_fru_write_send()
6270 bfa_ioc_mbox_queue(fru->ioc, &fru->mb); in bfa_fru_write_send()
6293 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc)); in bfa_fru_read_send()
6295 bfa_ioc_mbox_queue(fru->ioc, &fru->mb); in bfa_fru_read_send()
6323 bfa_fru_attach(struct bfa_fru_s *fru, struct bfa_ioc_s *ioc, void *dev, in bfa_fru_attach() argument
6326 fru->ioc = ioc; in bfa_fru_attach()
6332 bfa_ioc_mbox_regisr(fru->ioc, BFI_MC_FRU, bfa_fru_intr, fru); in bfa_fru_attach()
6335 list_add_tail(&fru->ioc_notify.qe, &fru->ioc->notify_q); in bfa_fru_attach()
6386 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2 && in bfa_fruvpd_update()
6387 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2) in bfa_fruvpd_update()
6390 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK) in bfa_fruvpd_update()
6393 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_fruvpd_update()
6436 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_fruvpd_read()
6439 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK && in bfa_fruvpd_read()
6440 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2) in bfa_fruvpd_read()
6443 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_fruvpd_read()
6475 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_fruvpd_get_max_size()
6478 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_fruvpd_get_max_size()
6481 if (fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK || in bfa_fruvpd_get_max_size()
6482 fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK2) in bfa_fruvpd_get_max_size()
6509 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_tfru_write()
6512 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_tfru_write()
6554 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_tfru_read()
6557 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_tfru_read()