Lines Matching refs:acb

82 static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb,
84 static int arcmsr_iop_confirm(struct AdapterControlBlock *acb);
96 static void arcmsr_iop_init(struct AdapterControlBlock *acb);
97 static void arcmsr_free_ccb_pool(struct AdapterControlBlock *acb);
98 static u32 arcmsr_disable_outbound_ints(struct AdapterControlBlock *acb);
99 static void arcmsr_enable_outbound_ints(struct AdapterControlBlock *acb,
101 static void arcmsr_stop_adapter_bgrb(struct AdapterControlBlock *acb);
102 static void arcmsr_hbaA_flush_cache(struct AdapterControlBlock *acb);
103 static void arcmsr_hbaB_flush_cache(struct AdapterControlBlock *acb);
105 static void arcmsr_hbaA_request_device_map(struct AdapterControlBlock *acb);
106 static void arcmsr_hbaB_request_device_map(struct AdapterControlBlock *acb);
107 static void arcmsr_hbaC_request_device_map(struct AdapterControlBlock *acb);
109 static bool arcmsr_get_firmware_spec(struct AdapterControlBlock *acb);
110 static void arcmsr_start_adapter_bgrb(struct AdapterControlBlock *acb);
112 static void arcmsr_hbaD_message_isr(struct AdapterControlBlock *acb);
113 static void arcmsr_hardware_reset(struct AdapterControlBlock *acb);
115 static irqreturn_t arcmsr_interrupt(struct AdapterControlBlock *acb);
202 static void arcmsr_free_mu(struct AdapterControlBlock *acb) in arcmsr_free_mu() argument
204 switch (acb->adapter_type) { in arcmsr_free_mu()
207 dma_free_coherent(&acb->pdev->dev, acb->roundup_ccbsize, in arcmsr_free_mu()
208 acb->dma_coherent2, acb->dma_coherent_handle2); in arcmsr_free_mu()
214 static bool arcmsr_remap_pciregion(struct AdapterControlBlock *acb) in arcmsr_remap_pciregion() argument
216 struct pci_dev *pdev = acb->pdev; in arcmsr_remap_pciregion()
217 switch (acb->adapter_type){ in arcmsr_remap_pciregion()
219 acb->pmuA = ioremap(pci_resource_start(pdev,0), pci_resource_len(pdev,0)); in arcmsr_remap_pciregion()
220 if (!acb->pmuA) { in arcmsr_remap_pciregion()
221 printk(KERN_NOTICE "arcmsr%d: memory mapping region fail \n", acb->host->host_no); in arcmsr_remap_pciregion()
230 printk(KERN_NOTICE "arcmsr%d: memory mapping region fail \n", acb->host->host_no); in arcmsr_remap_pciregion()
236 printk(KERN_NOTICE "arcmsr%d: memory mapping region fail \n", acb->host->host_no); in arcmsr_remap_pciregion()
239 acb->mem_base0 = mem_base0; in arcmsr_remap_pciregion()
240 acb->mem_base1 = mem_base1; in arcmsr_remap_pciregion()
244 acb->pmuC = ioremap_nocache(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1)); in arcmsr_remap_pciregion()
245 if (!acb->pmuC) { in arcmsr_remap_pciregion()
246 printk(KERN_NOTICE "arcmsr%d: memory mapping region fail \n", acb->host->host_no); in arcmsr_remap_pciregion()
249 if (readl(&acb->pmuC->outbound_doorbell) & ARCMSR_HBCMU_IOP2DRV_MESSAGE_CMD_DONE) { in arcmsr_remap_pciregion()
250 …writel(ARCMSR_HBCMU_IOP2DRV_MESSAGE_CMD_DONE_DOORBELL_CLEAR, &acb->pmuC->outbound_doorbell_clear);… in arcmsr_remap_pciregion()
268 acb->host->host_no); in arcmsr_remap_pciregion()
271 acb->mem_base0 = mem_base0; in arcmsr_remap_pciregion()
278 static void arcmsr_unmap_pciregion(struct AdapterControlBlock *acb) in arcmsr_unmap_pciregion() argument
280 switch (acb->adapter_type) { in arcmsr_unmap_pciregion()
282 iounmap(acb->pmuA); in arcmsr_unmap_pciregion()
286 iounmap(acb->mem_base0); in arcmsr_unmap_pciregion()
287 iounmap(acb->mem_base1); in arcmsr_unmap_pciregion()
292 iounmap(acb->pmuC); in arcmsr_unmap_pciregion()
296 iounmap(acb->mem_base0); in arcmsr_unmap_pciregion()
304 struct AdapterControlBlock *acb = dev_id; in arcmsr_do_interrupt() local
306 handle_state = arcmsr_interrupt(acb); in arcmsr_do_interrupt()
338 static uint8_t arcmsr_hbaA_wait_msgint_ready(struct AdapterControlBlock *acb) in arcmsr_hbaA_wait_msgint_ready() argument
340 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_wait_msgint_ready()
356 static uint8_t arcmsr_hbaB_wait_msgint_ready(struct AdapterControlBlock *acb) in arcmsr_hbaB_wait_msgint_ready() argument
358 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_wait_msgint_ready()
411 static void arcmsr_hbaA_flush_cache(struct AdapterControlBlock *acb) in arcmsr_hbaA_flush_cache() argument
413 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_flush_cache()
417 if (arcmsr_hbaA_wait_msgint_ready(acb)) in arcmsr_hbaA_flush_cache()
422 timeout, retry count down = %d \n", acb->host->host_no, retry_count); in arcmsr_hbaA_flush_cache()
427 static void arcmsr_hbaB_flush_cache(struct AdapterControlBlock *acb) in arcmsr_hbaB_flush_cache() argument
429 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_flush_cache()
433 if (arcmsr_hbaB_wait_msgint_ready(acb)) in arcmsr_hbaB_flush_cache()
438 timeout,retry count down = %d \n", acb->host->host_no, retry_count); in arcmsr_hbaB_flush_cache()
478 static void arcmsr_flush_adapter_cache(struct AdapterControlBlock *acb) in arcmsr_flush_adapter_cache() argument
480 switch (acb->adapter_type) { in arcmsr_flush_adapter_cache()
483 arcmsr_hbaA_flush_cache(acb); in arcmsr_flush_adapter_cache()
488 arcmsr_hbaB_flush_cache(acb); in arcmsr_flush_adapter_cache()
492 arcmsr_hbaC_flush_cache(acb); in arcmsr_flush_adapter_cache()
496 arcmsr_hbaD_flush_cache(acb); in arcmsr_flush_adapter_cache()
501 static int arcmsr_alloc_ccb_pool(struct AdapterControlBlock *acb) in arcmsr_alloc_ccb_pool() argument
503 struct pci_dev *pdev = acb->pdev; in arcmsr_alloc_ccb_pool()
516 acb->devstate[i][j] = ARECA_RAID_GONE; in arcmsr_alloc_ccb_pool()
520 firm_config_version = acb->firm_cfg_version; in arcmsr_alloc_ccb_pool()
525 acb->host->max_sectors = max_xfer_len/512; in arcmsr_alloc_ccb_pool()
526 acb->host->sg_tablesize = max_sg_entrys; in arcmsr_alloc_ccb_pool()
528 acb->uncache_size = roundup_ccbsize * ARCMSR_MAX_FREECCB_NUM; in arcmsr_alloc_ccb_pool()
529 dma_coherent = dma_alloc_coherent(&pdev->dev, acb->uncache_size, &dma_coherent_handle, GFP_KERNEL); in arcmsr_alloc_ccb_pool()
531 printk(KERN_NOTICE "arcmsr%d: dma_alloc_coherent got error\n", acb->host->host_no); in arcmsr_alloc_ccb_pool()
534 acb->dma_coherent = dma_coherent; in arcmsr_alloc_ccb_pool()
535 acb->dma_coherent_handle = dma_coherent_handle; in arcmsr_alloc_ccb_pool()
536 memset(dma_coherent, 0, acb->uncache_size); in arcmsr_alloc_ccb_pool()
538 acb->vir2phy_offset = (unsigned long)dma_coherent - (unsigned long)dma_coherent_handle; in arcmsr_alloc_ccb_pool()
541 switch (acb->adapter_type) { in arcmsr_alloc_ccb_pool()
551 acb->pccb_pool[i] = ccb_tmp; in arcmsr_alloc_ccb_pool()
552 ccb_tmp->acb = acb; in arcmsr_alloc_ccb_pool()
554 list_add_tail(&ccb_tmp->list, &acb->ccb_free_list); in arcmsr_alloc_ccb_pool()
563 struct AdapterControlBlock *acb = container_of(work, in arcmsr_message_isr_bh_fn() local
565 char *acb_dev_map = (char *)acb->device_map; in arcmsr_message_isr_bh_fn()
572 switch (acb->adapter_type) { in arcmsr_message_isr_bh_fn()
574 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_message_isr_bh_fn()
581 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_message_isr_bh_fn()
588 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_message_isr_bh_fn()
595 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_message_isr_bh_fn()
602 atomic_inc(&acb->rq_map_token); in arcmsr_message_isr_bh_fn()
615 scsi_add_device(acb->host, in arcmsr_message_isr_bh_fn()
619 psdev = scsi_device_lookup(acb->host, in arcmsr_message_isr_bh_fn()
636 arcmsr_request_irq(struct pci_dev *pdev, struct AdapterControlBlock *acb) in arcmsr_request_irq() argument
646 acb->msix_vector_count = r; in arcmsr_request_irq()
649 arcmsr_do_interrupt, 0, "arcmsr", acb)) { in arcmsr_request_irq()
651 acb->host->host_no, entries[i].vector); in arcmsr_request_irq()
653 free_irq(entries[j].vector, acb); in arcmsr_request_irq()
657 acb->entries[i] = entries[i]; in arcmsr_request_irq()
659 acb->acb_flags |= ACB_F_MSIX_ENABLED; in arcmsr_request_irq()
660 pr_info("arcmsr%d: msi-x enabled\n", acb->host->host_no); in arcmsr_request_irq()
666 IRQF_SHARED, "arcmsr", acb)) { in arcmsr_request_irq()
668 acb->host->host_no, pdev->irq); in arcmsr_request_irq()
672 acb->acb_flags |= ACB_F_MSI_ENABLED; in arcmsr_request_irq()
673 pr_info("arcmsr%d: msi enabled\n", acb->host->host_no); in arcmsr_request_irq()
677 IRQF_SHARED, "arcmsr", acb)) { in arcmsr_request_irq()
679 acb->host->host_no, pdev->irq); in arcmsr_request_irq()
688 struct AdapterControlBlock *acb; in arcmsr_probe() local
712 acb = (struct AdapterControlBlock *) host->hostdata; in arcmsr_probe()
713 memset(acb,0,sizeof(struct AdapterControlBlock)); in arcmsr_probe()
714 acb->pdev = pdev; in arcmsr_probe()
715 acb->host = host; in arcmsr_probe()
729 spin_lock_init(&acb->eh_lock); in arcmsr_probe()
730 spin_lock_init(&acb->ccblist_lock); in arcmsr_probe()
731 spin_lock_init(&acb->postq_lock); in arcmsr_probe()
732 spin_lock_init(&acb->doneq_lock); in arcmsr_probe()
733 spin_lock_init(&acb->rqbuffer_lock); in arcmsr_probe()
734 spin_lock_init(&acb->wqbuffer_lock); in arcmsr_probe()
735 acb->acb_flags |= (ACB_F_MESSAGE_WQBUFFER_CLEARED | in arcmsr_probe()
738 acb->acb_flags &= ~ACB_F_SCSISTOPADAPTER; in arcmsr_probe()
739 INIT_LIST_HEAD(&acb->ccb_free_list); in arcmsr_probe()
740 acb->adapter_type = id->driver_data; in arcmsr_probe()
741 error = arcmsr_remap_pciregion(acb); in arcmsr_probe()
745 error = arcmsr_get_firmware_spec(acb); in arcmsr_probe()
749 error = arcmsr_alloc_ccb_pool(acb); in arcmsr_probe()
757 if (arcmsr_request_irq(pdev, acb) == FAILED) in arcmsr_probe()
759 arcmsr_iop_init(acb); in arcmsr_probe()
760 INIT_WORK(&acb->arcmsr_do_message_isr_bh, arcmsr_message_isr_bh_fn); in arcmsr_probe()
761 atomic_set(&acb->rq_map_token, 16); in arcmsr_probe()
762 atomic_set(&acb->ante_token_value, 16); in arcmsr_probe()
763 acb->fw_flag = FW_NORMAL; in arcmsr_probe()
764 init_timer(&acb->eternal_timer); in arcmsr_probe()
765 acb->eternal_timer.expires = jiffies + msecs_to_jiffies(6 * HZ); in arcmsr_probe()
766 acb->eternal_timer.data = (unsigned long) acb; in arcmsr_probe()
767 acb->eternal_timer.function = &arcmsr_request_device_map; in arcmsr_probe()
768 add_timer(&acb->eternal_timer); in arcmsr_probe()
769 if(arcmsr_alloc_sysfs_attr(acb)) in arcmsr_probe()
774 del_timer_sync(&acb->eternal_timer); in arcmsr_probe()
775 flush_work(&acb->arcmsr_do_message_isr_bh); in arcmsr_probe()
776 arcmsr_stop_adapter_bgrb(acb); in arcmsr_probe()
777 arcmsr_flush_adapter_cache(acb); in arcmsr_probe()
778 arcmsr_free_irq(pdev, acb); in arcmsr_probe()
782 arcmsr_free_ccb_pool(acb); in arcmsr_probe()
784 arcmsr_free_mu(acb); in arcmsr_probe()
786 arcmsr_unmap_pciregion(acb); in arcmsr_probe()
797 struct AdapterControlBlock *acb) in arcmsr_free_irq() argument
801 if (acb->acb_flags & ACB_F_MSI_ENABLED) { in arcmsr_free_irq()
802 free_irq(pdev->irq, acb); in arcmsr_free_irq()
804 } else if (acb->acb_flags & ACB_F_MSIX_ENABLED) { in arcmsr_free_irq()
805 for (i = 0; i < acb->msix_vector_count; i++) in arcmsr_free_irq()
806 free_irq(acb->entries[i].vector, acb); in arcmsr_free_irq()
809 free_irq(pdev->irq, acb); in arcmsr_free_irq()
816 struct AdapterControlBlock *acb = in arcmsr_suspend() local
819 intmask_org = arcmsr_disable_outbound_ints(acb); in arcmsr_suspend()
820 arcmsr_free_irq(pdev, acb); in arcmsr_suspend()
821 del_timer_sync(&acb->eternal_timer); in arcmsr_suspend()
822 flush_work(&acb->arcmsr_do_message_isr_bh); in arcmsr_suspend()
823 arcmsr_stop_adapter_bgrb(acb); in arcmsr_suspend()
824 arcmsr_flush_adapter_cache(acb); in arcmsr_suspend()
836 struct AdapterControlBlock *acb = in arcmsr_resume() local
856 if (arcmsr_request_irq(pdev, acb) == FAILED) in arcmsr_resume()
858 arcmsr_iop_init(acb); in arcmsr_resume()
859 INIT_WORK(&acb->arcmsr_do_message_isr_bh, arcmsr_message_isr_bh_fn); in arcmsr_resume()
860 atomic_set(&acb->rq_map_token, 16); in arcmsr_resume()
861 atomic_set(&acb->ante_token_value, 16); in arcmsr_resume()
862 acb->fw_flag = FW_NORMAL; in arcmsr_resume()
863 init_timer(&acb->eternal_timer); in arcmsr_resume()
864 acb->eternal_timer.expires = jiffies + msecs_to_jiffies(6 * HZ); in arcmsr_resume()
865 acb->eternal_timer.data = (unsigned long) acb; in arcmsr_resume()
866 acb->eternal_timer.function = &arcmsr_request_device_map; in arcmsr_resume()
867 add_timer(&acb->eternal_timer); in arcmsr_resume()
870 arcmsr_stop_adapter_bgrb(acb); in arcmsr_resume()
871 arcmsr_flush_adapter_cache(acb); in arcmsr_resume()
874 arcmsr_free_ccb_pool(acb); in arcmsr_resume()
875 arcmsr_unmap_pciregion(acb); in arcmsr_resume()
882 static uint8_t arcmsr_hbaA_abort_allcmd(struct AdapterControlBlock *acb) in arcmsr_hbaA_abort_allcmd() argument
884 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_abort_allcmd()
886 if (!arcmsr_hbaA_wait_msgint_ready(acb)) { in arcmsr_hbaA_abort_allcmd()
889 , acb->host->host_no); in arcmsr_hbaA_abort_allcmd()
895 static uint8_t arcmsr_hbaB_abort_allcmd(struct AdapterControlBlock *acb) in arcmsr_hbaB_abort_allcmd() argument
897 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_abort_allcmd()
900 if (!arcmsr_hbaB_wait_msgint_ready(acb)) { in arcmsr_hbaB_abort_allcmd()
903 , acb->host->host_no); in arcmsr_hbaB_abort_allcmd()
935 static uint8_t arcmsr_abort_allcmd(struct AdapterControlBlock *acb) in arcmsr_abort_allcmd() argument
938 switch (acb->adapter_type) { in arcmsr_abort_allcmd()
940 rtnval = arcmsr_hbaA_abort_allcmd(acb); in arcmsr_abort_allcmd()
945 rtnval = arcmsr_hbaB_abort_allcmd(acb); in arcmsr_abort_allcmd()
950 rtnval = arcmsr_hbaC_abort_allcmd(acb); in arcmsr_abort_allcmd()
955 rtnval = arcmsr_hbaD_abort_allcmd(acb); in arcmsr_abort_allcmd()
970 struct AdapterControlBlock *acb = ccb->acb; in arcmsr_ccb_complete() local
973 atomic_dec(&acb->ccboutstandingcount); in arcmsr_ccb_complete()
976 spin_lock_irqsave(&acb->ccblist_lock, flags); in arcmsr_ccb_complete()
977 list_add_tail(&ccb->list, &acb->ccb_free_list); in arcmsr_ccb_complete()
978 spin_unlock_irqrestore(&acb->ccblist_lock, flags); in arcmsr_ccb_complete()
999 static u32 arcmsr_disable_outbound_ints(struct AdapterControlBlock *acb) in arcmsr_disable_outbound_ints() argument
1002 switch (acb->adapter_type) { in arcmsr_disable_outbound_ints()
1004 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_disable_outbound_ints()
1011 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_disable_outbound_ints()
1017 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_disable_outbound_ints()
1024 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_disable_outbound_ints()
1033 static void arcmsr_report_ccb_state(struct AdapterControlBlock *acb, in arcmsr_report_ccb_state() argument
1040 if (acb->devstate[id][lun] == ARECA_RAID_GONE) in arcmsr_report_ccb_state()
1041 acb->devstate[id][lun] = ARECA_RAID_GOOD; in arcmsr_report_ccb_state()
1047 acb->devstate[id][lun] = ARECA_RAID_GONE; in arcmsr_report_ccb_state()
1056 acb->devstate[id][lun] = ARECA_RAID_GONE; in arcmsr_report_ccb_state()
1063 acb->devstate[id][lun] = ARECA_RAID_GOOD; in arcmsr_report_ccb_state()
1073 , acb->host->host_no in arcmsr_report_ccb_state()
1077 acb->devstate[id][lun] = ARECA_RAID_GONE; in arcmsr_report_ccb_state()
1085 static void arcmsr_drain_donequeue(struct AdapterControlBlock *acb, struct CommandControlBlock *pCC… in arcmsr_drain_donequeue() argument
1088 if ((pCCB->acb != acb) || (pCCB->startdone != ARCMSR_CCB_START)) { in arcmsr_drain_donequeue()
1097 acb->host->host_no, pCCB); in arcmsr_drain_donequeue()
1105 , acb->host->host_no in arcmsr_drain_donequeue()
1106 , acb in arcmsr_drain_donequeue()
1108 , pCCB->acb in arcmsr_drain_donequeue()
1110 , atomic_read(&acb->ccboutstandingcount)); in arcmsr_drain_donequeue()
1113 arcmsr_report_ccb_state(acb, pCCB, error); in arcmsr_drain_donequeue()
1116 static void arcmsr_done4abort_postqueue(struct AdapterControlBlock *acb) in arcmsr_done4abort_postqueue() argument
1123 switch (acb->adapter_type) { in arcmsr_done4abort_postqueue()
1126 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_done4abort_postqueue()
1129 acb->outbound_int_enable; in arcmsr_done4abort_postqueue()
1134 …pARCMSR_CDB = (struct ARCMSR_CDB *)(acb->vir2phy_offset + (flag_ccb << 5));/*frame must be 32 byte… in arcmsr_done4abort_postqueue()
1137 arcmsr_drain_donequeue(acb, pCCB, error); in arcmsr_done4abort_postqueue()
1143 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_done4abort_postqueue()
1150 …pARCMSR_CDB = (struct ARCMSR_CDB *)(acb->vir2phy_offset+(flag_ccb << 5));/*frame must be 32 bytes … in arcmsr_done4abort_postqueue()
1153 arcmsr_drain_donequeue(acb, pCCB, error); in arcmsr_done4abort_postqueue()
1162 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_done4abort_postqueue()
1167 …pARCMSR_CDB = (struct ARCMSR_CDB *)(acb->vir2phy_offset+ccb_cdb_phy);/*frame must be 32 bytes ali… in arcmsr_done4abort_postqueue()
1170 arcmsr_drain_donequeue(acb, pCCB, error); in arcmsr_done4abort_postqueue()
1175 struct MessageUnit_D *pmu = acb->pmuD; in arcmsr_done4abort_postqueue()
1180 residual = atomic_read(&acb->ccboutstandingcount); in arcmsr_done4abort_postqueue()
1182 spin_lock_irqsave(&acb->doneq_lock, flags); in arcmsr_done4abort_postqueue()
1194 spin_unlock_irqrestore(&acb->doneq_lock, flags); in arcmsr_done4abort_postqueue()
1199 (acb->vir2phy_offset + ccb_cdb_phy); in arcmsr_done4abort_postqueue()
1205 arcmsr_drain_donequeue(acb, pCCB, error); in arcmsr_done4abort_postqueue()
1209 spin_unlock_irqrestore(&acb->doneq_lock, flags); in arcmsr_done4abort_postqueue()
1223 struct AdapterControlBlock *acb = in arcmsr_remove() local
1226 arcmsr_free_sysfs_attr(acb); in arcmsr_remove()
1228 flush_work(&acb->arcmsr_do_message_isr_bh); in arcmsr_remove()
1229 del_timer_sync(&acb->eternal_timer); in arcmsr_remove()
1230 arcmsr_disable_outbound_ints(acb); in arcmsr_remove()
1231 arcmsr_stop_adapter_bgrb(acb); in arcmsr_remove()
1232 arcmsr_flush_adapter_cache(acb); in arcmsr_remove()
1233 acb->acb_flags |= ACB_F_SCSISTOPADAPTER; in arcmsr_remove()
1234 acb->acb_flags &= ~ACB_F_IOP_INITED; in arcmsr_remove()
1237 if (!atomic_read(&acb->ccboutstandingcount)) in arcmsr_remove()
1239 arcmsr_interrupt(acb);/* FIXME: need spinlock */ in arcmsr_remove()
1243 if (atomic_read(&acb->ccboutstandingcount)) { in arcmsr_remove()
1246 arcmsr_abort_allcmd(acb); in arcmsr_remove()
1247 arcmsr_done4abort_postqueue(acb); in arcmsr_remove()
1249 struct CommandControlBlock *ccb = acb->pccb_pool[i]; in arcmsr_remove()
1257 arcmsr_free_irq(pdev, acb); in arcmsr_remove()
1258 arcmsr_free_ccb_pool(acb); in arcmsr_remove()
1259 arcmsr_free_mu(acb); in arcmsr_remove()
1260 arcmsr_unmap_pciregion(acb); in arcmsr_remove()
1269 struct AdapterControlBlock *acb = in arcmsr_shutdown() local
1271 del_timer_sync(&acb->eternal_timer); in arcmsr_shutdown()
1272 arcmsr_disable_outbound_ints(acb); in arcmsr_shutdown()
1273 arcmsr_free_irq(pdev, acb); in arcmsr_shutdown()
1274 flush_work(&acb->arcmsr_do_message_isr_bh); in arcmsr_shutdown()
1275 arcmsr_stop_adapter_bgrb(acb); in arcmsr_shutdown()
1276 arcmsr_flush_adapter_cache(acb); in arcmsr_shutdown()
1293 static void arcmsr_enable_outbound_ints(struct AdapterControlBlock *acb, in arcmsr_enable_outbound_ints() argument
1297 switch (acb->adapter_type) { in arcmsr_enable_outbound_ints()
1300 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_enable_outbound_ints()
1305 acb->outbound_int_enable = ~(intmask_org & mask) & 0x000000ff; in arcmsr_enable_outbound_ints()
1310 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_enable_outbound_ints()
1316 acb->outbound_int_enable = (intmask_org | mask) & 0x0000000f; in arcmsr_enable_outbound_ints()
1320 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_enable_outbound_ints()
1323 acb->outbound_int_enable = ~(intmask_org & mask) & 0x0000000f; in arcmsr_enable_outbound_ints()
1327 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_enable_outbound_ints()
1336 static int arcmsr_build_ccb(struct AdapterControlBlock *acb, in arcmsr_build_ccb() argument
1356 if (unlikely(nseg > acb->host->sg_tablesize || nseg < 0)) in arcmsr_build_ccb()
1391 static void arcmsr_post_ccb(struct AdapterControlBlock *acb, struct CommandControlBlock *ccb) in arcmsr_post_ccb() argument
1395 atomic_inc(&acb->ccboutstandingcount); in arcmsr_post_ccb()
1397 switch (acb->adapter_type) { in arcmsr_post_ccb()
1399 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_post_ccb()
1410 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_post_ccb()
1428 struct MessageUnit_C __iomem *phbcmu = acb->pmuC; in arcmsr_post_ccb()
1433 if (acb->cdb_phyaddr_hi32) { in arcmsr_post_ccb()
1434 writel(acb->cdb_phyaddr_hi32, &phbcmu->inbound_queueport_high); in arcmsr_post_ccb()
1442 struct MessageUnit_D *pmu = acb->pmuD; in arcmsr_post_ccb()
1448 spin_lock_irqsave(&acb->postq_lock, flags); in arcmsr_post_ccb()
1461 spin_unlock_irqrestore(&acb->postq_lock, flags); in arcmsr_post_ccb()
1467 static void arcmsr_hbaA_stop_bgrb(struct AdapterControlBlock *acb) in arcmsr_hbaA_stop_bgrb() argument
1469 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_stop_bgrb()
1470 acb->acb_flags &= ~ACB_F_MSG_START_BGRB; in arcmsr_hbaA_stop_bgrb()
1472 if (!arcmsr_hbaA_wait_msgint_ready(acb)) { in arcmsr_hbaA_stop_bgrb()
1475 , acb->host->host_no); in arcmsr_hbaA_stop_bgrb()
1479 static void arcmsr_hbaB_stop_bgrb(struct AdapterControlBlock *acb) in arcmsr_hbaB_stop_bgrb() argument
1481 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_stop_bgrb()
1482 acb->acb_flags &= ~ACB_F_MSG_START_BGRB; in arcmsr_hbaB_stop_bgrb()
1485 if (!arcmsr_hbaB_wait_msgint_ready(acb)) { in arcmsr_hbaB_stop_bgrb()
1488 , acb->host->host_no); in arcmsr_hbaB_stop_bgrb()
1517 static void arcmsr_stop_adapter_bgrb(struct AdapterControlBlock *acb) in arcmsr_stop_adapter_bgrb() argument
1519 switch (acb->adapter_type) { in arcmsr_stop_adapter_bgrb()
1521 arcmsr_hbaA_stop_bgrb(acb); in arcmsr_stop_adapter_bgrb()
1526 arcmsr_hbaB_stop_bgrb(acb); in arcmsr_stop_adapter_bgrb()
1530 arcmsr_hbaC_stop_bgrb(acb); in arcmsr_stop_adapter_bgrb()
1534 arcmsr_hbaD_stop_bgrb(acb); in arcmsr_stop_adapter_bgrb()
1539 static void arcmsr_free_ccb_pool(struct AdapterControlBlock *acb) in arcmsr_free_ccb_pool() argument
1541 dma_free_coherent(&acb->pdev->dev, acb->uncache_size, acb->dma_coherent, acb->dma_coherent_handle); in arcmsr_free_ccb_pool()
1544 static void arcmsr_iop_message_read(struct AdapterControlBlock *acb) in arcmsr_iop_message_read() argument
1546 switch (acb->adapter_type) { in arcmsr_iop_message_read()
1548 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_iop_message_read()
1554 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_iop_message_read()
1559 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_iop_message_read()
1565 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_iop_message_read()
1573 static void arcmsr_iop_message_wrote(struct AdapterControlBlock *acb) in arcmsr_iop_message_wrote() argument
1575 switch (acb->adapter_type) { in arcmsr_iop_message_wrote()
1577 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_iop_message_wrote()
1587 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_iop_message_wrote()
1596 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_iop_message_wrote()
1605 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_iop_message_wrote()
1613 struct QBUFFER __iomem *arcmsr_get_iop_rqbuffer(struct AdapterControlBlock *acb) in arcmsr_get_iop_rqbuffer() argument
1616 switch (acb->adapter_type) { in arcmsr_get_iop_rqbuffer()
1619 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_get_iop_rqbuffer()
1625 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_get_iop_rqbuffer()
1630 struct MessageUnit_C __iomem *phbcmu = acb->pmuC; in arcmsr_get_iop_rqbuffer()
1635 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_get_iop_rqbuffer()
1643 static struct QBUFFER __iomem *arcmsr_get_iop_wqbuffer(struct AdapterControlBlock *acb) in arcmsr_get_iop_wqbuffer() argument
1646 switch (acb->adapter_type) { in arcmsr_get_iop_wqbuffer()
1649 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_get_iop_wqbuffer()
1655 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_get_iop_wqbuffer()
1660 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_get_iop_wqbuffer()
1665 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_get_iop_wqbuffer()
1674 arcmsr_Read_iop_rqbuffer_in_DWORD(struct AdapterControlBlock *acb, in arcmsr_Read_iop_rqbuffer_in_DWORD() argument
1700 pQbuffer = &acb->rqbuffer[acb->rqbuf_putIndex]; in arcmsr_Read_iop_rqbuffer_in_DWORD()
1702 acb->rqbuf_putIndex++; in arcmsr_Read_iop_rqbuffer_in_DWORD()
1704 acb->rqbuf_putIndex %= ARCMSR_MAX_QBUFFER; in arcmsr_Read_iop_rqbuffer_in_DWORD()
1710 arcmsr_iop_message_read(acb); in arcmsr_Read_iop_rqbuffer_in_DWORD()
1715 arcmsr_Read_iop_rqbuffer_data(struct AdapterControlBlock *acb, in arcmsr_Read_iop_rqbuffer_data() argument
1722 if (acb->adapter_type & (ACB_ADAPTER_TYPE_C | ACB_ADAPTER_TYPE_D)) in arcmsr_Read_iop_rqbuffer_data()
1723 return arcmsr_Read_iop_rqbuffer_in_DWORD(acb, prbuffer); in arcmsr_Read_iop_rqbuffer_data()
1727 pQbuffer = &acb->rqbuffer[acb->rqbuf_putIndex]; in arcmsr_Read_iop_rqbuffer_data()
1729 acb->rqbuf_putIndex++; in arcmsr_Read_iop_rqbuffer_data()
1730 acb->rqbuf_putIndex %= ARCMSR_MAX_QBUFFER; in arcmsr_Read_iop_rqbuffer_data()
1734 arcmsr_iop_message_read(acb); in arcmsr_Read_iop_rqbuffer_data()
1738 static void arcmsr_iop2drv_data_wrote_handle(struct AdapterControlBlock *acb) in arcmsr_iop2drv_data_wrote_handle() argument
1744 spin_lock_irqsave(&acb->rqbuffer_lock, flags); in arcmsr_iop2drv_data_wrote_handle()
1745 prbuffer = arcmsr_get_iop_rqbuffer(acb); in arcmsr_iop2drv_data_wrote_handle()
1746 buf_empty_len = (acb->rqbuf_putIndex - acb->rqbuf_getIndex - 1) & in arcmsr_iop2drv_data_wrote_handle()
1749 if (arcmsr_Read_iop_rqbuffer_data(acb, prbuffer) == 0) in arcmsr_iop2drv_data_wrote_handle()
1750 acb->acb_flags |= ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop2drv_data_wrote_handle()
1752 acb->acb_flags |= ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop2drv_data_wrote_handle()
1753 spin_unlock_irqrestore(&acb->rqbuffer_lock, flags); in arcmsr_iop2drv_data_wrote_handle()
1756 static void arcmsr_write_ioctldata2iop_in_DWORD(struct AdapterControlBlock *acb) in arcmsr_write_ioctldata2iop_in_DWORD() argument
1764 if (acb->acb_flags & ACB_F_MESSAGE_WQBUFFER_READED) { in arcmsr_write_ioctldata2iop_in_DWORD()
1770 acb->acb_flags &= (~ACB_F_MESSAGE_WQBUFFER_READED); in arcmsr_write_ioctldata2iop_in_DWORD()
1771 pwbuffer = arcmsr_get_iop_wqbuffer(acb); in arcmsr_write_ioctldata2iop_in_DWORD()
1773 while ((acb->wqbuf_getIndex != acb->wqbuf_putIndex) in arcmsr_write_ioctldata2iop_in_DWORD()
1775 pQbuffer = &acb->wqbuffer[acb->wqbuf_getIndex]; in arcmsr_write_ioctldata2iop_in_DWORD()
1777 acb->wqbuf_getIndex++; in arcmsr_write_ioctldata2iop_in_DWORD()
1778 acb->wqbuf_getIndex %= ARCMSR_MAX_QBUFFER; in arcmsr_write_ioctldata2iop_in_DWORD()
1796 arcmsr_iop_message_wrote(acb); in arcmsr_write_ioctldata2iop_in_DWORD()
1801 arcmsr_write_ioctldata2iop(struct AdapterControlBlock *acb) in arcmsr_write_ioctldata2iop() argument
1808 if (acb->adapter_type & (ACB_ADAPTER_TYPE_C | ACB_ADAPTER_TYPE_D)) { in arcmsr_write_ioctldata2iop()
1809 arcmsr_write_ioctldata2iop_in_DWORD(acb); in arcmsr_write_ioctldata2iop()
1812 if (acb->acb_flags & ACB_F_MESSAGE_WQBUFFER_READED) { in arcmsr_write_ioctldata2iop()
1813 acb->acb_flags &= (~ACB_F_MESSAGE_WQBUFFER_READED); in arcmsr_write_ioctldata2iop()
1814 pwbuffer = arcmsr_get_iop_wqbuffer(acb); in arcmsr_write_ioctldata2iop()
1816 while ((acb->wqbuf_getIndex != acb->wqbuf_putIndex) in arcmsr_write_ioctldata2iop()
1818 pQbuffer = &acb->wqbuffer[acb->wqbuf_getIndex]; in arcmsr_write_ioctldata2iop()
1820 acb->wqbuf_getIndex++; in arcmsr_write_ioctldata2iop()
1821 acb->wqbuf_getIndex %= ARCMSR_MAX_QBUFFER; in arcmsr_write_ioctldata2iop()
1826 arcmsr_iop_message_wrote(acb); in arcmsr_write_ioctldata2iop()
1830 static void arcmsr_iop2drv_data_read_handle(struct AdapterControlBlock *acb) in arcmsr_iop2drv_data_read_handle() argument
1834 spin_lock_irqsave(&acb->wqbuffer_lock, flags); in arcmsr_iop2drv_data_read_handle()
1835 acb->acb_flags |= ACB_F_MESSAGE_WQBUFFER_READED; in arcmsr_iop2drv_data_read_handle()
1836 if (acb->wqbuf_getIndex != acb->wqbuf_putIndex) in arcmsr_iop2drv_data_read_handle()
1837 arcmsr_write_ioctldata2iop(acb); in arcmsr_iop2drv_data_read_handle()
1838 if (acb->wqbuf_getIndex == acb->wqbuf_putIndex) in arcmsr_iop2drv_data_read_handle()
1839 acb->acb_flags |= ACB_F_MESSAGE_WQBUFFER_CLEARED; in arcmsr_iop2drv_data_read_handle()
1840 spin_unlock_irqrestore(&acb->wqbuffer_lock, flags); in arcmsr_iop2drv_data_read_handle()
1843 static void arcmsr_hbaA_doorbell_isr(struct AdapterControlBlock *acb) in arcmsr_hbaA_doorbell_isr() argument
1846 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_doorbell_isr()
1851 arcmsr_iop2drv_data_wrote_handle(acb); in arcmsr_hbaA_doorbell_isr()
1853 arcmsr_iop2drv_data_read_handle(acb); in arcmsr_hbaA_doorbell_isr()
1905 static void arcmsr_hbaA_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hbaA_postqueue_isr() argument
1908 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_postqueue_isr()
1913 …pARCMSR_CDB = (struct ARCMSR_CDB *)(acb->vir2phy_offset + (flag_ccb << 5));/*frame must be 32 byte… in arcmsr_hbaA_postqueue_isr()
1916 arcmsr_drain_donequeue(acb, pCCB, error); in arcmsr_hbaA_postqueue_isr()
1919 static void arcmsr_hbaB_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hbaB_postqueue_isr() argument
1923 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_postqueue_isr()
1930 …pARCMSR_CDB = (struct ARCMSR_CDB *)(acb->vir2phy_offset+(flag_ccb << 5));/*frame must be 32 bytes … in arcmsr_hbaB_postqueue_isr()
1933 arcmsr_drain_donequeue(acb, pCCB, error); in arcmsr_hbaB_postqueue_isr()
1940 static void arcmsr_hbaC_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hbaC_postqueue_isr() argument
1948 phbcmu = acb->pmuC; in arcmsr_hbaC_postqueue_isr()
1955 arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset in arcmsr_hbaC_postqueue_isr()
1962 arcmsr_drain_donequeue(acb, ccb, error); in arcmsr_hbaC_postqueue_isr()
1972 static void arcmsr_hbaD_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hbaD_postqueue_isr() argument
1982 spin_lock_irqsave(&acb->doneq_lock, flags); in arcmsr_hbaD_postqueue_isr()
1983 pmu = acb->pmuD; in arcmsr_hbaD_postqueue_isr()
1997 arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset in arcmsr_hbaD_postqueue_isr()
2003 arcmsr_drain_donequeue(acb, ccb, error); in arcmsr_hbaD_postqueue_isr()
2011 spin_unlock_irqrestore(&acb->doneq_lock, flags); in arcmsr_hbaD_postqueue_isr()
2022 static void arcmsr_hbaA_message_isr(struct AdapterControlBlock *acb) in arcmsr_hbaA_message_isr() argument
2024 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_message_isr()
2027 schedule_work(&acb->arcmsr_do_message_isr_bh); in arcmsr_hbaA_message_isr()
2029 static void arcmsr_hbaB_message_isr(struct AdapterControlBlock *acb) in arcmsr_hbaB_message_isr() argument
2031 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_message_isr()
2035 schedule_work(&acb->arcmsr_do_message_isr_bh); in arcmsr_hbaB_message_isr()
2046 static void arcmsr_hbaC_message_isr(struct AdapterControlBlock *acb) in arcmsr_hbaC_message_isr() argument
2048 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_hbaC_message_isr()
2051 schedule_work(&acb->arcmsr_do_message_isr_bh); in arcmsr_hbaC_message_isr()
2054 static void arcmsr_hbaD_message_isr(struct AdapterControlBlock *acb) in arcmsr_hbaD_message_isr() argument
2056 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_hbaD_message_isr()
2060 schedule_work(&acb->arcmsr_do_message_isr_bh); in arcmsr_hbaD_message_isr()
2063 static int arcmsr_hbaA_handle_isr(struct AdapterControlBlock *acb) in arcmsr_hbaA_handle_isr() argument
2066 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_handle_isr()
2068 acb->outbound_int_enable; in arcmsr_hbaA_handle_isr()
2074 arcmsr_hbaA_doorbell_isr(acb); in arcmsr_hbaA_handle_isr()
2076 arcmsr_hbaA_postqueue_isr(acb); in arcmsr_hbaA_handle_isr()
2078 arcmsr_hbaA_message_isr(acb); in arcmsr_hbaA_handle_isr()
2080 acb->outbound_int_enable; in arcmsr_hbaA_handle_isr()
2087 static int arcmsr_hbaB_handle_isr(struct AdapterControlBlock *acb) in arcmsr_hbaB_handle_isr() argument
2090 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_handle_isr()
2092 acb->outbound_int_enable; in arcmsr_hbaB_handle_isr()
2099 arcmsr_iop2drv_data_wrote_handle(acb); in arcmsr_hbaB_handle_isr()
2101 arcmsr_iop2drv_data_read_handle(acb); in arcmsr_hbaB_handle_isr()
2103 arcmsr_hbaB_postqueue_isr(acb); in arcmsr_hbaB_handle_isr()
2105 arcmsr_hbaB_message_isr(acb); in arcmsr_hbaB_handle_isr()
2107 acb->outbound_int_enable; in arcmsr_hbaB_handle_isr()
2166 static irqreturn_t arcmsr_interrupt(struct AdapterControlBlock *acb) in arcmsr_interrupt() argument
2168 switch (acb->adapter_type) { in arcmsr_interrupt()
2170 return arcmsr_hbaA_handle_isr(acb); in arcmsr_interrupt()
2173 return arcmsr_hbaB_handle_isr(acb); in arcmsr_interrupt()
2176 return arcmsr_hbaC_handle_isr(acb); in arcmsr_interrupt()
2178 return arcmsr_hbaD_handle_isr(acb); in arcmsr_interrupt()
2184 static void arcmsr_iop_parking(struct AdapterControlBlock *acb) in arcmsr_iop_parking() argument
2186 if (acb) { in arcmsr_iop_parking()
2188 if (acb->acb_flags & ACB_F_MSG_START_BGRB) { in arcmsr_iop_parking()
2190 acb->acb_flags &= ~ACB_F_MSG_START_BGRB; in arcmsr_iop_parking()
2191 intmask_org = arcmsr_disable_outbound_ints(acb); in arcmsr_iop_parking()
2192 arcmsr_stop_adapter_bgrb(acb); in arcmsr_iop_parking()
2193 arcmsr_flush_adapter_cache(acb); in arcmsr_iop_parking()
2194 arcmsr_enable_outbound_ints(acb, intmask_org); in arcmsr_iop_parking()
2200 void arcmsr_clear_iop2drv_rqueue_buffer(struct AdapterControlBlock *acb) in arcmsr_clear_iop2drv_rqueue_buffer() argument
2204 if (acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_clear_iop2drv_rqueue_buffer()
2206 if (acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_clear_iop2drv_rqueue_buffer()
2207 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_clear_iop2drv_rqueue_buffer()
2208 acb->rqbuf_getIndex = 0; in arcmsr_clear_iop2drv_rqueue_buffer()
2209 acb->rqbuf_putIndex = 0; in arcmsr_clear_iop2drv_rqueue_buffer()
2210 arcmsr_iop_message_read(acb); in arcmsr_clear_iop2drv_rqueue_buffer()
2212 } else if (acb->rqbuf_getIndex != in arcmsr_clear_iop2drv_rqueue_buffer()
2213 acb->rqbuf_putIndex) { in arcmsr_clear_iop2drv_rqueue_buffer()
2214 acb->rqbuf_getIndex = 0; in arcmsr_clear_iop2drv_rqueue_buffer()
2215 acb->rqbuf_putIndex = 0; in arcmsr_clear_iop2drv_rqueue_buffer()
2223 static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, in arcmsr_iop_message_xfer() argument
2263 spin_lock_irqsave(&acb->rqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2264 if (acb->rqbuf_getIndex != acb->rqbuf_putIndex) { in arcmsr_iop_message_xfer()
2265 unsigned int tail = acb->rqbuf_getIndex; in arcmsr_iop_message_xfer()
2266 unsigned int head = acb->rqbuf_putIndex; in arcmsr_iop_message_xfer()
2274 memcpy(ptmpQbuffer, acb->rqbuffer + tail, allxfer_len); in arcmsr_iop_message_xfer()
2276 memcpy(ptmpQbuffer, acb->rqbuffer + tail, cnt_to_end); in arcmsr_iop_message_xfer()
2277 memcpy(ptmpQbuffer + cnt_to_end, acb->rqbuffer, allxfer_len - cnt_to_end); in arcmsr_iop_message_xfer()
2279 acb->rqbuf_getIndex = (acb->rqbuf_getIndex + allxfer_len) % ARCMSR_MAX_QBUFFER; in arcmsr_iop_message_xfer()
2283 if (acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_iop_message_xfer()
2285 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_message_xfer()
2286 prbuffer = arcmsr_get_iop_rqbuffer(acb); in arcmsr_iop_message_xfer()
2287 if (arcmsr_Read_iop_rqbuffer_data(acb, prbuffer) == 0) in arcmsr_iop_message_xfer()
2288 acb->acb_flags |= ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_message_xfer()
2290 spin_unlock_irqrestore(&acb->rqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2293 if (acb->fw_flag == FW_DEADLOCK) in arcmsr_iop_message_xfer()
2314 spin_lock_irqsave(&acb->wqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2315 if (acb->wqbuf_putIndex != acb->wqbuf_getIndex) { in arcmsr_iop_message_xfer()
2318 arcmsr_write_ioctldata2iop(acb); in arcmsr_iop_message_xfer()
2327 pQbuffer = &acb->wqbuffer[acb->wqbuf_putIndex]; in arcmsr_iop_message_xfer()
2328 cnt2end = ARCMSR_MAX_QBUFFER - acb->wqbuf_putIndex; in arcmsr_iop_message_xfer()
2333 acb->wqbuf_putIndex = 0; in arcmsr_iop_message_xfer()
2334 pQbuffer = acb->wqbuffer; in arcmsr_iop_message_xfer()
2337 acb->wqbuf_putIndex += user_len; in arcmsr_iop_message_xfer()
2338 acb->wqbuf_putIndex %= ARCMSR_MAX_QBUFFER; in arcmsr_iop_message_xfer()
2339 if (acb->acb_flags & ACB_F_MESSAGE_WQBUFFER_CLEARED) { in arcmsr_iop_message_xfer()
2340 acb->acb_flags &= in arcmsr_iop_message_xfer()
2342 arcmsr_write_ioctldata2iop(acb); in arcmsr_iop_message_xfer()
2345 spin_unlock_irqrestore(&acb->wqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2347 if (acb->fw_flag == FW_DEADLOCK) in arcmsr_iop_message_xfer()
2356 uint8_t *pQbuffer = acb->rqbuffer; in arcmsr_iop_message_xfer()
2358 arcmsr_clear_iop2drv_rqueue_buffer(acb); in arcmsr_iop_message_xfer()
2359 spin_lock_irqsave(&acb->rqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2360 acb->acb_flags |= ACB_F_MESSAGE_RQBUFFER_CLEARED; in arcmsr_iop_message_xfer()
2361 acb->rqbuf_getIndex = 0; in arcmsr_iop_message_xfer()
2362 acb->rqbuf_putIndex = 0; in arcmsr_iop_message_xfer()
2364 spin_unlock_irqrestore(&acb->rqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2365 if (acb->fw_flag == FW_DEADLOCK) in arcmsr_iop_message_xfer()
2374 uint8_t *pQbuffer = acb->wqbuffer; in arcmsr_iop_message_xfer()
2375 spin_lock_irqsave(&acb->wqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2376 acb->acb_flags |= (ACB_F_MESSAGE_WQBUFFER_CLEARED | in arcmsr_iop_message_xfer()
2378 acb->wqbuf_getIndex = 0; in arcmsr_iop_message_xfer()
2379 acb->wqbuf_putIndex = 0; in arcmsr_iop_message_xfer()
2381 spin_unlock_irqrestore(&acb->wqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2382 if (acb->fw_flag == FW_DEADLOCK) in arcmsr_iop_message_xfer()
2392 arcmsr_clear_iop2drv_rqueue_buffer(acb); in arcmsr_iop_message_xfer()
2393 spin_lock_irqsave(&acb->rqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2394 acb->acb_flags |= ACB_F_MESSAGE_RQBUFFER_CLEARED; in arcmsr_iop_message_xfer()
2395 acb->rqbuf_getIndex = 0; in arcmsr_iop_message_xfer()
2396 acb->rqbuf_putIndex = 0; in arcmsr_iop_message_xfer()
2397 pQbuffer = acb->rqbuffer; in arcmsr_iop_message_xfer()
2399 spin_unlock_irqrestore(&acb->rqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2400 spin_lock_irqsave(&acb->wqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2401 acb->acb_flags |= (ACB_F_MESSAGE_WQBUFFER_CLEARED | in arcmsr_iop_message_xfer()
2403 acb->wqbuf_getIndex = 0; in arcmsr_iop_message_xfer()
2404 acb->wqbuf_putIndex = 0; in arcmsr_iop_message_xfer()
2405 pQbuffer = acb->wqbuffer; in arcmsr_iop_message_xfer()
2407 spin_unlock_irqrestore(&acb->wqbuffer_lock, flags); in arcmsr_iop_message_xfer()
2408 if (acb->fw_flag == FW_DEADLOCK) in arcmsr_iop_message_xfer()
2417 if (acb->fw_flag == FW_DEADLOCK) in arcmsr_iop_message_xfer()
2427 if (acb->fw_flag == FW_DEADLOCK) in arcmsr_iop_message_xfer()
2438 if (acb->fw_flag == FW_DEADLOCK) in arcmsr_iop_message_xfer()
2444 arcmsr_iop_parking(acb); in arcmsr_iop_message_xfer()
2448 if (acb->fw_flag == FW_DEADLOCK) in arcmsr_iop_message_xfer()
2454 arcmsr_flush_adapter_cache(acb); in arcmsr_iop_message_xfer()
2469 static struct CommandControlBlock *arcmsr_get_freeccb(struct AdapterControlBlock *acb) in arcmsr_get_freeccb() argument
2471 struct list_head *head = &acb->ccb_free_list; in arcmsr_get_freeccb()
2474 spin_lock_irqsave(&acb->ccblist_lock, flags); in arcmsr_get_freeccb()
2479 spin_unlock_irqrestore(&acb->ccblist_lock, flags); in arcmsr_get_freeccb()
2482 spin_unlock_irqrestore(&acb->ccblist_lock, flags); in arcmsr_get_freeccb()
2486 static void arcmsr_handle_virtual_command(struct AdapterControlBlock *acb, in arcmsr_handle_virtual_command() argument
2526 if (arcmsr_iop_message_xfer(acb, cmd)) in arcmsr_handle_virtual_command()
2540 struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; in arcmsr_queue_command_lck() local
2549 if(acb->devstate[target][lun] == ARECA_RAID_GONE) { in arcmsr_queue_command_lck()
2557 arcmsr_handle_virtual_command(acb, cmd); in arcmsr_queue_command_lck()
2560 ccb = arcmsr_get_freeccb(acb); in arcmsr_queue_command_lck()
2563 if (arcmsr_build_ccb( acb, ccb, cmd ) == FAILED) { in arcmsr_queue_command_lck()
2568 arcmsr_post_ccb(acb, ccb); in arcmsr_queue_command_lck()
2574 static bool arcmsr_hbaA_get_config(struct AdapterControlBlock *acb) in DEF_SCSI_QCMD()
2576 struct MessageUnit_A __iomem *reg = acb->pmuA; in DEF_SCSI_QCMD()
2577 char *acb_firm_model = acb->firm_model; in DEF_SCSI_QCMD()
2578 char *acb_firm_version = acb->firm_version; in DEF_SCSI_QCMD()
2579 char *acb_device_map = acb->device_map; in DEF_SCSI_QCMD()
2585 if (!arcmsr_hbaA_wait_msgint_ready(acb)) { in DEF_SCSI_QCMD()
2587 miscellaneous data' timeout \n", acb->host->host_no); in DEF_SCSI_QCMD()
2614 acb->host->host_no, in DEF_SCSI_QCMD()
2615 acb->firm_model, in DEF_SCSI_QCMD()
2616 acb->firm_version); in DEF_SCSI_QCMD()
2617 acb->signature = readl(&reg->message_rwbuffer[0]); in DEF_SCSI_QCMD()
2618 acb->firm_request_len = readl(&reg->message_rwbuffer[1]); in DEF_SCSI_QCMD()
2619 acb->firm_numbers_queue = readl(&reg->message_rwbuffer[2]); in DEF_SCSI_QCMD()
2620 acb->firm_sdram_size = readl(&reg->message_rwbuffer[3]); in DEF_SCSI_QCMD()
2621 acb->firm_hd_channels = readl(&reg->message_rwbuffer[4]); in DEF_SCSI_QCMD()
2622 acb->firm_cfg_version = readl(&reg->message_rwbuffer[25]); /*firm_cfg_version,25,100-103*/ in DEF_SCSI_QCMD()
2625 static bool arcmsr_hbaB_get_config(struct AdapterControlBlock *acb) in arcmsr_hbaB_get_config() argument
2627 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_get_config()
2628 struct pci_dev *pdev = acb->pdev; in arcmsr_hbaB_get_config()
2631 char *acb_firm_model = acb->firm_model; in arcmsr_hbaB_get_config()
2632 char *acb_firm_version = acb->firm_version; in arcmsr_hbaB_get_config()
2633 char *acb_device_map = acb->device_map; in arcmsr_hbaB_get_config()
2642 acb->roundup_ccbsize = roundup(sizeof(struct MessageUnit_B), 32); in arcmsr_hbaB_get_config()
2643 dma_coherent = dma_alloc_coherent(&pdev->dev, acb->roundup_ccbsize, in arcmsr_hbaB_get_config()
2648 acb->host->host_no); in arcmsr_hbaB_get_config()
2651 acb->dma_coherent_handle2 = dma_coherent_handle; in arcmsr_hbaB_get_config()
2652 acb->dma_coherent2 = dma_coherent; in arcmsr_hbaB_get_config()
2654 acb->pmuB = reg; in arcmsr_hbaB_get_config()
2655 …reg->drv2iop_doorbell= (uint32_t __iomem *)((unsigned long)acb->mem_base0 + ARCMSR_DRV2IOP_DOORBEL… in arcmsr_hbaB_get_config()
2656 …reg->drv2iop_doorbell_mask = (uint32_t __iomem *)((unsigned long)acb->mem_base0 + ARCMSR_DRV2IOP_D… in arcmsr_hbaB_get_config()
2657 …reg->iop2drv_doorbell = (uint32_t __iomem *)((unsigned long)acb->mem_base0 + ARCMSR_IOP2DRV_DOORBE… in arcmsr_hbaB_get_config()
2658 …reg->iop2drv_doorbell_mask = (uint32_t __iomem *)((unsigned long)acb->mem_base0 + ARCMSR_IOP2DRV_D… in arcmsr_hbaB_get_config()
2659 …reg->message_wbuffer = (uint32_t __iomem *)((unsigned long)acb->mem_base1 + ARCMSR_MESSAGE_WBUFFER… in arcmsr_hbaB_get_config()
2660 …reg->message_rbuffer = (uint32_t __iomem *)((unsigned long)acb->mem_base1 + ARCMSR_MESSAGE_RBUFFE… in arcmsr_hbaB_get_config()
2661 …reg->message_rwbuffer = (uint32_t __iomem *)((unsigned long)acb->mem_base1 + ARCMSR_MESSAGE_RWBUFF… in arcmsr_hbaB_get_config()
2667 if (!arcmsr_hbaB_wait_msgint_ready(acb)) { in arcmsr_hbaB_get_config()
2669 miscellaneous data' timeout \n", acb->host->host_no); in arcmsr_hbaB_get_config()
2696 acb->host->host_no, in arcmsr_hbaB_get_config()
2697 acb->firm_model, in arcmsr_hbaB_get_config()
2698 acb->firm_version); in arcmsr_hbaB_get_config()
2700 acb->signature = readl(&reg->message_rwbuffer[1]); in arcmsr_hbaB_get_config()
2702 acb->firm_request_len = readl(&reg->message_rwbuffer[2]); in arcmsr_hbaB_get_config()
2704 acb->firm_numbers_queue = readl(&reg->message_rwbuffer[3]); in arcmsr_hbaB_get_config()
2706 acb->firm_sdram_size = readl(&reg->message_rwbuffer[4]); in arcmsr_hbaB_get_config()
2708 acb->firm_hd_channels = readl(&reg->message_rwbuffer[5]); in arcmsr_hbaB_get_config()
2710 acb->firm_cfg_version = readl(&reg->message_rwbuffer[25]); /*firm_cfg_version,25,100-103*/ in arcmsr_hbaB_get_config()
2774 static bool arcmsr_hbaD_get_config(struct AdapterControlBlock *acb) in arcmsr_hbaD_get_config() argument
2776 char *acb_firm_model = acb->firm_model; in arcmsr_hbaD_get_config()
2777 char *acb_firm_version = acb->firm_version; in arcmsr_hbaD_get_config()
2778 char *acb_device_map = acb->device_map; in arcmsr_hbaD_get_config()
2786 struct pci_dev *pdev = acb->pdev; in arcmsr_hbaD_get_config()
2788 acb->roundup_ccbsize = roundup(sizeof(struct MessageUnit_D), 32); in arcmsr_hbaD_get_config()
2789 dma_coherent2 = dma_alloc_coherent(&pdev->dev, acb->roundup_ccbsize, in arcmsr_hbaD_get_config()
2795 memset(dma_coherent2, 0, acb->roundup_ccbsize); in arcmsr_hbaD_get_config()
2796 acb->dma_coherent_handle2 = dma_coherent_handle2; in arcmsr_hbaD_get_config()
2797 acb->dma_coherent2 = dma_coherent2; in arcmsr_hbaD_get_config()
2799 acb->pmuD = reg; in arcmsr_hbaD_get_config()
2800 reg->chip_id = acb->mem_base0 + ARCMSR_ARC1214_CHIP_ID; in arcmsr_hbaD_get_config()
2801 reg->cpu_mem_config = acb->mem_base0 + in arcmsr_hbaD_get_config()
2803 reg->i2o_host_interrupt_mask = acb->mem_base0 + in arcmsr_hbaD_get_config()
2805 reg->sample_at_reset = acb->mem_base0 + ARCMSR_ARC1214_SAMPLE_RESET; in arcmsr_hbaD_get_config()
2806 reg->reset_request = acb->mem_base0 + ARCMSR_ARC1214_RESET_REQUEST; in arcmsr_hbaD_get_config()
2807 reg->host_int_status = acb->mem_base0 + in arcmsr_hbaD_get_config()
2809 reg->pcief0_int_enable = acb->mem_base0 + in arcmsr_hbaD_get_config()
2811 reg->inbound_msgaddr0 = acb->mem_base0 + in arcmsr_hbaD_get_config()
2813 reg->inbound_msgaddr1 = acb->mem_base0 + in arcmsr_hbaD_get_config()
2815 reg->outbound_msgaddr0 = acb->mem_base0 + in arcmsr_hbaD_get_config()
2817 reg->outbound_msgaddr1 = acb->mem_base0 + in arcmsr_hbaD_get_config()
2819 reg->inbound_doorbell = acb->mem_base0 + in arcmsr_hbaD_get_config()
2821 reg->outbound_doorbell = acb->mem_base0 + in arcmsr_hbaD_get_config()
2823 reg->outbound_doorbell_enable = acb->mem_base0 + in arcmsr_hbaD_get_config()
2825 reg->inboundlist_base_low = acb->mem_base0 + in arcmsr_hbaD_get_config()
2827 reg->inboundlist_base_high = acb->mem_base0 + in arcmsr_hbaD_get_config()
2829 reg->inboundlist_write_pointer = acb->mem_base0 + in arcmsr_hbaD_get_config()
2831 reg->outboundlist_base_low = acb->mem_base0 + in arcmsr_hbaD_get_config()
2833 reg->outboundlist_base_high = acb->mem_base0 + in arcmsr_hbaD_get_config()
2835 reg->outboundlist_copy_pointer = acb->mem_base0 + in arcmsr_hbaD_get_config()
2837 reg->outboundlist_read_pointer = acb->mem_base0 + in arcmsr_hbaD_get_config()
2839 reg->outboundlist_interrupt_cause = acb->mem_base0 + in arcmsr_hbaD_get_config()
2841 reg->outboundlist_interrupt_enable = acb->mem_base0 + in arcmsr_hbaD_get_config()
2843 reg->message_wbuffer = acb->mem_base0 + ARCMSR_ARC1214_MESSAGE_WBUFFER; in arcmsr_hbaD_get_config()
2844 reg->message_rbuffer = acb->mem_base0 + ARCMSR_ARC1214_MESSAGE_RBUFFER; in arcmsr_hbaD_get_config()
2845 reg->msgcode_rwbuffer = acb->mem_base0 + in arcmsr_hbaD_get_config()
2850 if (readl(acb->pmuD->outbound_doorbell) & in arcmsr_hbaD_get_config()
2853 acb->pmuD->outbound_doorbell);/*clear interrupt*/ in arcmsr_hbaD_get_config()
2858 if (!arcmsr_hbaD_wait_msgint_ready(acb)) { in arcmsr_hbaD_get_config()
2860 "miscellaneous data timeout\n", acb->host->host_no); in arcmsr_hbaD_get_config()
2861 dma_free_coherent(&acb->pdev->dev, acb->roundup_ccbsize, in arcmsr_hbaD_get_config()
2862 acb->dma_coherent2, acb->dma_coherent_handle2); in arcmsr_hbaD_get_config()
2886 acb->signature = readl(&reg->msgcode_rwbuffer[1]); in arcmsr_hbaD_get_config()
2888 acb->firm_request_len = readl(&reg->msgcode_rwbuffer[2]); in arcmsr_hbaD_get_config()
2890 acb->firm_numbers_queue = readl(&reg->msgcode_rwbuffer[3]); in arcmsr_hbaD_get_config()
2892 acb->firm_sdram_size = readl(&reg->msgcode_rwbuffer[4]); in arcmsr_hbaD_get_config()
2894 acb->firm_hd_channels = readl(&reg->msgcode_rwbuffer[5]); in arcmsr_hbaD_get_config()
2896 acb->firm_cfg_version = readl(&reg->msgcode_rwbuffer[25]); in arcmsr_hbaD_get_config()
2898 acb->host->host_no, in arcmsr_hbaD_get_config()
2899 acb->firm_model, in arcmsr_hbaD_get_config()
2900 acb->firm_version); in arcmsr_hbaD_get_config()
2904 static bool arcmsr_get_firmware_spec(struct AdapterControlBlock *acb) in arcmsr_get_firmware_spec() argument
2908 switch (acb->adapter_type) { in arcmsr_get_firmware_spec()
2910 rtn = arcmsr_hbaA_get_config(acb); in arcmsr_get_firmware_spec()
2913 rtn = arcmsr_hbaB_get_config(acb); in arcmsr_get_firmware_spec()
2916 rtn = arcmsr_hbaC_get_config(acb); in arcmsr_get_firmware_spec()
2919 rtn = arcmsr_hbaD_get_config(acb); in arcmsr_get_firmware_spec()
2924 if (acb->firm_numbers_queue > ARCMSR_MAX_OUTSTANDING_CMD) in arcmsr_get_firmware_spec()
2925 acb->maxOutstanding = ARCMSR_MAX_OUTSTANDING_CMD; in arcmsr_get_firmware_spec()
2927 acb->maxOutstanding = acb->firm_numbers_queue - 1; in arcmsr_get_firmware_spec()
2928 acb->host->can_queue = acb->maxOutstanding; in arcmsr_get_firmware_spec()
2932 static int arcmsr_hbaA_polling_ccbdone(struct AdapterControlBlock *acb, in arcmsr_hbaA_polling_ccbdone() argument
2935 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_polling_ccbdone()
2943 outbound_intstatus = readl(&reg->outbound_intstatus) & acb->outbound_int_enable; in arcmsr_hbaA_polling_ccbdone()
2959 arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset + (flag_ccb << 5)); in arcmsr_hbaA_polling_ccbdone()
2962 if ((ccb->acb != acb) || (ccb->startdone != ARCMSR_CCB_START)) { in arcmsr_hbaA_polling_ccbdone()
2966 , acb->host->host_no in arcmsr_hbaA_polling_ccbdone()
2977 , acb->host->host_no in arcmsr_hbaA_polling_ccbdone()
2979 , atomic_read(&acb->ccboutstandingcount)); in arcmsr_hbaA_polling_ccbdone()
2983 arcmsr_report_ccb_state(acb, ccb, error); in arcmsr_hbaA_polling_ccbdone()
2988 static int arcmsr_hbaB_polling_ccbdone(struct AdapterControlBlock *acb, in arcmsr_hbaB_polling_ccbdone() argument
2991 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_polling_ccbdone()
3024 arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset + (flag_ccb << 5)); in arcmsr_hbaB_polling_ccbdone()
3027 if ((ccb->acb != acb) || (ccb->startdone != ARCMSR_CCB_START)) { in arcmsr_hbaB_polling_ccbdone()
3031 ,acb->host->host_no in arcmsr_hbaB_polling_ccbdone()
3042 , acb->host->host_no in arcmsr_hbaB_polling_ccbdone()
3044 , atomic_read(&acb->ccboutstandingcount)); in arcmsr_hbaB_polling_ccbdone()
3048 arcmsr_report_ccb_state(acb, ccb, error); in arcmsr_hbaB_polling_ccbdone()
3053 static int arcmsr_hbaC_polling_ccbdone(struct AdapterControlBlock *acb, in arcmsr_hbaC_polling_ccbdone() argument
3056 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_hbaC_polling_ccbdone()
3081 …arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset + ccb_cdb_phy);/*frame must be 32 bytes ali… in arcmsr_hbaC_polling_ccbdone()
3085 if ((pCCB->acb != acb) || (pCCB->startdone != ARCMSR_CCB_START)) { in arcmsr_hbaC_polling_ccbdone()
3089 , acb->host->host_no in arcmsr_hbaC_polling_ccbdone()
3100 , acb->host->host_no in arcmsr_hbaC_polling_ccbdone()
3102 , atomic_read(&acb->ccboutstandingcount)); in arcmsr_hbaC_polling_ccbdone()
3106 arcmsr_report_ccb_state(acb, pCCB, error); in arcmsr_hbaC_polling_ccbdone()
3111 static int arcmsr_hbaD_polling_ccbdone(struct AdapterControlBlock *acb, in arcmsr_hbaD_polling_ccbdone() argument
3120 struct MessageUnit_D *pmu = acb->pmuD; in arcmsr_hbaD_polling_ccbdone()
3125 spin_lock_irqsave(&acb->doneq_lock, flags); in arcmsr_hbaD_polling_ccbdone()
3129 spin_unlock_irqrestore(&acb->doneq_lock, flags); in arcmsr_hbaD_polling_ccbdone()
3148 spin_unlock_irqrestore(&acb->doneq_lock, flags); in arcmsr_hbaD_polling_ccbdone()
3151 arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset + in arcmsr_hbaD_polling_ccbdone()
3156 if ((pCCB->acb != acb) || in arcmsr_hbaD_polling_ccbdone()
3162 , acb->host->host_no in arcmsr_hbaD_polling_ccbdone()
3173 , acb->host->host_no in arcmsr_hbaD_polling_ccbdone()
3175 , atomic_read(&acb->ccboutstandingcount)); in arcmsr_hbaD_polling_ccbdone()
3180 arcmsr_report_ccb_state(acb, pCCB, error); in arcmsr_hbaD_polling_ccbdone()
3185 static int arcmsr_polling_ccbdone(struct AdapterControlBlock *acb, in arcmsr_polling_ccbdone() argument
3189 switch (acb->adapter_type) { in arcmsr_polling_ccbdone()
3192 rtn = arcmsr_hbaA_polling_ccbdone(acb, poll_ccb); in arcmsr_polling_ccbdone()
3197 rtn = arcmsr_hbaB_polling_ccbdone(acb, poll_ccb); in arcmsr_polling_ccbdone()
3201 rtn = arcmsr_hbaC_polling_ccbdone(acb, poll_ccb); in arcmsr_polling_ccbdone()
3205 rtn = arcmsr_hbaD_polling_ccbdone(acb, poll_ccb); in arcmsr_polling_ccbdone()
3211 static int arcmsr_iop_confirm(struct AdapterControlBlock *acb) in arcmsr_iop_confirm() argument
3222 switch (acb->adapter_type) { in arcmsr_iop_confirm()
3225 dma_coherent_handle = acb->dma_coherent_handle2; in arcmsr_iop_confirm()
3228 dma_coherent_handle = acb->dma_coherent_handle; in arcmsr_iop_confirm()
3233 acb->cdb_phyaddr_hi32 = cdb_phyaddr_hi32; in arcmsr_iop_confirm()
3239 switch (acb->adapter_type) { in arcmsr_iop_confirm()
3243 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_iop_confirm()
3249 if (!arcmsr_hbaA_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
3252 acb->host->host_no); in arcmsr_iop_confirm()
3262 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_iop_confirm()
3266 if (!arcmsr_hbaB_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
3268 acb->host->host_no); in arcmsr_iop_confirm()
3284 if (!arcmsr_hbaB_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
3286 timeout \n",acb->host->host_no); in arcmsr_iop_confirm()
3290 if (!arcmsr_hbaB_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
3292 acb->host->host_no); in arcmsr_iop_confirm()
3299 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_iop_confirm()
3302 acb->adapter_index, cdb_phyaddr_hi32); in arcmsr_iop_confirm()
3307 if (!arcmsr_hbaC_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
3309 timeout \n", acb->host->host_no); in arcmsr_iop_confirm()
3317 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_iop_confirm()
3328 if (!arcmsr_hbaD_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
3330 acb->host->host_no); in arcmsr_iop_confirm()
3339 static void arcmsr_wait_firmware_ready(struct AdapterControlBlock *acb) in arcmsr_wait_firmware_ready() argument
3342 switch (acb->adapter_type) { in arcmsr_wait_firmware_ready()
3345 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_wait_firmware_ready()
3353 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_wait_firmware_ready()
3361 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_wait_firmware_ready()
3368 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_wait_firmware_ready()
3378 static void arcmsr_hbaA_request_device_map(struct AdapterControlBlock *acb) in arcmsr_hbaA_request_device_map() argument
3380 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_request_device_map()
3381 …if (unlikely(atomic_read(&acb->rq_map_token) == 0) || ((acb->acb_flags & ACB_F_BUS_RESET) != 0 ) |… in arcmsr_hbaA_request_device_map()
3382 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_hbaA_request_device_map()
3385 acb->fw_flag = FW_NORMAL; in arcmsr_hbaA_request_device_map()
3386 if (atomic_read(&acb->ante_token_value) == atomic_read(&acb->rq_map_token)){ in arcmsr_hbaA_request_device_map()
3387 atomic_set(&acb->rq_map_token, 16); in arcmsr_hbaA_request_device_map()
3389 atomic_set(&acb->ante_token_value, atomic_read(&acb->rq_map_token)); in arcmsr_hbaA_request_device_map()
3390 if (atomic_dec_and_test(&acb->rq_map_token)) { in arcmsr_hbaA_request_device_map()
3391 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_hbaA_request_device_map()
3395 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_hbaA_request_device_map()
3400 static void arcmsr_hbaB_request_device_map(struct AdapterControlBlock *acb) in arcmsr_hbaB_request_device_map() argument
3402 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_request_device_map()
3403 …if (unlikely(atomic_read(&acb->rq_map_token) == 0) || ((acb->acb_flags & ACB_F_BUS_RESET) != 0 ) |… in arcmsr_hbaB_request_device_map()
3404 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_hbaB_request_device_map()
3407 acb->fw_flag = FW_NORMAL; in arcmsr_hbaB_request_device_map()
3408 if (atomic_read(&acb->ante_token_value) == atomic_read(&acb->rq_map_token)) { in arcmsr_hbaB_request_device_map()
3409 atomic_set(&acb->rq_map_token, 16); in arcmsr_hbaB_request_device_map()
3411 atomic_set(&acb->ante_token_value, atomic_read(&acb->rq_map_token)); in arcmsr_hbaB_request_device_map()
3412 if (atomic_dec_and_test(&acb->rq_map_token)) { in arcmsr_hbaB_request_device_map()
3413 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_hbaB_request_device_map()
3417 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_hbaB_request_device_map()
3422 static void arcmsr_hbaC_request_device_map(struct AdapterControlBlock *acb) in arcmsr_hbaC_request_device_map() argument
3424 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_hbaC_request_device_map()
3425 …if (unlikely(atomic_read(&acb->rq_map_token) == 0) || ((acb->acb_flags & ACB_F_BUS_RESET) != 0) ||… in arcmsr_hbaC_request_device_map()
3426 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_hbaC_request_device_map()
3429 acb->fw_flag = FW_NORMAL; in arcmsr_hbaC_request_device_map()
3430 if (atomic_read(&acb->ante_token_value) == atomic_read(&acb->rq_map_token)) { in arcmsr_hbaC_request_device_map()
3431 atomic_set(&acb->rq_map_token, 16); in arcmsr_hbaC_request_device_map()
3433 atomic_set(&acb->ante_token_value, atomic_read(&acb->rq_map_token)); in arcmsr_hbaC_request_device_map()
3434 if (atomic_dec_and_test(&acb->rq_map_token)) { in arcmsr_hbaC_request_device_map()
3435 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_hbaC_request_device_map()
3440 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_hbaC_request_device_map()
3445 static void arcmsr_hbaD_request_device_map(struct AdapterControlBlock *acb) in arcmsr_hbaD_request_device_map() argument
3447 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_hbaD_request_device_map()
3449 if (unlikely(atomic_read(&acb->rq_map_token) == 0) || in arcmsr_hbaD_request_device_map()
3450 ((acb->acb_flags & ACB_F_BUS_RESET) != 0) || in arcmsr_hbaD_request_device_map()
3451 ((acb->acb_flags & ACB_F_ABORT) != 0)) { in arcmsr_hbaD_request_device_map()
3452 mod_timer(&acb->eternal_timer, in arcmsr_hbaD_request_device_map()
3455 acb->fw_flag = FW_NORMAL; in arcmsr_hbaD_request_device_map()
3456 if (atomic_read(&acb->ante_token_value) == in arcmsr_hbaD_request_device_map()
3457 atomic_read(&acb->rq_map_token)) { in arcmsr_hbaD_request_device_map()
3458 atomic_set(&acb->rq_map_token, 16); in arcmsr_hbaD_request_device_map()
3460 atomic_set(&acb->ante_token_value, in arcmsr_hbaD_request_device_map()
3461 atomic_read(&acb->rq_map_token)); in arcmsr_hbaD_request_device_map()
3462 if (atomic_dec_and_test(&acb->rq_map_token)) { in arcmsr_hbaD_request_device_map()
3463 mod_timer(&acb->eternal_timer, jiffies + in arcmsr_hbaD_request_device_map()
3469 mod_timer(&acb->eternal_timer, jiffies + in arcmsr_hbaD_request_device_map()
3476 struct AdapterControlBlock *acb = (struct AdapterControlBlock *)pacb; in arcmsr_request_device_map() local
3477 switch (acb->adapter_type) { in arcmsr_request_device_map()
3479 arcmsr_hbaA_request_device_map(acb); in arcmsr_request_device_map()
3483 arcmsr_hbaB_request_device_map(acb); in arcmsr_request_device_map()
3487 arcmsr_hbaC_request_device_map(acb); in arcmsr_request_device_map()
3491 arcmsr_hbaD_request_device_map(acb); in arcmsr_request_device_map()
3496 static void arcmsr_hbaA_start_bgrb(struct AdapterControlBlock *acb) in arcmsr_hbaA_start_bgrb() argument
3498 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_hbaA_start_bgrb()
3499 acb->acb_flags |= ACB_F_MSG_START_BGRB; in arcmsr_hbaA_start_bgrb()
3501 if (!arcmsr_hbaA_wait_msgint_ready(acb)) { in arcmsr_hbaA_start_bgrb()
3503 rebulid' timeout \n", acb->host->host_no); in arcmsr_hbaA_start_bgrb()
3507 static void arcmsr_hbaB_start_bgrb(struct AdapterControlBlock *acb) in arcmsr_hbaB_start_bgrb() argument
3509 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_hbaB_start_bgrb()
3510 acb->acb_flags |= ACB_F_MSG_START_BGRB; in arcmsr_hbaB_start_bgrb()
3512 if (!arcmsr_hbaB_wait_msgint_ready(acb)) { in arcmsr_hbaB_start_bgrb()
3514 rebulid' timeout \n",acb->host->host_no); in arcmsr_hbaB_start_bgrb()
3543 static void arcmsr_start_adapter_bgrb(struct AdapterControlBlock *acb) in arcmsr_start_adapter_bgrb() argument
3545 switch (acb->adapter_type) { in arcmsr_start_adapter_bgrb()
3547 arcmsr_hbaA_start_bgrb(acb); in arcmsr_start_adapter_bgrb()
3550 arcmsr_hbaB_start_bgrb(acb); in arcmsr_start_adapter_bgrb()
3553 arcmsr_hbaC_start_bgrb(acb); in arcmsr_start_adapter_bgrb()
3556 arcmsr_hbaD_start_bgrb(acb); in arcmsr_start_adapter_bgrb()
3561 static void arcmsr_clear_doorbell_queue_buffer(struct AdapterControlBlock *acb) in arcmsr_clear_doorbell_queue_buffer() argument
3563 switch (acb->adapter_type) { in arcmsr_clear_doorbell_queue_buffer()
3565 struct MessageUnit_A __iomem *reg = acb->pmuA; in arcmsr_clear_doorbell_queue_buffer()
3576 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_clear_doorbell_queue_buffer()
3584 struct MessageUnit_C __iomem *reg = acb->pmuC; in arcmsr_clear_doorbell_queue_buffer()
3605 struct MessageUnit_D *reg = acb->pmuD; in arcmsr_clear_doorbell_queue_buffer()
3629 static void arcmsr_enable_eoi_mode(struct AdapterControlBlock *acb) in arcmsr_enable_eoi_mode() argument
3631 switch (acb->adapter_type) { in arcmsr_enable_eoi_mode()
3636 struct MessageUnit_B *reg = acb->pmuB; in arcmsr_enable_eoi_mode()
3638 if (!arcmsr_hbaB_wait_msgint_ready(acb)) { in arcmsr_enable_eoi_mode()
3650 static void arcmsr_hardware_reset(struct AdapterControlBlock *acb) in arcmsr_hardware_reset() argument
3654 struct MessageUnit_A __iomem *pmuA = acb->pmuA; in arcmsr_hardware_reset()
3655 struct MessageUnit_C __iomem *pmuC = acb->pmuC; in arcmsr_hardware_reset()
3656 struct MessageUnit_D *pmuD = acb->pmuD; in arcmsr_hardware_reset()
3659 printk(KERN_NOTICE "arcmsr%d: executing hw bus reset .....\n", acb->host->host_no); in arcmsr_hardware_reset()
3661 pci_read_config_byte(acb->pdev, i, &value[i]); in arcmsr_hardware_reset()
3664 if ((acb->dev_id == 0x1680)) { in arcmsr_hardware_reset()
3666 } else if ((acb->dev_id == 0x1880)) { in arcmsr_hardware_reset()
3677 } else if ((acb->dev_id == 0x1214)) { in arcmsr_hardware_reset()
3680 pci_write_config_byte(acb->pdev, 0x84, 0x20); in arcmsr_hardware_reset()
3685 pci_write_config_byte(acb->pdev, i, value[i]); in arcmsr_hardware_reset()
3690 static void arcmsr_iop_init(struct AdapterControlBlock *acb) in arcmsr_iop_init() argument
3694 intmask_org = arcmsr_disable_outbound_ints(acb); in arcmsr_iop_init()
3695 arcmsr_wait_firmware_ready(acb); in arcmsr_iop_init()
3696 arcmsr_iop_confirm(acb); in arcmsr_iop_init()
3698 arcmsr_start_adapter_bgrb(acb); in arcmsr_iop_init()
3700 arcmsr_clear_doorbell_queue_buffer(acb); in arcmsr_iop_init()
3701 arcmsr_enable_eoi_mode(acb); in arcmsr_iop_init()
3703 arcmsr_enable_outbound_ints(acb, intmask_org); in arcmsr_iop_init()
3704 acb->acb_flags |= ACB_F_IOP_INITED; in arcmsr_iop_init()
3707 static uint8_t arcmsr_iop_reset(struct AdapterControlBlock *acb) in arcmsr_iop_reset() argument
3715 if (atomic_read(&acb->ccboutstandingcount) != 0) { in arcmsr_iop_reset()
3717 intmask_org = arcmsr_disable_outbound_ints(acb); in arcmsr_iop_reset()
3719 rtnval = arcmsr_abort_allcmd(acb); in arcmsr_iop_reset()
3721 arcmsr_done4abort_postqueue(acb); in arcmsr_iop_reset()
3723 ccb = acb->pccb_pool[i]; in arcmsr_iop_reset()
3728 spin_lock_irqsave(&acb->ccblist_lock, flags); in arcmsr_iop_reset()
3729 list_add_tail(&ccb->list, &acb->ccb_free_list); in arcmsr_iop_reset()
3730 spin_unlock_irqrestore(&acb->ccblist_lock, flags); in arcmsr_iop_reset()
3733 atomic_set(&acb->ccboutstandingcount, 0); in arcmsr_iop_reset()
3735 arcmsr_enable_outbound_ints(acb, intmask_org); in arcmsr_iop_reset()
3743 struct AdapterControlBlock *acb; in arcmsr_bus_reset() local
3747 acb = (struct AdapterControlBlock *) cmd->device->host->hostdata; in arcmsr_bus_reset()
3748 … executing bus reset eh.....num_resets = %d, num_aborts = %d \n", acb->num_resets, acb->num_aborts… in arcmsr_bus_reset()
3749 acb->num_resets++; in arcmsr_bus_reset()
3751 switch(acb->adapter_type){ in arcmsr_bus_reset()
3753 if (acb->acb_flags & ACB_F_BUS_RESET){ in arcmsr_bus_reset()
3756 timeout = wait_event_timeout(wait_q, (acb->acb_flags & ACB_F_BUS_RESET) == 0, 220*HZ); in arcmsr_bus_reset()
3761 acb->acb_flags |= ACB_F_BUS_RESET; in arcmsr_bus_reset()
3762 if (!arcmsr_iop_reset(acb)) { in arcmsr_bus_reset()
3764 reg = acb->pmuA; in arcmsr_bus_reset()
3765 arcmsr_hardware_reset(acb); in arcmsr_bus_reset()
3766 acb->acb_flags &= ~ACB_F_IOP_INITED; in arcmsr_bus_reset()
3770 …printk(KERN_ERR "arcmsr%d: waiting for hw bus reset return, retry=%d\n", acb->host->host_no, retry… in arcmsr_bus_reset()
3772 acb->fw_flag = FW_DEADLOCK; in arcmsr_bus_reset()
3773 …printk(KERN_ERR "arcmsr%d: waiting for hw bus reset return, RETRY TERMINATED!!\n", acb->host->host… in arcmsr_bus_reset()
3779 acb->acb_flags |= ACB_F_IOP_INITED; in arcmsr_bus_reset()
3781 intmask_org = arcmsr_disable_outbound_ints(acb); in arcmsr_bus_reset()
3782 arcmsr_get_firmware_spec(acb); in arcmsr_bus_reset()
3783 arcmsr_start_adapter_bgrb(acb); in arcmsr_bus_reset()
3789 arcmsr_enable_outbound_ints(acb, intmask_org); in arcmsr_bus_reset()
3790 atomic_set(&acb->rq_map_token, 16); in arcmsr_bus_reset()
3791 atomic_set(&acb->ante_token_value, 16); in arcmsr_bus_reset()
3792 acb->fw_flag = FW_NORMAL; in arcmsr_bus_reset()
3793 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_bus_reset()
3794 acb->acb_flags &= ~ACB_F_BUS_RESET; in arcmsr_bus_reset()
3798 acb->acb_flags &= ~ACB_F_BUS_RESET; in arcmsr_bus_reset()
3799 atomic_set(&acb->rq_map_token, 16); in arcmsr_bus_reset()
3800 atomic_set(&acb->ante_token_value, 16); in arcmsr_bus_reset()
3801 acb->fw_flag = FW_NORMAL; in arcmsr_bus_reset()
3802 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6*HZ)); in arcmsr_bus_reset()
3808 acb->acb_flags |= ACB_F_BUS_RESET; in arcmsr_bus_reset()
3809 if (!arcmsr_iop_reset(acb)) { in arcmsr_bus_reset()
3810 acb->acb_flags &= ~ACB_F_BUS_RESET; in arcmsr_bus_reset()
3813 acb->acb_flags &= ~ACB_F_BUS_RESET; in arcmsr_bus_reset()
3814 atomic_set(&acb->rq_map_token, 16); in arcmsr_bus_reset()
3815 atomic_set(&acb->ante_token_value, 16); in arcmsr_bus_reset()
3816 acb->fw_flag = FW_NORMAL; in arcmsr_bus_reset()
3817 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_bus_reset()
3823 if (acb->acb_flags & ACB_F_BUS_RESET) { in arcmsr_bus_reset()
3826 timeout = wait_event_timeout(wait_q, (acb->acb_flags & ACB_F_BUS_RESET) == 0, 220*HZ); in arcmsr_bus_reset()
3831 acb->acb_flags |= ACB_F_BUS_RESET; in arcmsr_bus_reset()
3832 if (!arcmsr_iop_reset(acb)) { in arcmsr_bus_reset()
3834 reg = acb->pmuC; in arcmsr_bus_reset()
3835 arcmsr_hardware_reset(acb); in arcmsr_bus_reset()
3836 acb->acb_flags &= ~ACB_F_IOP_INITED; in arcmsr_bus_reset()
3840 …printk(KERN_ERR "arcmsr%d: waiting for hw bus reset return, retry=%d\n", acb->host->host_no, retry… in arcmsr_bus_reset()
3842 acb->fw_flag = FW_DEADLOCK; in arcmsr_bus_reset()
3843 …printk(KERN_ERR "arcmsr%d: waiting for hw bus reset return, RETRY TERMINATED!!\n", acb->host->host… in arcmsr_bus_reset()
3849 acb->acb_flags |= ACB_F_IOP_INITED; in arcmsr_bus_reset()
3851 intmask_org = arcmsr_disable_outbound_ints(acb); in arcmsr_bus_reset()
3852 arcmsr_get_firmware_spec(acb); in arcmsr_bus_reset()
3853 arcmsr_start_adapter_bgrb(acb); in arcmsr_bus_reset()
3855 arcmsr_clear_doorbell_queue_buffer(acb); in arcmsr_bus_reset()
3857 arcmsr_enable_outbound_ints(acb, intmask_org); in arcmsr_bus_reset()
3858 atomic_set(&acb->rq_map_token, 16); in arcmsr_bus_reset()
3859 atomic_set(&acb->ante_token_value, 16); in arcmsr_bus_reset()
3860 acb->fw_flag = FW_NORMAL; in arcmsr_bus_reset()
3861 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ)); in arcmsr_bus_reset()
3862 acb->acb_flags &= ~ACB_F_BUS_RESET; in arcmsr_bus_reset()
3866 acb->acb_flags &= ~ACB_F_BUS_RESET; in arcmsr_bus_reset()
3867 atomic_set(&acb->rq_map_token, 16); in arcmsr_bus_reset()
3868 atomic_set(&acb->ante_token_value, 16); in arcmsr_bus_reset()
3869 acb->fw_flag = FW_NORMAL; in arcmsr_bus_reset()
3870 mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6*HZ)); in arcmsr_bus_reset()
3876 if (acb->acb_flags & ACB_F_BUS_RESET) { in arcmsr_bus_reset()
3880 timeout = wait_event_timeout(wait_q, (acb->acb_flags in arcmsr_bus_reset()
3885 acb->acb_flags |= ACB_F_BUS_RESET; in arcmsr_bus_reset()
3886 if (!arcmsr_iop_reset(acb)) { in arcmsr_bus_reset()
3888 reg = acb->pmuD; in arcmsr_bus_reset()
3889 arcmsr_hardware_reset(acb); in arcmsr_bus_reset()
3890 acb->acb_flags &= ~ACB_F_IOP_INITED; in arcmsr_bus_reset()
3896 acb->host->host_no, retry_count); in arcmsr_bus_reset()
3898 acb->fw_flag = FW_DEADLOCK; in arcmsr_bus_reset()
3902 acb->host->host_no); in arcmsr_bus_reset()
3908 acb->acb_flags |= ACB_F_IOP_INITED; in arcmsr_bus_reset()
3910 intmask_org = arcmsr_disable_outbound_ints(acb); in arcmsr_bus_reset()
3911 arcmsr_get_firmware_spec(acb); in arcmsr_bus_reset()
3912 arcmsr_start_adapter_bgrb(acb); in arcmsr_bus_reset()
3913 arcmsr_clear_doorbell_queue_buffer(acb); in arcmsr_bus_reset()
3914 arcmsr_enable_outbound_ints(acb, intmask_org); in arcmsr_bus_reset()
3915 atomic_set(&acb->rq_map_token, 16); in arcmsr_bus_reset()
3916 atomic_set(&acb->ante_token_value, 16); in arcmsr_bus_reset()
3917 acb->fw_flag = FW_NORMAL; in arcmsr_bus_reset()
3918 mod_timer(&acb->eternal_timer, in arcmsr_bus_reset()
3920 acb->acb_flags &= ~ACB_F_BUS_RESET; in arcmsr_bus_reset()
3925 acb->acb_flags &= ~ACB_F_BUS_RESET; in arcmsr_bus_reset()
3926 atomic_set(&acb->rq_map_token, 16); in arcmsr_bus_reset()
3927 atomic_set(&acb->ante_token_value, 16); in arcmsr_bus_reset()
3928 acb->fw_flag = FW_NORMAL; in arcmsr_bus_reset()
3929 mod_timer(&acb->eternal_timer, in arcmsr_bus_reset()
3939 static int arcmsr_abort_one_cmd(struct AdapterControlBlock *acb, in arcmsr_abort_one_cmd() argument
3943 rtn = arcmsr_polling_ccbdone(acb, ccb); in arcmsr_abort_one_cmd()
3949 struct AdapterControlBlock *acb = in arcmsr_abort() local
3957 acb->host->host_no, cmd->device->id, (u32)cmd->device->lun); in arcmsr_abort()
3958 acb->acb_flags |= ACB_F_ABORT; in arcmsr_abort()
3959 acb->num_aborts++; in arcmsr_abort()
3966 if (!atomic_read(&acb->ccboutstandingcount)) { in arcmsr_abort()
3967 acb->acb_flags &= ~ACB_F_ABORT; in arcmsr_abort()
3971 intmask_org = arcmsr_disable_outbound_ints(acb); in arcmsr_abort()
3973 struct CommandControlBlock *ccb = acb->pccb_pool[i]; in arcmsr_abort()
3976 rtn = arcmsr_abort_one_cmd(acb, ccb); in arcmsr_abort()
3980 acb->acb_flags &= ~ACB_F_ABORT; in arcmsr_abort()
3981 arcmsr_enable_outbound_ints(acb, intmask_org); in arcmsr_abort()
3987 struct AdapterControlBlock *acb = in arcmsr_info() local
3992 switch (acb->pdev->device) { in arcmsr_info()