Lines Matching refs:ioc

80 static void bfa_ioc_hw_sem_get(struct bfa_ioc_s *ioc);
81 static void bfa_ioc_hwinit(struct bfa_ioc_s *ioc, bfa_boolean_t force);
82 static void bfa_ioc_timeout(void *ioc);
83 static void bfa_ioc_poll_fwinit(struct bfa_ioc_s *ioc);
84 static void bfa_ioc_send_enable(struct bfa_ioc_s *ioc);
85 static void bfa_ioc_send_disable(struct bfa_ioc_s *ioc);
86 static void bfa_ioc_send_getattr(struct bfa_ioc_s *ioc);
87 static void bfa_ioc_hb_monitor(struct bfa_ioc_s *ioc);
88 static void bfa_ioc_mbox_poll(struct bfa_ioc_s *ioc);
89 static void bfa_ioc_mbox_flush(struct bfa_ioc_s *ioc);
90 static void bfa_ioc_recover(struct bfa_ioc_s *ioc);
91 static void bfa_ioc_event_notify(struct bfa_ioc_s *ioc ,
93 static void bfa_ioc_disable_comp(struct bfa_ioc_s *ioc);
94 static void bfa_ioc_lpu_stop(struct bfa_ioc_s *ioc);
95 static void bfa_ioc_debug_save_ftrc(struct bfa_ioc_s *ioc);
96 static void bfa_ioc_fail_notify(struct bfa_ioc_s *ioc);
97 static void bfa_ioc_pf_fwmismatch(struct bfa_ioc_s *ioc);
176 IOCPF_E_FAIL = 7, /* failure notice by ioc sm */
177 IOCPF_E_INITFAIL = 8, /* init fail notice by ioc sm */
178 IOCPF_E_GETATTRFAIL = 9, /* init fail notice by ioc sm */
242 bfa_ioc_sm_uninit_entry(struct bfa_ioc_s *ioc)
250 bfa_ioc_sm_uninit(struct bfa_ioc_s *ioc, enum ioc_event event)
252 bfa_trc(ioc, event);
256 bfa_fsm_set_state(ioc, bfa_ioc_sm_reset);
260 bfa_sm_fault(ioc, event);
267 bfa_ioc_sm_reset_entry(struct bfa_ioc_s *ioc)
269 bfa_fsm_set_state(&ioc->iocpf, bfa_iocpf_sm_reset);
276 bfa_ioc_sm_reset(struct bfa_ioc_s *ioc, enum ioc_event event)
278 bfa_trc(ioc, event);
282 bfa_fsm_set_state(ioc, bfa_ioc_sm_enabling);
286 bfa_ioc_disable_comp(ioc);
290 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit);
294 bfa_sm_fault(ioc, event);
300 bfa_ioc_sm_enabling_entry(struct bfa_ioc_s *ioc)
302 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_ENABLE);
310 bfa_ioc_sm_enabling(struct bfa_ioc_s *ioc, enum ioc_event event)
312 bfa_trc(ioc, event);
316 bfa_fsm_set_state(ioc, bfa_ioc_sm_getattr);
322 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE);
323 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail);
325 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_INITFAIL);
329 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE);
330 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail);
334 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling);
338 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit);
339 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP);
346 bfa_sm_fault(ioc, event);
352 bfa_ioc_sm_getattr_entry(struct bfa_ioc_s *ioc)
354 bfa_ioc_timer_start(ioc);
355 bfa_ioc_send_getattr(ioc);
362 bfa_ioc_sm_getattr(struct bfa_ioc_s *ioc, enum ioc_event event)
364 bfa_trc(ioc, event);
368 bfa_ioc_timer_stop(ioc);
369 bfa_fsm_set_state(ioc, bfa_ioc_sm_op);
374 bfa_ioc_timer_stop(ioc);
377 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE);
378 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail);
380 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_GETATTRFAIL);
384 bfa_ioc_timer_stop(ioc);
385 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling);
392 bfa_sm_fault(ioc, event);
397 bfa_ioc_sm_op_entry(struct bfa_ioc_s *ioc)
399 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad;
401 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_OK);
402 bfa_ioc_event_notify(ioc, BFA_IOC_E_ENABLED);
403 bfa_ioc_hb_monitor(ioc);
405 bfa_ioc_aen_post(ioc, BFA_IOC_AEN_ENABLE);
409 bfa_ioc_sm_op(struct bfa_ioc_s *ioc, enum ioc_event event)
411 bfa_trc(ioc, event);
418 bfa_hb_timer_stop(ioc);
419 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling);
424 bfa_hb_timer_stop(ioc);
427 if (ioc->iocpf.auto_recover)
428 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail_retry);
430 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail);
432 bfa_ioc_fail_notify(ioc);
435 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FAIL);
439 bfa_sm_fault(ioc, event);
445 bfa_ioc_sm_disabling_entry(struct bfa_ioc_s *ioc)
447 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad;
448 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_DISABLE);
450 bfa_ioc_aen_post(ioc, BFA_IOC_AEN_DISABLE);
457 bfa_ioc_sm_disabling(struct bfa_ioc_s *ioc, enum ioc_event event)
459 bfa_trc(ioc, event);
463 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabled);
472 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FAIL);
476 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail);
477 bfa_ioc_disable_comp(ioc);
481 bfa_sm_fault(ioc, event);
489 bfa_ioc_sm_disabled_entry(struct bfa_ioc_s *ioc)
491 bfa_ioc_disable_comp(ioc);
495 bfa_ioc_sm_disabled(struct bfa_ioc_s *ioc, enum ioc_event event)
497 bfa_trc(ioc, event);
501 bfa_fsm_set_state(ioc, bfa_ioc_sm_enabling);
505 ioc->cbfn->disable_cbfn(ioc->bfa);
509 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit);
510 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP);
514 bfa_sm_fault(ioc, event);
520 bfa_ioc_sm_fail_retry_entry(struct bfa_ioc_s *ioc)
522 bfa_trc(ioc, 0);
529 bfa_ioc_sm_fail_retry(struct bfa_ioc_s *ioc, enum ioc_event event)
531 bfa_trc(ioc, event);
535 bfa_fsm_set_state(ioc, bfa_ioc_sm_getattr);
543 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE);
544 bfa_fsm_set_state(ioc, bfa_ioc_sm_fail);
546 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_INITFAIL);
550 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE);
551 bfa_fsm_set_state(ioc, bfa_ioc_sm_hwfail);
558 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling);
562 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit);
563 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP);
567 bfa_sm_fault(ioc, event);
573 bfa_ioc_sm_fail_entry(struct bfa_ioc_s *ioc)
575 bfa_trc(ioc, 0);
582 bfa_ioc_sm_fail(struct bfa_ioc_s *ioc, enum ioc_event event)
584 bfa_trc(ioc, event);
589 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE);
593 bfa_fsm_set_state(ioc, bfa_ioc_sm_disabling);
597 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit);
598 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_STOP);
607 bfa_sm_fault(ioc, event);
612 bfa_ioc_sm_hwfail_entry(struct bfa_ioc_s *ioc)
614 bfa_trc(ioc, 0);
618 bfa_ioc_sm_hwfail(struct bfa_ioc_s *ioc, enum ioc_event event)
620 bfa_trc(ioc, event);
624 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE);
628 ioc->cbfn->disable_cbfn(ioc->bfa);
632 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit);
636 bfa_sm_fault(ioc, event);
660 struct bfa_ioc_s *ioc = iocpf->ioc;
662 bfa_trc(ioc, event);
673 bfa_sm_fault(ioc, event);
690 r32 = readl(iocpf->ioc->ioc_regs.ioc_init_sem_reg);
693 r32 = readl(iocpf->ioc->ioc_regs.ioc_init_sem_reg);
697 fwstate = readl(iocpf->ioc->ioc_regs.ioc_fwstate);
699 writel(1, iocpf->ioc->ioc_regs.ioc_init_sem_reg);
703 bfa_ioc_fwver_get(iocpf->ioc, &fwhdr);
706 writel(1, iocpf->ioc->ioc_regs.ioc_init_sem_reg);
713 pgnum = PSS_SMEM_PGNUM(iocpf->ioc->ioc_regs.smem_pg0, loff);
715 writel(pgnum, iocpf->ioc->ioc_regs.host_page_num_fn);
718 bfa_mem_write(iocpf->ioc->ioc_regs.smem_page_start, loff, 0);
722 bfa_trc(iocpf->ioc, fwstate);
723 bfa_trc(iocpf->ioc, swab32(fwhdr.exec));
724 writel(BFI_IOC_UNINIT, iocpf->ioc->ioc_regs.ioc_fwstate);
725 writel(BFI_IOC_UNINIT, iocpf->ioc->ioc_regs.alt_ioc_fwstate);
730 readl(iocpf->ioc->ioc_regs.ioc_sem_reg);
731 writel(1, iocpf->ioc->ioc_regs.ioc_sem_reg);
736 writel(1, iocpf->ioc->ioc_regs.ioc_init_sem_reg);
739 bfa_ioc_hw_sem_get(iocpf->ioc);
748 struct bfa_ioc_s *ioc = iocpf->ioc;
750 bfa_trc(ioc, event);
754 if (bfa_ioc_firmware_lock(ioc)) {
755 if (bfa_ioc_sync_start(ioc)) {
756 bfa_ioc_sync_join(ioc);
759 bfa_ioc_firmware_unlock(ioc);
760 writel(1, ioc->ioc_regs.ioc_sem_reg);
761 bfa_sem_timer_start(ioc);
764 writel(1, ioc->ioc_regs.ioc_sem_reg);
771 bfa_fsm_send_event(ioc, IOC_E_HWFAILED);
775 bfa_sem_timer_stop(ioc);
777 bfa_fsm_send_event(ioc, IOC_E_DISABLED);
781 bfa_sem_timer_stop(ioc);
786 bfa_sm_fault(ioc, event);
800 bfa_ioc_pf_fwmismatch(iocpf->ioc);
803 bfa_iocpf_timer_start(iocpf->ioc);
812 struct bfa_ioc_s *ioc = iocpf->ioc;
814 bfa_trc(ioc, event);
822 bfa_iocpf_timer_stop(ioc);
824 bfa_fsm_send_event(ioc, IOC_E_DISABLED);
828 bfa_iocpf_timer_stop(ioc);
833 bfa_sm_fault(ioc, event);
843 bfa_ioc_hw_sem_get(iocpf->ioc);
852 struct bfa_ioc_s *ioc = iocpf->ioc;
854 bfa_trc(ioc, event);
858 if (bfa_ioc_sync_complete(ioc)) {
859 bfa_ioc_sync_join(ioc);
862 writel(1, ioc->ioc_regs.ioc_sem_reg);
863 bfa_sem_timer_start(ioc);
869 bfa_fsm_send_event(ioc, IOC_E_HWFAILED);
873 bfa_sem_timer_stop(ioc);
878 bfa_sm_fault(ioc, event);
886 bfa_ioc_hwinit(iocpf->ioc, BFA_FALSE);
896 struct bfa_ioc_s *ioc = iocpf->ioc;
898 bfa_trc(ioc, event);
906 writel(1, ioc->ioc_regs.ioc_sem_reg);
907 bfa_fsm_send_event(ioc, IOC_E_PFFAILED);
912 bfa_iocpf_timer_stop(ioc);
913 bfa_ioc_sync_leave(ioc);
914 writel(1, ioc->ioc_regs.ioc_sem_reg);
919 bfa_sm_fault(ioc, event);
926 bfa_iocpf_timer_start(iocpf->ioc);
930 iocpf->ioc->cbfn->reset_cbfn(iocpf->ioc->bfa);
931 bfa_ioc_send_enable(iocpf->ioc);
941 struct bfa_ioc_s *ioc = iocpf->ioc;
943 bfa_trc(ioc, event);
947 bfa_iocpf_timer_stop(ioc);
948 writel(1, ioc->ioc_regs.ioc_sem_reg);
953 bfa_iocpf_timer_stop(ioc);
959 writel(1, ioc->ioc_regs.ioc_sem_reg);
961 bfa_fsm_send_event(ioc, IOC_E_PFFAILED);
966 bfa_iocpf_timer_stop(ioc);
967 writel(1, ioc->ioc_regs.ioc_sem_reg);
972 bfa_sm_fault(ioc, event);
979 bfa_fsm_send_event(iocpf->ioc, IOC_E_ENABLED);
985 struct bfa_ioc_s *ioc = iocpf->ioc;
987 bfa_trc(ioc, event);
1003 bfa_sm_fault(ioc, event);
1010 bfa_iocpf_timer_start(iocpf->ioc);
1011 bfa_ioc_send_disable(iocpf->ioc);
1020 struct bfa_ioc_s *ioc = iocpf->ioc;
1022 bfa_trc(ioc, event);
1026 bfa_iocpf_timer_stop(ioc);
1031 bfa_iocpf_timer_stop(ioc);
1037 writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate);
1045 bfa_sm_fault(ioc, event);
1052 bfa_ioc_hw_sem_get(iocpf->ioc);
1061 struct bfa_ioc_s *ioc = iocpf->ioc;
1063 bfa_trc(ioc, event);
1067 bfa_ioc_sync_leave(ioc);
1068 writel(1, ioc->ioc_regs.ioc_sem_reg);
1074 bfa_fsm_send_event(ioc, IOC_E_HWFAILED);
1081 bfa_sm_fault(ioc, event);
1091 bfa_ioc_mbox_flush(iocpf->ioc);
1092 bfa_fsm_send_event(iocpf->ioc, IOC_E_DISABLED);
1098 struct bfa_ioc_s *ioc = iocpf->ioc;
1100 bfa_trc(ioc, event);
1108 bfa_ioc_firmware_unlock(ioc);
1113 bfa_sm_fault(ioc, event);
1120 bfa_ioc_debug_save_ftrc(iocpf->ioc);
1121 bfa_ioc_hw_sem_get(iocpf->ioc);
1130 struct bfa_ioc_s *ioc = iocpf->ioc;
1132 bfa_trc(ioc, event);
1136 bfa_ioc_notify_fail(ioc);
1137 bfa_ioc_sync_leave(ioc);
1138 writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate);
1139 writel(1, ioc->ioc_regs.ioc_sem_reg);
1145 bfa_fsm_send_event(ioc, IOC_E_HWFAILED);
1149 bfa_sem_timer_stop(ioc);
1154 bfa_sem_timer_stop(ioc);
1155 bfa_ioc_firmware_unlock(ioc);
1163 bfa_sm_fault(ioc, event);
1170 bfa_trc(iocpf->ioc, 0);
1179 struct bfa_ioc_s *ioc = iocpf->ioc;
1181 bfa_trc(ioc, event);
1189 bfa_ioc_firmware_unlock(ioc);
1194 bfa_sm_fault(ioc, event);
1204 bfa_ioc_lpu_stop(iocpf->ioc);
1209 bfa_ioc_mbox_flush(iocpf->ioc);
1211 bfa_ioc_hw_sem_get(iocpf->ioc);
1217 struct bfa_ioc_s *ioc = iocpf->ioc;
1219 bfa_trc(ioc, event);
1223 bfa_ioc_sync_ack(ioc);
1224 bfa_ioc_notify_fail(ioc);
1226 bfa_ioc_sync_leave(ioc);
1227 writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate);
1228 writel(1, ioc->ioc_regs.ioc_sem_reg);
1231 if (bfa_ioc_sync_complete(ioc))
1234 writel(1, ioc->ioc_regs.ioc_sem_reg);
1242 bfa_fsm_send_event(ioc, IOC_E_HWFAILED);
1246 bfa_sem_timer_stop(ioc);
1254 bfa_sm_fault(ioc, event);
1261 bfa_trc(iocpf->ioc, 0);
1270 struct bfa_ioc_s *ioc = iocpf->ioc;
1272 bfa_trc(ioc, event);
1280 bfa_sm_fault(ioc, event);
1292 bfa_ioc_event_notify(struct bfa_ioc_s *ioc, enum bfa_ioc_event_e event)
1297 list_for_each(qe, &ioc->notify_q) {
1304 bfa_ioc_disable_comp(struct bfa_ioc_s *ioc)
1306 ioc->cbfn->disable_cbfn(ioc->bfa);
1307 bfa_ioc_event_notify(ioc, BFA_IOC_E_DISABLED);
1332 bfa_ioc_hw_sem_get(struct bfa_ioc_s *ioc)
1340 r32 = readl(ioc->ioc_regs.ioc_sem_reg);
1343 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEM_ERROR);
1347 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_SEMLOCKED);
1351 bfa_sem_timer_start(ioc);
1358 bfa_ioc_lmem_init(struct bfa_ioc_s *ioc)
1364 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg);
1372 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg);
1379 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg);
1388 bfa_trc(ioc, pss_ctl);
1391 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg);
1395 bfa_ioc_lpu_start(struct bfa_ioc_s *ioc)
1402 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg);
1405 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg);
1409 bfa_ioc_lpu_stop(struct bfa_ioc_s *ioc)
1416 pss_ctl = readl(ioc->ioc_regs.pss_ctl_reg);
1419 writel(pss_ctl, ioc->ioc_regs.pss_ctl_reg);
1426 bfa_ioc_fwver_get(struct bfa_ioc_s *ioc, struct bfi_ioc_image_hdr_s *fwhdr)
1433 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff);
1435 writel(pgnum, ioc->ioc_regs.host_page_num_fn);
1440 bfa_mem_read(ioc->ioc_regs.smem_page_start, loff);
1449 bfa_ioc_fwver_cmp(struct bfa_ioc_s *ioc, struct bfi_ioc_image_hdr_s *fwhdr)
1455 bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), 0);
1459 bfa_trc(ioc, i);
1460 bfa_trc(ioc, fwhdr->md5sum[i]);
1461 bfa_trc(ioc, drv_fwhdr->md5sum[i]);
1466 bfa_trc(ioc, fwhdr->md5sum[0]);
1475 bfa_ioc_fwver_valid(struct bfa_ioc_s *ioc, u32 boot_env)
1479 bfa_ioc_fwver_get(ioc, &fwhdr);
1481 bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), 0);
1484 bfa_trc(ioc, fwhdr.signature);
1485 bfa_trc(ioc, drv_fwhdr->signature);
1490 bfa_trc(ioc, fwhdr.bootenv);
1491 bfa_trc(ioc, boot_env);
1495 return bfa_ioc_fwver_cmp(ioc, &fwhdr);
1502 bfa_ioc_msgflush(struct bfa_ioc_s *ioc)
1506 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd);
1508 writel(1, ioc->ioc_regs.lpu_mbox_cmd);
1512 bfa_ioc_hwinit(struct bfa_ioc_s *ioc, bfa_boolean_t force)
1519 ioc_fwstate = readl(ioc->ioc_regs.ioc_fwstate);
1524 bfa_trc(ioc, ioc_fwstate);
1533 BFA_FALSE : bfa_ioc_fwver_valid(ioc, boot_env);
1536 bfa_ioc_boot(ioc, boot_type, boot_env);
1537 bfa_ioc_poll_fwinit(ioc);
1546 bfa_ioc_poll_fwinit(ioc);
1564 bfa_ioc_msgflush(ioc);
1565 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY);
1572 bfa_ioc_boot(ioc, boot_type, boot_env);
1573 bfa_ioc_poll_fwinit(ioc);
1579 struct bfa_ioc_s *ioc = (struct bfa_ioc_s *) ioc_arg;
1581 bfa_trc(ioc, 0);
1582 bfa_fsm_send_event(ioc, IOC_E_TIMEOUT);
1586 bfa_ioc_mbox_send(struct bfa_ioc_s *ioc, void *ioc_msg, int len)
1591 bfa_trc(ioc, msgp[0]);
1592 bfa_trc(ioc, len);
1601 ioc->ioc_regs.hfn_mbox + i * sizeof(u32));
1604 writel(0, ioc->ioc_regs.hfn_mbox + i * sizeof(u32));
1609 writel(1, ioc->ioc_regs.hfn_mbox_cmd);
1610 (void) readl(ioc->ioc_regs.hfn_mbox_cmd);
1614 bfa_ioc_send_enable(struct bfa_ioc_s *ioc)
1620 bfa_ioc_portid(ioc));
1621 enable_req.clscode = cpu_to_be16(ioc->clscode);
1624 bfa_ioc_mbox_send(ioc, &enable_req, sizeof(struct bfi_ioc_ctrl_req_s));
1628 bfa_ioc_send_disable(struct bfa_ioc_s *ioc)
1633 bfa_ioc_portid(ioc));
1634 bfa_ioc_mbox_send(ioc, &disable_req, sizeof(struct bfi_ioc_ctrl_req_s));
1638 bfa_ioc_send_getattr(struct bfa_ioc_s *ioc)
1643 bfa_ioc_portid(ioc));
1644 bfa_dma_be_addr_set(attr_req.attr_addr, ioc->attr_dma.pa);
1645 bfa_ioc_mbox_send(ioc, &attr_req, sizeof(attr_req));
1651 struct bfa_ioc_s *ioc = cbarg;
1654 hb_count = readl(ioc->ioc_regs.heartbeat);
1655 if (ioc->hb_count == hb_count) {
1656 bfa_ioc_recover(ioc);
1659 ioc->hb_count = hb_count;
1662 bfa_ioc_mbox_poll(ioc);
1663 bfa_hb_timer_start(ioc);
1667 bfa_ioc_hb_monitor(struct bfa_ioc_s *ioc)
1669 ioc->hb_count = readl(ioc->ioc_regs.heartbeat);
1670 bfa_hb_timer_start(ioc);
1677 bfa_ioc_download_fw(struct bfa_ioc_s *ioc, u32 boot_type,
1687 bfa_trc(ioc, bfa_cb_image_get_size(bfa_ioc_asic_gen(ioc)));
1688 fwimg = bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc), chunkno);
1690 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff);
1693 writel(pgnum, ioc->ioc_regs.host_page_num_fn);
1695 for (i = 0; i < bfa_cb_image_get_size(bfa_ioc_asic_gen(ioc)); i++) {
1699 fwimg = bfa_cb_image_get_chunk(bfa_ioc_asic_gen(ioc),
1706 bfa_mem_write(ioc->ioc_regs.smem_page_start, loff,
1717 writel(pgnum, ioc->ioc_regs.host_page_num_fn);
1721 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0),
1722 ioc->ioc_regs.host_page_num_fn);
1727 asicmode = BFI_FWBOOT_DEVMODE(ioc->asic_gen, ioc->asic_mode,
1728 ioc->port0_mode, ioc->port1_mode);
1729 bfa_mem_write(ioc->ioc_regs.smem_page_start, BFI_FWBOOT_DEVMODE_OFF,
1731 bfa_mem_write(ioc->ioc_regs.smem_page_start, BFI_FWBOOT_TYPE_OFF,
1733 bfa_mem_write(ioc->ioc_regs.smem_page_start, BFI_FWBOOT_ENV_OFF,
1742 bfa_ioc_getattr_reply(struct bfa_ioc_s *ioc)
1744 struct bfi_ioc_attr_s *attr = ioc->attr;
1749 ioc->fcmode = (attr->port_mode == BFI_PORT_MODE_FC);
1751 bfa_fsm_send_event(ioc, IOC_E_FWRSP_GETATTR);
1758 bfa_ioc_mbox_attach(struct bfa_ioc_s *ioc)
1760 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod;
1766 mod->mbhdlr[mc].cbarg = ioc->bfa;
1774 bfa_ioc_mbox_poll(struct bfa_ioc_s *ioc)
1776 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod;
1789 stat = readl(ioc->ioc_regs.hfn_mbox_cmd);
1797 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg));
1804 bfa_ioc_mbox_flush(struct bfa_ioc_s *ioc)
1806 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod;
1816 * @param[in] ioc memory for IOC
1822 bfa_ioc_smem_read(struct bfa_ioc_s *ioc, void *tbuf, u32 soff, u32 sz)
1829 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, soff);
1831 bfa_trc(ioc, pgnum);
1832 bfa_trc(ioc, loff);
1833 bfa_trc(ioc, sz);
1838 if (BFA_FALSE == bfa_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg)) {
1839 bfa_trc(ioc, 0);
1843 writel(pgnum, ioc->ioc_regs.host_page_num_fn);
1846 bfa_trc(ioc, len);
1848 r32 = bfa_mem_read(ioc->ioc_regs.smem_page_start, loff);
1858 writel(pgnum, ioc->ioc_regs.host_page_num_fn);
1861 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0),
1862 ioc->ioc_regs.host_page_num_fn);
1866 readl(ioc->ioc_regs.ioc_init_sem_reg);
1867 writel(1, ioc->ioc_regs.ioc_init_sem_reg);
1869 bfa_trc(ioc, pgnum);
1876 * @param[in] ioc memory for IOC
1881 bfa_ioc_smem_clr(struct bfa_ioc_s *ioc, u32 soff, u32 sz)
1886 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, soff);
1888 bfa_trc(ioc, pgnum);
1889 bfa_trc(ioc, loff);
1890 bfa_trc(ioc, sz);
1895 if (BFA_FALSE == bfa_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg)) {
1896 bfa_trc(ioc, 0);
1900 writel(pgnum, ioc->ioc_regs.host_page_num_fn);
1903 bfa_trc(ioc, len);
1905 bfa_mem_write(ioc->ioc_regs.smem_page_start, loff, 0);
1914 writel(pgnum, ioc->ioc_regs.host_page_num_fn);
1917 writel(PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, 0),
1918 ioc->ioc_regs.host_page_num_fn);
1923 readl(ioc->ioc_regs.ioc_init_sem_reg);
1924 writel(1, ioc->ioc_regs.ioc_init_sem_reg);
1925 bfa_trc(ioc, pgnum);
1930 bfa_ioc_fail_notify(struct bfa_ioc_s *ioc)
1932 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad;
1937 ioc->cbfn->hbfail_cbfn(ioc->bfa);
1938 bfa_ioc_event_notify(ioc, BFA_IOC_E_FAILED);
1940 bfa_ioc_debug_save_ftrc(ioc);
1944 bfa_ioc_aen_post(ioc, BFA_IOC_AEN_HBFAIL);
1949 bfa_ioc_pf_fwmismatch(struct bfa_ioc_s *ioc)
1951 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad;
1955 ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE);
1959 bfa_ioc_aen_post(ioc, BFA_IOC_AEN_FWMISMATCH);
1963 bfa_ioc_pll_init(struct bfa_ioc_s *ioc)
1969 bfa_ioc_sem_get(ioc->ioc_regs.ioc_init_sem_reg);
1971 bfa_ioc_pll_init_asic(ioc);
1973 ioc->pllinit = BFA_TRUE;
1978 bfa_ioc_lmem_init(ioc);
1983 readl(ioc->ioc_regs.ioc_init_sem_reg);
1984 writel(1, ioc->ioc_regs.ioc_init_sem_reg);
1994 bfa_ioc_boot(struct bfa_ioc_s *ioc, u32 boot_type, u32 boot_env)
1996 bfa_ioc_stats(ioc, ioc_boots);
1998 if (bfa_ioc_pll_init(ioc) != BFA_STATUS_OK)
2005 writel(BFI_IOC_MEMTEST, ioc->ioc_regs.ioc_fwstate);
2006 writel(BFI_IOC_MEMTEST, ioc->ioc_regs.alt_ioc_fwstate);
2008 writel(BFI_IOC_INITING, ioc->ioc_regs.ioc_fwstate);
2009 writel(BFI_IOC_INITING, ioc->ioc_regs.alt_ioc_fwstate);
2012 bfa_ioc_msgflush(ioc);
2013 bfa_ioc_download_fw(ioc, boot_type, boot_env);
2014 bfa_ioc_lpu_start(ioc);
2029 bfa_ioc_is_operational(struct bfa_ioc_s *ioc)
2031 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_op);
2035 bfa_ioc_is_initialized(struct bfa_ioc_s *ioc)
2037 u32 r32 = readl(ioc->ioc_regs.ioc_fwstate);
2045 bfa_ioc_msgget(struct bfa_ioc_s *ioc, void *mbmsg)
2051 r32 = readl(ioc->ioc_regs.lpu_mbox_cmd);
2060 r32 = readl(ioc->ioc_regs.lpu_mbox +
2068 writel(1, ioc->ioc_regs.lpu_mbox_cmd);
2069 readl(ioc->ioc_regs.lpu_mbox_cmd);
2075 bfa_ioc_isr(struct bfa_ioc_s *ioc, struct bfi_mbmsg_s *m)
2078 struct bfa_iocpf_s *iocpf = &ioc->iocpf;
2082 bfa_ioc_stats(ioc, ioc_isrs);
2089 ioc->port_mode = ioc->port_mode_cfg =
2091 ioc->ad_cap_bm = msg->fw_event.cap_bm;
2100 bfa_ioc_getattr_reply(ioc);
2104 bfa_trc(ioc, msg->mh.msg_id);
2112 * @param[in] ioc memory for IOC
2116 bfa_ioc_attach(struct bfa_ioc_s *ioc, void *bfa, struct bfa_ioc_cbfn_s *cbfn,
2119 ioc->bfa = bfa;
2120 ioc->cbfn = cbfn;
2121 ioc->timer_mod = timer_mod;
2122 ioc->fcmode = BFA_FALSE;
2123 ioc->pllinit = BFA_FALSE;
2124 ioc->dbg_fwsave_once = BFA_TRUE;
2125 ioc->iocpf.ioc = ioc;
2127 bfa_ioc_mbox_attach(ioc);
2128 INIT_LIST_HEAD(&ioc->notify_q);
2130 bfa_fsm_set_state(ioc, bfa_ioc_sm_uninit);
2131 bfa_fsm_send_event(ioc, IOC_E_RESET);
2138 bfa_ioc_detach(struct bfa_ioc_s *ioc)
2140 bfa_fsm_send_event(ioc, IOC_E_DETACH);
2141 INIT_LIST_HEAD(&ioc->notify_q);
2150 bfa_ioc_pci_init(struct bfa_ioc_s *ioc, struct bfa_pcidev_s *pcidev,
2153 ioc->clscode = clscode;
2154 ioc->pcidev = *pcidev;
2159 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_FC;
2160 ioc->asic_mode = BFI_ASIC_MODE_FC;
2165 ioc->asic_gen = BFI_ASIC_GEN_CB;
2166 ioc->fcmode = BFA_TRUE;
2167 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA;
2168 ioc->ad_cap_bm = BFA_CM_HBA;
2172 ioc->asic_gen = BFI_ASIC_GEN_CT;
2173 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH;
2174 ioc->asic_mode = BFI_ASIC_MODE_ETH;
2175 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_CNA;
2176 ioc->ad_cap_bm = BFA_CM_CNA;
2180 ioc->asic_gen = BFI_ASIC_GEN_CT;
2181 ioc->fcmode = BFA_TRUE;
2182 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA;
2183 ioc->ad_cap_bm = BFA_CM_HBA;
2187 ioc->asic_gen = BFI_ASIC_GEN_CT2;
2190 ioc->asic_mode = BFI_ASIC_MODE_FC16;
2191 ioc->fcmode = BFA_TRUE;
2192 ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA;
2193 ioc->ad_cap_bm = BFA_CM_HBA;
2195 ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH;
2196 ioc->asic_mode = BFI_ASIC_MODE_ETH;
2198 ioc->port_mode =
2199 ioc->port_mode_cfg = BFA_MODE_CNA;
2200 ioc->ad_cap_bm = BFA_CM_CNA;
2202 ioc->port_mode =
2203 ioc->port_mode_cfg = BFA_MODE_NIC;
2204 ioc->ad_cap_bm = BFA_CM_NIC;
2216 if (ioc->asic_gen == BFI_ASIC_GEN_CB)
2217 bfa_ioc_set_cb_hwif(ioc);
2218 else if (ioc->asic_gen == BFI_ASIC_GEN_CT)
2219 bfa_ioc_set_ct_hwif(ioc);
2221 WARN_ON(ioc->asic_gen != BFI_ASIC_GEN_CT2);
2222 bfa_ioc_set_ct2_hwif(ioc);
2223 bfa_ioc_ct2_poweron(ioc);
2226 bfa_ioc_map_port(ioc);
2227 bfa_ioc_reg_init(ioc);
2237 bfa_ioc_mem_claim(struct bfa_ioc_s *ioc, u8 *dm_kva, u64 dm_pa)
2242 ioc->attr_dma.kva = dm_kva;
2243 ioc->attr_dma.pa = dm_pa;
2244 ioc->attr = (struct bfi_ioc_attr_s *) dm_kva;
2248 bfa_ioc_enable(struct bfa_ioc_s *ioc)
2250 bfa_ioc_stats(ioc, ioc_enables);
2251 ioc->dbg_fwsave_once = BFA_TRUE;
2253 bfa_fsm_send_event(ioc, IOC_E_ENABLE);
2257 bfa_ioc_disable(struct bfa_ioc_s *ioc)
2259 bfa_ioc_stats(ioc, ioc_disables);
2260 bfa_fsm_send_event(ioc, IOC_E_DISABLE);
2269 bfa_ioc_debug_memclaim(struct bfa_ioc_s *ioc, void *dbg_fwsave)
2271 ioc->dbg_fwsave = dbg_fwsave;
2272 ioc->dbg_fwsave_len = (ioc->iocpf.auto_recover) ? BFA_DBG_FWTRC_LEN : 0;
2278 * @param[in] ioc IOC instance
2282 bfa_ioc_mbox_register(struct bfa_ioc_s *ioc, bfa_ioc_mbox_mcfunc_t *mcfuncs)
2284 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod;
2295 bfa_ioc_mbox_regisr(struct bfa_ioc_s *ioc, enum bfi_mclass mc,
2298 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod;
2308 * @param[in] ioc IOC instance
2312 bfa_ioc_mbox_queue(struct bfa_ioc_s *ioc, struct bfa_mbox_cmd_s *cmd)
2314 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod;
2328 stat = readl(ioc->ioc_regs.hfn_mbox_cmd);
2337 bfa_ioc_mbox_send(ioc, cmd->msg, sizeof(cmd->msg));
2344 bfa_ioc_mbox_isr(struct bfa_ioc_s *ioc)
2346 struct bfa_ioc_mbox_mod_s *mod = &ioc->mbox_mod;
2350 if (bfa_ioc_msgget(ioc, &m)) {
2356 bfa_ioc_isr(ioc, &m);
2366 bfa_ioc_lpu_read_stat(ioc);
2371 bfa_ioc_mbox_poll(ioc);
2375 bfa_ioc_error_isr(struct bfa_ioc_s *ioc)
2377 bfa_ioc_stats(ioc, ioc_hbfails);
2378 ioc->stats.hb_count = ioc->hb_count;
2379 bfa_fsm_send_event(ioc, IOC_E_HWERROR);
2386 bfa_ioc_is_disabled(struct bfa_ioc_s *ioc)
2388 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabling) ||
2389 bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabled);
2396 bfa_ioc_fw_mismatch(struct bfa_ioc_s *ioc)
2398 return bfa_fsm_cmp_state(ioc, bfa_ioc_sm_reset) ||
2399 bfa_fsm_cmp_state(&ioc->iocpf, bfa_iocpf_sm_fwcheck) ||
2400 bfa_fsm_cmp_state(&ioc->iocpf, bfa_iocpf_sm_mismatch);
2416 bfa_ioc_adapter_is_disabled(struct bfa_ioc_s *ioc)
2420 if (!bfa_fsm_cmp_state(ioc, bfa_ioc_sm_disabled))
2423 ioc_state = readl(ioc->ioc_regs.ioc_fwstate);
2427 if (ioc->pcidev.device_id != BFA_PCI_DEVICE_ID_FC_8G1P) {
2428 ioc_state = readl(ioc->ioc_regs.alt_ioc_fwstate);
2440 bfa_ioc_reset_fwstate(struct bfa_ioc_s *ioc)
2442 writel(BFI_IOC_UNINIT, ioc->ioc_regs.ioc_fwstate);
2443 writel(BFI_IOC_UNINIT, ioc->ioc_regs.alt_ioc_fwstate);
2448 bfa_ioc_get_adapter_attr(struct bfa_ioc_s *ioc,
2453 ioc_attr = ioc->attr;
2455 bfa_ioc_get_adapter_serial_num(ioc, ad_attr->serial_num);
2456 bfa_ioc_get_adapter_fw_ver(ioc, ad_attr->fw_ver);
2457 bfa_ioc_get_adapter_optrom_ver(ioc, ad_attr->optrom_ver);
2458 bfa_ioc_get_adapter_manufacturer(ioc, ad_attr->manufacturer);
2462 ad_attr->nports = bfa_ioc_get_nports(ioc);
2463 ad_attr->max_speed = bfa_ioc_speed_sup(ioc);
2465 bfa_ioc_get_adapter_model(ioc, ad_attr->model);
2467 bfa_ioc_get_adapter_model(ioc, ad_attr->model_descr);
2477 ad_attr->pwwn = ioc->attr->pwwn;
2478 ad_attr->mac = bfa_ioc_get_mac(ioc);
2485 bfa_ioc_get_pci_chip_rev(ioc, ad_attr->hw_ver);
2487 ad_attr->cna_capable = bfa_ioc_is_cna(ioc);
2489 !bfa_ioc_is_cna(ioc) && !ad_attr->is_mezz;
2493 bfa_ioc_get_type(struct bfa_ioc_s *ioc)
2495 if (ioc->clscode == BFI_PCIFN_CLASS_ETH)
2498 WARN_ON(ioc->clscode != BFI_PCIFN_CLASS_FC);
2500 return (ioc->attr->port_mode == BFI_PORT_MODE_FC)
2505 bfa_ioc_get_adapter_serial_num(struct bfa_ioc_s *ioc, char *serial_num)
2509 (void *)ioc->attr->brcd_serialnum,
2514 bfa_ioc_get_adapter_fw_ver(struct bfa_ioc_s *ioc, char *fw_ver)
2517 memcpy(fw_ver, ioc->attr->fw_version, BFA_VERSION_LEN);
2521 bfa_ioc_get_pci_chip_rev(struct bfa_ioc_s *ioc, char *chip_rev)
2531 chip_rev[4] = ioc->attr->asic_rev;
2536 bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc_s *ioc, char *optrom_ver)
2539 memcpy(optrom_ver, ioc->attr->optrom_version,
2544 bfa_ioc_get_adapter_manufacturer(struct bfa_ioc_s *ioc, char *manufacturer)
2551 bfa_ioc_get_adapter_model(struct bfa_ioc_s *ioc, char *model)
2558 ioc_attr = ioc->attr;
2565 bfa_ioc_get_state(struct bfa_ioc_s *ioc)
2568 enum bfa_ioc_state ioc_st = bfa_sm_to_state(ioc_sm_table, ioc->fsm);
2573 iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm);
2605 bfa_ioc_get_attr(struct bfa_ioc_s *ioc, struct bfa_ioc_attr_s *ioc_attr)
2609 ioc_attr->state = bfa_ioc_get_state(ioc);
2610 ioc_attr->port_id = ioc->port_id;
2611 ioc_attr->port_mode = ioc->port_mode;
2612 ioc_attr->port_mode_cfg = ioc->port_mode_cfg;
2613 ioc_attr->cap_bm = ioc->ad_cap_bm;
2615 ioc_attr->ioc_type = bfa_ioc_get_type(ioc);
2617 bfa_ioc_get_adapter_attr(ioc, &ioc_attr->adapter_attr);
2619 ioc_attr->pci_attr.device_id = ioc->pcidev.device_id;
2620 ioc_attr->pci_attr.pcifn = ioc->pcidev.pci_func;
2621 bfa_ioc_get_pci_chip_rev(ioc, ioc_attr->pci_attr.chip_rev);
2625 bfa_ioc_get_mac(struct bfa_ioc_s *ioc)
2630 if (bfa_ioc_get_type(ioc) == BFA_IOC_TYPE_FCoE)
2631 return ioc->attr->fcoe_mac;
2633 return ioc->attr->mac;
2637 bfa_ioc_get_mfg_mac(struct bfa_ioc_s *ioc)
2641 m = ioc->attr->mfg_mac;
2642 if (bfa_mfg_is_old_wwn_mac_model(ioc->attr->card_type))
2643 m.mac[MAC_ADDRLEN - 1] += bfa_ioc_pcifn(ioc);
2646 bfa_ioc_pcifn(ioc));
2655 bfa_ioc_aen_post(struct bfa_ioc_s *ioc, enum bfa_ioc_aen_event event)
2657 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad;
2665 ioc_type = bfa_ioc_get_type(ioc);
2668 aen_entry->aen_data.ioc.pwwn = ioc->attr->pwwn;
2671 aen_entry->aen_data.ioc.pwwn = ioc->attr->pwwn;
2672 aen_entry->aen_data.ioc.mac = bfa_ioc_get_mac(ioc);
2675 aen_entry->aen_data.ioc.mac = bfa_ioc_get_mac(ioc);
2683 aen_entry->aen_data.ioc.ioc_type = ioc_type;
2684 bfad_im_post_vendor_event(aen_entry, bfad, ++ioc->ioc_aen_seq,
2692 bfa_ioc_debug_fwsave(struct bfa_ioc_s *ioc, void *trcdata, int *trclen)
2696 if (ioc->dbg_fwsave_len == 0)
2700 if (tlen > ioc->dbg_fwsave_len)
2701 tlen = ioc->dbg_fwsave_len;
2703 memcpy(trcdata, ioc->dbg_fwsave, tlen);
2713 bfa_ioc_debug_fwtrc(struct bfa_ioc_s *ioc, void *trcdata, int *trclen)
2715 u32 loff = BFA_DBG_FWTRC_OFF(bfa_ioc_portid(ioc));
2719 bfa_trc(ioc, *trclen);
2725 status = bfa_ioc_smem_read(ioc, trcdata, loff, tlen);
2731 bfa_ioc_send_fwsync(struct bfa_ioc_s *ioc)
2737 bfa_ioc_portid(ioc));
2738 req->clscode = cpu_to_be16(ioc->clscode);
2739 bfa_ioc_mbox_queue(ioc, &cmd);
2743 bfa_ioc_fwsync(struct bfa_ioc_s *ioc)
2747 bfa_ioc_send_fwsync(ioc);
2760 while (bfa_ioc_mbox_cmd_pending(ioc) && fwsync_iter > 0)
2768 bfa_ioc_debug_fwcore(struct bfa_ioc_s *ioc, void *buf,
2774 u32 smem_len = BFA_IOC_FW_SMEM_SIZE(ioc);
2789 bfa_ioc_fwsync(ioc);
2794 status = bfa_ioc_smem_read(ioc, buf, loff, dlen);
2815 bfa_ioc_fw_stats_get(struct bfa_ioc_s *ioc, void *stats)
2818 BFI_IOC_FWSTATS_SZ * (bfa_ioc_portid(ioc));
2822 if (ioc->stats_busy) {
2823 bfa_trc(ioc, ioc->stats_busy);
2826 ioc->stats_busy = BFA_TRUE;
2829 status = bfa_ioc_smem_read(ioc, stats, loff, tlen);
2831 ioc->stats_busy = BFA_FALSE;
2836 bfa_ioc_fw_stats_clear(struct bfa_ioc_s *ioc)
2839 BFI_IOC_FWSTATS_SZ * (bfa_ioc_portid(ioc));
2843 if (ioc->stats_busy) {
2844 bfa_trc(ioc, ioc->stats_busy);
2847 ioc->stats_busy = BFA_TRUE;
2850 status = bfa_ioc_smem_clr(ioc, loff, tlen);
2852 ioc->stats_busy = BFA_FALSE;
2860 bfa_ioc_debug_save_ftrc(struct bfa_ioc_s *ioc)
2864 if (ioc->dbg_fwsave_once) {
2865 ioc->dbg_fwsave_once = BFA_FALSE;
2866 if (ioc->dbg_fwsave_len) {
2867 tlen = ioc->dbg_fwsave_len;
2868 bfa_ioc_debug_fwtrc(ioc, ioc->dbg_fwsave, &tlen);
2877 bfa_ioc_recover(struct bfa_ioc_s *ioc)
2879 bfa_ioc_stats(ioc, ioc_hbfails);
2880 ioc->stats.hb_count = ioc->hb_count;
2881 bfa_fsm_send_event(ioc, IOC_E_HBFAIL);
2890 struct bfa_ioc_s *ioc = (struct bfa_ioc_s *) ioc_arg;
2892 bfa_trc(ioc, 0);
2893 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT);
2899 struct bfa_ioc_s *ioc = (struct bfa_ioc_s *) ioc_arg;
2901 bfa_ioc_hw_sem_get(ioc);
2905 bfa_ioc_poll_fwinit(struct bfa_ioc_s *ioc)
2907 u32 fwstate = readl(ioc->ioc_regs.ioc_fwstate);
2909 bfa_trc(ioc, fwstate);
2912 bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_FWREADY);
2916 if (ioc->iocpf.poll_time >= BFA_IOC_TOV)
2917 bfa_iocpf_timeout(ioc);
2919 ioc->iocpf.poll_time += BFA_IOC_POLL_TOV;
2920 bfa_iocpf_poll_timer_start(ioc);
2927 struct bfa_ioc_s *ioc = (struct bfa_ioc_s *) ioc_arg;
2929 bfa_ioc_poll_fwinit(ioc);
3034 bfa_trc(ablk->ioc, msg->mh.msg_id);
3049 ablk->ioc->port_mode_cfg = rsp->port_mode;
3080 bfa_trc(ablk->ioc, event);
3119 bfa_ablk_attach(struct bfa_ablk_s *ablk, struct bfa_ioc_s *ioc)
3121 ablk->ioc = ioc;
3123 bfa_ioc_mbox_regisr(ablk->ioc, BFI_MC_ABLK, bfa_ablk_isr, ablk);
3126 list_add_tail(&ablk->ioc_notify.qe, &ablk->ioc->notify_q);
3137 if (!bfa_ioc_is_operational(ablk->ioc)) {
3138 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE);
3143 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY);
3154 bfa_ioc_portid(ablk->ioc));
3156 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb);
3168 if (!bfa_ioc_is_operational(ablk->ioc)) {
3169 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE);
3174 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY);
3185 bfa_ioc_portid(ablk->ioc));
3189 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb);
3200 if (!bfa_ioc_is_operational(ablk->ioc)) {
3201 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE);
3206 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY);
3216 bfa_ioc_portid(ablk->ioc));
3218 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb);
3229 if (!bfa_ioc_is_operational(ablk->ioc)) {
3230 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE);
3235 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY);
3245 bfa_ioc_portid(ablk->ioc));
3249 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb);
3260 if (!bfa_ioc_is_operational(ablk->ioc)) {
3261 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE);
3266 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY);
3276 bfa_ioc_portid(ablk->ioc));
3281 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb);
3292 if (!bfa_ioc_is_operational(ablk->ioc)) {
3293 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE);
3298 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY);
3308 bfa_ioc_portid(ablk->ioc));
3311 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb);
3321 if (!bfa_ioc_is_operational(ablk->ioc)) {
3322 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE);
3327 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY);
3337 bfa_ioc_portid(ablk->ioc));
3338 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb);
3348 if (!bfa_ioc_is_operational(ablk->ioc)) {
3349 bfa_trc(ablk->ioc, BFA_STATUS_IOC_FAILURE);
3354 bfa_trc(ablk->ioc, BFA_STATUS_DEVBUSY);
3364 bfa_ioc_portid(ablk->ioc));
3365 bfa_ioc_mbox_queue(ablk->ioc, &ablk->mb);
3451 struct bfad_s *bfad = (struct bfad_s *)sfp->ioc->bfa->bfad;
3462 aen_entry->aen_data.port.ioc_type = bfa_ioc_get_type(sfp->ioc);
3463 aen_entry->aen_data.port.pwwn = sfp->ioc->attr->pwwn;
3464 aen_entry->aen_data.port.mac = bfa_ioc_get_mac(sfp->ioc);
3489 bfad_im_post_vendor_event(aen_entry, bfad, ++sfp->ioc->ioc_aen_seq,
3505 bfa_ioc_portid(sfp->ioc));
3508 bfa_ioc_mbox_queue(sfp->ioc, &sfp->mbcmd);
3586 * receiving response after ioc failure
3762 bfa_sfp_attach(struct bfa_sfp_s *sfp, struct bfa_ioc_s *ioc, void *dev,
3766 sfp->ioc = ioc;
3782 bfa_ioc_mbox_regisr(sfp->ioc, BFI_MC_SFP, bfa_sfp_intr, sfp);
3785 list_add_tail(&sfp->ioc_notify.qe, &sfp->ioc->notify_q);
3815 if (!bfa_ioc_is_operational(sfp->ioc)) {
3845 if (!bfa_ioc_is_operational(sfp->ioc)) {
3880 if (!bfa_ioc_is_operational(sfp->ioc))
3884 if (bfa_mfg_is_mezz(sfp->ioc->attr->card_type))
3933 bfa_flash_aen_audit_post(struct bfa_ioc_s *ioc, enum bfa_audit_aen_event event,
3936 struct bfad_s *bfad = (struct bfad_s *)ioc->bfa->bfad;
3943 aen_entry->aen_data.audit.pwwn = ioc->attr->pwwn;
3948 bfad_im_post_vendor_event(aen_entry, bfad, ++ioc->ioc_aen_seq,
3994 bfa_ioc_portid(flash->ioc));
3997 bfa_ioc_mbox_queue(flash->ioc, &flash->mb);
4023 bfa_ioc_portid(flash->ioc));
4026 bfa_ioc_mbox_queue(flash->ioc, &flash->mb);
4052 bfa_ioc_portid(flash->ioc));
4054 bfa_ioc_mbox_queue(flash->ioc, &flash->mb);
4072 bfa_ioc_portid(flash->ioc));
4073 bfa_ioc_mbox_queue(flash->ioc, &flash->mb);
4101 /* receiving response after ioc failure */
4182 bfa_ioc_aen_post(flash->ioc, BFA_IOC_AEN_FWCFG_ERROR);
4187 bfa_ioc_aen_post(flash->ioc,
4215 * @param[in] ioc - ioc structure
4221 bfa_flash_attach(struct bfa_flash_s *flash, struct bfa_ioc_s *ioc, void *dev,
4224 flash->ioc = ioc;
4230 bfa_ioc_mbox_regisr(flash->ioc, BFI_MC_FLASH, bfa_flash_intr, flash);
4233 list_add_tail(&flash->ioc_notify.qe, &flash->ioc->notify_q);
4280 if (!bfa_ioc_is_operational(flash->ioc))
4316 if (!bfa_ioc_is_operational(flash->ioc))
4331 bfa_flash_aen_audit_post(flash->ioc, BFA_AUDIT_AEN_FLASH_ERASE,
4361 if (!bfa_ioc_is_operational(flash->ioc))
4418 if (!bfa_ioc_is_operational(flash->ioc))
4503 struct bfa_ioc_s *ioc = diag->ioc;
4508 pgnum = PSS_SMEM_PGNUM(ioc->ioc_regs.smem_pg0, loff);
4511 writel(pgnum, ioc->ioc_regs.host_page_num_fn);
4517 bfa_mem_read(ioc->ioc_regs.smem_page_start, loff);
4522 bfa_ioc_reset_fwstate(ioc);
4581 bfa_ioc_portid(diag->ioc));
4584 bfa_ioc_mbox_queue(diag->ioc, &diag->fwping.mbcmd);
4652 bfa_ioc_portid(diag->ioc));
4654 bfa_ioc_mbox_queue(diag->ioc, &diag->tsensor.mbcmd);
4661 /* receiving response after ioc failure */
4704 bfa_ioc_portid(diag->ioc));
4720 msg->portid = bfa_ioc_portid(diag->ioc);
4725 bfa_ioc_mbox_queue(diag->ioc, &diag->ledtest.mbcmd);
4747 bfa_ioc_portid(diag->ioc));
4751 bfa_ioc_mbox_queue(diag->ioc, &diag->beacon.mbcmd);
4811 if (!bfa_ioc_adapter_is_disabled(diag->ioc))
4826 bfa_ioc_boot(diag->ioc, BFI_FWBOOT_TYPE_MEMTEST, BFI_FWBOOT_ENV_OS);
4828 memtest_tov = (bfa_ioc_asic_gen(diag->ioc) == BFI_ASIC_GEN_CT2) ?
4830 bfa_timer_begin(diag->ioc->timer_mod, &diag->timer,
4856 if (!bfa_ioc_is_operational(diag->ioc))
4859 if (bfa_asic_id_ct2(bfa_ioc_devid((diag->ioc))) &&
4860 ((diag->ioc)->clscode == BFI_PCIFN_CLASS_ETH))
4909 if (!bfa_ioc_is_operational(diag->ioc))
4937 if (!bfa_ioc_is_operational(diag->ioc))
4971 if (!bfa_ioc_is_operational(diag->ioc))
5004 bfa_diag_attach(struct bfa_diag_s *diag, struct bfa_ioc_s *ioc, void *dev,
5008 diag->ioc = ioc;
5017 bfa_ioc_mbox_regisr(diag->ioc, BFI_MC_DIAG, bfa_diag_intr, diag);
5020 list_add_tail(&diag->ioc_notify.qe, &diag->ioc->notify_q);
5049 return (phy->ioc->attr->card_type == BFA_MFG_TYPE_LIGHTNING);
5088 bfa_ioc_portid(phy->ioc));
5090 bfa_ioc_mbox_queue(phy->ioc, &phy->mb);
5118 bfa_ioc_portid(phy->ioc));
5127 bfa_ioc_mbox_queue(phy->ioc, &phy->mb);
5152 bfa_ioc_portid(phy->ioc));
5154 bfa_ioc_mbox_queue(phy->ioc, &phy->mb);
5171 bfa_ioc_portid(phy->ioc));
5173 bfa_ioc_mbox_queue(phy->ioc, &phy->mb);
5195 * @param[in] ioc - ioc structure
5201 bfa_phy_attach(struct bfa_phy_s *phy, struct bfa_ioc_s *ioc, void *dev,
5204 phy->ioc = ioc;
5210 bfa_ioc_mbox_regisr(phy->ioc, BFI_MC_PHY, bfa_phy_intr, phy);
5213 list_add_tail(&phy->ioc_notify.qe, &phy->ioc->notify_q);
5245 bfa_phy_busy(struct bfa_ioc_s *ioc)
5249 rb = bfa_ioc_bar0(ioc);
5273 if (!bfa_ioc_is_operational(phy->ioc))
5276 if (phy->op_busy || bfa_phy_busy(phy->ioc)) {
5313 if (!bfa_ioc_is_operational(phy->ioc))
5316 if (phy->op_busy || bfa_phy_busy(phy->ioc)) {
5357 if (!bfa_ioc_is_operational(phy->ioc))
5364 if (phy->op_busy || bfa_phy_busy(phy->ioc)) {
5408 if (!bfa_ioc_is_operational(phy->ioc))
5415 if (phy->op_busy || bfa_phy_busy(phy->ioc)) {
5457 /* receiving response after ioc failure */
5824 dconf->instance = bfa->ioc.port_id;