Lines Matching +full:dev +full:- +full:active +full:- +full:grp
1 // SPDX-License-Identifier: GPL-2.0
36 /* driver-wide init for target-server */ in efct_device_init()
70 INIT_LIST_HEAD(&efct->list_entry); in efct_device_alloc()
71 list_add_tail(&efct->list_entry, &efct_devices); in efct_device_alloc()
81 for (i = 0; i < efct->n_msix_vec; i++) { in efct_teardown_msix()
82 free_irq(pci_irq_vector(efct->pci, i), in efct_teardown_msix()
83 &efct->intr_context[i]); in efct_teardown_msix()
86 pci_free_irq_vectors(efct->pci); in efct_teardown_msix()
98 return -ENOMEM; in efct_efclib_config()
100 efct->efcport = efc; in efct_efclib_config()
102 memcpy(&efc->tt, tt, sizeof(*tt)); in efct_efclib_config()
103 efc->base = efct; in efct_efclib_config()
104 efc->pci = efct->pci; in efct_efclib_config()
106 efc->def_wwnn = efct_get_wwnn(&efct->hw); in efct_efclib_config()
107 efc->def_wwpn = efct_get_wwpn(&efct->hw); in efct_efclib_config()
108 efc->enable_tgt = 1; in efct_efclib_config()
109 efc->log_level = EFC_LOG_LIB; in efct_efclib_config()
111 sli = &efct->hw.sli; in efct_efclib_config()
112 efc->max_xfer_size = sli->sge_supported_length * in efct_efclib_config()
113 sli_get_max_sgl(&efct->hw.sli); in efct_efclib_config()
114 efc->sli = sli; in efct_efclib_config()
115 efc->fcfi = efct->hw.fcf_indicator; in efct_efclib_config()
141 if (efct->attached) { in efct_device_attach()
143 return -EIO; in efct_device_attach()
146 snprintf(efct->name, sizeof(efct->name), "[%s%d] ", "fc", in efct_device_attach()
147 efct->instance_index); in efct_device_attach()
149 efct->logmask = logmask; in efct_device_attach()
150 efct->filter_def = EFCT_DEFAULT_FILTER; in efct_device_attach()
151 efct->max_isr_time_msec = EFCT_OS_MAX_ISR_TIME_MSEC; in efct_device_attach()
153 efct->model = efct_pci_model(efct->pci->device); in efct_device_attach()
155 efct->efct_req_fw_upgrade = true; in efct_device_attach()
158 efct->xport = efct_xport_alloc(efct); in efct_device_attach()
159 if (!efct->xport) { in efct_device_attach()
161 rc = -ENOMEM; in efct_device_attach()
165 rc = efct_xport_attach(efct->xport); in efct_device_attach()
171 rc = efct_xport_initialize(efct->xport); in efct_device_attach()
183 for (i = 0; i < efct->n_msix_vec; i++) { in efct_device_attach()
185 enable_irq(pci_irq_vector(efct->pci, i)); in efct_device_attach()
188 efct->attached = true; in efct_device_attach()
190 if (efct->efct_req_fw_upgrade) in efct_device_attach()
196 efct_xport_detach(efct->xport); in efct_device_attach()
198 efct_xport_free(efct->xport); in efct_device_attach()
199 efct->xport = NULL; in efct_device_attach()
209 if (!efct || !efct->attached) { in efct_device_detach()
211 return -EIO; in efct_device_detach()
214 if (efct_xport_control(efct->xport, EFCT_XPORT_SHUTDOWN)) in efct_device_detach()
217 for (i = 0; i < efct->n_msix_vec; i++) in efct_device_detach()
218 disable_irq(pci_irq_vector(efct->pci, i)); in efct_device_detach()
220 efct_xport_detach(efct->xport); in efct_device_detach()
222 efct_xport_free(efct->xport); in efct_device_detach()
223 efct->xport = NULL; in efct_device_detach()
225 efcport_destroy(efct->efcport); in efct_device_detach()
226 kfree(efct->efcport); in efct_device_detach()
228 efct->attached = false; in efct_device_detach()
239 result->status = status; in efct_fw_write_cb()
240 result->actual_xfer = actual_write_length; in efct_fw_write_cb()
241 result->change_status = change_status; in efct_fw_write_cb()
243 complete(&result->done); in efct_fw_write_cb()
264 dma.virt = dma_alloc_coherent(&efct->pci->dev, in efct_firmware_write()
267 return -ENOMEM; in efct_firmware_write()
280 efct_hw_firmware_write(&efct->hw, &dma, xfer_size, offset, in efct_firmware_write()
284 rc = -ENXIO; in efct_firmware_write()
289 rc = -EFAULT; in efct_firmware_write()
296 bytes_left -= result.actual_xfer; in efct_firmware_write()
300 dma_free_coherent(&efct->pci->dev, dma.size, dma.virt, dma.phys); in efct_firmware_write()
312 if (timer_pending(&efct->xport->stats_timer)) in efct_fw_reset()
313 timer_delete(&efct->xport->stats_timer); in efct_fw_reset()
315 if (efct_hw_reset(&efct->hw, EFCT_HW_RESET_FIRMWARE)) { in efct_fw_reset()
317 return -EIO; in efct_fw_reset()
334 snprintf(file_name, 256, "%s.grp", efct->model); in efct_request_firmware_update()
336 rc = request_firmware(&fw, file_name, &efct->pci->dev); in efct_request_firmware_update()
342 fw_image = (struct efct_hw_grp_hdr *)fw->data; in efct_request_firmware_update()
344 if (!strncmp(efct->hw.sli.fw_name[0], fw_image->revision, in efct_request_firmware_update()
345 strnlen(fw_image->revision, 16))) { in efct_request_firmware_update()
351 efc_log_info(efct, "Firmware update is initiated. %s -> %s\n", in efct_request_firmware_update()
352 efct->hw.sli.fw_name[0], fw_image->revision); in efct_request_firmware_update()
354 rc = efct_firmware_write(efct, fw->data, fw->size, &fw_change_status); in efct_request_firmware_update()
363 efc_log_info(efct, "New firmware is active.\n"); in efct_request_firmware_update()
391 list_del(&efct->list_entry); in efct_device_free()
401 rc = efct_hw_setup(&efct->hw, efct, efct->pci); in efct_device_interrupts_required()
405 return efct->hw.config.n_eq; in efct_device_interrupts_required()
412 struct efct *efct = intr_ctx->efct; in efct_intr_thread()
414 efct_hw_process(&efct->hw, intr_ctx->index, efct->max_isr_time_msec); in efct_intr_thread()
429 if (!pci_find_capability(efct->pci, PCI_CAP_ID_MSIX)) { in efct_setup_msix()
430 dev_err(&efct->pci->dev, in efct_setup_msix()
431 "%s : MSI-X not available\n", __func__); in efct_setup_msix()
432 return -EIO; in efct_setup_msix()
435 efct->n_msix_vec = num_intrs; in efct_setup_msix()
437 rc = pci_alloc_irq_vectors(efct->pci, num_intrs, num_intrs, in efct_setup_msix()
441 dev_err(&efct->pci->dev, "Failed to alloc irq : %d\n", rc); in efct_setup_msix()
448 intr_ctx = &efct->intr_context[i]; in efct_setup_msix()
449 intr_ctx->efct = efct; in efct_setup_msix()
450 intr_ctx->index = i; in efct_setup_msix()
452 rc = request_threaded_irq(pci_irq_vector(efct->pci, i), in efct_setup_msix()
456 dev_err(&efct->pci->dev, in efct_setup_msix()
465 while (--i >= 0) in efct_setup_msix()
466 free_irq(pci_irq_vector(efct->pci, i), in efct_setup_msix()
467 &efct->intr_context[i]); in efct_setup_msix()
469 pci_free_irq_vectors(efct->pci); in efct_setup_msix()
488 dev_info(&pdev->dev, "%s\n", EFCT_DRIVER_NAME); in efct_pci_probe()
498 dev_info(&pdev->dev, "pci_set_mwi returned %d\n", rc); in efct_pci_probe()
504 dev_err(&pdev->dev, "pci_request_regions failed %d\n", rc); in efct_pci_probe()
509 nid = dev_to_node(&pdev->dev); in efct_pci_probe()
511 dev_err(&pdev->dev, "Warning Numa node ID is %d\n", nid); in efct_pci_probe()
518 dev_err(&pdev->dev, "Failed to allocate efct\n"); in efct_pci_probe()
519 rc = -ENOMEM; in efct_pci_probe()
523 efct->pci = pdev; in efct_pci_probe()
524 efct->numa_node = nid; in efct_pci_probe()
529 efct->reg[r] = ioremap(pci_resource_start(pdev, i), in efct_pci_probe()
535 * If the 64-bit attribute is set, both this BAR and the in efct_pci_probe()
545 rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); in efct_pci_probe()
547 dev_err(&pdev->dev, "setting DMA_BIT_MASK failed\n"); in efct_pci_probe()
554 rc = -1; in efct_pci_probe()
564 dev_err(&pdev->dev, "Can't setup msix\n"); in efct_pci_probe()
568 for (i = 0; i < efct->n_msix_vec; i++) { in efct_pci_probe()
570 disable_irq(pci_irq_vector(efct->pci, i)); in efct_pci_probe()
585 if (efct->reg[i]) in efct_pci_probe()
586 iounmap(efct->reg[i]); in efct_pci_probe()
612 if (efct->reg[i]) in efct_pci_remove()
613 iounmap(efct->reg[i]); in efct_pci_remove()
643 efct_hw_io_abort_all(&efct->hw); in efct_device_prep_for_recover()
648 * efct_pci_io_error_detected - method for handling PCI I/O error
659 * PCI_ERS_RESULT_NEED_RESET - need to reset before recovery
660 * PCI_ERS_RESULT_DISCONNECT - device could not be recovered
712 rc = efct_setup_msix(efct, efct->n_msix_vec); in efct_pci_io_slot_reset()