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()
142 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_find_ha_by_dev() local
143 return pm8001_ha; in pm8001_find_ha_by_dev()
159 struct pm8001_hba_info *pm8001_ha = NULL; in pm8001_phy_control() local
165 pm8001_ha = sas_phy->ha->lldd_ha; in pm8001_phy_control()
166 phy = &pm8001_ha->phy[phy_id]; in pm8001_phy_control()
167 pm8001_ha->phy[phy_id].enable_completion = &completion; in pm8001_phy_control()
172 pm8001_ha->phy[phy_id].minimum_linkrate = in pm8001_phy_control()
176 pm8001_ha->phy[phy_id].maximum_linkrate = in pm8001_phy_control()
179 if (pm8001_ha->phy[phy_id].phy_state == PHY_LINK_DISABLE) { in pm8001_phy_control()
180 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, phy_id); in pm8001_phy_control()
183 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
187 if (pm8001_ha->phy[phy_id].phy_state == PHY_LINK_DISABLE) { in pm8001_phy_control()
188 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, phy_id); in pm8001_phy_control()
191 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
195 if (pm8001_ha->phy[phy_id].phy_state == PHY_LINK_DISABLE) { in pm8001_phy_control()
196 PM8001_CHIP_DISP->phy_start_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_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
207 if (pm8001_ha->chip_id != chip_8001) { in pm8001_phy_control()
208 if (pm8001_ha->phy[phy_id].phy_state == in pm8001_phy_control()
210 sas_ha = pm8001_ha->sas; in pm8001_phy_control()
217 if (pm8001_ha->phy[phy_id].phy_state == in pm8001_phy_control()
219 sas_ha = pm8001_ha->sas; in pm8001_phy_control()
226 PM8001_CHIP_DISP->phy_stop_req(pm8001_ha, phy_id); in pm8001_phy_control()
229 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_phy_control()
230 if (pm8001_ha->chip_id == chip_8001) { in pm8001_phy_control()
231 if (-1 == pm8001_bar4_shift(pm8001_ha, in pm8001_phy_control()
233 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_phy_control()
240 pm8001_ha->io_mem[2].memvirtaddr) in pm8001_phy_control()
248 if (pm8001_ha->chip_id == chip_8001) in pm8001_phy_control()
249 pm8001_bar4_shift(pm8001_ha, 0); in pm8001_phy_control()
250 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_phy_control()
253 PM8001_DEVIO_DBG(pm8001_ha, in pm8001_phy_control()
269 struct pm8001_hba_info *pm8001_ha; in pm8001_scan_start() local
271 pm8001_ha = sha->lldd_ha; in pm8001_scan_start()
273 if (pm8001_ha->chip_id == chip_8001) in pm8001_scan_start()
274 PM8001_CHIP_DISP->sas_re_init_req(pm8001_ha); in pm8001_scan_start()
275 for (i = 0; i < pm8001_ha->chip->n_phy; ++i) in pm8001_scan_start()
276 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, i); in pm8001_scan_start()
297 static int pm8001_task_prep_smp(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_smp() argument
300 return PM8001_CHIP_DISP->smp_req(pm8001_ha, ccb); in pm8001_task_prep_smp()
324 static int pm8001_task_prep_ata(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_ata() argument
327 return PM8001_CHIP_DISP->sata_req(pm8001_ha, ccb); in pm8001_task_prep_ata()
336 static int pm8001_task_prep_ssp_tm(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_ssp_tm() argument
339 return PM8001_CHIP_DISP->ssp_tm_req(pm8001_ha, ccb, tmf); in pm8001_task_prep_ssp_tm()
347 static int pm8001_task_prep_ssp(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_ssp() argument
350 return PM8001_CHIP_DISP->ssp_io_req(pm8001_ha, ccb); in pm8001_task_prep_ssp()
383 struct pm8001_hba_info *pm8001_ha; in pm8001_task_exec() local
400 pm8001_ha = pm8001_find_ha_by_dev(task->dev); in pm8001_task_exec()
401 if (pm8001_ha->controller_fatal_error) { in pm8001_task_exec()
408 PM8001_IO_DBG(pm8001_ha, pm8001_printk("pm8001_task_exec device \n ")); in pm8001_task_exec()
409 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_task_exec()
413 port = &pm8001_ha->port[sas_find_local_port_id(dev)]; in pm8001_task_exec()
420 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_task_exec()
422 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_task_exec()
432 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm8001_task_exec()
435 ccb = &pm8001_ha->ccb_info[tag]; in pm8001_task_exec()
439 n_elem = dma_map_sg(pm8001_ha->dev, in pm8001_task_exec()
459 rc = pm8001_task_prep_smp(pm8001_ha, ccb); in pm8001_task_exec()
463 rc = pm8001_task_prep_ssp_tm(pm8001_ha, in pm8001_task_exec()
466 rc = pm8001_task_prep_ssp(pm8001_ha, ccb); in pm8001_task_exec()
470 rc = pm8001_task_prep_ata(pm8001_ha, ccb); in pm8001_task_exec()
473 dev_printk(KERN_ERR, pm8001_ha->dev, in pm8001_task_exec()
480 PM8001_IO_DBG(pm8001_ha, in pm8001_task_exec()
494 pm8001_tag_free(pm8001_ha, tag); in pm8001_task_exec()
496 dev_printk(KERN_ERR, pm8001_ha->dev, "pm8001 exec failed[%d]!\n", rc); in pm8001_task_exec()
499 dma_unmap_sg(pm8001_ha->dev, t->scatter, t->num_scatter, in pm8001_task_exec()
502 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_task_exec()
524 void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha, in pm8001_ccb_task_free() argument
531 dma_unmap_sg(pm8001_ha->dev, task->scatter, in pm8001_ccb_task_free()
536 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_resp, 1, in pm8001_ccb_task_free()
538 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_req, 1, in pm8001_ccb_task_free()
553 pm8001_tag_free(pm8001_ha, ccb_idx); in pm8001_ccb_task_free()
560 static struct pm8001_device *pm8001_alloc_dev(struct pm8001_hba_info *pm8001_ha) in pm8001_alloc_dev() argument
564 if (pm8001_ha->devices[dev].dev_type == SAS_PHY_UNUSED) { in pm8001_alloc_dev()
565 pm8001_ha->devices[dev].id = dev; in pm8001_alloc_dev()
566 return &pm8001_ha->devices[dev]; in pm8001_alloc_dev()
570 PM8001_FAIL_DBG(pm8001_ha, in pm8001_alloc_dev()
581 struct pm8001_device *pm8001_find_dev(struct pm8001_hba_info *pm8001_ha, in pm8001_find_dev() argument
586 if (pm8001_ha->devices[dev].device_id == device_id) in pm8001_find_dev()
587 return &pm8001_ha->devices[dev]; in pm8001_find_dev()
590 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("NO MATCHING " in pm8001_find_dev()
622 struct pm8001_hba_info *pm8001_ha = NULL; in pm8001_dev_found_notify() local
627 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_dev_found_notify()
628 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_dev_found_notify()
630 pm8001_device = pm8001_alloc_dev(pm8001_ha); in pm8001_dev_found_notify()
652 PM8001_FAIL_DBG(pm8001_ha, in pm8001_dev_found_notify()
665 PM8001_DISC_DBG(pm8001_ha, pm8001_printk("Found device\n")); in pm8001_dev_found_notify()
666 PM8001_CHIP_DISP->reg_dev_req(pm8001_ha, pm8001_device, flag); in pm8001_dev_found_notify()
667 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_found_notify()
671 pm8001_ha->flags = PM8001F_RUN_TIME; in pm8001_dev_found_notify()
674 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_found_notify()
716 struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_exec_internal_tmf_task() local
737 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_tmf_task()
743 if (pm8001_ha->chip_id != chip_8001) { in pm8001_exec_internal_tmf_task()
745 PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_exec_internal_tmf_task()
753 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_tmf_task()
776 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_tmf_task()
781 PM8001_EH_DBG(pm8001_ha, in pm8001_exec_internal_tmf_task()
798 pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha, in pm8001_exec_internal_task_abort() argument
819 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm8001_exec_internal_task_abort()
822 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm8001_exec_internal_task_abort()
828 res = PM8001_CHIP_DISP->task_abort(pm8001_ha, in pm8001_exec_internal_task_abort()
833 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_task_abort()
843 PM8001_FAIL_DBG(pm8001_ha, in pm8001_exec_internal_task_abort()
855 PM8001_EH_DBG(pm8001_ha, in pm8001_exec_internal_task_abort()
878 struct pm8001_hba_info *pm8001_ha; in pm8001_dev_gone_notify() local
881 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_dev_gone_notify()
882 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
886 PM8001_DISC_DBG(pm8001_ha, in pm8001_dev_gone_notify()
890 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
891 pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_dev_gone_notify()
895 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
897 PM8001_CHIP_DISP->dereg_dev_req(pm8001_ha, device_id); in pm8001_dev_gone_notify()
900 PM8001_DISC_DBG(pm8001_ha, in pm8001_dev_gone_notify()
904 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
926 struct pm8001_hba_info *pm8001_ha, in pm8001_open_reject_retry() argument
933 if (pm8001_ha == NULL) in pm8001_open_reject_retry()
936 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
944 struct pm8001_ccb_info *ccb = &pm8001_ha->ccb_info[i]; in pm8001_open_reject_retry()
951 - (uintptr_t)&pm8001_ha->devices; in pm8001_open_reject_retry()
980 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
984 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
986 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
988 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
992 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
1004 struct pm8001_hba_info *pm8001_ha; in pm8001_I_T_nexus_reset() local
1011 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_I_T_nexus_reset()
1021 PM8001_EH_DBG(pm8001_ha, in pm8001_I_T_nexus_reset()
1028 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_I_T_nexus_reset()
1031 PM8001_EH_DBG(pm8001_ha, in pm8001_I_T_nexus_reset()
1040 PM8001_EH_DBG(pm8001_ha, pm8001_printk(" for device[%x]:rc=%d\n", in pm8001_I_T_nexus_reset()
1055 struct pm8001_hba_info *pm8001_ha; in pm8001_I_T_nexus_event_handler() local
1062 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_I_T_nexus_event_handler()
1064 PM8001_EH_DBG(pm8001_ha, in pm8001_I_T_nexus_event_handler()
1076 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_I_T_nexus_event_handler()
1092 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_I_T_nexus_event_handler()
1104 PM8001_EH_DBG(pm8001_ha, pm8001_printk(" for device[%x]:rc=%d\n", in pm8001_I_T_nexus_event_handler()
1117 struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_lu_reset() local
1121 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev , in pm8001_lu_reset()
1126 rc = PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_lu_reset()
1134 PM8001_EH_DBG(pm8001_ha, pm8001_printk("for device[%x]:rc=%d\n", in pm8001_lu_reset()
1153 struct pm8001_hba_info *pm8001_ha = in pm8001_query_task() local
1162 PM8001_EH_DBG(pm8001_ha, pm8001_printk("Query:[")); in pm8001_query_task()
1173 PM8001_EH_DBG(pm8001_ha, in pm8001_query_task()
1179 PM8001_EH_DBG(pm8001_ha, in pm8001_query_task()
1195 struct pm8001_hba_info *pm8001_ha; in pm8001_abort_task() local
1206 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_abort_task()
1230 pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_abort_task()
1234 if (pm8001_ha->chip_id == chip_8006) { in pm8001_abort_task()
1237 struct pm8001_phy *phy = pm8001_ha->phy + phy_id; in pm8001_abort_task()
1241 PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_abort_task()
1251 ret = PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_abort_task()
1267 PM8001_MSG_DBG(pm8001_ha, in pm8001_abort_task()
1278 PM8001_MSG_DBG(pm8001_ha, in pm8001_abort_task()
1299 ret = pm8001_exec_internal_task_abort(pm8001_ha, in pm8001_abort_task()
1312 PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_abort_task()
1316 rc = pm8001_exec_internal_task_abort(pm8001_ha, in pm8001_abort_task()
1322 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_abort_task()
1356 struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_clear_task_set() local
1358 PM8001_EH_DBG(pm8001_ha, in pm8001_clear_task_set()