Lines Matching +full:max +full:- +full:outbound +full:- +full:regions

5  *  Copyright (c) 2001-2013 ATTO Technology, Inc.
21 * LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
40 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
50 mem_desc->esas2r_param = mem_desc->size + align; in esas2r_initmem_alloc()
51 mem_desc->virt_addr = NULL; in esas2r_initmem_alloc()
52 mem_desc->phys_addr = 0; in esas2r_initmem_alloc()
53 mem_desc->esas2r_data = dma_alloc_coherent(&a->pcid->dev, in esas2r_initmem_alloc()
54 (size_t)mem_desc-> in esas2r_initmem_alloc()
56 (dma_addr_t *)&mem_desc-> in esas2r_initmem_alloc()
60 if (mem_desc->esas2r_data == NULL) { in esas2r_initmem_alloc()
65 int)mem_desc->esas2r_param); in esas2r_initmem_alloc()
69 mem_desc->virt_addr = PTR_ALIGN(mem_desc->esas2r_data, align); in esas2r_initmem_alloc()
70 mem_desc->phys_addr = ALIGN(mem_desc->phys_addr, align); in esas2r_initmem_alloc()
71 memset(mem_desc->virt_addr, 0, mem_desc->size); in esas2r_initmem_alloc()
78 if (mem_desc->virt_addr == NULL) in esas2r_initmem_free()
88 if (mem_desc->phys_addr) { in esas2r_initmem_free()
89 int unalign = ((u8 *)mem_desc->virt_addr) - in esas2r_initmem_free()
90 ((u8 *)mem_desc->esas2r_data); in esas2r_initmem_free()
92 dma_free_coherent(&a->pcid->dev, in esas2r_initmem_free()
93 (size_t)mem_desc->esas2r_param, in esas2r_initmem_free()
94 mem_desc->esas2r_data, in esas2r_initmem_free()
95 (dma_addr_t)(mem_desc->phys_addr - unalign)); in esas2r_initmem_free()
97 kfree(mem_desc->esas2r_data); in esas2r_initmem_free()
100 mem_desc->virt_addr = NULL; in esas2r_initmem_free()
114 memdesc->size = sizeof(union atto_vda_req) + in alloc_vda_req()
123 a->num_vrqs++; in alloc_vda_req()
124 list_add(&memdesc->next_desc, &a->vrq_mds_head); in alloc_vda_req()
126 rq->vrq_md = memdesc; in alloc_vda_req()
127 rq->vrq = (union atto_vda_req *)memdesc->virt_addr; in alloc_vda_req()
128 rq->vrq->scsi.handle = a->num_vrqs; in alloc_vda_req()
135 if (a->regs) in esas2r_unmap_regions()
136 iounmap((void __iomem *)a->regs); in esas2r_unmap_regions()
138 a->regs = NULL; in esas2r_unmap_regions()
140 pci_release_region(a->pcid, 2); in esas2r_unmap_regions()
142 if (a->data_window) in esas2r_unmap_regions()
143 iounmap((void __iomem *)a->data_window); in esas2r_unmap_regions()
145 a->data_window = NULL; in esas2r_unmap_regions()
147 pci_release_region(a->pcid, 0); in esas2r_unmap_regions()
154 a->regs = NULL; in esas2r_map_regions()
155 a->data_window = NULL; in esas2r_map_regions()
157 error = pci_request_region(a->pcid, 2, a->name); in esas2r_map_regions()
166 a->regs = (void __force *)ioremap(pci_resource_start(a->pcid, 2), in esas2r_map_regions()
167 pci_resource_len(a->pcid, 2)); in esas2r_map_regions()
168 if (a->regs == NULL) { in esas2r_map_regions()
171 pci_release_region(a->pcid, 2); in esas2r_map_regions()
172 return -EFAULT; in esas2r_map_regions()
175 error = pci_request_region(a->pcid, 0, a->name); in esas2r_map_regions()
184 a->data_window = (void __force *)ioremap(pci_resource_start(a->pcid, in esas2r_map_regions()
186 pci_resource_len(a->pcid, 0)); in esas2r_map_regions()
187 if (a->data_window == NULL) { in esas2r_map_regions()
191 return -EFAULT; in esas2r_map_regions()
205 a->intr_mode = INTR_MODE_LEGACY; in esas2r_setup_interrupts()
209 i = pci_enable_msi(a->pcid); in esas2r_setup_interrupts()
214 "(err=%d)", a->index, in esas2r_setup_interrupts()
218 a->intr_mode = INTR_MODE_MSI; in esas2r_setup_interrupts()
219 set_bit(AF2_MSI_ENABLED, &a->flags2); in esas2r_setup_interrupts()
236 if (a->intr_mode == INTR_MODE_LEGACY) in esas2r_claim_interrupts()
241 a->pcid->irq, a, a->name, flags); in esas2r_claim_interrupts()
243 if (request_irq(a->pcid->irq, in esas2r_claim_interrupts()
244 (a->intr_mode == in esas2r_claim_interrupts()
248 a->name, in esas2r_claim_interrupts()
251 a->pcid->irq); in esas2r_claim_interrupts()
255 set_bit(AF2_IRQ_CLAIMED, &a->flags2); in esas2r_claim_interrupts()
258 a->pcid->irq, flags); in esas2r_claim_interrupts()
285 a = (struct esas2r_adapter *)host->hostdata; in esas2r_init_adapter()
287 a->pcid = pcid; in esas2r_init_adapter()
288 a->host = host; in esas2r_init_adapter()
291 dma_get_required_mask(&pcid->dev) > DMA_BIT_MASK(32) && in esas2r_init_adapter()
292 !dma_set_mask_and_coherent(&pcid->dev, DMA_BIT_MASK(64))) in esas2r_init_adapter()
295 if (!dma64 && dma_set_mask_and_coherent(&pcid->dev, DMA_BIT_MASK(32))) { in esas2r_init_adapter()
301 esas2r_log_dev(ESAS2R_LOG_INFO, &pcid->dev, in esas2r_init_adapter()
302 "%s-bit PCI addressing enabled\n", dma64 ? "64" : "32"); in esas2r_init_adapter()
305 sprintf(a->name, ESAS2R_DRVR_NAME "_%02d", index); in esas2r_init_adapter()
306 esas2r_debug("new adapter %p, name %s", a, a->name); in esas2r_init_adapter()
307 spin_lock_init(&a->request_lock); in esas2r_init_adapter()
308 spin_lock_init(&a->fw_event_lock); in esas2r_init_adapter()
309 mutex_init(&a->fm_api_mutex); in esas2r_init_adapter()
310 mutex_init(&a->fs_api_mutex); in esas2r_init_adapter()
311 sema_init(&a->nvram_semaphore, 1); in esas2r_init_adapter()
314 snprintf(a->fw_event_q_name, ESAS2R_KOBJ_NAME_LEN, "esas2r/%d", in esas2r_init_adapter()
315 a->index); in esas2r_init_adapter()
316 a->fw_event_q = create_singlethread_workqueue(a->fw_event_q_name); in esas2r_init_adapter()
318 init_waitqueue_head(&a->buffered_ioctl_waiter); in esas2r_init_adapter()
319 init_waitqueue_head(&a->nvram_waiter); in esas2r_init_adapter()
320 init_waitqueue_head(&a->fm_api_waiter); in esas2r_init_adapter()
321 init_waitqueue_head(&a->fs_api_waiter); in esas2r_init_adapter()
322 init_waitqueue_head(&a->vda_waiter); in esas2r_init_adapter()
324 INIT_LIST_HEAD(&a->general_req.req_list); in esas2r_init_adapter()
325 INIT_LIST_HEAD(&a->active_list); in esas2r_init_adapter()
326 INIT_LIST_HEAD(&a->defer_list); in esas2r_init_adapter()
327 INIT_LIST_HEAD(&a->free_sg_list_head); in esas2r_init_adapter()
328 INIT_LIST_HEAD(&a->avail_request); in esas2r_init_adapter()
329 INIT_LIST_HEAD(&a->vrq_mds_head); in esas2r_init_adapter()
330 INIT_LIST_HEAD(&a->fw_event_list); in esas2r_init_adapter()
336 INIT_LIST_HEAD(&last_request->req_list); in esas2r_init_adapter()
337 list_add_tail(&last_request->comp_list, &a->avail_request); in esas2r_init_adapter()
352 esas2r_log(ESAS2R_LOG_CRIT, "could not map PCI regions!"); in esas2r_init_adapter()
357 a->index = index; in esas2r_init_adapter()
360 atomic_inc(&a->dis_ints_cnt); in esas2r_init_adapter()
361 atomic_inc(&a->disable_cnt); in esas2r_init_adapter()
362 set_bit(AF_CHPRST_PENDING, &a->flags); in esas2r_init_adapter()
363 set_bit(AF_DISC_PENDING, &a->flags); in esas2r_init_adapter()
364 set_bit(AF_FIRST_INIT, &a->flags); in esas2r_init_adapter()
365 set_bit(AF_LEGACY_SGE_MODE, &a->flags); in esas2r_init_adapter()
367 a->init_msg = ESAS2R_INIT_MSG_START; in esas2r_init_adapter()
368 a->max_vdareq_size = 128; in esas2r_init_adapter()
369 a->build_sgl = esas2r_build_sg_list_sge; in esas2r_init_adapter()
373 a->uncached_size = esas2r_get_uncached_size(a); in esas2r_init_adapter()
374 a->uncached = dma_alloc_coherent(&pcid->dev, in esas2r_init_adapter()
375 (size_t)a->uncached_size, in esas2r_init_adapter()
378 if (a->uncached == NULL) { in esas2r_init_adapter()
381 a->uncached_size); in esas2r_init_adapter()
386 a->uncached_phys = bus_addr; in esas2r_init_adapter()
389 a->uncached_size, in esas2r_init_adapter()
390 a->uncached, in esas2r_init_adapter()
393 memset(a->uncached, 0, a->uncached_size); in esas2r_init_adapter()
394 next_uncached = a->uncached; in esas2r_init_adapter()
404 tasklet_init(&a->tasklet, in esas2r_init_adapter()
422 if (test_bit(AF2_IRQ_CLAIMED, &a->flags2)) in esas2r_init_adapter()
425 set_bit(AF2_INIT_DONE, &a->flags2); in esas2r_init_adapter()
426 if (!test_bit(AF_DEGRADED_MODE, &a->flags)) in esas2r_init_adapter()
429 a, a->disable_cnt); in esas2r_init_adapter()
439 if ((test_bit(AF2_INIT_DONE, &a->flags2)) in esas2r_adapter_power_down()
440 && (!test_bit(AF_DEGRADED_MODE, &a->flags))) { in esas2r_adapter_power_down()
442 del_timer_sync(&a->timer); in esas2r_adapter_power_down()
443 tasklet_kill(&a->tasklet); in esas2r_adapter_power_down()
457 if (a->sysfs_fw_created) { in esas2r_adapter_power_down()
458 sysfs_remove_bin_file(&a->host->shost_dev.kobj, &bin_attr_fw); in esas2r_adapter_power_down()
459 a->sysfs_fw_created = 0; in esas2r_adapter_power_down()
462 if (a->sysfs_fs_created) { in esas2r_adapter_power_down()
463 sysfs_remove_bin_file(&a->host->shost_dev.kobj, &bin_attr_fs); in esas2r_adapter_power_down()
464 a->sysfs_fs_created = 0; in esas2r_adapter_power_down()
467 if (a->sysfs_vda_created) { in esas2r_adapter_power_down()
468 sysfs_remove_bin_file(&a->host->shost_dev.kobj, &bin_attr_vda); in esas2r_adapter_power_down()
469 a->sysfs_vda_created = 0; in esas2r_adapter_power_down()
472 if (a->sysfs_hw_created) { in esas2r_adapter_power_down()
473 sysfs_remove_bin_file(&a->host->shost_dev.kobj, &bin_attr_hw); in esas2r_adapter_power_down()
474 a->sysfs_hw_created = 0; in esas2r_adapter_power_down()
477 if (a->sysfs_live_nvram_created) { in esas2r_adapter_power_down()
478 sysfs_remove_bin_file(&a->host->shost_dev.kobj, in esas2r_adapter_power_down()
480 a->sysfs_live_nvram_created = 0; in esas2r_adapter_power_down()
483 if (a->sysfs_default_nvram_created) { in esas2r_adapter_power_down()
484 sysfs_remove_bin_file(&a->host->shost_dev.kobj, in esas2r_adapter_power_down()
486 a->sysfs_default_nvram_created = 0; in esas2r_adapter_power_down()
490 if (test_bit(AF2_IRQ_CLAIMED, &a->flags2)) { in esas2r_adapter_power_down()
492 &(a->pcid->dev), in esas2r_adapter_power_down()
493 "free_irq(%d) called", a->pcid->irq); in esas2r_adapter_power_down()
495 free_irq(a->pcid->irq, a); in esas2r_adapter_power_down()
497 clear_bit(AF2_IRQ_CLAIMED, &a->flags2); in esas2r_adapter_power_down()
500 if (test_bit(AF2_MSI_ENABLED, &a->flags2)) { in esas2r_adapter_power_down()
501 pci_disable_msi(a->pcid); in esas2r_adapter_power_down()
502 clear_bit(AF2_MSI_ENABLED, &a->flags2); in esas2r_adapter_power_down()
506 if (a->inbound_list_md.virt_addr) in esas2r_adapter_power_down()
507 esas2r_initmem_free(a, &a->inbound_list_md); in esas2r_adapter_power_down()
509 if (a->outbound_list_md.virt_addr) in esas2r_adapter_power_down()
510 esas2r_initmem_free(a, &a->outbound_list_md); in esas2r_adapter_power_down()
512 list_for_each_entry_safe(memdesc, next, &a->free_sg_list_head, in esas2r_adapter_power_down()
518 list_for_each_entry_safe(memdesc, next, &a->vrq_mds_head, next_desc) { in esas2r_adapter_power_down()
520 list_del(&memdesc->next_desc); in esas2r_adapter_power_down()
524 kfree(a->first_ae_req); in esas2r_adapter_power_down()
525 a->first_ae_req = NULL; in esas2r_adapter_power_down()
527 kfree(a->sg_list_mds); in esas2r_adapter_power_down()
528 a->sg_list_mds = NULL; in esas2r_adapter_power_down()
530 kfree(a->req_table); in esas2r_adapter_power_down()
531 a->req_table = NULL; in esas2r_adapter_power_down()
533 if (a->regs) { in esas2r_adapter_power_down()
535 a->regs = NULL; in esas2r_adapter_power_down()
536 a->data_window = NULL; in esas2r_adapter_power_down()
537 esas2r_debug("regions unmapped"); in esas2r_adapter_power_down()
553 (a->pcid == esas2r_buffered_ioctl_pcid)) { in esas2r_kill_adapter()
554 dma_free_coherent(&a->pcid->dev, in esas2r_kill_adapter()
561 if (a->vda_buffer) { in esas2r_kill_adapter()
562 dma_free_coherent(&a->pcid->dev, in esas2r_kill_adapter()
564 a->vda_buffer, in esas2r_kill_adapter()
565 (dma_addr_t)a->ppvda_buffer); in esas2r_kill_adapter()
566 a->vda_buffer = NULL; in esas2r_kill_adapter()
568 if (a->fs_api_buffer) { in esas2r_kill_adapter()
569 dma_free_coherent(&a->pcid->dev, in esas2r_kill_adapter()
570 (size_t)a->fs_api_buffer_size, in esas2r_kill_adapter()
571 a->fs_api_buffer, in esas2r_kill_adapter()
572 (dma_addr_t)a->ppfs_api_buffer); in esas2r_kill_adapter()
573 a->fs_api_buffer = NULL; in esas2r_kill_adapter()
576 kfree(a->local_atto_ioctl); in esas2r_kill_adapter()
577 a->local_atto_ioctl = NULL; in esas2r_kill_adapter()
579 spin_lock_irqsave(&a->fw_event_lock, flags); in esas2r_kill_adapter()
580 wq = a->fw_event_q; in esas2r_kill_adapter()
581 a->fw_event_q = NULL; in esas2r_kill_adapter()
582 spin_unlock_irqrestore(&a->fw_event_lock, flags); in esas2r_kill_adapter()
586 if (a->uncached) { in esas2r_kill_adapter()
587 dma_free_coherent(&a->pcid->dev, in esas2r_kill_adapter()
588 (size_t)a->uncached_size, in esas2r_kill_adapter()
589 a->uncached, in esas2r_kill_adapter()
590 (dma_addr_t)a->uncached_phys); in esas2r_kill_adapter()
591 a->uncached = NULL; in esas2r_kill_adapter()
596 &(a->pcid->dev), in esas2r_kill_adapter()
599 a->pcid->msix_enabled, in esas2r_kill_adapter()
600 a->pcid->msi_enabled, in esas2r_kill_adapter()
601 a->pcid->irq, in esas2r_kill_adapter()
602 a->pcid->pin); in esas2r_kill_adapter()
605 &(a->pcid->dev), in esas2r_kill_adapter()
607 a->pcid->enable_cnt.counter); in esas2r_kill_adapter()
609 pci_disable_device(a->pcid); in esas2r_kill_adapter()
611 &(a->pcid->dev), in esas2r_kill_adapter()
613 a->pcid->enable_cnt.counter); in esas2r_kill_adapter()
616 &(a->pcid->dev), in esas2r_kill_adapter()
618 a->pcid); in esas2r_kill_adapter()
620 pci_set_drvdata(a->pcid, NULL); in esas2r_kill_adapter()
623 if (test_bit(AF2_INIT_DONE, &a->flags2)) { in esas2r_kill_adapter()
624 clear_bit(AF2_INIT_DONE, &a->flags2); in esas2r_kill_adapter()
626 set_bit(AF_DEGRADED_MODE, &a->flags); in esas2r_kill_adapter()
629 &(a->host->shost_gendev), in esas2r_kill_adapter()
632 scsi_remove_host(a->host); in esas2r_kill_adapter()
635 &(a->host->shost_gendev), in esas2r_kill_adapter()
638 scsi_host_put(a->host); in esas2r_kill_adapter()
647 struct esas2r_adapter *a = (struct esas2r_adapter *)host->hostdata; in esas2r_suspend()
649 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), "suspending adapter()"); in esas2r_suspend()
651 return -ENODEV; in esas2r_suspend()
655 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), in esas2r_suspend()
658 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), in esas2r_suspend()
661 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), in esas2r_suspend()
664 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), "esas2r_suspend(): 0"); in esas2r_suspend()
671 struct esas2r_adapter *a = (struct esas2r_adapter *)host->hostdata; in esas2r_resume()
674 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), "resuming adapter()"); in esas2r_resume()
675 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), in esas2r_resume()
679 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), in esas2r_resume()
683 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), in esas2r_resume()
686 esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), in esas2r_resume()
692 rez = -ENODEV; in esas2r_resume()
697 esas2r_log(ESAS2R_LOG_CRIT, "could not re-map PCI regions!"); in esas2r_resume()
698 rez = -ENOMEM; in esas2r_resume()
703 esas2r_setup_interrupts(a, a->intr_mode); in esas2r_resume()
712 rez = -ENOMEM; in esas2r_resume()
718 if (test_bit(AF2_IRQ_CLAIMED, &a->flags2)) { in esas2r_resume()
727 esas2r_log(ESAS2R_LOG_CRIT, "could not re-claim IRQ!"); in esas2r_resume()
728 rez = -ENOMEM; in esas2r_resume()
733 esas2r_log_dev(ESAS2R_LOG_CRIT, &(pdev->dev), "esas2r_resume(): %d", in esas2r_resume()
740 set_bit(AF_DEGRADED_MODE, &a->flags); in esas2r_set_degraded_mode()
750 + ALIGN(sizeof(u32), 8) /* outbound list copy pointer */ in esas2r_get_uncached_size()
765 if (pci_is_pcie(a->pcid)) { in esas2r_init_pci_cfg_space()
768 pcie_capability_read_word(a->pcid, PCI_EXP_DEVCTL, &devcontrol); in esas2r_init_pci_cfg_space()
773 "max read request size > 512B"); in esas2r_init_pci_cfg_space()
777 pcie_capability_write_word(a->pcid, PCI_EXP_DEVCTL, in esas2r_init_pci_cfg_space()
796 spin_lock_init(&a->sg_list_lock); in esas2r_init_adapter_struct()
797 spin_lock_init(&a->mem_lock); in esas2r_init_adapter_struct()
798 spin_lock_init(&a->queue_lock); in esas2r_init_adapter_struct()
800 a->targetdb_end = &a->targetdb[ESAS2R_MAX_TARGETS]; in esas2r_init_adapter_struct()
802 if (!alloc_vda_req(a, &a->general_req)) { in esas2r_init_adapter_struct()
809 a->first_ae_req = in esas2r_init_adapter_struct()
813 if (a->first_ae_req == NULL) { in esas2r_init_adapter_struct()
820 a->sg_list_mds = kcalloc(num_sg_lists, sizeof(struct esas2r_mem_desc), in esas2r_init_adapter_struct()
823 if (a->sg_list_mds == NULL) { in esas2r_init_adapter_struct()
830 a->req_table = in esas2r_init_adapter_struct()
835 if (a->req_table == NULL) { in esas2r_init_adapter_struct()
848 if ((a->pcid->subsystem_vendor == ATTO_VENDOR_ID) in esas2r_init_adapter_struct()
849 && (a->pcid->subsystem_device & ATTO_SSDID_TBT)) in esas2r_init_adapter_struct()
850 a->flags2 |= AF2_THUNDERBOLT; in esas2r_init_adapter_struct()
852 if (test_bit(AF2_THUNDERBOLT, &a->flags2)) in esas2r_init_adapter_struct()
853 a->flags2 |= AF2_SERIAL_FLASH; in esas2r_init_adapter_struct()
855 if (a->pcid->subsystem_device == ATTO_TLSH_1068) in esas2r_init_adapter_struct()
856 a->flags2 |= AF2_THUNDERLINK; in esas2r_init_adapter_struct()
863 for (i = 0, sgl = a->sg_list_mds; i < num_sg_lists; i++, sgl++) { in esas2r_init_adapter_struct()
864 sgl->size = sgl_page_size; in esas2r_init_adapter_struct()
866 list_add_tail(&sgl->next_desc, &a->free_sg_list_head); in esas2r_init_adapter_struct()
877 a->list_size = num_requests + ESAS2R_LIST_EXTRA; in esas2r_init_adapter_struct()
880 a->inbound_list_md.size = a->list_size * in esas2r_init_adapter_struct()
884 if (!esas2r_initmem_alloc(a, &a->inbound_list_md, ESAS2R_LIST_ALIGN)) { in esas2r_init_adapter_struct()
889 /* allocate the outbound list */ in esas2r_init_adapter_struct()
890 a->outbound_list_md.size = a->list_size * in esas2r_init_adapter_struct()
893 if (!esas2r_initmem_alloc(a, &a->outbound_list_md, in esas2r_init_adapter_struct()
900 a->nvram = (struct esas2r_sas_nvram *)high; in esas2r_init_adapter_struct()
904 a->disc_buffer = high; in esas2r_init_adapter_struct()
908 /* allocate the outbound list copy pointer */ in esas2r_init_adapter_struct()
909 a->outbound_copy = (u32 volatile *)high; in esas2r_init_adapter_struct()
912 if (!test_bit(AF_NVR_VALID, &a->flags)) in esas2r_init_adapter_struct()
919 if (test_bit(AF_FIRST_INIT, &a->flags)) { in esas2r_init_adapter_struct()
924 (struct esas2r_inbound_list_source_entry *)a-> in esas2r_init_adapter_struct()
928 for (i = 0; i < a->list_size; i++) { in esas2r_init_adapter_struct()
929 element->address = 0; in esas2r_init_adapter_struct()
930 element->reserved = 0; in esas2r_init_adapter_struct()
931 element->length = cpu_to_le32(HWILSE_INTERFACE_F0 in esas2r_init_adapter_struct()
940 for (rq = a->first_ae_req, i = 0; i < num_ae_requests; rq++, in esas2r_init_adapter_struct()
942 INIT_LIST_HEAD(&rq->req_list); in esas2r_init_adapter_struct()
952 rq->comp_cb = esas2r_ae_complete; in esas2r_init_adapter_struct()
971 if (test_bit(AF_CHPRST_DETECTED, &a->flags)) in esas2r_check_adapter()
995 if ((jiffies_to_msecs(jiffies) - starttime) > 2000) in esas2r_check_adapter()
1009 set_bit(AF_LEGACY_SGE_MODE, &a->flags); in esas2r_check_adapter()
1011 a->max_vdareq_size = 128; in esas2r_check_adapter()
1012 a->build_sgl = esas2r_build_sg_list_sge; in esas2r_check_adapter()
1014 clear_bit(AF_LEGACY_SGE_MODE, &a->flags); in esas2r_check_adapter()
1016 a->max_vdareq_size = 1024; in esas2r_check_adapter()
1017 a->build_sgl = esas2r_build_sg_list_prd; in esas2r_check_adapter()
1027 if ((jiffies_to_msecs(jiffies) - starttime) > 180000) { in esas2r_check_adapter()
1050 if ((jiffies_to_msecs(jiffies) - starttime) > 3000) { in esas2r_check_adapter()
1068 ppaddr = a->inbound_list_md.phys_addr; in esas2r_check_adapter()
1073 ppaddr = a->outbound_list_md.phys_addr; in esas2r_check_adapter()
1078 ppaddr = a->uncached_phys + in esas2r_check_adapter()
1079 ((u8 *)a->outbound_copy - a->uncached); in esas2r_check_adapter()
1086 *a->outbound_copy = in esas2r_check_adapter()
1087 a->last_write = in esas2r_check_adapter()
1088 a->last_read = a->list_size - 1; in esas2r_check_adapter()
1089 set_bit(AF_COMM_LIST_TOGGLE, &a->flags); in esas2r_check_adapter()
1091 a->last_write); in esas2r_check_adapter()
1093 a->last_write); in esas2r_check_adapter()
1095 a->last_write); in esas2r_check_adapter()
1097 MU_OLW_TOGGLE | a->last_write); in esas2r_check_adapter()
1114 | (a->list_size << MU_ILC_NUMBER_SHIFT); in esas2r_check_adapter()
1118 dw |= MU_OLC_ENTRY_4_DW | (a->list_size << MU_OLC_NUMBER_SHIFT); in esas2r_check_adapter()
1139 if ((jiffies_to_msecs(jiffies) - starttime) > 3000) { in esas2r_check_adapter()
1154 set_bit(AF2_VDA_POWER_DOWN, &a->flags2); in esas2r_check_adapter()
1156 clear_bit(AF2_VDA_POWER_DOWN, &a->flags2); in esas2r_check_adapter()
1159 * enable assertion of outbound queue and doorbell interrupts in the in esas2r_check_adapter()
1171 u32 msg = a->init_msg; in esas2r_format_init_msg()
1174 a->init_msg = 0; in esas2r_format_init_msg()
1186 ci = (struct atto_vda_cfg_init *)&rq->vrq->cfg.data.init; in esas2r_format_init_msg()
1187 ci->sgl_page_size = cpu_to_le32(sgl_page_size); in esas2r_format_init_msg()
1189 ci->epoch_time = cpu_to_le32(ktime_get_real_seconds()); in esas2r_format_init_msg()
1190 rq->flags |= RF_FAILURE_OK; in esas2r_format_init_msg()
1191 a->init_msg = ESAS2R_INIT_MSG_INIT; in esas2r_format_init_msg()
1196 if (rq->req_stat == RS_SUCCESS) { in esas2r_format_init_msg()
1201 a->fw_version = le16_to_cpu( in esas2r_format_init_msg()
1202 rq->func_rsp.cfg_rsp.vda_version); in esas2r_format_init_msg()
1203 a->fw_build = rq->func_rsp.cfg_rsp.fw_build; in esas2r_format_init_msg()
1205 rq->func_rsp.cfg_rsp.fw_release); in esas2r_format_init_msg()
1208 a->fw_version += (major << 16) + (minor << 24); in esas2r_format_init_msg()
1218 if ((test_bit(AF2_THUNDERBOLT, &a->flags2)) in esas2r_format_init_msg()
1219 || (be32_to_cpu(a->fw_version) > 0x00524702)) { in esas2r_format_init_msg()
1227 rq->vrq->cfg.sg_list_offset = offsetof( in esas2r_format_init_msg()
1230 rq->vrq->cfg.data.prde.ctl_len = in esas2r_format_init_msg()
1232 rq->vrq->cfg.data.prde.address = cpu_to_le64( in esas2r_format_init_msg()
1233 rq->vrq_md->phys_addr + in esas2r_format_init_msg()
1235 rq->flags |= RF_FAILURE_OK; in esas2r_format_init_msg()
1236 a->init_msg = ESAS2R_INIT_MSG_GET_INIT; in esas2r_format_init_msg()
1243 ci = (struct atto_vda_cfg_init *)rq->data_buf; in esas2r_format_init_msg()
1244 if (rq->req_stat == RS_SUCCESS) { in esas2r_format_init_msg()
1245 a->num_targets_backend = in esas2r_format_init_msg()
1246 le32_to_cpu(ci->num_targets_backend); in esas2r_format_init_msg()
1247 a->ioctl_tunnel = in esas2r_format_init_msg()
1248 le32_to_cpu(ci->ioctl_tunnel); in esas2r_format_init_msg()
1256 rq->req_stat = RS_SUCCESS; in esas2r_format_init_msg()
1269 struct esas2r_request *rq = &a->general_req; in esas2r_init_msgs()
1272 rq->comp_cb = esas2r_dummy_complete; in esas2r_init_msgs()
1274 if (a->init_msg == 0) in esas2r_init_msgs()
1275 a->init_msg = ESAS2R_INIT_MSG_REINIT; in esas2r_init_msgs()
1277 while (a->init_msg) { in esas2r_init_msgs()
1281 spin_lock_irqsave(&a->queue_lock, flags); in esas2r_init_msgs()
1283 spin_unlock_irqrestore(&a->queue_lock, flags); in esas2r_init_msgs()
1285 if (rq->req_stat != RS_PENDING) in esas2r_init_msgs()
1290 if (rq->req_stat == RS_SUCCESS in esas2r_init_msgs()
1291 || ((rq->flags & RF_FAILURE_OK) in esas2r_init_msgs()
1292 && rq->req_stat != RS_TIMEOUT)) in esas2r_init_msgs()
1296 a->init_msg, rq->req_stat, rq->flags); in esas2r_init_msgs()
1297 a->init_msg = ESAS2R_INIT_MSG_START; in esas2r_init_msgs()
1313 if (test_bit(AF_DEGRADED_MODE, &a->flags)) in esas2r_init_adapter_hw()
1316 if (!test_bit(AF_NVR_VALID, &a->flags)) { in esas2r_init_adapter_hw()
1328 clear_bit(AF_DEGRADED_MODE, &a->flags); in esas2r_init_adapter_hw()
1329 clear_bit(AF_CHPRST_PENDING, &a->flags); in esas2r_init_adapter_hw()
1332 for (i = 0, rq = a->first_ae_req; i < num_ae_requests; i++, rq++) in esas2r_init_adapter_hw()
1335 if (!a->flash_rev[0]) in esas2r_init_adapter_hw()
1338 if (!a->image_type[0]) in esas2r_init_adapter_hw()
1341 if (a->fw_version == 0) in esas2r_init_adapter_hw()
1342 a->fw_rev[0] = 0; in esas2r_init_adapter_hw()
1344 sprintf(a->fw_rev, "%1d.%02d", in esas2r_init_adapter_hw()
1345 (int)LOBYTE(HIWORD(a->fw_version)), in esas2r_init_adapter_hw()
1346 (int)HIBYTE(HIWORD(a->fw_version))); in esas2r_init_adapter_hw()
1348 esas2r_hdebug("firmware revision: %s", a->fw_rev); in esas2r_init_adapter_hw()
1350 if (test_bit(AF_CHPRST_DETECTED, &a->flags) in esas2r_init_adapter_hw()
1351 && (test_bit(AF_FIRST_INIT, &a->flags))) { in esas2r_init_adapter_hw()
1367 u32 currtime = a->disc_start_time; in esas2r_init_adapter_hw()
1375 set_bit(AF_TASKLET_SCHEDULED, &a->flags); in esas2r_init_adapter_hw()
1376 set_bit(AF_DISC_POLLED, &a->flags); in esas2r_init_adapter_hw()
1383 if (test_bit(AF_FIRST_INIT, &a->flags)) in esas2r_init_adapter_hw()
1384 atomic_dec(&a->disable_cnt); in esas2r_init_adapter_hw()
1386 while (test_bit(AF_DISC_PENDING, &a->flags)) { in esas2r_init_adapter_hw()
1396 deltatime = jiffies_to_msecs(jiffies) - currtime; in esas2r_init_adapter_hw()
1405 if (!test_bit(AF_CHPRST_PENDING, &a->flags)) in esas2r_init_adapter_hw()
1417 nexttick -= deltatime; in esas2r_init_adapter_hw()
1425 if (test_bit(AF_FIRST_INIT, &a->flags)) in esas2r_init_adapter_hw()
1426 atomic_inc(&a->disable_cnt); in esas2r_init_adapter_hw()
1428 clear_bit(AF_DISC_POLLED, &a->flags); in esas2r_init_adapter_hw()
1429 clear_bit(AF_TASKLET_SCHEDULED, &a->flags); in esas2r_init_adapter_hw()
1445 a->int_mask = ESAS2R_INT_STS_MASK; in esas2r_init_adapter_hw()
1456 if (test_bit(AF_CHPRST_DETECTED, &a->flags) && in esas2r_init_adapter_hw()
1457 test_bit(AF_FIRST_INIT, &a->flags)) { in esas2r_init_adapter_hw()
1464 clear_bit(AF_CHPRST_PENDING, &a->flags); in esas2r_init_adapter_hw()
1466 /* First initialization or a subsequent re-init is complete. */ in esas2r_init_adapter_hw()
1468 clear_bit(AF_CHPRST_PENDING, &a->flags); in esas2r_init_adapter_hw()
1469 clear_bit(AF_DISC_PENDING, &a->flags); in esas2r_init_adapter_hw()
1474 if (test_bit(AF_FIRST_INIT, &a->flags)) { in esas2r_init_adapter_hw()
1475 clear_bit(AF_FIRST_INIT, &a->flags); in esas2r_init_adapter_hw()
1477 if (atomic_dec_return(&a->disable_cnt) == 0) in esas2r_init_adapter_hw()
1487 set_bit(AF_OS_RESET, &a->flags); in esas2r_reset_adapter()
1502 if (test_bit(AF2_COREDUMP_AVAIL, &a->flags2) && in esas2r_reset_chip()
1503 !test_bit(AF2_COREDUMP_SAVED, &a->flags2)) { in esas2r_reset_chip()
1505 a->fw_coredump_buff, in esas2r_reset_chip()
1509 set_bit(AF2_COREDUMP_SAVED, &a->flags2); in esas2r_reset_chip()
1512 clear_bit(AF2_COREDUMP_AVAIL, &a->flags2); in esas2r_reset_chip()
1515 if (a->pcid->revision == MVR_FREY_B2) in esas2r_reset_chip()
1545 if ((jiffies_to_msecs(jiffies) - starttime) > 30000) { in esas2r_power_down_notify_firmware()
1558 set_bit(AF_POWER_MGT, &a->flags); in esas2r_power_down()
1559 set_bit(AF_POWER_DOWN, &a->flags); in esas2r_power_down()
1561 if (!test_bit(AF_DEGRADED_MODE, &a->flags)) { in esas2r_power_down()
1590 if ((jiffies_to_msecs(jiffies) - starttime) > 3000) { in esas2r_power_down()
1601 if (test_bit(AF2_VDA_POWER_DOWN, &a->flags2)) in esas2r_power_down()
1606 set_bit(AF_OS_RESET, &a->flags); in esas2r_power_down()
1607 set_bit(AF_DISC_PENDING, &a->flags); in esas2r_power_down()
1608 set_bit(AF_CHPRST_PENDING, &a->flags); in esas2r_power_down()
1613 a->prev_dev_cnt = esas2r_targ_db_get_tgt_cnt(a); in esas2r_power_down()
1625 clear_bit(AF_POWER_DOWN, &a->flags); in esas2r_power_up()
1627 set_bit(AF_FIRST_INIT, &a->flags); in esas2r_power_up()
1628 atomic_inc(&a->disable_cnt); in esas2r_power_up()
1639 clear_bit(AF_POWER_MGT, &a->flags); in esas2r_power_up()
1645 if (test_bit(AF_NOT_PRESENT, &a->flags)) in esas2r_is_adapter_present()
1649 set_bit(AF_NOT_PRESENT, &a->flags); in esas2r_is_adapter_present()
1658 switch (a->pcid->subsystem_device) { in esas2r_get_model_name()
1692 switch (a->pcid->subsystem_device) { in esas2r_get_model_name_short()