Lines Matching refs:pm8001_ha
120 static void pm8001_phy_init(struct pm8001_hba_info *pm8001_ha, int phy_id) in pm8001_phy_init() argument
122 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in pm8001_phy_init()
125 phy->pm8001_ha = pm8001_ha; in pm8001_phy_init()
126 sas_phy->enabled = (phy_id < pm8001_ha->chip->n_phy) ? 1 : 0; in pm8001_phy_init()
135 sas_phy->sas_addr = &pm8001_ha->sas_addr[0]; in pm8001_phy_init()
137 sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata; in pm8001_phy_init()
146 static void pm8001_free(struct pm8001_hba_info *pm8001_ha) in pm8001_free() argument
150 if (!pm8001_ha) in pm8001_free()
154 if (pm8001_ha->memoryMap.region[i].virt_ptr != NULL) { in pm8001_free()
155 pci_free_consistent(pm8001_ha->pdev, in pm8001_free()
156 (pm8001_ha->memoryMap.region[i].total_len + in pm8001_free()
157 pm8001_ha->memoryMap.region[i].alignment), in pm8001_free()
158 pm8001_ha->memoryMap.region[i].virt_ptr, in pm8001_free()
159 pm8001_ha->memoryMap.region[i].phys_addr); in pm8001_free()
162 PM8001_CHIP_DISP->chip_iounmap(pm8001_ha); in pm8001_free()
163 if (pm8001_ha->shost) in pm8001_free()
164 scsi_host_put(pm8001_ha->shost); in pm8001_free()
166 kfree(pm8001_ha->tags); in pm8001_free()
167 kfree(pm8001_ha); in pm8001_free()
179 struct pm8001_hba_info *pm8001_ha; in pm8001_tasklet() local
183 pm8001_ha = irq_vector->drv_inst; in pm8001_tasklet()
184 if (unlikely(!pm8001_ha)) in pm8001_tasklet()
186 PM8001_CHIP_DISP->isr(pm8001_ha, irq_vector->irq_id); in pm8001_tasklet()
200 struct pm8001_hba_info *pm8001_ha; in pm8001_interrupt_handler_msix() local
203 pm8001_ha = irq_vector->drv_inst; in pm8001_interrupt_handler_msix()
205 if (unlikely(!pm8001_ha)) in pm8001_interrupt_handler_msix()
207 if (!PM8001_CHIP_DISP->is_our_interupt(pm8001_ha)) in pm8001_interrupt_handler_msix()
210 tasklet_schedule(&pm8001_ha->tasklet[irq_vector->irq_id]); in pm8001_interrupt_handler_msix()
212 ret = PM8001_CHIP_DISP->isr(pm8001_ha, irq_vector->irq_id); in pm8001_interrupt_handler_msix()
224 struct pm8001_hba_info *pm8001_ha; in pm8001_interrupt_handler_intx() local
227 pm8001_ha = sha->lldd_ha; in pm8001_interrupt_handler_intx()
228 if (unlikely(!pm8001_ha)) in pm8001_interrupt_handler_intx()
230 if (!PM8001_CHIP_DISP->is_our_interupt(pm8001_ha)) in pm8001_interrupt_handler_intx()
234 tasklet_schedule(&pm8001_ha->tasklet[0]); in pm8001_interrupt_handler_intx()
236 ret = PM8001_CHIP_DISP->isr(pm8001_ha, 0); in pm8001_interrupt_handler_intx()
246 static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha, in pm8001_alloc() argument
250 spin_lock_init(&pm8001_ha->lock); in pm8001_alloc()
251 spin_lock_init(&pm8001_ha->bitmap_lock); in pm8001_alloc()
252 PM8001_INIT_DBG(pm8001_ha, in pm8001_alloc()
254 pm8001_ha->chip->n_phy)); in pm8001_alloc()
255 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_alloc()
256 pm8001_phy_init(pm8001_ha, i); in pm8001_alloc()
257 pm8001_ha->port[i].wide_port_phymap = 0; in pm8001_alloc()
258 pm8001_ha->port[i].port_attached = 0; in pm8001_alloc()
259 pm8001_ha->port[i].port_state = 0; in pm8001_alloc()
260 INIT_LIST_HEAD(&pm8001_ha->port[i].list); in pm8001_alloc()
263 pm8001_ha->tags = kzalloc(PM8001_MAX_CCB, GFP_KERNEL); in pm8001_alloc()
264 if (!pm8001_ha->tags) in pm8001_alloc()
267 pm8001_ha->memoryMap.region[AAP1].num_elements = 1; in pm8001_alloc()
268 pm8001_ha->memoryMap.region[AAP1].element_size = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
269 pm8001_ha->memoryMap.region[AAP1].total_len = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
270 pm8001_ha->memoryMap.region[AAP1].alignment = 32; in pm8001_alloc()
273 pm8001_ha->memoryMap.region[IOP].num_elements = 1; in pm8001_alloc()
274 pm8001_ha->memoryMap.region[IOP].element_size = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
275 pm8001_ha->memoryMap.region[IOP].total_len = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
276 pm8001_ha->memoryMap.region[IOP].alignment = 32; in pm8001_alloc()
280 pm8001_ha->memoryMap.region[CI+i].num_elements = 1; in pm8001_alloc()
281 pm8001_ha->memoryMap.region[CI+i].element_size = 4; in pm8001_alloc()
282 pm8001_ha->memoryMap.region[CI+i].total_len = 4; in pm8001_alloc()
283 pm8001_ha->memoryMap.region[CI+i].alignment = 4; in pm8001_alloc()
287 pm8001_ha->memoryMap.region[IB+i].num_elements = in pm8001_alloc()
289 pm8001_ha->memoryMap.region[IB+i].element_size = 128; in pm8001_alloc()
290 pm8001_ha->memoryMap.region[IB+i].total_len = in pm8001_alloc()
292 pm8001_ha->memoryMap.region[IB+i].alignment = 128; in pm8001_alloc()
294 pm8001_ha->memoryMap.region[IB+i].num_elements = in pm8001_alloc()
296 pm8001_ha->memoryMap.region[IB+i].element_size = 64; in pm8001_alloc()
297 pm8001_ha->memoryMap.region[IB+i].total_len = in pm8001_alloc()
299 pm8001_ha->memoryMap.region[IB+i].alignment = 64; in pm8001_alloc()
305 pm8001_ha->memoryMap.region[PI+i].num_elements = 1; in pm8001_alloc()
306 pm8001_ha->memoryMap.region[PI+i].element_size = 4; in pm8001_alloc()
307 pm8001_ha->memoryMap.region[PI+i].total_len = 4; in pm8001_alloc()
308 pm8001_ha->memoryMap.region[PI+i].alignment = 4; in pm8001_alloc()
312 pm8001_ha->memoryMap.region[OB+i].num_elements = in pm8001_alloc()
314 pm8001_ha->memoryMap.region[OB+i].element_size = 128; in pm8001_alloc()
315 pm8001_ha->memoryMap.region[OB+i].total_len = in pm8001_alloc()
317 pm8001_ha->memoryMap.region[OB+i].alignment = 128; in pm8001_alloc()
320 pm8001_ha->memoryMap.region[OB+i].num_elements = in pm8001_alloc()
322 pm8001_ha->memoryMap.region[OB+i].element_size = 64; in pm8001_alloc()
323 pm8001_ha->memoryMap.region[OB+i].total_len = in pm8001_alloc()
325 pm8001_ha->memoryMap.region[OB+i].alignment = 64; in pm8001_alloc()
330 pm8001_ha->memoryMap.region[NVMD].num_elements = 1; in pm8001_alloc()
331 pm8001_ha->memoryMap.region[NVMD].element_size = 4096; in pm8001_alloc()
332 pm8001_ha->memoryMap.region[NVMD].total_len = 4096; in pm8001_alloc()
334 pm8001_ha->memoryMap.region[DEV_MEM].num_elements = 1; in pm8001_alloc()
335 pm8001_ha->memoryMap.region[DEV_MEM].element_size = PM8001_MAX_DEVICES * in pm8001_alloc()
337 pm8001_ha->memoryMap.region[DEV_MEM].total_len = PM8001_MAX_DEVICES * in pm8001_alloc()
341 pm8001_ha->memoryMap.region[CCB_MEM].num_elements = 1; in pm8001_alloc()
342 pm8001_ha->memoryMap.region[CCB_MEM].element_size = PM8001_MAX_CCB * in pm8001_alloc()
344 pm8001_ha->memoryMap.region[CCB_MEM].total_len = PM8001_MAX_CCB * in pm8001_alloc()
348 pm8001_ha->memoryMap.region[FW_FLASH].total_len = 4096; in pm8001_alloc()
350 pm8001_ha->memoryMap.region[FORENSIC_MEM].num_elements = 1; in pm8001_alloc()
351 pm8001_ha->memoryMap.region[FORENSIC_MEM].total_len = 0x10000; in pm8001_alloc()
352 pm8001_ha->memoryMap.region[FORENSIC_MEM].element_size = 0x10000; in pm8001_alloc()
353 pm8001_ha->memoryMap.region[FORENSIC_MEM].alignment = 0x10000; in pm8001_alloc()
355 if (pm8001_mem_alloc(pm8001_ha->pdev, in pm8001_alloc()
356 &pm8001_ha->memoryMap.region[i].virt_ptr, in pm8001_alloc()
357 &pm8001_ha->memoryMap.region[i].phys_addr, in pm8001_alloc()
358 &pm8001_ha->memoryMap.region[i].phys_addr_hi, in pm8001_alloc()
359 &pm8001_ha->memoryMap.region[i].phys_addr_lo, in pm8001_alloc()
360 pm8001_ha->memoryMap.region[i].total_len, in pm8001_alloc()
361 pm8001_ha->memoryMap.region[i].alignment) != 0) { in pm8001_alloc()
362 PM8001_FAIL_DBG(pm8001_ha, in pm8001_alloc()
369 pm8001_ha->devices = pm8001_ha->memoryMap.region[DEV_MEM].virt_ptr; in pm8001_alloc()
371 pm8001_ha->devices[i].dev_type = SAS_PHY_UNUSED; in pm8001_alloc()
372 pm8001_ha->devices[i].id = i; in pm8001_alloc()
373 pm8001_ha->devices[i].device_id = PM8001_MAX_DEVICES; in pm8001_alloc()
374 pm8001_ha->devices[i].running_req = 0; in pm8001_alloc()
376 pm8001_ha->ccb_info = pm8001_ha->memoryMap.region[CCB_MEM].virt_ptr; in pm8001_alloc()
378 pm8001_ha->ccb_info[i].ccb_dma_handle = in pm8001_alloc()
379 pm8001_ha->memoryMap.region[CCB_MEM].phys_addr + in pm8001_alloc()
381 pm8001_ha->ccb_info[i].task = NULL; in pm8001_alloc()
382 pm8001_ha->ccb_info[i].ccb_tag = 0xffffffff; in pm8001_alloc()
383 pm8001_ha->ccb_info[i].device = NULL; in pm8001_alloc()
384 ++pm8001_ha->tags_num; in pm8001_alloc()
386 pm8001_ha->flags = PM8001F_INIT_TIME; in pm8001_alloc()
388 pm8001_tag_init(pm8001_ha); in pm8001_alloc()
399 static int pm8001_ioremap(struct pm8001_hba_info *pm8001_ha) in pm8001_ioremap() argument
405 pdev = pm8001_ha->pdev; in pm8001_ioremap()
419 pm8001_ha->io_mem[logicalBar].membase = in pm8001_ioremap()
421 pm8001_ha->io_mem[logicalBar].membase &= in pm8001_ioremap()
423 pm8001_ha->io_mem[logicalBar].memsize = in pm8001_ioremap()
425 pm8001_ha->io_mem[logicalBar].memvirtaddr = in pm8001_ioremap()
426 ioremap(pm8001_ha->io_mem[logicalBar].membase, in pm8001_ioremap()
427 pm8001_ha->io_mem[logicalBar].memsize); in pm8001_ioremap()
428 PM8001_INIT_DBG(pm8001_ha, in pm8001_ioremap()
431 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm8001_ioremap()
433 (u64)pm8001_ha->io_mem[logicalBar].membase, in pm8001_ioremap()
435 pm8001_ha->io_mem[logicalBar].memvirtaddr, in pm8001_ioremap()
436 pm8001_ha->io_mem[logicalBar].memsize)); in pm8001_ioremap()
438 pm8001_ha->io_mem[logicalBar].membase = 0; in pm8001_ioremap()
439 pm8001_ha->io_mem[logicalBar].memsize = 0; in pm8001_ioremap()
440 pm8001_ha->io_mem[logicalBar].memvirtaddr = 0; in pm8001_ioremap()
458 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_alloc() local
462 pm8001_ha = sha->lldd_ha; in pm8001_pci_alloc()
463 if (!pm8001_ha) in pm8001_pci_alloc()
466 pm8001_ha->pdev = pdev; in pm8001_pci_alloc()
467 pm8001_ha->dev = &pdev->dev; in pm8001_pci_alloc()
468 pm8001_ha->chip_id = ent->driver_data; in pm8001_pci_alloc()
469 pm8001_ha->chip = &pm8001_chips[pm8001_ha->chip_id]; in pm8001_pci_alloc()
470 pm8001_ha->irq = pdev->irq; in pm8001_pci_alloc()
471 pm8001_ha->sas = sha; in pm8001_pci_alloc()
472 pm8001_ha->shost = shost; in pm8001_pci_alloc()
473 pm8001_ha->id = pm8001_id++; in pm8001_pci_alloc()
474 pm8001_ha->logging_level = 0x01; in pm8001_pci_alloc()
475 sprintf(pm8001_ha->name, "%s%d", DRV_NAME, pm8001_ha->id); in pm8001_pci_alloc()
477 if (pm8001_ha->chip_id != chip_8001) in pm8001_pci_alloc()
478 pm8001_ha->iomb_size = IOMB_SIZE_SPCV; in pm8001_pci_alloc()
480 pm8001_ha->iomb_size = IOMB_SIZE_SPC; in pm8001_pci_alloc()
485 || (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_alloc()
486 tasklet_init(&pm8001_ha->tasklet[0], pm8001_tasklet, in pm8001_pci_alloc()
487 (unsigned long)&(pm8001_ha->irq_vector[0])); in pm8001_pci_alloc()
490 tasklet_init(&pm8001_ha->tasklet[j], pm8001_tasklet, in pm8001_pci_alloc()
491 (unsigned long)&(pm8001_ha->irq_vector[j])); in pm8001_pci_alloc()
493 pm8001_ioremap(pm8001_ha); in pm8001_pci_alloc()
494 if (!pm8001_alloc(pm8001_ha, ent)) in pm8001_pci_alloc()
495 return pm8001_ha; in pm8001_pci_alloc()
496 pm8001_free(pm8001_ha); in pm8001_pci_alloc()
591 struct pm8001_hba_info *pm8001_ha; in pm8001_post_sas_ha_init() local
594 pm8001_ha = sha->lldd_ha; in pm8001_post_sas_ha_init()
596 sha->sas_phy[i] = &pm8001_ha->phy[i].sas_phy; in pm8001_post_sas_ha_init()
597 sha->sas_port[i] = &pm8001_ha->port[i].sas_port; in pm8001_post_sas_ha_init()
600 sha->dev = pm8001_ha->dev; in pm8001_post_sas_ha_init()
603 sha->sas_addr = &pm8001_ha->sas_addr[0]; in pm8001_post_sas_ha_init()
615 static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha) in pm8001_init_sas_add() argument
628 pci_read_config_word(pm8001_ha->pdev, PCI_DEVICE_ID, &deviceid); in pm8001_init_sas_add()
629 pm8001_ha->nvmd_completion = &completion; in pm8001_init_sas_add()
631 if (pm8001_ha->chip_id == chip_8001) { in pm8001_init_sas_add()
639 } else if ((pm8001_ha->chip_id == chip_8070 || in pm8001_init_sas_add()
640 pm8001_ha->chip_id == chip_8072) && in pm8001_init_sas_add()
641 pm8001_ha->pdev->subsystem_vendor == PCI_VENDOR_ID_ATTO) { in pm8001_init_sas_add()
651 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("mem alloc fail\n")); in pm8001_init_sas_add()
654 rc = PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload); in pm8001_init_sas_add()
657 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("nvmd failed\n")); in pm8001_init_sas_add()
663 if (pm8001_ha->chip_id == chip_8001) { in pm8001_init_sas_add()
665 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
668 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
670 } else if ((pm8001_ha->chip_id == chip_8070 || in pm8001_init_sas_add()
671 pm8001_ha->chip_id == chip_8072) && in pm8001_init_sas_add()
672 pm8001_ha->pdev->subsystem_vendor == PCI_VENDOR_ID_ATTO) { in pm8001_init_sas_add()
673 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
676 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
680 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_init_sas_add()
681 memcpy(&pm8001_ha->phy[i].dev_sas_addr, in pm8001_init_sas_add()
682 pm8001_ha->sas_addr, SAS_ADDR_SIZE); in pm8001_init_sas_add()
683 PM8001_INIT_DBG(pm8001_ha, in pm8001_init_sas_add()
685 pm8001_ha->phy[i].dev_sas_addr)); in pm8001_init_sas_add()
689 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_init_sas_add()
690 pm8001_ha->phy[i].dev_sas_addr = 0x50010c600047f9d0ULL; in pm8001_init_sas_add()
691 pm8001_ha->phy[i].dev_sas_addr = in pm8001_init_sas_add()
693 (*(u64 *)&pm8001_ha->phy[i].dev_sas_addr)); in pm8001_init_sas_add()
695 memcpy(pm8001_ha->sas_addr, &pm8001_ha->phy[0].dev_sas_addr, in pm8001_init_sas_add()
704 static int pm8001_get_phy_settings_info(struct pm8001_hba_info *pm8001_ha) in pm8001_get_phy_settings_info() argument
713 pm8001_ha->nvmd_completion = &completion; in pm8001_get_phy_settings_info()
722 rc = PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload); in pm8001_get_phy_settings_info()
725 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("nvmd failed\n")); in pm8001_get_phy_settings_info()
729 pm8001_set_phy_profile(pm8001_ha, sizeof(u8), payload.func_specific); in pm8001_get_phy_settings_info()
753 void pm8001_get_internal_phy_settings(struct pm8001_hba_info *pm8001_ha, in pm8001_get_internal_phy_settings() argument
773 void pm8001_get_external_phy_settings(struct pm8001_hba_info *pm8001_ha, in pm8001_get_external_phy_settings() argument
793 void pm8001_get_phy_mask(struct pm8001_hba_info *pm8001_ha, int *phymask) in pm8001_get_phy_mask() argument
795 switch (pm8001_ha->pdev->subsystem_device) { in pm8001_get_phy_mask()
819 PM8001_INIT_DBG(pm8001_ha, in pm8001_get_phy_mask()
821 pm8001_ha->pdev->subsystem_device)); in pm8001_get_phy_mask()
830 int pm8001_set_phy_settings_ven_117c_12G(struct pm8001_hba_info *pm8001_ha) in pm8001_set_phy_settings_ven_117c_12G() argument
840 pm8001_get_internal_phy_settings(pm8001_ha, &phycfg_int); in pm8001_set_phy_settings_ven_117c_12G()
841 pm8001_get_external_phy_settings(pm8001_ha, &phycfg_ext); in pm8001_set_phy_settings_ven_117c_12G()
842 pm8001_get_phy_mask(pm8001_ha, &phymask); in pm8001_set_phy_settings_ven_117c_12G()
844 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_set_phy_settings_ven_117c_12G()
846 pm8001_set_phy_profile_single(pm8001_ha, i, in pm8001_set_phy_settings_ven_117c_12G()
851 pm8001_set_phy_profile_single(pm8001_ha, i, in pm8001_set_phy_settings_ven_117c_12G()
864 static int pm8001_configure_phy_settings(struct pm8001_hba_info *pm8001_ha) in pm8001_configure_phy_settings() argument
866 switch (pm8001_ha->pdev->subsystem_vendor) { in pm8001_configure_phy_settings()
868 if (pm8001_ha->pdev->device == 0x0042) /* 6Gb */ in pm8001_configure_phy_settings()
871 return pm8001_set_phy_settings_ven_117c_12G(pm8001_ha); in pm8001_configure_phy_settings()
878 return pm8001_get_phy_settings_info(pm8001_ha); in pm8001_configure_phy_settings()
888 static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha) in pm8001_setup_msix() argument
898 if (pm8001_ha->chip_id == chip_8001) { in pm8001_setup_msix()
905 max_entry = sizeof(pm8001_ha->msix_entries) / in pm8001_setup_msix()
906 sizeof(pm8001_ha->msix_entries[0]); in pm8001_setup_msix()
908 pm8001_ha->msix_entries[i].entry = i; in pm8001_setup_msix()
909 rc = pci_enable_msix_exact(pm8001_ha->pdev, pm8001_ha->msix_entries, in pm8001_setup_msix()
911 pm8001_ha->number_of_intr = number_of_intr; in pm8001_setup_msix()
915 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm8001_setup_msix()
917 rc, pm8001_ha->number_of_intr)); in pm8001_setup_msix()
922 pm8001_ha->irq_vector[i].irq_id = i; in pm8001_setup_msix()
923 pm8001_ha->irq_vector[i].drv_inst = pm8001_ha; in pm8001_setup_msix()
925 rc = request_irq(pm8001_ha->msix_entries[i].vector, in pm8001_setup_msix()
927 intr_drvname[i], &(pm8001_ha->irq_vector[i])); in pm8001_setup_msix()
930 free_irq(pm8001_ha->msix_entries[j].vector, in pm8001_setup_msix()
931 &(pm8001_ha->irq_vector[i])); in pm8001_setup_msix()
933 pci_disable_msix(pm8001_ha->pdev); in pm8001_setup_msix()
946 static u32 pm8001_request_irq(struct pm8001_hba_info *pm8001_ha) in pm8001_request_irq() argument
951 pdev = pm8001_ha->pdev; in pm8001_request_irq()
955 return pm8001_setup_msix(pm8001_ha); in pm8001_request_irq()
957 PM8001_INIT_DBG(pm8001_ha, in pm8001_request_irq()
965 pm8001_ha->irq_vector[0].irq_id = 0; in pm8001_request_irq()
966 pm8001_ha->irq_vector[0].drv_inst = pm8001_ha; in pm8001_request_irq()
968 DRV_NAME, SHOST_TO_SAS_HA(pm8001_ha->shost)); in pm8001_request_irq()
987 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_probe() local
1032 pm8001_ha = pm8001_pci_alloc(pdev, ent, shost); in pm8001_pci_probe()
1033 if (!pm8001_ha) { in pm8001_pci_probe()
1037 list_add_tail(&pm8001_ha->list, &hba_list); in pm8001_pci_probe()
1038 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_probe()
1039 rc = PM8001_CHIP_DISP->chip_init(pm8001_ha); in pm8001_pci_probe()
1041 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm8001_pci_probe()
1049 rc = pm8001_request_irq(pm8001_ha); in pm8001_pci_probe()
1051 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm8001_pci_probe()
1056 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, 0); in pm8001_pci_probe()
1057 if (pm8001_ha->chip_id != chip_8001) { in pm8001_pci_probe()
1058 for (i = 1; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_probe()
1059 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, i); in pm8001_pci_probe()
1061 pm80xx_set_thermal_config(pm8001_ha); in pm8001_pci_probe()
1064 pm8001_init_sas_add(pm8001_ha); in pm8001_pci_probe()
1066 if (pm8001_configure_phy_settings(pm8001_ha)) in pm8001_pci_probe()
1073 scsi_scan_host(pm8001_ha->shost); in pm8001_pci_probe()
1077 scsi_remove_host(pm8001_ha->shost); in pm8001_pci_probe()
1079 pm8001_free(pm8001_ha); in pm8001_pci_probe()
1095 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_remove() local
1097 pm8001_ha = sha->lldd_ha; in pm8001_pci_remove()
1098 scsi_remove_host(pm8001_ha->shost); in pm8001_pci_remove()
1100 sas_remove_host(pm8001_ha->shost); in pm8001_pci_remove()
1101 list_del(&pm8001_ha->list); in pm8001_pci_remove()
1102 PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); in pm8001_pci_remove()
1103 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_remove()
1106 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_remove()
1107 synchronize_irq(pm8001_ha->msix_entries[i].vector); in pm8001_pci_remove()
1108 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_remove()
1109 free_irq(pm8001_ha->msix_entries[i].vector, in pm8001_pci_remove()
1110 &(pm8001_ha->irq_vector[i])); in pm8001_pci_remove()
1113 free_irq(pm8001_ha->irq, sha); in pm8001_pci_remove()
1118 (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_remove()
1119 tasklet_kill(&pm8001_ha->tasklet[0]); in pm8001_pci_remove()
1122 tasklet_kill(&pm8001_ha->tasklet[j]); in pm8001_pci_remove()
1124 pm8001_free(pm8001_ha); in pm8001_pci_remove()
1142 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_suspend() local
1145 pm8001_ha = sha->lldd_ha; in pm8001_pci_suspend()
1148 scsi_block_requests(pm8001_ha->shost); in pm8001_pci_suspend()
1153 PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); in pm8001_pci_suspend()
1154 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_suspend()
1156 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_suspend()
1157 synchronize_irq(pm8001_ha->msix_entries[i].vector); in pm8001_pci_suspend()
1158 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_suspend()
1159 free_irq(pm8001_ha->msix_entries[i].vector, in pm8001_pci_suspend()
1160 &(pm8001_ha->irq_vector[i])); in pm8001_pci_suspend()
1163 free_irq(pm8001_ha->irq, sha); in pm8001_pci_suspend()
1168 (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_suspend()
1169 tasklet_kill(&pm8001_ha->tasklet[0]); in pm8001_pci_suspend()
1172 tasklet_kill(&pm8001_ha->tasklet[j]); in pm8001_pci_suspend()
1177 pm8001_ha->name, device_state); in pm8001_pci_suspend()
1193 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_resume() local
1198 pm8001_ha = sha->lldd_ha; in pm8001_pci_resume()
1202 "operating state [D%d]\n", pdev, pm8001_ha->name, device_state); in pm8001_pci_resume()
1210 pm8001_ha->name); in pm8001_pci_resume()
1220 if (pm8001_ha->chip_id == chip_8001) { in pm8001_pci_resume()
1221 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_resume()
1222 PM8001_INIT_DBG(pm8001_ha, in pm8001_pci_resume()
1225 rc = PM8001_CHIP_DISP->chip_init(pm8001_ha); in pm8001_pci_resume()
1230 PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); in pm8001_pci_resume()
1232 rc = pm8001_request_irq(pm8001_ha); in pm8001_pci_resume()
1238 (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_resume()
1239 tasklet_init(&pm8001_ha->tasklet[0], pm8001_tasklet, in pm8001_pci_resume()
1240 (unsigned long)&(pm8001_ha->irq_vector[0])); in pm8001_pci_resume()
1243 tasklet_init(&pm8001_ha->tasklet[j], pm8001_tasklet, in pm8001_pci_resume()
1244 (unsigned long)&(pm8001_ha->irq_vector[j])); in pm8001_pci_resume()
1246 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, 0); in pm8001_pci_resume()
1247 if (pm8001_ha->chip_id != chip_8001) { in pm8001_pci_resume()
1248 for (i = 1; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_resume()
1249 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, i); in pm8001_pci_resume()
1257 if (pm8001_ha->chip_id == chip_8070 || in pm8001_pci_resume()
1258 pm8001_ha->chip_id == chip_8072) { in pm8001_pci_resume()
1264 pm8001_ha->flags = PM8001F_RUN_TIME; in pm8001_pci_resume()
1265 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_pci_resume()
1266 pm8001_ha->phy[i].enable_completion = &completion; in pm8001_pci_resume()
1267 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, i); in pm8001_pci_resume()
1274 scsi_remove_host(pm8001_ha->shost); in pm8001_pci_resume()