Lines Matching defs:efct

64 	struct efct *efct = NULL;
66 efct = kzalloc_node(sizeof(*efct), GFP_KERNEL, nid);
67 if (!efct)
68 return efct;
70 INIT_LIST_HEAD(&efct->list_entry);
71 list_add_tail(&efct->list_entry, &efct_devices);
73 return efct;
77 efct_teardown_msix(struct efct *efct)
81 for (i = 0; i < efct->n_msix_vec; i++) {
82 free_irq(pci_irq_vector(efct->pci, i),
83 &efct->intr_context[i]);
86 pci_free_irq_vectors(efct->pci);
90 efct_efclib_config(struct efct *efct, struct libefc_function_template *tt)
100 efct->efcport = efc;
103 efc->base = efct;
104 efc->pci = efct->pci;
106 efc->def_wwnn = efct_get_wwnn(&efct->hw);
107 efc->def_wwpn = efct_get_wwpn(&efct->hw);
111 sli = &efct->hw.sli;
113 sli_get_max_sgl(&efct->hw.sli);
115 efc->fcfi = efct->hw.fcf_indicator;
124 static int efct_request_firmware_update(struct efct *efct);
137 efct_device_attach(struct efct *efct)
141 if (efct->attached) {
142 efc_log_err(efct, "Device is already attached\n");
146 snprintf(efct->name, sizeof(efct->name), "[%s%d] ", "fc",
147 efct->instance_index);
149 efct->logmask = logmask;
150 efct->filter_def = EFCT_DEFAULT_FILTER;
151 efct->max_isr_time_msec = EFCT_OS_MAX_ISR_TIME_MSEC;
153 efct->model = efct_pci_model(efct->pci->device);
155 efct->efct_req_fw_upgrade = true;
158 efct->xport = efct_xport_alloc(efct);
159 if (!efct->xport) {
160 efc_log_err(efct, "failed to allocate transport object\n");
165 rc = efct_xport_attach(efct->xport);
167 efc_log_err(efct, "failed to attach transport object\n");
171 rc = efct_xport_initialize(efct->xport);
173 efc_log_err(efct, "failed to initialize transport object\n");
177 rc = efct_efclib_config(efct, &efct_libefc_templ);
179 efc_log_err(efct, "failed to init efclib\n");
183 for (i = 0; i < efct->n_msix_vec; i++) {
184 efc_log_debug(efct, "irq %d enabled\n", i);
185 enable_irq(pci_irq_vector(efct->pci, i));
188 efct->attached = true;
190 if (efct->efct_req_fw_upgrade)
191 efct_request_firmware_update(efct);
196 efct_xport_detach(efct->xport);
198 efct_xport_free(efct->xport);
199 efct->xport = NULL;
205 efct_device_detach(struct efct *efct)
209 if (!efct || !efct->attached) {
214 if (efct_xport_control(efct->xport, EFCT_XPORT_SHUTDOWN))
215 efc_log_err(efct, "Transport Shutdown timed out\n");
217 for (i = 0; i < efct->n_msix_vec; i++)
218 disable_irq(pci_irq_vector(efct->pci, i));
220 efct_xport_detach(efct->xport);
222 efct_xport_free(efct->xport);
223 efct->xport = NULL;
225 efcport_destroy(efct->efcport);
226 kfree(efct->efcport);
228 efct->attached = false;
247 efct_firmware_write(struct efct *efct, const u8 *buf, size_t buf_len,
264 dma.virt = dma_alloc_coherent(&efct->pci->dev,
280 efct_hw_firmware_write(&efct->hw, &dma, xfer_size, offset,
300 dma_free_coherent(&efct->pci->dev, dma.size, dma.virt, dma.phys);
305 efct_fw_reset(struct efct *efct)
312 if (timer_pending(&efct->xport->stats_timer))
313 del_timer(&efct->xport->stats_timer);
315 if (efct_hw_reset(&efct->hw, EFCT_HW_RESET_FIRMWARE)) {
316 efc_log_info(efct, "failed to reset firmware\n");
320 efc_log_info(efct, "successfully reset firmware.Now resetting port\n");
322 efct_device_detach(efct);
323 return efct_device_attach(efct);
327 efct_request_firmware_update(struct efct *efct)
334 snprintf(file_name, 256, "%s.grp", efct->model);
336 rc = request_firmware(&fw, file_name, &efct->pci->dev);
338 efc_log_debug(efct, "Firmware file(%s) not found.\n", file_name);
344 if (!strncmp(efct->hw.sli.fw_name[0], fw_image->revision,
346 efc_log_debug(efct,
351 efc_log_info(efct, "Firmware update is initiated. %s -> %s\n",
352 efct->hw.sli.fw_name[0], fw_image->revision);
354 rc = efct_firmware_write(efct, fw->data, fw->size, &fw_change_status);
356 efc_log_err(efct, "Firmware update failed. rc = %d\n", rc);
360 efc_log_info(efct, "Firmware updated successfully\n");
363 efc_log_info(efct, "New firmware is active.\n");
366 efc_log_info(efct,
371 efc_log_info(efct,
373 efct_fw_reset(efct);
376 efc_log_info(efct, "Unexpected value change_status:%d\n",
388 efct_device_free(struct efct *efct)
390 if (efct) {
391 list_del(&efct->list_entry);
392 kfree(efct);
397 efct_device_interrupts_required(struct efct *efct)
401 rc = efct_hw_setup(&efct->hw, efct, efct->pci);
405 return efct->hw.config.n_eq;
412 struct efct *efct = intr_ctx->efct;
414 efct_hw_process(&efct->hw, intr_ctx->index, efct->max_isr_time_msec);
425 efct_setup_msix(struct efct *efct, u32 num_intrs)
429 if (!pci_find_capability(efct->pci, PCI_CAP_ID_MSIX)) {
430 dev_err(&efct->pci->dev,
435 efct->n_msix_vec = num_intrs;
437 rc = pci_alloc_irq_vectors(efct->pci, num_intrs, num_intrs,
441 dev_err(&efct->pci->dev, "Failed to alloc irq : %d\n", rc);
448 intr_ctx = &efct->intr_context[i];
449 intr_ctx->efct = efct;
452 rc = request_threaded_irq(pci_irq_vector(efct->pci, i),
456 dev_err(&efct->pci->dev,
466 free_irq(pci_irq_vector(efct->pci, i),
467 &efct->intr_context[i]);
469 pci_free_irq_vectors(efct->pci);
482 struct efct *efct = NULL;
515 /* Allocate efct */
516 efct = efct_device_alloc(nid);
517 if (!efct) {
518 dev_err(&pdev->dev, "Failed to allocate efct\n");
523 efct->pci = pdev;
524 efct->numa_node = nid;
529 efct->reg[r] = ioremap(pci_resource_start(pdev, i),
543 pci_set_drvdata(pdev, efct);
551 num_interrupts = efct_device_interrupts_required(efct);
553 efc_log_err(efct, "efct_device_interrupts_required failed\n");
562 rc = efct_setup_msix(efct, num_interrupts);
568 for (i = 0; i < efct->n_msix_vec; i++) {
569 efc_log_debug(efct, "irq %d disabled\n", i);
570 disable_irq(pci_irq_vector(efct->pci, i));
573 rc = efct_device_attach(efct);
580 efct_teardown_msix(efct);
585 if (efct->reg[i])
586 iounmap(efct->reg[i]);
588 efct_device_free(efct);
601 struct efct *efct = pci_get_drvdata(pdev);
604 if (!efct)
607 efct_device_detach(efct);
609 efct_teardown_msix(efct);
612 if (efct->reg[i])
613 iounmap(efct->reg[i]);
618 efct_device_free(efct);
626 efct_device_prep_for_reset(struct efct *efct, struct pci_dev *pdev)
628 if (efct) {
629 efc_log_debug(efct,
631 efct_device_detach(efct);
633 efct_teardown_msix(efct);
639 efct_device_prep_for_recover(struct efct *efct)
641 if (efct) {
642 efc_log_debug(efct, "PCI channel preparing for recovery\n");
643 efct_hw_io_abort_all(&efct->hw);
665 struct efct *efct = pci_get_drvdata(pdev);
670 efct_device_prep_for_recover(efct);
674 efct_device_prep_for_reset(efct, pdev);
678 efct_device_detach(efct);
682 efc_log_debug(efct, "Unknown PCI error state:0x%x\n", state);
683 efct_device_prep_for_reset(efct, pdev);
695 struct efct *efct = pci_get_drvdata(pdev);
699 efc_log_err(efct, "failed to enable PCI device after reset\n");
712 rc = efct_setup_msix(efct, efct->n_msix_vec);
714 efc_log_err(efct, "rc %d returned, IRQ allocation failed\n",
718 efct_device_detach(efct);
720 efct_device_attach(efct);
728 struct efct *efct = pci_get_drvdata(pdev);
731 efct_device_detach(efct);
733 efct_device_attach(efct);