Lines Matching refs:pm8001_ha
119 static void pm8001_phy_init(struct pm8001_hba_info *pm8001_ha, int phy_id) in pm8001_phy_init() argument
121 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in pm8001_phy_init()
124 phy->pm8001_ha = pm8001_ha; in pm8001_phy_init()
125 sas_phy->enabled = (phy_id < pm8001_ha->chip->n_phy) ? 1 : 0; in pm8001_phy_init()
134 sas_phy->sas_addr = &pm8001_ha->sas_addr[0]; in pm8001_phy_init()
136 sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata; in pm8001_phy_init()
145 static void pm8001_free(struct pm8001_hba_info *pm8001_ha) in pm8001_free() argument
149 if (!pm8001_ha) in pm8001_free()
153 if (pm8001_ha->memoryMap.region[i].virt_ptr != NULL) { in pm8001_free()
154 pci_free_consistent(pm8001_ha->pdev, in pm8001_free()
155 (pm8001_ha->memoryMap.region[i].total_len + in pm8001_free()
156 pm8001_ha->memoryMap.region[i].alignment), in pm8001_free()
157 pm8001_ha->memoryMap.region[i].virt_ptr, in pm8001_free()
158 pm8001_ha->memoryMap.region[i].phys_addr); in pm8001_free()
161 PM8001_CHIP_DISP->chip_iounmap(pm8001_ha); in pm8001_free()
162 if (pm8001_ha->shost) in pm8001_free()
163 scsi_host_put(pm8001_ha->shost); in pm8001_free()
165 kfree(pm8001_ha->tags); in pm8001_free()
166 kfree(pm8001_ha); in pm8001_free()
178 struct pm8001_hba_info *pm8001_ha; in pm8001_tasklet() local
182 pm8001_ha = irq_vector->drv_inst; in pm8001_tasklet()
183 if (unlikely(!pm8001_ha)) in pm8001_tasklet()
185 PM8001_CHIP_DISP->isr(pm8001_ha, irq_vector->irq_id); in pm8001_tasklet()
199 struct pm8001_hba_info *pm8001_ha; in pm8001_interrupt_handler_msix() local
202 pm8001_ha = irq_vector->drv_inst; in pm8001_interrupt_handler_msix()
204 if (unlikely(!pm8001_ha)) in pm8001_interrupt_handler_msix()
206 if (!PM8001_CHIP_DISP->is_our_interupt(pm8001_ha)) in pm8001_interrupt_handler_msix()
209 tasklet_schedule(&pm8001_ha->tasklet[irq_vector->irq_id]); in pm8001_interrupt_handler_msix()
211 ret = PM8001_CHIP_DISP->isr(pm8001_ha, irq_vector->irq_id); in pm8001_interrupt_handler_msix()
223 struct pm8001_hba_info *pm8001_ha; in pm8001_interrupt_handler_intx() local
226 pm8001_ha = sha->lldd_ha; in pm8001_interrupt_handler_intx()
227 if (unlikely(!pm8001_ha)) in pm8001_interrupt_handler_intx()
229 if (!PM8001_CHIP_DISP->is_our_interupt(pm8001_ha)) in pm8001_interrupt_handler_intx()
233 tasklet_schedule(&pm8001_ha->tasklet[0]); in pm8001_interrupt_handler_intx()
235 ret = PM8001_CHIP_DISP->isr(pm8001_ha, 0); in pm8001_interrupt_handler_intx()
245 static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha, in pm8001_alloc() argument
249 spin_lock_init(&pm8001_ha->lock); in pm8001_alloc()
250 spin_lock_init(&pm8001_ha->bitmap_lock); in pm8001_alloc()
251 PM8001_INIT_DBG(pm8001_ha, in pm8001_alloc()
253 pm8001_ha->chip->n_phy)); in pm8001_alloc()
254 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_alloc()
255 pm8001_phy_init(pm8001_ha, i); in pm8001_alloc()
256 pm8001_ha->port[i].wide_port_phymap = 0; in pm8001_alloc()
257 pm8001_ha->port[i].port_attached = 0; in pm8001_alloc()
258 pm8001_ha->port[i].port_state = 0; in pm8001_alloc()
259 INIT_LIST_HEAD(&pm8001_ha->port[i].list); in pm8001_alloc()
262 pm8001_ha->tags = kzalloc(PM8001_MAX_CCB, GFP_KERNEL); in pm8001_alloc()
263 if (!pm8001_ha->tags) in pm8001_alloc()
266 pm8001_ha->memoryMap.region[AAP1].num_elements = 1; in pm8001_alloc()
267 pm8001_ha->memoryMap.region[AAP1].element_size = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
268 pm8001_ha->memoryMap.region[AAP1].total_len = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
269 pm8001_ha->memoryMap.region[AAP1].alignment = 32; in pm8001_alloc()
272 pm8001_ha->memoryMap.region[IOP].num_elements = 1; in pm8001_alloc()
273 pm8001_ha->memoryMap.region[IOP].element_size = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
274 pm8001_ha->memoryMap.region[IOP].total_len = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
275 pm8001_ha->memoryMap.region[IOP].alignment = 32; in pm8001_alloc()
279 pm8001_ha->memoryMap.region[CI+i].num_elements = 1; in pm8001_alloc()
280 pm8001_ha->memoryMap.region[CI+i].element_size = 4; in pm8001_alloc()
281 pm8001_ha->memoryMap.region[CI+i].total_len = 4; in pm8001_alloc()
282 pm8001_ha->memoryMap.region[CI+i].alignment = 4; in pm8001_alloc()
286 pm8001_ha->memoryMap.region[IB+i].num_elements = in pm8001_alloc()
288 pm8001_ha->memoryMap.region[IB+i].element_size = 128; in pm8001_alloc()
289 pm8001_ha->memoryMap.region[IB+i].total_len = in pm8001_alloc()
291 pm8001_ha->memoryMap.region[IB+i].alignment = 128; in pm8001_alloc()
293 pm8001_ha->memoryMap.region[IB+i].num_elements = in pm8001_alloc()
295 pm8001_ha->memoryMap.region[IB+i].element_size = 64; in pm8001_alloc()
296 pm8001_ha->memoryMap.region[IB+i].total_len = in pm8001_alloc()
298 pm8001_ha->memoryMap.region[IB+i].alignment = 64; in pm8001_alloc()
304 pm8001_ha->memoryMap.region[PI+i].num_elements = 1; in pm8001_alloc()
305 pm8001_ha->memoryMap.region[PI+i].element_size = 4; in pm8001_alloc()
306 pm8001_ha->memoryMap.region[PI+i].total_len = 4; in pm8001_alloc()
307 pm8001_ha->memoryMap.region[PI+i].alignment = 4; in pm8001_alloc()
311 pm8001_ha->memoryMap.region[OB+i].num_elements = in pm8001_alloc()
313 pm8001_ha->memoryMap.region[OB+i].element_size = 128; in pm8001_alloc()
314 pm8001_ha->memoryMap.region[OB+i].total_len = in pm8001_alloc()
316 pm8001_ha->memoryMap.region[OB+i].alignment = 128; in pm8001_alloc()
319 pm8001_ha->memoryMap.region[OB+i].num_elements = in pm8001_alloc()
321 pm8001_ha->memoryMap.region[OB+i].element_size = 64; in pm8001_alloc()
322 pm8001_ha->memoryMap.region[OB+i].total_len = in pm8001_alloc()
324 pm8001_ha->memoryMap.region[OB+i].alignment = 64; in pm8001_alloc()
329 pm8001_ha->memoryMap.region[NVMD].num_elements = 1; in pm8001_alloc()
330 pm8001_ha->memoryMap.region[NVMD].element_size = 4096; in pm8001_alloc()
331 pm8001_ha->memoryMap.region[NVMD].total_len = 4096; in pm8001_alloc()
333 pm8001_ha->memoryMap.region[DEV_MEM].num_elements = 1; in pm8001_alloc()
334 pm8001_ha->memoryMap.region[DEV_MEM].element_size = PM8001_MAX_DEVICES * in pm8001_alloc()
336 pm8001_ha->memoryMap.region[DEV_MEM].total_len = PM8001_MAX_DEVICES * in pm8001_alloc()
340 pm8001_ha->memoryMap.region[CCB_MEM].num_elements = 1; in pm8001_alloc()
341 pm8001_ha->memoryMap.region[CCB_MEM].element_size = PM8001_MAX_CCB * in pm8001_alloc()
343 pm8001_ha->memoryMap.region[CCB_MEM].total_len = PM8001_MAX_CCB * in pm8001_alloc()
347 pm8001_ha->memoryMap.region[FW_FLASH].total_len = 4096; in pm8001_alloc()
349 pm8001_ha->memoryMap.region[FORENSIC_MEM].num_elements = 1; in pm8001_alloc()
350 pm8001_ha->memoryMap.region[FORENSIC_MEM].total_len = 0x10000; in pm8001_alloc()
351 pm8001_ha->memoryMap.region[FORENSIC_MEM].element_size = 0x10000; in pm8001_alloc()
352 pm8001_ha->memoryMap.region[FORENSIC_MEM].alignment = 0x10000; in pm8001_alloc()
354 if (pm8001_mem_alloc(pm8001_ha->pdev, in pm8001_alloc()
355 &pm8001_ha->memoryMap.region[i].virt_ptr, in pm8001_alloc()
356 &pm8001_ha->memoryMap.region[i].phys_addr, in pm8001_alloc()
357 &pm8001_ha->memoryMap.region[i].phys_addr_hi, in pm8001_alloc()
358 &pm8001_ha->memoryMap.region[i].phys_addr_lo, in pm8001_alloc()
359 pm8001_ha->memoryMap.region[i].total_len, in pm8001_alloc()
360 pm8001_ha->memoryMap.region[i].alignment) != 0) { in pm8001_alloc()
361 PM8001_FAIL_DBG(pm8001_ha, in pm8001_alloc()
368 pm8001_ha->devices = pm8001_ha->memoryMap.region[DEV_MEM].virt_ptr; in pm8001_alloc()
370 pm8001_ha->devices[i].dev_type = SAS_PHY_UNUSED; in pm8001_alloc()
371 pm8001_ha->devices[i].id = i; in pm8001_alloc()
372 pm8001_ha->devices[i].device_id = PM8001_MAX_DEVICES; in pm8001_alloc()
373 pm8001_ha->devices[i].running_req = 0; in pm8001_alloc()
375 pm8001_ha->ccb_info = pm8001_ha->memoryMap.region[CCB_MEM].virt_ptr; in pm8001_alloc()
377 pm8001_ha->ccb_info[i].ccb_dma_handle = in pm8001_alloc()
378 pm8001_ha->memoryMap.region[CCB_MEM].phys_addr + in pm8001_alloc()
380 pm8001_ha->ccb_info[i].task = NULL; in pm8001_alloc()
381 pm8001_ha->ccb_info[i].ccb_tag = 0xffffffff; in pm8001_alloc()
382 pm8001_ha->ccb_info[i].device = NULL; in pm8001_alloc()
383 ++pm8001_ha->tags_num; in pm8001_alloc()
385 pm8001_ha->flags = PM8001F_INIT_TIME; in pm8001_alloc()
387 pm8001_tag_init(pm8001_ha); in pm8001_alloc()
398 static int pm8001_ioremap(struct pm8001_hba_info *pm8001_ha) in pm8001_ioremap() argument
404 pdev = pm8001_ha->pdev; in pm8001_ioremap()
418 pm8001_ha->io_mem[logicalBar].membase = in pm8001_ioremap()
420 pm8001_ha->io_mem[logicalBar].membase &= in pm8001_ioremap()
422 pm8001_ha->io_mem[logicalBar].memsize = in pm8001_ioremap()
424 pm8001_ha->io_mem[logicalBar].memvirtaddr = in pm8001_ioremap()
425 ioremap(pm8001_ha->io_mem[logicalBar].membase, in pm8001_ioremap()
426 pm8001_ha->io_mem[logicalBar].memsize); in pm8001_ioremap()
427 PM8001_INIT_DBG(pm8001_ha, in pm8001_ioremap()
430 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm8001_ioremap()
432 (u64)pm8001_ha->io_mem[logicalBar].membase, in pm8001_ioremap()
434 pm8001_ha->io_mem[logicalBar].memvirtaddr, in pm8001_ioremap()
435 pm8001_ha->io_mem[logicalBar].memsize)); in pm8001_ioremap()
437 pm8001_ha->io_mem[logicalBar].membase = 0; in pm8001_ioremap()
438 pm8001_ha->io_mem[logicalBar].memsize = 0; in pm8001_ioremap()
439 pm8001_ha->io_mem[logicalBar].memvirtaddr = 0; in pm8001_ioremap()
457 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_alloc() local
461 pm8001_ha = sha->lldd_ha; in pm8001_pci_alloc()
462 if (!pm8001_ha) in pm8001_pci_alloc()
465 pm8001_ha->pdev = pdev; in pm8001_pci_alloc()
466 pm8001_ha->dev = &pdev->dev; in pm8001_pci_alloc()
467 pm8001_ha->chip_id = ent->driver_data; in pm8001_pci_alloc()
468 pm8001_ha->chip = &pm8001_chips[pm8001_ha->chip_id]; in pm8001_pci_alloc()
469 pm8001_ha->irq = pdev->irq; in pm8001_pci_alloc()
470 pm8001_ha->sas = sha; in pm8001_pci_alloc()
471 pm8001_ha->shost = shost; in pm8001_pci_alloc()
472 pm8001_ha->id = pm8001_id++; in pm8001_pci_alloc()
473 pm8001_ha->logging_level = 0x01; in pm8001_pci_alloc()
474 sprintf(pm8001_ha->name, "%s%d", DRV_NAME, pm8001_ha->id); in pm8001_pci_alloc()
476 if (pm8001_ha->chip_id != chip_8001) in pm8001_pci_alloc()
477 pm8001_ha->iomb_size = IOMB_SIZE_SPCV; in pm8001_pci_alloc()
479 pm8001_ha->iomb_size = IOMB_SIZE_SPC; in pm8001_pci_alloc()
483 if ((!pdev->msix_cap) || (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_alloc()
484 tasklet_init(&pm8001_ha->tasklet[0], pm8001_tasklet, in pm8001_pci_alloc()
485 (unsigned long)&(pm8001_ha->irq_vector[0])); in pm8001_pci_alloc()
488 tasklet_init(&pm8001_ha->tasklet[j], pm8001_tasklet, in pm8001_pci_alloc()
489 (unsigned long)&(pm8001_ha->irq_vector[j])); in pm8001_pci_alloc()
491 pm8001_ioremap(pm8001_ha); in pm8001_pci_alloc()
492 if (!pm8001_alloc(pm8001_ha, ent)) in pm8001_pci_alloc()
493 return pm8001_ha; in pm8001_pci_alloc()
494 pm8001_free(pm8001_ha); in pm8001_pci_alloc()
589 struct pm8001_hba_info *pm8001_ha; in pm8001_post_sas_ha_init() local
592 pm8001_ha = sha->lldd_ha; in pm8001_post_sas_ha_init()
594 sha->sas_phy[i] = &pm8001_ha->phy[i].sas_phy; in pm8001_post_sas_ha_init()
595 sha->sas_port[i] = &pm8001_ha->port[i].sas_port; in pm8001_post_sas_ha_init()
598 sha->dev = pm8001_ha->dev; in pm8001_post_sas_ha_init()
601 sha->sas_addr = &pm8001_ha->sas_addr[0]; in pm8001_post_sas_ha_init()
613 static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha) in pm8001_init_sas_add() argument
626 pci_read_config_word(pm8001_ha->pdev, PCI_DEVICE_ID, &deviceid); in pm8001_init_sas_add()
627 pm8001_ha->nvmd_completion = &completion; in pm8001_init_sas_add()
629 if (pm8001_ha->chip_id == chip_8001) { in pm8001_init_sas_add()
644 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("mem alloc fail\n")); in pm8001_init_sas_add()
647 rc = PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload); in pm8001_init_sas_add()
650 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("nvmd failed\n")); in pm8001_init_sas_add()
656 if (pm8001_ha->chip_id == chip_8001) { in pm8001_init_sas_add()
658 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
661 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
664 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
668 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_init_sas_add()
669 memcpy(&pm8001_ha->phy[i].dev_sas_addr, in pm8001_init_sas_add()
670 pm8001_ha->sas_addr, SAS_ADDR_SIZE); in pm8001_init_sas_add()
671 PM8001_INIT_DBG(pm8001_ha, in pm8001_init_sas_add()
673 pm8001_ha->phy[i].dev_sas_addr)); in pm8001_init_sas_add()
677 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_init_sas_add()
678 pm8001_ha->phy[i].dev_sas_addr = 0x50010c600047f9d0ULL; in pm8001_init_sas_add()
679 pm8001_ha->phy[i].dev_sas_addr = in pm8001_init_sas_add()
681 (*(u64 *)&pm8001_ha->phy[i].dev_sas_addr)); in pm8001_init_sas_add()
683 memcpy(pm8001_ha->sas_addr, &pm8001_ha->phy[0].dev_sas_addr, in pm8001_init_sas_add()
692 static int pm8001_get_phy_settings_info(struct pm8001_hba_info *pm8001_ha) in pm8001_get_phy_settings_info() argument
701 pm8001_ha->nvmd_completion = &completion; in pm8001_get_phy_settings_info()
710 rc = PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload); in pm8001_get_phy_settings_info()
713 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("nvmd failed\n")); in pm8001_get_phy_settings_info()
717 pm8001_set_phy_profile(pm8001_ha, sizeof(u8), payload.func_specific); in pm8001_get_phy_settings_info()
729 static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha) in pm8001_setup_msix() argument
739 if (pm8001_ha->chip_id == chip_8001) { in pm8001_setup_msix()
746 max_entry = sizeof(pm8001_ha->msix_entries) / in pm8001_setup_msix()
747 sizeof(pm8001_ha->msix_entries[0]); in pm8001_setup_msix()
749 pm8001_ha->msix_entries[i].entry = i; in pm8001_setup_msix()
750 rc = pci_enable_msix_exact(pm8001_ha->pdev, pm8001_ha->msix_entries, in pm8001_setup_msix()
752 pm8001_ha->number_of_intr = number_of_intr; in pm8001_setup_msix()
756 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm8001_setup_msix()
758 rc, pm8001_ha->number_of_intr)); in pm8001_setup_msix()
763 pm8001_ha->irq_vector[i].irq_id = i; in pm8001_setup_msix()
764 pm8001_ha->irq_vector[i].drv_inst = pm8001_ha; in pm8001_setup_msix()
766 rc = request_irq(pm8001_ha->msix_entries[i].vector, in pm8001_setup_msix()
768 intr_drvname[i], &(pm8001_ha->irq_vector[i])); in pm8001_setup_msix()
771 free_irq(pm8001_ha->msix_entries[j].vector, in pm8001_setup_msix()
772 &(pm8001_ha->irq_vector[i])); in pm8001_setup_msix()
774 pci_disable_msix(pm8001_ha->pdev); in pm8001_setup_msix()
787 static u32 pm8001_request_irq(struct pm8001_hba_info *pm8001_ha) in pm8001_request_irq() argument
792 pdev = pm8001_ha->pdev; in pm8001_request_irq()
796 return pm8001_setup_msix(pm8001_ha); in pm8001_request_irq()
798 PM8001_INIT_DBG(pm8001_ha, in pm8001_request_irq()
807 DRV_NAME, SHOST_TO_SAS_HA(pm8001_ha->shost)); in pm8001_request_irq()
826 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_probe() local
871 pm8001_ha = pm8001_pci_alloc(pdev, ent, shost); in pm8001_pci_probe()
872 if (!pm8001_ha) { in pm8001_pci_probe()
876 list_add_tail(&pm8001_ha->list, &hba_list); in pm8001_pci_probe()
877 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_probe()
878 rc = PM8001_CHIP_DISP->chip_init(pm8001_ha); in pm8001_pci_probe()
880 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm8001_pci_probe()
888 rc = pm8001_request_irq(pm8001_ha); in pm8001_pci_probe()
890 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm8001_pci_probe()
895 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, 0); in pm8001_pci_probe()
896 if (pm8001_ha->chip_id != chip_8001) { in pm8001_pci_probe()
897 for (i = 1; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_probe()
898 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, i); in pm8001_pci_probe()
900 pm80xx_set_thermal_config(pm8001_ha); in pm8001_pci_probe()
903 pm8001_init_sas_add(pm8001_ha); in pm8001_pci_probe()
907 rc = pm8001_get_phy_settings_info(pm8001_ha); in pm8001_pci_probe()
915 scsi_scan_host(pm8001_ha->shost); in pm8001_pci_probe()
919 scsi_remove_host(pm8001_ha->shost); in pm8001_pci_probe()
921 pm8001_free(pm8001_ha); in pm8001_pci_probe()
937 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_remove() local
939 pm8001_ha = sha->lldd_ha; in pm8001_pci_remove()
941 sas_remove_host(pm8001_ha->shost); in pm8001_pci_remove()
942 list_del(&pm8001_ha->list); in pm8001_pci_remove()
943 scsi_remove_host(pm8001_ha->shost); in pm8001_pci_remove()
944 PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); in pm8001_pci_remove()
945 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_remove()
948 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_remove()
949 synchronize_irq(pm8001_ha->msix_entries[i].vector); in pm8001_pci_remove()
950 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_remove()
951 free_irq(pm8001_ha->msix_entries[i].vector, in pm8001_pci_remove()
952 &(pm8001_ha->irq_vector[i])); in pm8001_pci_remove()
955 free_irq(pm8001_ha->irq, sha); in pm8001_pci_remove()
959 if ((!pdev->msix_cap) || (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_remove()
960 tasklet_kill(&pm8001_ha->tasklet[0]); in pm8001_pci_remove()
963 tasklet_kill(&pm8001_ha->tasklet[j]); in pm8001_pci_remove()
965 pm8001_free(pm8001_ha); in pm8001_pci_remove()
983 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_suspend() local
986 pm8001_ha = sha->lldd_ha; in pm8001_pci_suspend()
989 scsi_block_requests(pm8001_ha->shost); in pm8001_pci_suspend()
994 PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); in pm8001_pci_suspend()
995 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_suspend()
997 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_suspend()
998 synchronize_irq(pm8001_ha->msix_entries[i].vector); in pm8001_pci_suspend()
999 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_suspend()
1000 free_irq(pm8001_ha->msix_entries[i].vector, in pm8001_pci_suspend()
1001 &(pm8001_ha->irq_vector[i])); in pm8001_pci_suspend()
1004 free_irq(pm8001_ha->irq, sha); in pm8001_pci_suspend()
1008 if ((!pdev->msix_cap) || (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_suspend()
1009 tasklet_kill(&pm8001_ha->tasklet[0]); in pm8001_pci_suspend()
1012 tasklet_kill(&pm8001_ha->tasklet[j]); in pm8001_pci_suspend()
1017 pm8001_ha->name, device_state); in pm8001_pci_suspend()
1033 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_resume() local
1038 pm8001_ha = sha->lldd_ha; in pm8001_pci_resume()
1042 "operating state [D%d]\n", pdev, pm8001_ha->name, device_state); in pm8001_pci_resume()
1050 pm8001_ha->name); in pm8001_pci_resume()
1060 if (pm8001_ha->chip_id == chip_8001) { in pm8001_pci_resume()
1061 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_resume()
1062 PM8001_INIT_DBG(pm8001_ha, in pm8001_pci_resume()
1065 rc = PM8001_CHIP_DISP->chip_init(pm8001_ha); in pm8001_pci_resume()
1070 PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); in pm8001_pci_resume()
1072 rc = pm8001_request_irq(pm8001_ha); in pm8001_pci_resume()
1077 if ((!pdev->msix_cap) || (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_resume()
1078 tasklet_init(&pm8001_ha->tasklet[0], pm8001_tasklet, in pm8001_pci_resume()
1079 (unsigned long)&(pm8001_ha->irq_vector[0])); in pm8001_pci_resume()
1082 tasklet_init(&pm8001_ha->tasklet[j], pm8001_tasklet, in pm8001_pci_resume()
1083 (unsigned long)&(pm8001_ha->irq_vector[j])); in pm8001_pci_resume()
1085 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, 0); in pm8001_pci_resume()
1086 if (pm8001_ha->chip_id != chip_8001) { in pm8001_pci_resume()
1087 for (i = 1; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_resume()
1088 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, i); in pm8001_pci_resume()
1090 pm8001_ha->flags = PM8001F_RUN_TIME; in pm8001_pci_resume()
1091 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_pci_resume()
1092 pm8001_ha->phy[i].enable_completion = &completion; in pm8001_pci_resume()
1093 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, i); in pm8001_pci_resume()
1100 scsi_remove_host(pm8001_ha->shost); in pm8001_pci_resume()