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
164 pm8001_ha = sas_phy->ha->lldd_ha; in pm8001_phy_control()
165 phy = &pm8001_ha->phy[phy_id]; in pm8001_phy_control()
166 pm8001_ha->phy[phy_id].enable_completion = &completion; in pm8001_phy_control()
171 pm8001_ha->phy[phy_id].minimum_linkrate = in pm8001_phy_control()
175 pm8001_ha->phy[phy_id].maximum_linkrate = in pm8001_phy_control()
178 if (pm8001_ha->phy[phy_id].phy_state == PHY_LINK_DISABLE) { in pm8001_phy_control()
179 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, phy_id); in pm8001_phy_control()
182 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
186 if (pm8001_ha->phy[phy_id].phy_state == PHY_LINK_DISABLE) { in pm8001_phy_control()
187 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, phy_id); in pm8001_phy_control()
190 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
194 if (pm8001_ha->phy[phy_id].phy_state == PHY_LINK_DISABLE) { in pm8001_phy_control()
195 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, phy_id); in pm8001_phy_control()
198 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
202 PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_phy_control()
206 if (pm8001_ha->chip_id != chip_8001) { in pm8001_phy_control()
207 if (pm8001_ha->phy[phy_id].phy_state == in pm8001_phy_control()
215 if (pm8001_ha->phy[phy_id].phy_state == in pm8001_phy_control()
223 PM8001_CHIP_DISP->phy_stop_req(pm8001_ha, phy_id); in pm8001_phy_control()
226 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_phy_control()
227 if (pm8001_ha->chip_id == chip_8001) { in pm8001_phy_control()
228 if (-1 == pm8001_bar4_shift(pm8001_ha, in pm8001_phy_control()
230 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_phy_control()
237 pm8001_ha->io_mem[2].memvirtaddr) in pm8001_phy_control()
245 if (pm8001_ha->chip_id == chip_8001) in pm8001_phy_control()
246 pm8001_bar4_shift(pm8001_ha, 0); in pm8001_phy_control()
247 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_phy_control()
250 pm8001_dbg(pm8001_ha, DEVIO, "func 0x%x\n", func); in pm8001_phy_control()
265 struct pm8001_hba_info *pm8001_ha; in pm8001_scan_start() local
268 pm8001_ha = sha->lldd_ha; in pm8001_scan_start()
270 if (pm8001_ha->chip_id == chip_8001) in pm8001_scan_start()
271 PM8001_CHIP_DISP->sas_re_init_req(pm8001_ha); in pm8001_scan_start()
272 for (i = 0; i < pm8001_ha->chip->n_phy; ++i) { in pm8001_scan_start()
273 pm8001_ha->phy[i].enable_completion = &completion; in pm8001_scan_start()
274 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, i); in pm8001_scan_start()
298 static int pm8001_task_prep_smp(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_smp() argument
301 return PM8001_CHIP_DISP->smp_req(pm8001_ha, ccb); in pm8001_task_prep_smp()
325 static int pm8001_task_prep_ata(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_ata() argument
328 return PM8001_CHIP_DISP->sata_req(pm8001_ha, ccb); in pm8001_task_prep_ata()
337 static int pm8001_task_prep_ssp_tm(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_ssp_tm() argument
340 return PM8001_CHIP_DISP->ssp_tm_req(pm8001_ha, ccb, tmf); in pm8001_task_prep_ssp_tm()
348 static int pm8001_task_prep_ssp(struct pm8001_hba_info *pm8001_ha, in pm8001_task_prep_ssp() argument
351 return PM8001_CHIP_DISP->ssp_io_req(pm8001_ha, ccb); in pm8001_task_prep_ssp()
384 struct pm8001_hba_info *pm8001_ha; in pm8001_task_exec() local
401 pm8001_ha = pm8001_find_ha_by_dev(task->dev); in pm8001_task_exec()
402 if (pm8001_ha->controller_fatal_error) { in pm8001_task_exec()
409 pm8001_dbg(pm8001_ha, IO, "pm8001_task_exec device\n"); in pm8001_task_exec()
410 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_task_exec()
414 port = &pm8001_ha->port[sas_find_local_port_id(dev)]; in pm8001_task_exec()
421 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_task_exec()
423 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_task_exec()
433 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm8001_task_exec()
436 ccb = &pm8001_ha->ccb_info[tag]; in pm8001_task_exec()
440 n_elem = dma_map_sg(pm8001_ha->dev, in pm8001_task_exec()
461 rc = pm8001_task_prep_smp(pm8001_ha, ccb); in pm8001_task_exec()
466 rc = pm8001_task_prep_ssp_tm(pm8001_ha, in pm8001_task_exec()
469 rc = pm8001_task_prep_ssp(pm8001_ha, ccb); in pm8001_task_exec()
474 rc = pm8001_task_prep_ata(pm8001_ha, ccb); in pm8001_task_exec()
477 dev_printk(KERN_ERR, pm8001_ha->dev, in pm8001_task_exec()
484 pm8001_dbg(pm8001_ha, IO, "rc is %x\n", rc); in pm8001_task_exec()
497 pm8001_tag_free(pm8001_ha, tag); in pm8001_task_exec()
499 dev_printk(KERN_ERR, pm8001_ha->dev, "pm8001 exec failed[%d]!\n", rc); in pm8001_task_exec()
502 dma_unmap_sg(pm8001_ha->dev, t->scatter, t->num_scatter, in pm8001_task_exec()
505 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_task_exec()
527 void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha, in pm8001_ccb_task_free() argument
534 dma_unmap_sg(pm8001_ha->dev, task->scatter, in pm8001_ccb_task_free()
539 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_resp, 1, in pm8001_ccb_task_free()
541 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_req, 1, in pm8001_ccb_task_free()
556 pm8001_tag_free(pm8001_ha, ccb_idx); in pm8001_ccb_task_free()
563 static struct pm8001_device *pm8001_alloc_dev(struct pm8001_hba_info *pm8001_ha) in pm8001_alloc_dev() argument
567 if (pm8001_ha->devices[dev].dev_type == SAS_PHY_UNUSED) { in pm8001_alloc_dev()
568 pm8001_ha->devices[dev].id = dev; in pm8001_alloc_dev()
569 return &pm8001_ha->devices[dev]; in pm8001_alloc_dev()
573 pm8001_dbg(pm8001_ha, FAIL, in pm8001_alloc_dev()
584 struct pm8001_device *pm8001_find_dev(struct pm8001_hba_info *pm8001_ha, in pm8001_find_dev() argument
589 if (pm8001_ha->devices[dev].device_id == device_id) in pm8001_find_dev()
590 return &pm8001_ha->devices[dev]; in pm8001_find_dev()
593 pm8001_dbg(pm8001_ha, FAIL, "NO MATCHING DEVICE FOUND !!!\n"); in pm8001_find_dev()
624 struct pm8001_hba_info *pm8001_ha = NULL; in pm8001_dev_found_notify() local
629 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_dev_found_notify()
630 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_dev_found_notify()
632 pm8001_device = pm8001_alloc_dev(pm8001_ha); in pm8001_dev_found_notify()
654 pm8001_dbg(pm8001_ha, FAIL, in pm8001_dev_found_notify()
667 pm8001_dbg(pm8001_ha, DISC, "Found device\n"); in pm8001_dev_found_notify()
668 PM8001_CHIP_DISP->reg_dev_req(pm8001_ha, pm8001_device, flag); in pm8001_dev_found_notify()
669 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_found_notify()
673 pm8001_ha->flags = PM8001F_RUN_TIME; in pm8001_dev_found_notify()
676 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_found_notify()
722 struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_exec_internal_tmf_task() local
743 pm8001_dbg(pm8001_ha, FAIL, "Executing internal task failed\n"); in pm8001_exec_internal_tmf_task()
747 if (pm8001_ha->chip_id != chip_8001) { in pm8001_exec_internal_tmf_task()
749 PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_exec_internal_tmf_task()
756 pm8001_dbg(pm8001_ha, FAIL, "TMF task[%x]timeout.\n", in pm8001_exec_internal_tmf_task()
777 pm8001_dbg(pm8001_ha, FAIL, "Blocked task error.\n"); in pm8001_exec_internal_tmf_task()
781 pm8001_dbg(pm8001_ha, EH, in pm8001_exec_internal_tmf_task()
797 pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha, in pm8001_exec_internal_task_abort() argument
818 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm8001_exec_internal_task_abort()
821 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm8001_exec_internal_task_abort()
827 res = PM8001_CHIP_DISP->task_abort(pm8001_ha, in pm8001_exec_internal_task_abort()
832 pm8001_dbg(pm8001_ha, FAIL, "Executing internal task failed\n"); in pm8001_exec_internal_task_abort()
839 pm8001_dbg(pm8001_ha, FAIL, "TMF task timeout.\n"); in pm8001_exec_internal_task_abort()
849 pm8001_dbg(pm8001_ha, EH, in pm8001_exec_internal_task_abort()
871 struct pm8001_hba_info *pm8001_ha; in pm8001_dev_gone_notify() local
874 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_dev_gone_notify()
875 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
879 pm8001_dbg(pm8001_ha, DISC, "found dev[%d:%x] is gone.\n", in pm8001_dev_gone_notify()
882 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
883 pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_dev_gone_notify()
887 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
889 PM8001_CHIP_DISP->dereg_dev_req(pm8001_ha, device_id); in pm8001_dev_gone_notify()
892 pm8001_dbg(pm8001_ha, DISC, "Found dev has gone.\n"); in pm8001_dev_gone_notify()
895 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_dev_gone_notify()
917 struct pm8001_hba_info *pm8001_ha, in pm8001_open_reject_retry() argument
924 if (pm8001_ha == NULL) in pm8001_open_reject_retry()
927 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
935 struct pm8001_ccb_info *ccb = &pm8001_ha->ccb_info[i]; in pm8001_open_reject_retry()
942 - (uintptr_t)&pm8001_ha->devices; in pm8001_open_reject_retry()
971 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
975 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
977 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
979 spin_lock_irqsave(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
983 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in pm8001_open_reject_retry()
997 struct pm8001_hba_info *pm8001_ha; in pm8001_I_T_nexus_reset() local
1004 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_I_T_nexus_reset()
1014 pm8001_dbg(pm8001_ha, EH, in pm8001_I_T_nexus_reset()
1021 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_I_T_nexus_reset()
1024 pm8001_dbg(pm8001_ha, EH, "task abort failed %x\n" in pm8001_I_T_nexus_reset()
1032 pm8001_dbg(pm8001_ha, EH, " for device[%x]:rc=%d\n", in pm8001_I_T_nexus_reset()
1047 struct pm8001_hba_info *pm8001_ha; in pm8001_I_T_nexus_event_handler() local
1054 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_I_T_nexus_event_handler()
1056 pm8001_dbg(pm8001_ha, EH, "I_T_Nexus handler invoked !!\n"); in pm8001_I_T_nexus_event_handler()
1067 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_I_T_nexus_event_handler()
1083 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_I_T_nexus_event_handler()
1095 pm8001_dbg(pm8001_ha, EH, " for device[%x]:rc=%d\n", in pm8001_I_T_nexus_event_handler()
1108 struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_lu_reset() local
1112 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_lu_reset()
1117 rc = PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_lu_reset()
1125 pm8001_dbg(pm8001_ha, EH, "for device[%x]:rc=%d\n", in pm8001_lu_reset()
1143 struct pm8001_hba_info *pm8001_ha = in pm8001_query_task() local
1152 pm8001_dbg(pm8001_ha, EH, "Query:[%16ph]\n", cmnd->cmnd); in pm8001_query_task()
1160 pm8001_dbg(pm8001_ha, EH, in pm8001_query_task()
1166 pm8001_dbg(pm8001_ha, EH, in pm8001_query_task()
1181 struct pm8001_hba_info *pm8001_ha; in pm8001_abort_task() local
1194 pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_abort_task()
1197 if (PM8001_CHIP_DISP->fatal_errors(pm8001_ha)) { in pm8001_abort_task()
1205 pm8001_info(pm8001_ha, "no tag for task:%p\n", task); in pm8001_abort_task()
1225 pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_abort_task()
1229 if (pm8001_ha->chip_id == chip_8006) { in pm8001_abort_task()
1232 struct pm8001_phy *phy = pm8001_ha->phy + phy_id; in pm8001_abort_task()
1236 PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_abort_task()
1246 ret = PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id, in pm8001_abort_task()
1262 pm8001_dbg(pm8001_ha, MSG, in pm8001_abort_task()
1273 pm8001_dbg(pm8001_ha, MSG, in pm8001_abort_task()
1294 ret = pm8001_exec_internal_task_abort(pm8001_ha, in pm8001_abort_task()
1307 PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha, in pm8001_abort_task()
1311 rc = pm8001_exec_internal_task_abort(pm8001_ha, in pm8001_abort_task()
1317 rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev, in pm8001_abort_task()
1327 pm8001_info(pm8001_ha, "rc= %d\n", rc); in pm8001_abort_task()
1351 struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev); in pm8001_clear_task_set() local
1353 pm8001_dbg(pm8001_ha, EH, "I_T_L_Q clear task set[%x]\n", in pm8001_clear_task_set()
1362 struct pm8001_hba_info *pm8001_ha = sas_ha->lldd_ha; in pm8001_port_formed() local
1368 pm8001_dbg(pm8001_ha, FAIL, "Received null port\n"); in pm8001_port_formed()