Lines Matching refs:bfad
156 bfad_sm_uninit(struct bfad_s *bfad, enum bfad_sm_event event);
158 bfad_sm_created(struct bfad_s *bfad, enum bfad_sm_event event);
160 bfad_sm_initializing(struct bfad_s *bfad, enum bfad_sm_event event);
162 bfad_sm_operational(struct bfad_s *bfad, enum bfad_sm_event event);
164 bfad_sm_stopping(struct bfad_s *bfad, enum bfad_sm_event event);
166 bfad_sm_failed(struct bfad_s *bfad, enum bfad_sm_event event);
168 bfad_sm_fcs_exit(struct bfad_s *bfad, enum bfad_sm_event event);
174 bfad_sm_uninit(struct bfad_s *bfad, enum bfad_sm_event event) in bfad_sm_uninit() argument
176 bfa_trc(bfad, event); in bfad_sm_uninit()
180 bfa_sm_set_state(bfad, bfad_sm_created); in bfad_sm_uninit()
181 bfad->bfad_tsk = kthread_create(bfad_worker, (void *) bfad, in bfad_sm_uninit()
183 if (IS_ERR(bfad->bfad_tsk)) { in bfad_sm_uninit()
185 "creation failed!\n", bfad->inst_no); in bfad_sm_uninit()
186 bfa_sm_send_event(bfad, BFAD_E_KTHREAD_CREATE_FAILED); in bfad_sm_uninit()
188 bfa_sm_send_event(bfad, BFAD_E_INIT); in bfad_sm_uninit()
196 bfa_sm_fault(bfad, event); in bfad_sm_uninit()
204 bfad_sm_created(struct bfad_s *bfad, enum bfad_sm_event event) in bfad_sm_created() argument
209 bfa_trc(bfad, event); in bfad_sm_created()
213 bfa_sm_set_state(bfad, bfad_sm_initializing); in bfad_sm_created()
215 init_completion(&bfad->comp); in bfad_sm_created()
218 if (bfad_setup_intr(bfad)) { in bfad_sm_created()
220 bfad->inst_no); in bfad_sm_created()
221 bfa_sm_send_event(bfad, BFAD_E_INIT_FAILED); in bfad_sm_created()
225 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_sm_created()
226 bfa_iocfc_init(&bfad->bfa); in bfad_sm_created()
227 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_sm_created()
230 if ((bfad->bfad_flags & BFAD_MSIX_ON) && in bfad_sm_created()
231 bfad_install_msix_handler(bfad)) { in bfad_sm_created()
233 __func__, bfad->inst_no); in bfad_sm_created()
236 bfad_init_timer(bfad); in bfad_sm_created()
238 wait_for_completion(&bfad->comp); in bfad_sm_created()
240 if ((bfad->bfad_flags & BFAD_HAL_INIT_DONE)) { in bfad_sm_created()
241 bfa_sm_send_event(bfad, BFAD_E_INIT_SUCCESS); in bfad_sm_created()
245 bfad->pci_name); in bfad_sm_created()
246 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_sm_created()
247 bfa_fcs_init(&bfad->bfa_fcs); in bfad_sm_created()
248 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_sm_created()
250 ret = bfad_cfg_pport(bfad, BFA_LPORT_ROLE_FCP_IM); in bfad_sm_created()
252 init_completion(&bfad->comp); in bfad_sm_created()
254 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_sm_created()
255 bfad->pport.flags |= BFAD_PORT_DELETE; in bfad_sm_created()
256 bfa_fcs_exit(&bfad->bfa_fcs); in bfad_sm_created()
257 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_sm_created()
259 wait_for_completion(&bfad->comp); in bfad_sm_created()
261 bfa_sm_send_event(bfad, BFAD_E_INIT_FAILED); in bfad_sm_created()
264 bfad->bfad_flags |= BFAD_HAL_INIT_FAIL; in bfad_sm_created()
265 bfa_sm_send_event(bfad, BFAD_E_HAL_INIT_FAILED); in bfad_sm_created()
271 bfa_sm_set_state(bfad, bfad_sm_uninit); in bfad_sm_created()
275 bfa_sm_fault(bfad, event); in bfad_sm_created()
280 bfad_sm_initializing(struct bfad_s *bfad, enum bfad_sm_event event) in bfad_sm_initializing() argument
285 bfa_trc(bfad, event); in bfad_sm_initializing()
289 kthread_stop(bfad->bfad_tsk); in bfad_sm_initializing()
290 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_sm_initializing()
291 bfad->bfad_tsk = NULL; in bfad_sm_initializing()
292 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_sm_initializing()
294 retval = bfad_start_ops(bfad); in bfad_sm_initializing()
296 bfa_sm_set_state(bfad, bfad_sm_failed); in bfad_sm_initializing()
299 bfa_sm_set_state(bfad, bfad_sm_operational); in bfad_sm_initializing()
303 bfa_sm_set_state(bfad, bfad_sm_uninit); in bfad_sm_initializing()
304 kthread_stop(bfad->bfad_tsk); in bfad_sm_initializing()
305 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_sm_initializing()
306 bfad->bfad_tsk = NULL; in bfad_sm_initializing()
307 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_sm_initializing()
311 bfa_sm_set_state(bfad, bfad_sm_failed); in bfad_sm_initializing()
314 bfa_sm_fault(bfad, event); in bfad_sm_initializing()
319 bfad_sm_failed(struct bfad_s *bfad, enum bfad_sm_event event) in bfad_sm_failed() argument
323 bfa_trc(bfad, event); in bfad_sm_failed()
327 retval = bfad_start_ops(bfad); in bfad_sm_failed()
330 bfa_sm_set_state(bfad, bfad_sm_operational); in bfad_sm_failed()
334 bfa_sm_set_state(bfad, bfad_sm_fcs_exit); in bfad_sm_failed()
335 bfa_sm_send_event(bfad, BFAD_E_FCS_EXIT_COMP); in bfad_sm_failed()
339 bfa_sm_set_state(bfad, bfad_sm_uninit); in bfad_sm_failed()
340 bfad_remove_intr(bfad); in bfad_sm_failed()
341 del_timer_sync(&bfad->hal_tmo); in bfad_sm_failed()
345 bfa_sm_fault(bfad, event); in bfad_sm_failed()
350 bfad_sm_operational(struct bfad_s *bfad, enum bfad_sm_event event) in bfad_sm_operational() argument
352 bfa_trc(bfad, event); in bfad_sm_operational()
356 bfa_sm_set_state(bfad, bfad_sm_fcs_exit); in bfad_sm_operational()
357 bfad_fcs_stop(bfad); in bfad_sm_operational()
361 bfa_sm_fault(bfad, event); in bfad_sm_operational()
366 bfad_sm_fcs_exit(struct bfad_s *bfad, enum bfad_sm_event event) in bfad_sm_fcs_exit() argument
368 bfa_trc(bfad, event); in bfad_sm_fcs_exit()
372 bfa_sm_set_state(bfad, bfad_sm_stopping); in bfad_sm_fcs_exit()
373 bfad_stop(bfad); in bfad_sm_fcs_exit()
377 bfa_sm_fault(bfad, event); in bfad_sm_fcs_exit()
382 bfad_sm_stopping(struct bfad_s *bfad, enum bfad_sm_event event) in bfad_sm_stopping() argument
384 bfa_trc(bfad, event); in bfad_sm_stopping()
388 bfa_sm_set_state(bfad, bfad_sm_uninit); in bfad_sm_stopping()
389 bfad_remove_intr(bfad); in bfad_sm_stopping()
390 del_timer_sync(&bfad->hal_tmo); in bfad_sm_stopping()
391 bfad_im_probe_undo(bfad); in bfad_sm_stopping()
392 bfad->bfad_flags &= ~BFAD_FC4_PROBE_DONE; in bfad_sm_stopping()
393 bfad_uncfg_pport(bfad); in bfad_sm_stopping()
397 bfa_sm_fault(bfad, event); in bfad_sm_stopping()
420 struct bfad_s *bfad = drv; in bfa_cb_init() local
423 bfad->bfad_flags |= BFAD_HAL_INIT_DONE; in bfa_cb_init()
430 if ((bfad->bfad_flags & BFAD_HAL_INIT_FAIL)) { in bfa_cb_init()
431 bfad->bfad_flags &= ~BFAD_HAL_INIT_FAIL; in bfa_cb_init()
432 wake_up_process(bfad->bfad_tsk); in bfa_cb_init()
436 complete(&bfad->comp); in bfa_cb_init()
443 bfa_fcb_lport_new(struct bfad_s *bfad, struct bfa_fcs_lport_s *port, in bfa_fcb_lport_new() argument
451 port_drv = &bfad->pport; in bfa_fcb_lport_new()
468 rc = bfad_im_port_new(bfad, port_drv); in bfa_fcb_lport_new()
470 bfad_im_port_delete(bfad, port_drv); in bfa_fcb_lport_new()
482 bfa_fcb_rport_alloc(struct bfad_s *bfad, struct bfa_fcs_rport_s **rport, in bfa_fcb_rport_alloc() argument
503 bfa_fcb_pbc_vport_create(struct bfad_s *bfad, struct bfi_pbc_vport_s pbc_vport) in bfa_fcb_pbc_vport_create() argument
512 bfa_trc(bfad, 0); in bfa_fcb_pbc_vport_create()
516 vport->drv_port.bfad = bfad; in bfa_fcb_pbc_vport_create()
522 rc = bfa_fcs_pbc_vport_create(&vport->fcs_vport, &bfad->bfa_fcs, 0, in bfa_fcb_pbc_vport_create()
526 bfa_trc(bfad, 0); in bfa_fcb_pbc_vport_create()
530 list_add_tail(&vport->list_entry, &bfad->pbc_vport_list); in bfa_fcb_pbc_vport_create()
534 bfad_hal_mem_release(struct bfad_s *bfad) in bfad_hal_mem_release() argument
536 struct bfa_meminfo_s *hal_meminfo = &bfad->meminfo; in bfad_hal_mem_release()
553 dma_free_coherent(&bfad->pcidev->dev, in bfad_hal_mem_release()
596 bfad_hal_mem_alloc(struct bfad_s *bfad) in bfad_hal_mem_alloc() argument
598 struct bfa_meminfo_s *hal_meminfo = &bfad->meminfo; in bfad_hal_mem_alloc()
605 bfa_cfg_get_default(&bfad->ioc_cfg); in bfad_hal_mem_alloc()
606 bfad_update_hal_cfg(&bfad->ioc_cfg); in bfad_hal_mem_alloc()
607 bfad->cfg_data.ioc_queue_depth = bfad->ioc_cfg.fwcfg.num_ioim_reqs; in bfad_hal_mem_alloc()
608 bfa_cfg_get_meminfo(&bfad->ioc_cfg, hal_meminfo, &bfad->bfa); in bfad_hal_mem_alloc()
618 bfad_hal_mem_release(bfad); in bfad_hal_mem_alloc()
628 dma_elem->kva = dma_alloc_coherent(&bfad->pcidev->dev, in bfad_hal_mem_alloc()
632 bfad_hal_mem_release(bfad); in bfad_hal_mem_alloc()
647 bfad_vport_create(struct bfad_s *bfad, u16 vf_id, in bfad_vport_create() argument
661 vport->drv_port.bfad = bfad; in bfad_vport_create()
662 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_vport_create()
663 rc = bfa_fcs_vport_create(&vport->fcs_vport, &bfad->bfa_fcs, vf_id, in bfad_vport_create()
665 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_vport_create()
671 rc = bfad_im_scsi_host_alloc(bfad, vport->drv_port.im_port, in bfad_vport_create()
677 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_vport_create()
679 list_add_tail(&vport->list_entry, &bfad->vport_list); in bfad_vport_create()
680 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_vport_create()
685 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_vport_create()
689 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_vport_create()
700 struct bfad_s *bfad = (struct bfad_s *) data; in bfad_bfa_tmo() local
704 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_bfa_tmo()
706 bfa_timer_beat(&bfad->bfa.timer_mod); in bfad_bfa_tmo()
708 bfa_comp_deq(&bfad->bfa, &doneq); in bfad_bfa_tmo()
709 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_bfa_tmo()
712 bfa_comp_process(&bfad->bfa, &doneq); in bfad_bfa_tmo()
713 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_bfa_tmo()
714 bfa_comp_free(&bfad->bfa, &doneq); in bfad_bfa_tmo()
715 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_bfa_tmo()
718 mod_timer(&bfad->hal_tmo, in bfad_bfa_tmo()
723 bfad_init_timer(struct bfad_s *bfad) in bfad_init_timer() argument
725 init_timer(&bfad->hal_tmo); in bfad_init_timer()
726 bfad->hal_tmo.function = bfad_bfa_tmo; in bfad_init_timer()
727 bfad->hal_tmo.data = (unsigned long)bfad; in bfad_init_timer()
729 mod_timer(&bfad->hal_tmo, in bfad_init_timer()
734 bfad_pci_init(struct pci_dev *pdev, struct bfad_s *bfad) in bfad_pci_init() argument
761 bfad->pci_bar0_kva = pci_iomap(pdev, 0, pci_resource_len(pdev, 0)); in bfad_pci_init()
762 bfad->pci_bar2_kva = pci_iomap(pdev, 2, pci_resource_len(pdev, 2)); in bfad_pci_init()
764 if (bfad->pci_bar0_kva == NULL) { in bfad_pci_init()
769 bfad->hal_pcidev.pci_slot = PCI_SLOT(pdev->devfn); in bfad_pci_init()
770 bfad->hal_pcidev.pci_func = PCI_FUNC(pdev->devfn); in bfad_pci_init()
771 bfad->hal_pcidev.pci_bar_kva = bfad->pci_bar0_kva; in bfad_pci_init()
772 bfad->hal_pcidev.device_id = pdev->device; in bfad_pci_init()
773 bfad->hal_pcidev.ssid = pdev->subsystem_device; in bfad_pci_init()
774 bfad->pci_name = pci_name(pdev); in bfad_pci_init()
776 bfad->pci_attr.vendor_id = pdev->vendor; in bfad_pci_init()
777 bfad->pci_attr.device_id = pdev->device; in bfad_pci_init()
778 bfad->pci_attr.ssid = pdev->subsystem_device; in bfad_pci_init()
779 bfad->pci_attr.ssvid = pdev->subsystem_vendor; in bfad_pci_init()
780 bfad->pci_attr.pcifn = PCI_FUNC(pdev->devfn); in bfad_pci_init()
782 bfad->pcidev = pdev; in bfad_pci_init()
792 "reset to %d\n", bfad->pci_name, max_rq, in bfad_pci_init()
798 bfad->pci_name, pcie_max_read_reqsz); in bfad_pci_init()
815 bfad_pci_uninit(struct pci_dev *pdev, struct bfad_s *bfad) in bfad_pci_uninit() argument
817 pci_iounmap(pdev, bfad->pci_bar0_kva); in bfad_pci_uninit()
818 pci_iounmap(pdev, bfad->pci_bar2_kva); in bfad_pci_uninit()
826 bfad_drv_init(struct bfad_s *bfad) in bfad_drv_init() argument
831 bfad->cfg_data.rport_del_timeout = rport_del_timeout; in bfad_drv_init()
832 bfad->cfg_data.lun_queue_depth = bfa_lun_queue_depth; in bfad_drv_init()
833 bfad->cfg_data.io_max_sge = bfa_io_max_sge; in bfad_drv_init()
834 bfad->cfg_data.binding_method = FCP_PWWN_BINDING; in bfad_drv_init()
836 rc = bfad_hal_mem_alloc(bfad); in bfad_drv_init()
839 bfad->inst_no); in bfad_drv_init()
846 bfad->bfa.trcmod = bfad->trcmod; in bfad_drv_init()
847 bfad->bfa.plog = &bfad->plog_buf; in bfad_drv_init()
848 bfa_plog_init(&bfad->plog_buf); in bfad_drv_init()
849 bfa_plog_str(&bfad->plog_buf, BFA_PL_MID_DRVR, BFA_PL_EID_DRIVER_START, in bfad_drv_init()
852 bfa_attach(&bfad->bfa, bfad, &bfad->ioc_cfg, &bfad->meminfo, in bfad_drv_init()
853 &bfad->hal_pcidev); in bfad_drv_init()
856 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_drv_init()
857 bfad->bfa_fcs.trcmod = bfad->trcmod; in bfad_drv_init()
858 bfa_fcs_attach(&bfad->bfa_fcs, &bfad->bfa, bfad, BFA_FALSE); in bfad_drv_init()
859 bfad->bfa_fcs.fdmi_enabled = fdmi_enable; in bfad_drv_init()
860 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_drv_init()
862 bfad->bfad_flags |= BFAD_DRV_INIT_DONE; in bfad_drv_init()
868 bfad_drv_uninit(struct bfad_s *bfad) in bfad_drv_uninit() argument
872 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_drv_uninit()
873 init_completion(&bfad->comp); in bfad_drv_uninit()
874 bfa_iocfc_stop(&bfad->bfa); in bfad_drv_uninit()
875 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_drv_uninit()
876 wait_for_completion(&bfad->comp); in bfad_drv_uninit()
878 del_timer_sync(&bfad->hal_tmo); in bfad_drv_uninit()
879 bfa_isr_disable(&bfad->bfa); in bfad_drv_uninit()
880 bfa_detach(&bfad->bfa); in bfad_drv_uninit()
881 bfad_remove_intr(bfad); in bfad_drv_uninit()
882 bfad_hal_mem_release(bfad); in bfad_drv_uninit()
884 bfad->bfad_flags &= ~BFAD_DRV_INIT_DONE; in bfad_drv_uninit()
888 bfad_drv_start(struct bfad_s *bfad) in bfad_drv_start() argument
892 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_drv_start()
893 bfa_iocfc_start(&bfad->bfa); in bfad_drv_start()
894 bfa_fcs_pbc_vport_init(&bfad->bfa_fcs); in bfad_drv_start()
895 bfa_fcs_fabric_modstart(&bfad->bfa_fcs); in bfad_drv_start()
896 bfad->bfad_flags |= BFAD_HAL_START_DONE; in bfad_drv_start()
897 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_drv_start()
899 if (bfad->im) in bfad_drv_start()
900 flush_workqueue(bfad->im->drv_workq); in bfad_drv_start()
904 bfad_fcs_stop(struct bfad_s *bfad) in bfad_fcs_stop() argument
908 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_fcs_stop()
909 init_completion(&bfad->comp); in bfad_fcs_stop()
910 bfad->pport.flags |= BFAD_PORT_DELETE; in bfad_fcs_stop()
911 bfa_fcs_exit(&bfad->bfa_fcs); in bfad_fcs_stop()
912 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_fcs_stop()
913 wait_for_completion(&bfad->comp); in bfad_fcs_stop()
915 bfa_sm_send_event(bfad, BFAD_E_FCS_EXIT_COMP); in bfad_fcs_stop()
919 bfad_stop(struct bfad_s *bfad) in bfad_stop() argument
923 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_stop()
924 init_completion(&bfad->comp); in bfad_stop()
925 bfa_iocfc_stop(&bfad->bfa); in bfad_stop()
926 bfad->bfad_flags &= ~BFAD_HAL_START_DONE; in bfad_stop()
927 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_stop()
928 wait_for_completion(&bfad->comp); in bfad_stop()
930 bfa_sm_send_event(bfad, BFAD_E_EXIT_COMP); in bfad_stop()
934 bfad_cfg_pport(struct bfad_s *bfad, enum bfa_lport_role role) in bfad_cfg_pport() argument
941 if (bfad->pport.im_port == NULL) { in bfad_cfg_pport()
946 rc = bfad_im_scsi_host_alloc(bfad, bfad->pport.im_port, in bfad_cfg_pport()
947 &bfad->pcidev->dev); in bfad_cfg_pport()
951 bfad->pport.roles |= BFA_LPORT_ROLE_FCP_IM; in bfad_cfg_pport()
954 bfad->bfad_flags |= BFAD_CFG_PPORT_DONE; in bfad_cfg_pport()
961 bfad_uncfg_pport(struct bfad_s *bfad) in bfad_uncfg_pport() argument
964 (bfad->pport.roles & BFA_LPORT_ROLE_FCP_IM)) { in bfad_uncfg_pport()
965 bfad_im_scsi_host_free(bfad, bfad->pport.im_port); in bfad_uncfg_pport()
966 bfad_im_port_clean(bfad->pport.im_port); in bfad_uncfg_pport()
967 kfree(bfad->pport.im_port); in bfad_uncfg_pport()
968 bfad->pport.roles &= ~BFA_LPORT_ROLE_FCP_IM; in bfad_uncfg_pport()
971 bfad->bfad_flags &= ~BFAD_CFG_PPORT_DONE; in bfad_uncfg_pport()
975 bfad_start_ops(struct bfad_s *bfad) { in bfad_start_ops() argument
1002 strncpy(driver_info.os_device_name, bfad->pci_name, in bfad_start_ops()
1006 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_start_ops()
1007 bfa_fcs_driver_info_init(&bfad->bfa_fcs, &driver_info); in bfad_start_ops()
1009 if (bfad->bfad_flags & BFAD_CFG_PPORT_DONE) in bfad_start_ops()
1010 bfa_fcs_update_cfg(&bfad->bfa_fcs); in bfad_start_ops()
1012 bfa_fcs_init(&bfad->bfa_fcs); in bfad_start_ops()
1014 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_start_ops()
1016 if (!(bfad->bfad_flags & BFAD_CFG_PPORT_DONE)) { in bfad_start_ops()
1017 retval = bfad_cfg_pport(bfad, BFA_LPORT_ROLE_FCP_IM); in bfad_start_ops()
1023 bfad_fc_host_init(bfad->pport.im_port); in bfad_start_ops()
1026 retval = bfad_im_probe(bfad); in bfad_start_ops()
1029 if (bfa_sm_cmp_state(bfad, bfad_sm_initializing)) in bfad_start_ops()
1030 bfa_sm_set_state(bfad, bfad_sm_failed); in bfad_start_ops()
1033 bfad->bfad_flags |= BFAD_FC4_PROBE_DONE; in bfad_start_ops()
1035 bfad_drv_start(bfad); in bfad_start_ops()
1038 list_for_each_entry_safe(vport, vport_new, &bfad->pbc_vport_list, in bfad_start_ops()
1052 fc_vport = fc_vport_create(bfad->pport.im_port->shost, 0, &vid); in bfad_start_ops()
1056 " %s\n", bfad->inst_no, pwwn_buf); in bfad_start_ops()
1068 bfa_linkup_delay = bfad_get_linkup_delay(bfad); in bfad_start_ops()
1069 bfad_rport_online_wait(bfad); in bfad_start_ops()
1072 bfad_rport_online_wait(bfad); in bfad_start_ops()
1074 BFA_LOG(KERN_INFO, bfad, bfa_log_level, "bfa device claimed\n"); in bfad_start_ops()
1082 struct bfad_s *bfad; in bfad_worker() local
1085 bfad = (struct bfad_s *)ptr; in bfad_worker()
1090 bfa_sm_send_event(bfad, BFAD_E_INIT_SUCCESS); in bfad_worker()
1092 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_worker()
1093 bfad->bfad_tsk = NULL; in bfad_worker()
1094 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_worker()
1108 struct bfad_s *bfad = dev_id; in bfad_intx() local
1113 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_intx()
1114 rc = bfa_intx(&bfad->bfa); in bfad_intx()
1116 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_intx()
1120 bfa_comp_deq(&bfad->bfa, &doneq); in bfad_intx()
1121 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_intx()
1124 bfa_comp_process(&bfad->bfa, &doneq); in bfad_intx()
1126 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_intx()
1127 bfa_comp_free(&bfad->bfa, &doneq); in bfad_intx()
1128 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_intx()
1139 struct bfad_s *bfad = vec->bfad; in bfad_msix() local
1143 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_msix()
1145 bfa_msix(&bfad->bfa, vec->msix.entry); in bfad_msix()
1146 bfa_comp_deq(&bfad->bfa, &doneq); in bfad_msix()
1147 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_msix()
1150 bfa_comp_process(&bfad->bfa, &doneq); in bfad_msix()
1152 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_msix()
1153 bfa_comp_free(&bfad->bfa, &doneq); in bfad_msix()
1154 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_msix()
1164 bfad_init_msix_entry(struct bfad_s *bfad, struct msix_entry *msix_entries, in bfad_init_msix_entry() argument
1170 for (i = 0, bfad->nvec = 0; i < MAX_MSIX_ENTRY; i++) { in bfad_init_msix_entry()
1172 bfad->msix_tab[bfad->nvec].msix.entry = i; in bfad_init_msix_entry()
1173 bfad->msix_tab[bfad->nvec].bfad = bfad; in bfad_init_msix_entry()
1174 msix_entries[bfad->nvec].entry = i; in bfad_init_msix_entry()
1175 bfad->nvec++; in bfad_init_msix_entry()
1184 bfad_install_msix_handler(struct bfad_s *bfad) in bfad_install_msix_handler() argument
1188 for (i = 0; i < bfad->nvec; i++) { in bfad_install_msix_handler()
1189 sprintf(bfad->msix_tab[i].name, "bfa-%s-%s", in bfad_install_msix_handler()
1190 bfad->pci_name, in bfad_install_msix_handler()
1191 ((bfa_asic_id_cb(bfad->hal_pcidev.device_id)) ? in bfad_install_msix_handler()
1194 error = request_irq(bfad->msix_tab[i].msix.vector, in bfad_install_msix_handler()
1196 bfad->msix_tab[i].name, &bfad->msix_tab[i]); in bfad_install_msix_handler()
1197 bfa_trc(bfad, i); in bfad_install_msix_handler()
1198 bfa_trc(bfad, bfad->msix_tab[i].msix.vector); in bfad_install_msix_handler()
1203 free_irq(bfad->msix_tab[j].msix.vector, in bfad_install_msix_handler()
1204 &bfad->msix_tab[j]); in bfad_install_msix_handler()
1206 bfad->bfad_flags &= ~BFAD_MSIX_ON; in bfad_install_msix_handler()
1207 pci_disable_msix(bfad->pcidev); in bfad_install_msix_handler()
1220 bfad_setup_intr(struct bfad_s *bfad) in bfad_setup_intr() argument
1225 struct pci_dev *pdev = bfad->pcidev; in bfad_setup_intr()
1229 bfa_msix_getvecs(&bfad->bfa, &mask, &num_bit, &max_bit); in bfad_setup_intr()
1232 bfad_init_msix_entry(bfad, msix_entries, mask, max_bit); in bfad_setup_intr()
1237 error = pci_enable_msix_exact(bfad->pcidev, in bfad_setup_intr()
1238 msix_entries, bfad->nvec); in bfad_setup_intr()
1243 bfad->pci_name, bfad->nvec, error); in bfad_setup_intr()
1244 bfad->nvec = 1; in bfad_setup_intr()
1245 error = pci_enable_msix_exact(bfad->pcidev, in bfad_setup_intr()
1253 bfad->inst_no, error); in bfad_setup_intr()
1265 for (i = 0; i < bfad->nvec; i++) { in bfad_setup_intr()
1266 bfa_trc(bfad, msix_entries[i].vector); in bfad_setup_intr()
1267 bfad->msix_tab[i].msix.vector = msix_entries[i].vector; in bfad_setup_intr()
1270 bfa_msix_init(&bfad->bfa, bfad->nvec); in bfad_setup_intr()
1272 bfad->bfad_flags |= BFAD_MSIX_ON; in bfad_setup_intr()
1278 error = request_irq(bfad->pcidev->irq, (irq_handler_t)bfad_intx, in bfad_setup_intr()
1279 BFAD_IRQ_FLAGS, BFAD_DRIVER_NAME, bfad); in bfad_setup_intr()
1283 bfad->bfad_flags |= BFAD_INTX_ON; in bfad_setup_intr()
1289 bfad_remove_intr(struct bfad_s *bfad) in bfad_remove_intr() argument
1293 if (bfad->bfad_flags & BFAD_MSIX_ON) { in bfad_remove_intr()
1294 for (i = 0; i < bfad->nvec; i++) in bfad_remove_intr()
1295 free_irq(bfad->msix_tab[i].msix.vector, in bfad_remove_intr()
1296 &bfad->msix_tab[i]); in bfad_remove_intr()
1298 pci_disable_msix(bfad->pcidev); in bfad_remove_intr()
1299 bfad->bfad_flags &= ~BFAD_MSIX_ON; in bfad_remove_intr()
1300 } else if (bfad->bfad_flags & BFAD_INTX_ON) { in bfad_remove_intr()
1301 free_irq(bfad->pcidev->irq, bfad); in bfad_remove_intr()
1311 struct bfad_s *bfad; in bfad_pci_probe() local
1319 bfad = kzalloc(sizeof(struct bfad_s), GFP_KERNEL); in bfad_pci_probe()
1320 if (!bfad) { in bfad_pci_probe()
1325 bfad->trcmod = kzalloc(sizeof(struct bfa_trc_mod_s), GFP_KERNEL); in bfad_pci_probe()
1326 if (!bfad->trcmod) { in bfad_pci_probe()
1333 bfa_trc_init(bfad->trcmod); in bfad_pci_probe()
1334 bfa_trc(bfad, bfad_inst); in bfad_pci_probe()
1337 INIT_LIST_HEAD(&bfad->free_aen_q); in bfad_pci_probe()
1338 INIT_LIST_HEAD(&bfad->active_aen_q); in bfad_pci_probe()
1340 list_add_tail(&bfad->aen_list[i].qe, &bfad->free_aen_q); in bfad_pci_probe()
1343 kfree(bfad->trcmod); in bfad_pci_probe()
1347 retval = bfad_pci_init(pdev, bfad); in bfad_pci_probe()
1355 bfad->inst_no = bfad_inst++; in bfad_pci_probe()
1356 list_add_tail(&bfad->list_entry, &bfad_list); in bfad_pci_probe()
1360 bfa_sm_set_state(bfad, bfad_sm_uninit); in bfad_pci_probe()
1362 spin_lock_init(&bfad->bfad_lock); in bfad_pci_probe()
1363 spin_lock_init(&bfad->bfad_aen_spinlock); in bfad_pci_probe()
1365 pci_set_drvdata(pdev, bfad); in bfad_pci_probe()
1367 bfad->ref_count = 0; in bfad_pci_probe()
1368 bfad->pport.bfad = bfad; in bfad_pci_probe()
1369 INIT_LIST_HEAD(&bfad->pbc_vport_list); in bfad_pci_probe()
1370 INIT_LIST_HEAD(&bfad->vport_list); in bfad_pci_probe()
1374 bfad_debugfs_init(&bfad->pport); in bfad_pci_probe()
1376 retval = bfad_drv_init(bfad); in bfad_pci_probe()
1380 bfa_sm_send_event(bfad, BFAD_E_CREATE); in bfad_pci_probe()
1382 if (bfa_sm_cmp_state(bfad, bfad_sm_uninit)) in bfad_pci_probe()
1388 bfad_hal_mem_release(bfad); in bfad_pci_probe()
1391 kfree(bfad->regdata); in bfad_pci_probe()
1392 bfad_debugfs_exit(&bfad->pport); in bfad_pci_probe()
1395 list_del(&bfad->list_entry); in bfad_pci_probe()
1397 bfad_pci_uninit(pdev, bfad); in bfad_pci_probe()
1399 kfree(bfad->trcmod); in bfad_pci_probe()
1401 kfree(bfad); in bfad_pci_probe()
1412 struct bfad_s *bfad = pci_get_drvdata(pdev); in bfad_pci_remove() local
1415 bfa_trc(bfad, bfad->inst_no); in bfad_pci_remove()
1417 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_pci_remove()
1418 if (bfad->bfad_tsk != NULL) { in bfad_pci_remove()
1419 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_pci_remove()
1420 kthread_stop(bfad->bfad_tsk); in bfad_pci_remove()
1422 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_pci_remove()
1426 bfa_sm_send_event(bfad, BFAD_E_STOP); in bfad_pci_remove()
1429 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_pci_remove()
1430 bfa_detach(&bfad->bfa); in bfad_pci_remove()
1431 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_pci_remove()
1432 bfad_hal_mem_release(bfad); in bfad_pci_remove()
1435 kfree(bfad->regdata); in bfad_pci_remove()
1436 bfad_debugfs_exit(&bfad->pport); in bfad_pci_remove()
1441 list_del(&bfad->list_entry); in bfad_pci_remove()
1443 bfad_pci_uninit(pdev, bfad); in bfad_pci_remove()
1445 kfree(bfad->trcmod); in bfad_pci_remove()
1446 kfree(bfad); in bfad_pci_remove()
1455 struct bfad_s *bfad = pci_get_drvdata(pdev); in bfad_pci_error_detected() local
1461 state, bfad->bfad_flags); in bfad_pci_error_detected()
1465 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_pci_error_detected()
1466 bfad->bfad_flags &= ~BFAD_EEH_BUSY; in bfad_pci_error_detected()
1468 bfa_ioc_suspend(&bfad->bfa.ioc); in bfad_pci_error_detected()
1469 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_pci_error_detected()
1470 del_timer_sync(&bfad->hal_tmo); in bfad_pci_error_detected()
1474 init_completion(&bfad->comp); in bfad_pci_error_detected()
1475 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_pci_error_detected()
1476 bfad->bfad_flags |= BFAD_EEH_BUSY; in bfad_pci_error_detected()
1478 bfa_ioc_suspend(&bfad->bfa.ioc); in bfad_pci_error_detected()
1479 bfa_fcs_stop(&bfad->bfa_fcs); in bfad_pci_error_detected()
1480 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_pci_error_detected()
1481 wait_for_completion(&bfad->comp); in bfad_pci_error_detected()
1483 bfad_remove_intr(bfad); in bfad_pci_error_detected()
1484 del_timer_sync(&bfad->hal_tmo); in bfad_pci_error_detected()
1489 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_pci_error_detected()
1490 bfad->bfad_flags |= BFAD_EEH_BUSY | in bfad_pci_error_detected()
1492 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_pci_error_detected()
1510 restart_bfa(struct bfad_s *bfad) in restart_bfa() argument
1513 struct pci_dev *pdev = bfad->pcidev; in restart_bfa()
1515 bfa_attach(&bfad->bfa, bfad, &bfad->ioc_cfg, in restart_bfa()
1516 &bfad->meminfo, &bfad->hal_pcidev); in restart_bfa()
1519 if (bfad_setup_intr(bfad)) { in restart_bfa()
1521 "%s: bfad_setup_intr failed\n", bfad->pci_name); in restart_bfa()
1522 bfa_sm_send_event(bfad, BFAD_E_INIT_FAILED); in restart_bfa()
1526 init_completion(&bfad->comp); in restart_bfa()
1527 spin_lock_irqsave(&bfad->bfad_lock, flags); in restart_bfa()
1528 bfa_iocfc_init(&bfad->bfa); in restart_bfa()
1529 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in restart_bfa()
1532 if ((bfad->bfad_flags & BFAD_MSIX_ON) && in restart_bfa()
1533 bfad_install_msix_handler(bfad)) in restart_bfa()
1535 "%s: install_msix failed.\n", bfad->pci_name); in restart_bfa()
1537 bfad_init_timer(bfad); in restart_bfa()
1538 wait_for_completion(&bfad->comp); in restart_bfa()
1539 bfad_drv_start(bfad); in restart_bfa()
1550 struct bfad_s *bfad = pci_get_drvdata(pdev); in bfad_pci_slot_reset() local
1554 "bfad_pci_slot_reset flags: 0x%x\n", bfad->bfad_flags); in bfad_pci_slot_reset()
1579 if (pci_set_dma_mask(bfad->pcidev, DMA_BIT_MASK(64)) != 0) in bfad_pci_slot_reset()
1580 if (pci_set_dma_mask(bfad->pcidev, DMA_BIT_MASK(32)) != 0) in bfad_pci_slot_reset()
1585 if (restart_bfa(bfad) == -1) in bfad_pci_slot_reset()
1590 "slot_reset completed flags: 0x%x!\n", bfad->bfad_flags); in bfad_pci_slot_reset()
1603 struct bfad_s *bfad = pci_get_drvdata(pdev); in bfad_pci_mmio_enabled() local
1608 bfa_ioc_debug_save_ftrc(&bfad->bfa.ioc); in bfad_pci_mmio_enabled()
1611 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_pci_mmio_enabled()
1612 init_completion(&bfad->comp); in bfad_pci_mmio_enabled()
1613 bfa_fcs_stop(&bfad->bfa_fcs); in bfad_pci_mmio_enabled()
1614 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_pci_mmio_enabled()
1615 wait_for_completion(&bfad->comp); in bfad_pci_mmio_enabled()
1617 bfad_remove_intr(bfad); in bfad_pci_mmio_enabled()
1618 del_timer_sync(&bfad->hal_tmo); in bfad_pci_mmio_enabled()
1628 struct bfad_s *bfad = pci_get_drvdata(pdev); in bfad_pci_resume() local
1633 bfad_rport_online_wait(bfad); in bfad_pci_resume()
1635 spin_lock_irqsave(&bfad->bfad_lock, flags); in bfad_pci_resume()
1636 bfad->bfad_flags &= ~BFAD_EEH_BUSY; in bfad_pci_resume()
1637 spin_unlock_irqrestore(&bfad->bfad_lock, flags); in bfad_pci_resume()