Lines Matching refs:pm8001_ha
65 void pm8001_tag_free(struct pm8001_hba_info *pm8001_ha, u32 tag) in pm8001_tag_free() argument
67 void *bitmap = pm8001_ha->tags; in pm8001_tag_free()
76 inline int pm8001_tag_alloc(struct pm8001_hba_info *pm8001_ha, u32 *tag_out) in pm8001_tag_alloc() argument
79 void *bitmap = pm8001_ha->tags; in pm8001_tag_alloc()
82 spin_lock_irqsave(&pm8001_ha->bitmap_lock, flags); in pm8001_tag_alloc()
83 tag = find_first_zero_bit(bitmap, pm8001_ha->tags_num); in pm8001_tag_alloc()
84 if (tag >= pm8001_ha->tags_num) { in pm8001_tag_alloc()
85 spin_unlock_irqrestore(&pm8001_ha->bitmap_lock, flags); in pm8001_tag_alloc()
89 spin_unlock_irqrestore(&pm8001_ha->bitmap_lock, flags); in pm8001_tag_alloc()
94 void pm8001_tag_init(struct pm8001_hba_info *pm8001_ha) in pm8001_tag_init() argument
97 for (i = 0; i < pm8001_ha->tags_num; ++i) in pm8001_tag_init()
98 pm8001_tag_free(pm8001_ha, i); in pm8001_tag_init()
141 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_find_ha_by_dev() local
142 return pm8001_ha; in pm8001_find_ha_by_dev()
158 struct pm8001_hba_info *pm8001_ha = NULL; in pm8001_phy_control() local
162 pm8001_ha = sas_phy->ha->lldd_ha; in pm8001_phy_control()
163 pm8001_ha->phy[phy_id].enable_completion = &completion; in pm8001_phy_control()
168 pm8001_ha->phy[phy_id].minimum_linkrate = in pm8001_phy_control()
172 pm8001_ha->phy[phy_id].maximum_linkrate = in pm8001_phy_control()
175 if (pm8001_ha->phy[phy_id].phy_state == 0) { in pm8001_phy_control()
176 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, phy_id); in pm8001_phy_control()
179 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
183 if (pm8001_ha->phy[phy_id].phy_state == 0) { in pm8001_phy_control()
184 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, phy_id); in pm8001_phy_control()
187 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
191 if (pm8001_ha->phy[phy_id].phy_state == 0) { in pm8001_phy_control()
192 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, phy_id); in pm8001_phy_control()
195 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
199 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
203 PM8001_CHIP_DISP->phy_stop_req(pm8001_ha, phy_id); in pm8001_phy_control()
206 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_phy_control()
207 if (pm8001_ha->chip_id == chip_8001) { in pm8001_phy_control()
208 if (-1 == pm8001_bar4_shift(pm8001_ha, in pm8001_phy_control()
210 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_phy_control()
217 pm8001_ha->io_mem[2].memvirtaddr) in pm8001_phy_control()
225 if (pm8001_ha->chip_id == chip_8001) in pm8001_phy_control()
226 pm8001_bar4_shift(pm8001_ha, 0); in pm8001_phy_control()
227 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_phy_control()
244 struct pm8001_hba_info *pm8001_ha; in pm8001_scan_start() local
246 pm8001_ha = sha->lldd_ha; in pm8001_scan_start()
248 if (pm8001_ha->chip_id == chip_8001) in pm8001_scan_start()
249 PM8001_CHIP_DISP->sas_re_init_req(pm8001_ha); in pm8001_scan_start()
250 for (i = 0; i < pm8001_ha->chip->n_phy; ++i) in pm8001_scan_start()
251 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, i); in pm8001_scan_start()
272 static int pm8001_task_prep_smp(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_smp() argument
275 return PM8001_CHIP_DISP->smp_req(pm8001_ha, ccb); in pm8001_task_prep_smp()
296 static int pm8001_task_prep_ata(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_ata() argument
299 return PM8001_CHIP_DISP->sata_req(pm8001_ha, ccb); in pm8001_task_prep_ata()
308 static int pm8001_task_prep_ssp_tm(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_ssp_tm() argument
311 return PM8001_CHIP_DISP->ssp_tm_req(pm8001_ha, ccb, tmf); in pm8001_task_prep_ssp_tm()
319 static int pm8001_task_prep_ssp(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_ssp() argument
322 return PM8001_CHIP_DISP->ssp_io_req(pm8001_ha, ccb); in pm8001_task_prep_ssp()
357 struct pm8001_hba_info *pm8001_ha; in pm8001_task_exec() local
373 pm8001_ha = pm8001_find_ha_by_dev(task->dev); in pm8001_task_exec()
374 PM8001_IO_DBG(pm8001_ha, pm8001_printk("pm8001_task_exec device \n ")); in pm8001_task_exec()
375 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_task_exec()
379 port = &pm8001_ha->port[sas_find_local_port_id(dev)]; in pm8001_task_exec()
386 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_task_exec()
388 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_task_exec()
398 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm8001_task_exec()
401 ccb = &pm8001_ha->ccb_info[tag]; in pm8001_task_exec()
405 n_elem = dma_map_sg(pm8001_ha->dev, in pm8001_task_exec()
425 rc = pm8001_task_prep_smp(pm8001_ha, ccb); in pm8001_task_exec()
429 rc = pm8001_task_prep_ssp_tm(pm8001_ha, in pm8001_task_exec()
432 rc = pm8001_task_prep_ssp(pm8001_ha, ccb); in pm8001_task_exec()
436 rc = pm8001_task_prep_ata(pm8001_ha, ccb); in pm8001_task_exec()
439 dev_printk(KERN_ERR, pm8001_ha->dev, in pm8001_task_exec()
447 PM8001_IO_DBG(pm8001_ha, in pm8001_task_exec()
461 pm8001_tag_free(pm8001_ha, tag); in pm8001_task_exec()
463 dev_printk(KERN_ERR, pm8001_ha->dev, "pm8001 exec failed[%d]!\n", rc); in pm8001_task_exec()
466 dma_unmap_sg(pm8001_ha->dev, t->scatter, n_elem, in pm8001_task_exec()
469 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_task_exec()
491 void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha, in pm8001_ccb_task_free() argument
498 dma_unmap_sg(pm8001_ha->dev, task->scatter, in pm8001_ccb_task_free()
503 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_resp, 1, in pm8001_ccb_task_free()
505 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_req, 1, in pm8001_ccb_task_free()
520 pm8001_tag_free(pm8001_ha, ccb_idx); in pm8001_ccb_task_free()
527 struct pm8001_device *pm8001_alloc_dev(struct pm8001_hba_info *pm8001_ha) in pm8001_alloc_dev() argument
531 if (pm8001_ha->devices[dev].dev_type == SAS_PHY_UNUSED) { in pm8001_alloc_dev()
532 pm8001_ha->devices[dev].id = dev; in pm8001_alloc_dev()
533 return &pm8001_ha->devices[dev]; in pm8001_alloc_dev()
537 PM8001_FAIL_DBG(pm8001_ha, in pm8001_alloc_dev()
547 struct pm8001_device *pm8001_find_dev(struct pm8001_hba_info *pm8001_ha, in pm8001_find_dev() argument
552 if (pm8001_ha->devices[dev].device_id == device_id) in pm8001_find_dev()
553 return &pm8001_ha->devices[dev]; in pm8001_find_dev()
556 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("NO MATCHING " in pm8001_find_dev()
588 struct pm8001_hba_info *pm8001_ha = NULL; in pm8001_dev_found_notify() local
593 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_dev_found_notify()
594 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_dev_found_notify()
596 pm8001_device = pm8001_alloc_dev(pm8001_ha); in pm8001_dev_found_notify()
618 PM8001_FAIL_DBG(pm8001_ha, in pm8001_dev_found_notify()
631 PM8001_DISC_DBG(pm8001_ha, pm8001_printk("Found device\n")); in pm8001_dev_found_notify()
632 PM8001_CHIP_DISP->reg_dev_req(pm8001_ha, pm8001_device, flag); in pm8001_dev_found_notify()
633 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_found_notify()
637 pm8001_ha->flags = PM8001F_RUN_TIME; in pm8001_dev_found_notify()
640 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_found_notify()
681 struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_exec_internal_tmf_task() local
703 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_tmf_task()
709 if (pm8001_ha->chip_id != chip_8001) { in pm8001_exec_internal_tmf_task()
711 PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_exec_internal_tmf_task()
719 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_tmf_task()
742 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_tmf_task()
747 PM8001_EH_DBG(pm8001_ha, in pm8001_exec_internal_tmf_task()
764 pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha, in pm8001_exec_internal_task_abort() argument
786 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm8001_exec_internal_task_abort()
789 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm8001_exec_internal_task_abort()
795 res = PM8001_CHIP_DISP->task_abort(pm8001_ha, in pm8001_exec_internal_task_abort()
800 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_task_abort()
810 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_task_abort()
822 PM8001_EH_DBG(pm8001_ha, in pm8001_exec_internal_task_abort()
845 struct pm8001_hba_info *pm8001_ha; in pm8001_dev_gone_notify() local
848 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_dev_gone_notify()
849 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
853 PM8001_DISC_DBG(pm8001_ha, in pm8001_dev_gone_notify()
857 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
858 pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_dev_gone_notify()
860 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
862 PM8001_CHIP_DISP->dereg_dev_req(pm8001_ha, device_id); in pm8001_dev_gone_notify()
865 PM8001_DISC_DBG(pm8001_ha, in pm8001_dev_gone_notify()
869 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
891 struct pm8001_hba_info *pm8001_ha, in pm8001_open_reject_retry() argument
898 if (pm8001_ha == NULL) in pm8001_open_reject_retry()
901 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
909 struct pm8001_ccb_info *ccb = &pm8001_ha->ccb_info[i]; in pm8001_open_reject_retry()
916 - (uintptr_t)&pm8001_ha->devices; in pm8001_open_reject_retry()
945 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
949 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
951 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
953 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
957 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
968 struct pm8001_hba_info *pm8001_ha; in pm8001_I_T_nexus_reset() local
975 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_I_T_nexus_reset()
985 PM8001_EH_DBG(pm8001_ha, in pm8001_I_T_nexus_reset()
992 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_I_T_nexus_reset()
995 PM8001_EH_DBG(pm8001_ha, in pm8001_I_T_nexus_reset()
1004 PM8001_EH_DBG(pm8001_ha, pm8001_printk(" for device[%x]:rc=%d\n", in pm8001_I_T_nexus_reset()
1019 struct pm8001_hba_info *pm8001_ha; in pm8001_I_T_nexus_event_handler() local
1028 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_I_T_nexus_event_handler()
1030 PM8001_EH_DBG(pm8001_ha, in pm8001_I_T_nexus_event_handler()
1042 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_I_T_nexus_event_handler()
1058 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_I_T_nexus_event_handler()
1070 PM8001_EH_DBG(pm8001_ha, pm8001_printk(" for device[%x]:rc=%d\n", in pm8001_I_T_nexus_event_handler()
1083 struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_lu_reset() local
1087 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_lu_reset()
1092 rc = PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_lu_reset()
1100 PM8001_EH_DBG(pm8001_ha, pm8001_printk("for device[%x]:rc=%d\n", in pm8001_lu_reset()
1119 struct pm8001_hba_info *pm8001_ha = in pm8001_query_task() local
1128 PM8001_EH_DBG(pm8001_ha, pm8001_printk("Query:[")); in pm8001_query_task()
1139 PM8001_EH_DBG(pm8001_ha, in pm8001_query_task()
1145 PM8001_EH_DBG(pm8001_ha, in pm8001_query_task()
1162 struct pm8001_hba_info *pm8001_ha = NULL; in pm8001_abort_task() local
1182 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_abort_task()
1191 PM8001_EH_DBG(pm8001_ha, in pm8001_abort_task()
1196 pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_abort_task()
1202 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_abort_task()
1209 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_abort_task()
1215 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_abort_task()
1222 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_abort_task()
1258 struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_clear_task_set() local
1260 PM8001_EH_DBG(pm8001_ha, in pm8001_clear_task_set()