Lines Matching defs:bfad

12  *  bfad.c Linux driver PCI interface module.
145 bfad_sm_uninit(struct bfad_s *bfad, enum bfad_sm_event event);
147 bfad_sm_created(struct bfad_s *bfad, enum bfad_sm_event event);
149 bfad_sm_initializing(struct bfad_s *bfad, enum bfad_sm_event event);
151 bfad_sm_operational(struct bfad_s *bfad, enum bfad_sm_event event);
153 bfad_sm_stopping(struct bfad_s *bfad, enum bfad_sm_event event);
155 bfad_sm_failed(struct bfad_s *bfad, enum bfad_sm_event event);
157 bfad_sm_fcs_exit(struct bfad_s *bfad, enum bfad_sm_event event);
163 bfad_sm_uninit(struct bfad_s *bfad, enum bfad_sm_event event)
165 bfa_trc(bfad, event);
169 bfa_sm_set_state(bfad, bfad_sm_created);
170 bfad->bfad_tsk = kthread_create(bfad_worker, (void *) bfad,
172 if (IS_ERR(bfad->bfad_tsk)) {
173 printk(KERN_INFO "bfad[%d]: Kernel thread "
174 "creation failed!\n", bfad->inst_no);
175 bfa_sm_send_event(bfad, BFAD_E_KTHREAD_CREATE_FAILED);
177 bfa_sm_send_event(bfad, BFAD_E_INIT);
185 bfa_sm_fault(bfad, event);
190 * Driver Instance is created, awaiting event INIT to initialize the bfad
193 bfad_sm_created(struct bfad_s *bfad, enum bfad_sm_event event)
198 bfa_trc(bfad, event);
202 bfa_sm_set_state(bfad, bfad_sm_initializing);
204 init_completion(&bfad->comp);
207 if (bfad_setup_intr(bfad)) {
208 printk(KERN_WARNING "bfad%d: bfad_setup_intr failed\n",
209 bfad->inst_no);
210 bfa_sm_send_event(bfad, BFAD_E_INIT_FAILED);
214 spin_lock_irqsave(&bfad->bfad_lock, flags);
215 bfa_iocfc_init(&bfad->bfa);
216 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
219 if ((bfad->bfad_flags & BFAD_MSIX_ON) &&
220 bfad_install_msix_handler(bfad)) {
221 printk(KERN_WARNING "%s: install_msix failed, bfad%d\n",
222 __func__, bfad->inst_no);
225 bfad_init_timer(bfad);
227 wait_for_completion(&bfad->comp);
229 if ((bfad->bfad_flags & BFAD_HAL_INIT_DONE)) {
230 bfa_sm_send_event(bfad, BFAD_E_INIT_SUCCESS);
234 bfad->pci_name);
235 spin_lock_irqsave(&bfad->bfad_lock, flags);
236 bfa_fcs_init(&bfad->bfa_fcs);
237 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
239 ret = bfad_cfg_pport(bfad, BFA_LPORT_ROLE_FCP_IM);
241 init_completion(&bfad->comp);
243 spin_lock_irqsave(&bfad->bfad_lock, flags);
244 bfad->pport.flags |= BFAD_PORT_DELETE;
245 bfa_fcs_exit(&bfad->bfa_fcs);
246 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
248 wait_for_completion(&bfad->comp);
250 bfa_sm_send_event(bfad, BFAD_E_INIT_FAILED);
253 bfad->bfad_flags |= BFAD_HAL_INIT_FAIL;
254 bfa_sm_send_event(bfad, BFAD_E_HAL_INIT_FAILED);
260 bfa_sm_set_state(bfad, bfad_sm_uninit);
264 bfa_sm_fault(bfad, event);
269 bfad_sm_initializing(struct bfad_s *bfad, enum bfad_sm_event event)
274 bfa_trc(bfad, event);
278 kthread_stop(bfad->bfad_tsk);
279 spin_lock_irqsave(&bfad->bfad_lock, flags);
280 bfad->bfad_tsk = NULL;
281 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
283 retval = bfad_start_ops(bfad);
285 bfa_sm_set_state(bfad, bfad_sm_failed);
288 bfa_sm_set_state(bfad, bfad_sm_operational);
292 bfa_sm_set_state(bfad, bfad_sm_uninit);
293 kthread_stop(bfad->bfad_tsk);
294 spin_lock_irqsave(&bfad->bfad_lock, flags);
295 bfad->bfad_tsk = NULL;
296 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
300 bfa_sm_set_state(bfad, bfad_sm_failed);
303 bfa_sm_fault(bfad, event);
308 bfad_sm_failed(struct bfad_s *bfad, enum bfad_sm_event event)
312 bfa_trc(bfad, event);
316 retval = bfad_start_ops(bfad);
319 bfa_sm_set_state(bfad, bfad_sm_operational);
323 bfa_sm_set_state(bfad, bfad_sm_fcs_exit);
324 bfa_sm_send_event(bfad, BFAD_E_FCS_EXIT_COMP);
328 bfa_sm_set_state(bfad, bfad_sm_uninit);
329 bfad_remove_intr(bfad);
330 del_timer_sync(&bfad->hal_tmo);
334 bfa_sm_fault(bfad, event);
339 bfad_sm_operational(struct bfad_s *bfad, enum bfad_sm_event event)
341 bfa_trc(bfad, event);
345 bfa_sm_set_state(bfad, bfad_sm_fcs_exit);
346 bfad_fcs_stop(bfad);
350 bfa_sm_fault(bfad, event);
355 bfad_sm_fcs_exit(struct bfad_s *bfad, enum bfad_sm_event event)
357 bfa_trc(bfad, event);
361 bfa_sm_set_state(bfad, bfad_sm_stopping);
362 bfad_stop(bfad);
366 bfa_sm_fault(bfad, event);
371 bfad_sm_stopping(struct bfad_s *bfad, enum bfad_sm_event event)
373 bfa_trc(bfad, event);
377 bfa_sm_set_state(bfad, bfad_sm_uninit);
378 bfad_remove_intr(bfad);
379 del_timer_sync(&bfad->hal_tmo);
380 bfad_im_probe_undo(bfad);
381 bfad->bfad_flags &= ~BFAD_FC4_PROBE_DONE;
382 bfad_uncfg_pport(bfad);
386 bfa_sm_fault(bfad, event);
409 struct bfad_s *bfad = drv;
412 bfad->bfad_flags |= BFAD_HAL_INIT_DONE;
417 * the bfad operations after HAL init done
419 if ((bfad->bfad_flags & BFAD_HAL_INIT_FAIL)) {
420 bfad->bfad_flags &= ~BFAD_HAL_INIT_FAIL;
421 wake_up_process(bfad->bfad_tsk);
425 complete(&bfad->comp);
432 bfa_fcb_lport_new(struct bfad_s *bfad, struct bfa_fcs_lport_s *port,
440 port_drv = &bfad->pport;
457 rc = bfad_im_port_new(bfad, port_drv);
459 bfad_im_port_delete(bfad, port_drv);
471 bfa_fcb_rport_alloc(struct bfad_s *bfad, struct bfa_fcs_rport_s **rport,
492 bfa_fcb_pbc_vport_create(struct bfad_s *bfad, struct bfi_pbc_vport_s pbc_vport)
501 bfa_trc(bfad, 0);
505 vport->drv_port.bfad = bfad;
511 rc = bfa_fcs_pbc_vport_create(&vport->fcs_vport, &bfad->bfa_fcs, 0,
515 bfa_trc(bfad, 0);
519 list_add_tail(&vport->list_entry, &bfad->pbc_vport_list);
523 bfad_hal_mem_release(struct bfad_s *bfad)
525 struct bfa_meminfo_s *hal_meminfo = &bfad->meminfo;
542 dma_free_coherent(&bfad->pcidev->dev,
585 bfad_hal_mem_alloc(struct bfad_s *bfad)
587 struct bfa_meminfo_s *hal_meminfo = &bfad->meminfo;
594 bfa_cfg_get_default(&bfad->ioc_cfg);
595 bfad_update_hal_cfg(&bfad->ioc_cfg);
596 bfad->cfg_data.ioc_queue_depth = bfad->ioc_cfg.fwcfg.num_ioim_reqs;
597 bfa_cfg_get_meminfo(&bfad->ioc_cfg, hal_meminfo, &bfad->bfa);
607 bfad_hal_mem_release(bfad);
616 dma_elem->kva = dma_alloc_coherent(&bfad->pcidev->dev,
620 bfad_hal_mem_release(bfad);
635 bfad_vport_create(struct bfad_s *bfad, u16 vf_id,
649 vport->drv_port.bfad = bfad;
650 spin_lock_irqsave(&bfad->bfad_lock, flags);
651 rc = bfa_fcs_vport_create(&vport->fcs_vport, &bfad->bfa_fcs, vf_id,
653 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
659 rc = bfad_im_scsi_host_alloc(bfad, vport->drv_port.im_port,
665 spin_lock_irqsave(&bfad->bfad_lock, flags);
667 list_add_tail(&vport->list_entry, &bfad->vport_list);
668 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
673 spin_lock_irqsave(&bfad->bfad_lock, flags);
677 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
688 struct bfad_s *bfad = from_timer(bfad, t, hal_tmo);
692 spin_lock_irqsave(&bfad->bfad_lock, flags);
694 bfa_timer_beat(&bfad->bfa.timer_mod);
696 bfa_comp_deq(&bfad->bfa, &doneq);
697 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
700 bfa_comp_process(&bfad->bfa, &doneq);
701 spin_lock_irqsave(&bfad->bfad_lock, flags);
702 bfa_comp_free(&bfad->bfa, &doneq);
703 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
706 mod_timer(&bfad->hal_tmo,
711 bfad_init_timer(struct bfad_s *bfad)
713 timer_setup(&bfad->hal_tmo, bfad_bfa_tmo, 0);
715 mod_timer(&bfad->hal_tmo,
720 bfad_pci_init(struct pci_dev *pdev, struct bfad_s *bfad)
741 bfad->pci_bar0_kva = pci_iomap(pdev, 0, pci_resource_len(pdev, 0));
742 bfad->pci_bar2_kva = pci_iomap(pdev, 2, pci_resource_len(pdev, 2));
744 if (bfad->pci_bar0_kva == NULL) {
750 bfad->hal_pcidev.pci_slot = PCI_SLOT(pdev->devfn);
751 bfad->hal_pcidev.pci_func = PCI_FUNC(pdev->devfn);
752 bfad->hal_pcidev.pci_bar_kva = bfad->pci_bar0_kva;
753 bfad->hal_pcidev.device_id = pdev->device;
754 bfad->hal_pcidev.ssid = pdev->subsystem_device;
755 bfad->pci_name = pci_name(pdev);
757 bfad->pci_attr.vendor_id = pdev->vendor;
758 bfad->pci_attr.device_id = pdev->device;
759 bfad->pci_attr.ssid = pdev->subsystem_device;
760 bfad->pci_attr.ssvid = pdev->subsystem_vendor;
761 bfad->pci_attr.pcifn = PCI_FUNC(pdev->devfn);
763 bfad->pcidev = pdev;
773 "reset to %d\n", bfad->pci_name, max_rq,
779 bfad->pci_name, pcie_max_read_reqsz);
796 bfad_pci_uninit(struct pci_dev *pdev, struct bfad_s *bfad)
798 pci_iounmap(pdev, bfad->pci_bar0_kva);
799 pci_iounmap(pdev, bfad->pci_bar2_kva);
805 bfad_drv_init(struct bfad_s *bfad)
810 bfad->cfg_data.rport_del_timeout = rport_del_timeout;
811 bfad->cfg_data.lun_queue_depth = bfa_lun_queue_depth;
812 bfad->cfg_data.io_max_sge = bfa_io_max_sge;
813 bfad->cfg_data.binding_method = FCP_PWWN_BINDING;
815 rc = bfad_hal_mem_alloc(bfad);
817 printk(KERN_WARNING "bfad%d bfad_hal_mem_alloc failure\n",
818 bfad->inst_no);
824 bfad->bfa.trcmod = bfad->trcmod;
825 bfad->bfa.plog = &bfad->plog_buf;
826 bfa_plog_init(&bfad->plog_buf);
827 bfa_plog_str(&bfad->plog_buf, BFA_PL_MID_DRVR, BFA_PL_EID_DRIVER_START,
830 bfa_attach(&bfad->bfa, bfad, &bfad->ioc_cfg, &bfad->meminfo,
831 &bfad->hal_pcidev);
834 spin_lock_irqsave(&bfad->bfad_lock, flags);
835 bfad->bfa_fcs.trcmod = bfad->trcmod;
836 bfa_fcs_attach(&bfad->bfa_fcs, &bfad->bfa, bfad, BFA_FALSE);
837 bfad->bfa_fcs.fdmi_enabled = fdmi_enable;
838 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
840 bfad->bfad_flags |= BFAD_DRV_INIT_DONE;
846 bfad_drv_uninit(struct bfad_s *bfad)
850 spin_lock_irqsave(&bfad->bfad_lock, flags);
851 init_completion(&bfad->comp);
852 bfa_iocfc_stop(&bfad->bfa);
853 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
854 wait_for_completion(&bfad->comp);
856 del_timer_sync(&bfad->hal_tmo);
857 bfa_isr_disable(&bfad->bfa);
858 bfa_detach(&bfad->bfa);
859 bfad_remove_intr(bfad);
860 bfad_hal_mem_release(bfad);
862 bfad->bfad_flags &= ~BFAD_DRV_INIT_DONE;
866 bfad_drv_start(struct bfad_s *bfad)
870 spin_lock_irqsave(&bfad->bfad_lock, flags);
871 bfa_iocfc_start(&bfad->bfa);
872 bfa_fcs_pbc_vport_init(&bfad->bfa_fcs);
873 bfa_fcs_fabric_modstart(&bfad->bfa_fcs);
874 bfad->bfad_flags |= BFAD_HAL_START_DONE;
875 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
877 if (bfad->im)
878 flush_workqueue(bfad->im->drv_workq);
882 bfad_fcs_stop(struct bfad_s *bfad)
886 spin_lock_irqsave(&bfad->bfad_lock, flags);
887 init_completion(&bfad->comp);
888 bfad->pport.flags |= BFAD_PORT_DELETE;
889 bfa_fcs_exit(&bfad->bfa_fcs);
890 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
891 wait_for_completion(&bfad->comp);
893 bfa_sm_send_event(bfad, BFAD_E_FCS_EXIT_COMP);
897 bfad_stop(struct bfad_s *bfad)
901 spin_lock_irqsave(&bfad->bfad_lock, flags);
902 init_completion(&bfad->comp);
903 bfa_iocfc_stop(&bfad->bfa);
904 bfad->bfad_flags &= ~BFAD_HAL_START_DONE;
905 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
906 wait_for_completion(&bfad->comp);
908 bfa_sm_send_event(bfad, BFAD_E_EXIT_COMP);
912 bfad_cfg_pport(struct bfad_s *bfad, enum bfa_lport_role role)
919 if (bfad->pport.im_port == NULL) {
924 rc = bfad_im_scsi_host_alloc(bfad, bfad->pport.im_port,
925 &bfad->pcidev->dev);
929 bfad->pport.roles |= BFA_LPORT_ROLE_FCP_IM;
932 bfad->bfad_flags |= BFAD_CFG_PPORT_DONE;
939 bfad_uncfg_pport(struct bfad_s *bfad)
942 (bfad->pport.roles & BFA_LPORT_ROLE_FCP_IM)) {
943 bfad_im_scsi_host_free(bfad, bfad->pport.im_port);
944 bfad_im_port_clean(bfad->pport.im_port);
945 kfree(bfad->pport.im_port);
946 bfad->pport.roles &= ~BFA_LPORT_ROLE_FCP_IM;
949 bfad->bfad_flags &= ~BFAD_CFG_PPORT_DONE;
953 bfad_start_ops(struct bfad_s *bfad) {
980 strscpy(driver_info.os_device_name, bfad->pci_name,
984 spin_lock_irqsave(&bfad->bfad_lock, flags);
985 bfa_fcs_driver_info_init(&bfad->bfa_fcs, &driver_info);
987 if (bfad->bfad_flags & BFAD_CFG_PPORT_DONE)
988 bfa_fcs_update_cfg(&bfad->bfa_fcs);
990 bfa_fcs_init(&bfad->bfa_fcs);
992 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
994 if (!(bfad->bfad_flags & BFAD_CFG_PPORT_DONE)) {
995 retval = bfad_cfg_pport(bfad, BFA_LPORT_ROLE_FCP_IM);
1001 bfad_fc_host_init(bfad->pport.im_port);
1004 retval = bfad_im_probe(bfad);
1007 if (bfa_sm_cmp_state(bfad, bfad_sm_initializing))
1008 bfa_sm_set_state(bfad, bfad_sm_failed);
1011 bfad->bfad_flags |= BFAD_FC4_PROBE_DONE;
1013 bfad_drv_start(bfad);
1016 list_for_each_entry_safe(vport, vport_new, &bfad->pbc_vport_list,
1030 fc_vport = fc_vport_create(bfad->pport.im_port->shost, 0, &vid);
1033 printk(KERN_WARNING "bfad%d: failed to create pbc vport"
1034 " %s\n", bfad->inst_no, pwwn_buf);
1046 bfa_linkup_delay = bfad_get_linkup_delay(bfad);
1047 bfad_rport_online_wait(bfad);
1050 bfad_rport_online_wait(bfad);
1052 BFA_LOG(KERN_INFO, bfad, bfa_log_level, "bfa device claimed\n");
1060 struct bfad_s *bfad = ptr;
1067 bfa_sm_send_event(bfad, BFAD_E_INIT_SUCCESS);
1069 spin_lock_irqsave(&bfad->bfad_lock, flags);
1070 bfad->bfad_tsk = NULL;
1071 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1082 struct bfad_s *bfad = dev_id;
1087 spin_lock_irqsave(&bfad->bfad_lock, flags);
1088 rc = bfa_intx(&bfad->bfa);
1090 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1094 bfa_comp_deq(&bfad->bfa, &doneq);
1095 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1098 bfa_comp_process(&bfad->bfa, &doneq);
1100 spin_lock_irqsave(&bfad->bfad_lock, flags);
1101 bfa_comp_free(&bfad->bfa, &doneq);
1102 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1113 struct bfad_s *bfad = vec->bfad;
1117 spin_lock_irqsave(&bfad->bfad_lock, flags);
1119 bfa_msix(&bfad->bfa, vec->msix.entry);
1120 bfa_comp_deq(&bfad->bfa, &doneq);
1121 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1124 bfa_comp_process(&bfad->bfa, &doneq);
1126 spin_lock_irqsave(&bfad->bfad_lock, flags);
1127 bfa_comp_free(&bfad->bfa, &doneq);
1128 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1138 bfad_init_msix_entry(struct bfad_s *bfad, struct msix_entry *msix_entries,
1144 for (i = 0, bfad->nvec = 0; i < MAX_MSIX_ENTRY; i++) {
1146 bfad->msix_tab[bfad->nvec].msix.entry = i;
1147 bfad->msix_tab[bfad->nvec].bfad = bfad;
1148 msix_entries[bfad->nvec].entry = i;
1149 bfad->nvec++;
1158 bfad_install_msix_handler(struct bfad_s *bfad)
1162 for (i = 0; i < bfad->nvec; i++) {
1163 sprintf(bfad->msix_tab[i].name, "bfa-%s-%s",
1164 bfad->pci_name,
1165 ((bfa_asic_id_cb(bfad->hal_pcidev.device_id)) ?
1168 error = request_irq(bfad->msix_tab[i].msix.vector,
1170 bfad->msix_tab[i].name, &bfad->msix_tab[i]);
1171 bfa_trc(bfad, i);
1172 bfa_trc(bfad, bfad->msix_tab[i].msix.vector);
1177 free_irq(bfad->msix_tab[j].msix.vector,
1178 &bfad->msix_tab[j]);
1180 bfad->bfad_flags &= ~BFAD_MSIX_ON;
1181 pci_disable_msix(bfad->pcidev);
1194 bfad_setup_intr(struct bfad_s *bfad)
1199 struct pci_dev *pdev = bfad->pcidev;
1203 bfa_msix_getvecs(&bfad->bfa, &mask, &num_bit, &max_bit);
1206 bfad_init_msix_entry(bfad, msix_entries, mask, max_bit);
1211 error = pci_enable_msix_exact(bfad->pcidev,
1212 msix_entries, bfad->nvec);
1217 bfad->pci_name, bfad->nvec, error);
1218 bfad->nvec = 1;
1219 error = pci_enable_msix_exact(bfad->pcidev,
1224 printk(KERN_WARNING "bfad%d: "
1227 bfad->inst_no, error);
1239 for (i = 0; i < bfad->nvec; i++) {
1240 bfa_trc(bfad, msix_entries[i].vector);
1241 bfad->msix_tab[i].msix.vector = msix_entries[i].vector;
1244 bfa_msix_init(&bfad->bfa, bfad->nvec);
1246 bfad->bfad_flags |= BFAD_MSIX_ON;
1252 error = request_irq(bfad->pcidev->irq, (irq_handler_t)bfad_intx,
1253 BFAD_IRQ_FLAGS, BFAD_DRIVER_NAME, bfad);
1257 bfad->bfad_flags |= BFAD_INTX_ON;
1263 bfad_remove_intr(struct bfad_s *bfad)
1267 if (bfad->bfad_flags & BFAD_MSIX_ON) {
1268 for (i = 0; i < bfad->nvec; i++)
1269 free_irq(bfad->msix_tab[i].msix.vector,
1270 &bfad->msix_tab[i]);
1272 pci_disable_msix(bfad->pcidev);
1273 bfad->bfad_flags &= ~BFAD_MSIX_ON;
1274 } else if (bfad->bfad_flags & BFAD_INTX_ON) {
1275 free_irq(bfad->pcidev->irq, bfad);
1285 struct bfad_s *bfad;
1293 bfad = kzalloc(sizeof(struct bfad_s), GFP_KERNEL);
1294 if (!bfad) {
1299 bfad->trcmod = kzalloc(sizeof(struct bfa_trc_mod_s), GFP_KERNEL);
1300 if (!bfad->trcmod) {
1307 bfa_trc_init(bfad->trcmod);
1308 bfa_trc(bfad, bfad_inst);
1311 INIT_LIST_HEAD(&bfad->free_aen_q);
1312 INIT_LIST_HEAD(&bfad->active_aen_q);
1314 list_add_tail(&bfad->aen_list[i].qe, &bfad->free_aen_q);
1317 kfree(bfad->trcmod);
1321 retval = bfad_pci_init(pdev, bfad);
1329 bfad->inst_no = bfad_inst++;
1330 list_add_tail(&bfad->list_entry, &bfad_list);
1334 bfa_sm_set_state(bfad, bfad_sm_uninit);
1336 spin_lock_init(&bfad->bfad_lock);
1337 spin_lock_init(&bfad->bfad_aen_spinlock);
1339 pci_set_drvdata(pdev, bfad);
1341 bfad->ref_count = 0;
1342 bfad->pport.bfad = bfad;
1343 INIT_LIST_HEAD(&bfad->pbc_vport_list);
1344 INIT_LIST_HEAD(&bfad->vport_list);
1346 /* Setup the debugfs node for this bfad */
1348 bfad_debugfs_init(&bfad->pport);
1350 retval = bfad_drv_init(bfad);
1354 bfa_sm_send_event(bfad, BFAD_E_CREATE);
1356 if (bfa_sm_cmp_state(bfad, bfad_sm_uninit))
1362 bfad_hal_mem_release(bfad);
1364 /* Remove the debugfs node for this bfad */
1365 kfree(bfad->regdata);
1366 bfad_debugfs_exit(&bfad->pport);
1369 list_del(&bfad->list_entry);
1371 bfad_pci_uninit(pdev, bfad);
1373 kfree(bfad->trcmod);
1375 kfree(bfad);
1386 struct bfad_s *bfad = pci_get_drvdata(pdev);
1389 bfa_trc(bfad, bfad->inst_no);
1391 spin_lock_irqsave(&bfad->bfad_lock, flags);
1392 if (bfad->bfad_tsk != NULL) {
1393 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1394 kthread_stop(bfad->bfad_tsk);
1396 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1400 bfa_sm_send_event(bfad, BFAD_E_STOP);
1403 spin_lock_irqsave(&bfad->bfad_lock, flags);
1404 bfa_detach(&bfad->bfa);
1405 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1406 bfad_hal_mem_release(bfad);
1408 /* Remove the debugfs node for this bfad */
1409 kfree(bfad->regdata);
1410 bfad_debugfs_exit(&bfad->pport);
1415 list_del(&bfad->list_entry);
1417 bfad_pci_uninit(pdev, bfad);
1419 kfree(bfad->trcmod);
1420 kfree(bfad);
1429 struct bfad_s *bfad = pci_get_drvdata(pdev);
1435 state, bfad->bfad_flags);
1439 spin_lock_irqsave(&bfad->bfad_lock, flags);
1440 bfad->bfad_flags &= ~BFAD_EEH_BUSY;
1442 bfa_ioc_suspend(&bfad->bfa.ioc);
1443 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1444 del_timer_sync(&bfad->hal_tmo);
1448 init_completion(&bfad->comp);
1449 spin_lock_irqsave(&bfad->bfad_lock, flags);
1450 bfad->bfad_flags |= BFAD_EEH_BUSY;
1452 bfa_ioc_suspend(&bfad->bfa.ioc);
1453 bfa_fcs_stop(&bfad->bfa_fcs);
1454 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1455 wait_for_completion(&bfad->comp);
1457 bfad_remove_intr(bfad);
1458 del_timer_sync(&bfad->hal_tmo);
1463 spin_lock_irqsave(&bfad->bfad_lock, flags);
1464 bfad->bfad_flags |= BFAD_EEH_BUSY |
1466 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1483 static int restart_bfa(struct bfad_s *bfad)
1486 struct pci_dev *pdev = bfad->pcidev;
1488 bfa_attach(&bfad->bfa, bfad, &bfad->ioc_cfg,
1489 &bfad->meminfo, &bfad->hal_pcidev);
1492 if (bfad_setup_intr(bfad)) {
1494 "%s: bfad_setup_intr failed\n", bfad->pci_name);
1495 bfa_sm_send_event(bfad, BFAD_E_INIT_FAILED);
1499 init_completion(&bfad->comp);
1500 spin_lock_irqsave(&bfad->bfad_lock, flags);
1501 bfa_iocfc_init(&bfad->bfa);
1502 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1505 if ((bfad->bfad_flags & BFAD_MSIX_ON) &&
1506 bfad_install_msix_handler(bfad))
1508 "%s: install_msix failed.\n", bfad->pci_name);
1510 bfad_init_timer(bfad);
1511 wait_for_completion(&bfad->comp);
1512 bfad_drv_start(bfad);
1523 struct bfad_s *bfad = pci_get_drvdata(pdev);
1528 "bfad_pci_slot_reset flags: 0x%x\n", bfad->bfad_flags);
1553 rc = dma_set_mask_and_coherent(&bfad->pcidev->dev, DMA_BIT_MASK(64));
1557 if (restart_bfa(bfad) == -1)
1561 "slot_reset completed flags: 0x%x!\n", bfad->bfad_flags);
1574 struct bfad_s *bfad = pci_get_drvdata(pdev);
1579 bfa_ioc_debug_save_ftrc(&bfad->bfa.ioc);
1582 spin_lock_irqsave(&bfad->bfad_lock, flags);
1583 init_completion(&bfad->comp);
1584 bfa_fcs_stop(&bfad->bfa_fcs);
1585 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1586 wait_for_completion(&bfad->comp);
1588 bfad_remove_intr(bfad);
1589 del_timer_sync(&bfad->hal_tmo);
1599 struct bfad_s *bfad = pci_get_drvdata(pdev);
1604 bfad_rport_online_wait(bfad);
1606 spin_lock_irqsave(&bfad->bfad_lock, flags);
1607 bfad->bfad_flags &= ~BFAD_EEH_BUSY;
1608 spin_unlock_irqrestore(&bfad->bfad_lock, flags);