Lines Matching refs:lrbp

372 	struct ufshcd_lrb *lrbp = &hba->lrb[tag];  in ufshcd_add_command_trace()  local
373 struct scsi_cmnd *cmd = lrbp->cmd; in ufshcd_add_command_trace()
393 be32_to_cpu(lrbp->ucd_req_ptr->sc.exp_data_transfer_len); in ufshcd_add_command_trace()
395 group_id = lrbp->cmd->cmnd[6]; in ufshcd_add_command_trace()
480 struct ufshcd_lrb *lrbp; in ufshcd_print_trs() local
485 lrbp = &hba->lrb[tag]; in ufshcd_print_trs()
488 tag, ktime_to_us(lrbp->issue_time_stamp)); in ufshcd_print_trs()
490 tag, ktime_to_us(lrbp->compl_time_stamp)); in ufshcd_print_trs()
493 tag, (u64)lrbp->utrd_dma_addr); in ufshcd_print_trs()
495 ufshcd_hex_dump("UPIU TRD: ", lrbp->utr_descriptor_ptr, in ufshcd_print_trs()
498 (u64)lrbp->ucd_req_dma_addr); in ufshcd_print_trs()
499 ufshcd_hex_dump("UPIU REQ: ", lrbp->ucd_req_ptr, in ufshcd_print_trs()
502 (u64)lrbp->ucd_rsp_dma_addr); in ufshcd_print_trs()
503 ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr, in ufshcd_print_trs()
507 lrbp->utr_descriptor_ptr->prd_table_length); in ufshcd_print_trs()
514 (u64)lrbp->ucd_prdt_dma_addr); in ufshcd_print_trs()
517 ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr, in ufshcd_print_trs()
721 static enum utp_ocs ufshcd_get_tr_ocs(struct ufshcd_lrb *lrbp) in ufshcd_get_tr_ocs() argument
723 return le32_to_cpu(lrbp->utr_descriptor_ptr->header.dword_2) & MASK_OCS; in ufshcd_get_tr_ocs()
2037 struct ufshcd_lrb *lrbp) in ufshcd_should_inform_monitor() argument
2041 return (m->enabled && lrbp && lrbp->cmd && in ufshcd_should_inform_monitor()
2042 (!m->chunk_size || m->chunk_size == lrbp->cmd->sdb.length) && in ufshcd_should_inform_monitor()
2043 ktime_before(hba->monitor.enabled_ts, lrbp->issue_time_stamp)); in ufshcd_should_inform_monitor()
2046 static void ufshcd_start_monitor(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_start_monitor() argument
2048 int dir = ufshcd_monitor_opcode2dir(*lrbp->cmd->cmnd); in ufshcd_start_monitor()
2057 static void ufshcd_update_monitor(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_update_monitor() argument
2059 int dir = ufshcd_monitor_opcode2dir(*lrbp->cmd->cmnd); in ufshcd_update_monitor()
2064 struct request *req = scsi_cmd_to_rq(lrbp->cmd); in ufshcd_update_monitor()
2068 now = lrbp->compl_time_stamp; in ufshcd_update_monitor()
2075 lat = ktime_sub(now, lrbp->issue_time_stamp); in ufshcd_update_monitor()
2097 struct ufshcd_lrb *lrbp = &hba->lrb[task_tag]; in ufshcd_send_command() local
2100 lrbp->issue_time_stamp = ktime_get(); in ufshcd_send_command()
2101 lrbp->compl_time_stamp = ktime_set(0, 0); in ufshcd_send_command()
2104 if (unlikely(ufshcd_should_inform_monitor(hba, lrbp))) in ufshcd_send_command()
2105 ufshcd_start_monitor(hba, lrbp); in ufshcd_send_command()
2109 hba->vops->setup_xfer_req(hba, task_tag, !!lrbp->cmd); in ufshcd_send_command()
2122 static inline void ufshcd_copy_sense_data(struct ufshcd_lrb *lrbp) in ufshcd_copy_sense_data() argument
2125 if (lrbp->sense_buffer && in ufshcd_copy_sense_data()
2126 ufshcd_get_rsp_upiu_data_seg_len(lrbp->ucd_rsp_ptr)) { in ufshcd_copy_sense_data()
2129 len = be16_to_cpu(lrbp->ucd_rsp_ptr->sr.sense_data_len); in ufshcd_copy_sense_data()
2132 memcpy(lrbp->sense_buffer, lrbp->ucd_rsp_ptr->sr.sense_data, in ufshcd_copy_sense_data()
2144 int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_copy_query_response() argument
2148 memcpy(&query_res->upiu_res, &lrbp->ucd_rsp_ptr->qr, QUERY_OSF_SIZE); in ufshcd_copy_query_response()
2152 lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) { in ufshcd_copy_query_response()
2153 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + in ufshcd_copy_query_response()
2159 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & in ufshcd_copy_query_response()
2359 static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_map_sg() argument
2367 cmd = lrbp->cmd; in ufshcd_map_sg()
2375 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
2379 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
2382 prd_table = lrbp->ucd_prdt_ptr; in ufshcd_map_sg()
2401 lrbp->utr_descriptor_ptr->prd_table_length = 0; in ufshcd_map_sg()
2456 static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp, in ufshcd_prepare_req_desc_hdr() argument
2459 struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr; in ufshcd_prepare_req_desc_hdr()
2476 dword_0 = data_direction | (lrbp->command_type in ufshcd_prepare_req_desc_hdr()
2478 if (lrbp->intr_cmd) in ufshcd_prepare_req_desc_hdr()
2482 ufshcd_prepare_req_desc_hdr_crypto(lrbp, &dword_0, &dword_1, &dword_3); in ufshcd_prepare_req_desc_hdr()
2506 void ufshcd_prepare_utp_scsi_cmd_upiu(struct ufshcd_lrb *lrbp, u8 upiu_flags) in ufshcd_prepare_utp_scsi_cmd_upiu() argument
2508 struct scsi_cmnd *cmd = lrbp->cmd; in ufshcd_prepare_utp_scsi_cmd_upiu()
2509 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_scsi_cmd_upiu()
2515 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_scsi_cmd_upiu()
2528 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_scsi_cmd_upiu()
2539 struct ufshcd_lrb *lrbp, u8 upiu_flags) in ufshcd_prepare_utp_query_req_upiu() argument
2541 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_query_req_upiu()
2548 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_query_req_upiu()
2567 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_query_req_upiu()
2570 static inline void ufshcd_prepare_utp_nop_upiu(struct ufshcd_lrb *lrbp) in ufshcd_prepare_utp_nop_upiu() argument
2572 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_nop_upiu()
2579 UPIU_TRANSACTION_NOP_OUT, 0, 0, lrbp->task_tag); in ufshcd_prepare_utp_nop_upiu()
2584 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_nop_upiu()
2594 struct ufshcd_lrb *lrbp) in ufshcd_compose_devman_upiu() argument
2600 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; in ufshcd_compose_devman_upiu()
2602 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_compose_devman_upiu()
2604 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); in ufshcd_compose_devman_upiu()
2606 ufshcd_prepare_utp_query_req_upiu(hba, lrbp, upiu_flags); in ufshcd_compose_devman_upiu()
2608 ufshcd_prepare_utp_nop_upiu(lrbp); in ufshcd_compose_devman_upiu()
2621 static int ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_comp_scsi_upiu() argument
2627 lrbp->command_type = UTP_CMD_TYPE_SCSI; in ufshcd_comp_scsi_upiu()
2629 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_comp_scsi_upiu()
2631 if (likely(lrbp->cmd)) { in ufshcd_comp_scsi_upiu()
2632 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, in ufshcd_comp_scsi_upiu()
2633 lrbp->cmd->sc_data_direction); in ufshcd_comp_scsi_upiu()
2634 ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags); in ufshcd_comp_scsi_upiu()
2696 struct ufshcd_lrb *lrbp; in ufshcd_queuecommand() local
2757 lrbp = &hba->lrb[tag]; in ufshcd_queuecommand()
2758 WARN_ON(lrbp->cmd); in ufshcd_queuecommand()
2759 lrbp->cmd = cmd; in ufshcd_queuecommand()
2760 lrbp->sense_bufflen = UFS_SENSE_SIZE; in ufshcd_queuecommand()
2761 lrbp->sense_buffer = cmd->sense_buffer; in ufshcd_queuecommand()
2762 lrbp->task_tag = tag; in ufshcd_queuecommand()
2763 lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun); in ufshcd_queuecommand()
2764 lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false; in ufshcd_queuecommand()
2766 ufshcd_prepare_lrbp_crypto(scsi_cmd_to_rq(cmd), lrbp); in ufshcd_queuecommand()
2768 lrbp->req_abort_skip = false; in ufshcd_queuecommand()
2770 ufshpb_prep(hba, lrbp); in ufshcd_queuecommand()
2772 ufshcd_comp_scsi_upiu(hba, lrbp); in ufshcd_queuecommand()
2774 err = ufshcd_map_sg(hba, lrbp); in ufshcd_queuecommand()
2776 lrbp->cmd = NULL; in ufshcd_queuecommand()
2797 struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag) in ufshcd_compose_dev_cmd() argument
2799 lrbp->cmd = NULL; in ufshcd_compose_dev_cmd()
2800 lrbp->sense_bufflen = 0; in ufshcd_compose_dev_cmd()
2801 lrbp->sense_buffer = NULL; in ufshcd_compose_dev_cmd()
2802 lrbp->task_tag = tag; in ufshcd_compose_dev_cmd()
2803 lrbp->lun = 0; /* device management cmd is not specific to any LUN */ in ufshcd_compose_dev_cmd()
2804 lrbp->intr_cmd = true; /* No interrupt aggregation */ in ufshcd_compose_dev_cmd()
2805 ufshcd_prepare_lrbp_crypto(NULL, lrbp); in ufshcd_compose_dev_cmd()
2808 return ufshcd_compose_devman_upiu(hba, lrbp); in ufshcd_compose_dev_cmd()
2835 ufshcd_check_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_check_query_response() argument
2840 query_res->response = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr) >> in ufshcd_check_query_response()
2851 ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_dev_cmd_completion() argument
2857 resp = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_dev_cmd_completion()
2868 err = ufshcd_check_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
2870 err = ufshcd_copy_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
2889 struct ufshcd_lrb *lrbp, int max_timeout) in ufshcd_wait_for_dev_cmd() argument
2901 err = ufshcd_get_tr_ocs(lrbp); in ufshcd_wait_for_dev_cmd()
2903 err = ufshcd_dev_cmd_completion(hba, lrbp); in ufshcd_wait_for_dev_cmd()
2910 __func__, lrbp->task_tag); in ufshcd_wait_for_dev_cmd()
2911 if (!ufshcd_clear_cmd(hba, lrbp->task_tag)) in ufshcd_wait_for_dev_cmd()
2920 __clear_bit(lrbp->task_tag, &hba->outstanding_reqs); in ufshcd_wait_for_dev_cmd()
2942 struct ufshcd_lrb *lrbp; in ufshcd_exec_dev_cmd() local
2964 lrbp = &hba->lrb[tag]; in ufshcd_exec_dev_cmd()
2965 WARN_ON(lrbp->cmd); in ufshcd_exec_dev_cmd()
2966 err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag); in ufshcd_exec_dev_cmd()
2972 ufshcd_add_query_upiu_trace(hba, UFS_QUERY_SEND, lrbp->ucd_req_ptr); in ufshcd_exec_dev_cmd()
2975 err = ufshcd_wait_for_dev_cmd(hba, lrbp, timeout); in ufshcd_exec_dev_cmd()
2977 (struct utp_upiu_req *)lrbp->ucd_rsp_ptr); in ufshcd_exec_dev_cmd()
5067 ufshcd_scsi_cmd_status(struct ufshcd_lrb *lrbp, int scsi_status) in ufshcd_scsi_cmd_status() argument
5073 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
5081 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
5100 ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_transfer_rsp_status() argument
5107 ocs = ufshcd_get_tr_ocs(lrbp); in ufshcd_transfer_rsp_status()
5110 if (be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_1) & in ufshcd_transfer_rsp_status()
5117 result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
5125 result = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
5132 result = ufshcd_scsi_cmd_status(lrbp, scsi_status); in ufshcd_transfer_rsp_status()
5148 ufshcd_is_exception_event(lrbp->ucd_rsp_ptr)) in ufshcd_transfer_rsp_status()
5153 ufshpb_rsp_upiu(hba, lrbp); in ufshcd_transfer_rsp_status()
5188 ocs, lrbp->task_tag); in ufshcd_transfer_rsp_status()
5196 ufshcd_print_trs(hba, 1 << lrbp->task_tag, true); in ufshcd_transfer_rsp_status()
5267 struct ufshcd_lrb *lrbp; in __ufshcd_transfer_req_compl() local
5274 lrbp = &hba->lrb[index]; in __ufshcd_transfer_req_compl()
5275 lrbp->compl_time_stamp = ktime_get(); in __ufshcd_transfer_req_compl()
5276 cmd = lrbp->cmd; in __ufshcd_transfer_req_compl()
5278 if (unlikely(ufshcd_should_inform_monitor(hba, lrbp))) in __ufshcd_transfer_req_compl()
5279 ufshcd_update_monitor(hba, lrbp); in __ufshcd_transfer_req_compl()
5281 result = ufshcd_transfer_rsp_status(hba, lrbp); in __ufshcd_transfer_req_compl()
5285 lrbp->cmd = NULL; in __ufshcd_transfer_req_compl()
5290 } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE || in __ufshcd_transfer_req_compl()
5291 lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) { in __ufshcd_transfer_req_compl()
6717 struct ufshcd_lrb *lrbp; in ufshcd_issue_devman_upiu_cmd() local
6737 lrbp = &hba->lrb[tag]; in ufshcd_issue_devman_upiu_cmd()
6738 WARN_ON(lrbp->cmd); in ufshcd_issue_devman_upiu_cmd()
6739 lrbp->cmd = NULL; in ufshcd_issue_devman_upiu_cmd()
6740 lrbp->sense_bufflen = 0; in ufshcd_issue_devman_upiu_cmd()
6741 lrbp->sense_buffer = NULL; in ufshcd_issue_devman_upiu_cmd()
6742 lrbp->task_tag = tag; in ufshcd_issue_devman_upiu_cmd()
6743 lrbp->lun = 0; in ufshcd_issue_devman_upiu_cmd()
6744 lrbp->intr_cmd = true; in ufshcd_issue_devman_upiu_cmd()
6745 ufshcd_prepare_lrbp_crypto(NULL, lrbp); in ufshcd_issue_devman_upiu_cmd()
6749 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; in ufshcd_issue_devman_upiu_cmd()
6751 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_issue_devman_upiu_cmd()
6756 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); in ufshcd_issue_devman_upiu_cmd()
6759 memcpy(lrbp->ucd_req_ptr, req_upiu, sizeof(*lrbp->ucd_req_ptr)); in ufshcd_issue_devman_upiu_cmd()
6765 memcpy(lrbp->ucd_req_ptr + 1, desc_buff, *buff_len); in ufshcd_issue_devman_upiu_cmd()
6769 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_issue_devman_upiu_cmd()
6773 ufshcd_add_query_upiu_trace(hba, UFS_QUERY_SEND, lrbp->ucd_req_ptr); in ufshcd_issue_devman_upiu_cmd()
6781 ufshcd_wait_for_dev_cmd(hba, lrbp, QUERY_REQ_TIMEOUT); in ufshcd_issue_devman_upiu_cmd()
6784 memcpy(rsp_upiu, lrbp->ucd_rsp_ptr, sizeof(*rsp_upiu)); in ufshcd_issue_devman_upiu_cmd()
6786 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + sizeof(*rsp_upiu); in ufshcd_issue_devman_upiu_cmd()
6787 u16 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & in ufshcd_issue_devman_upiu_cmd()
6802 (struct utp_upiu_req *)lrbp->ucd_rsp_ptr); in ufshcd_issue_devman_upiu_cmd()
6932 struct ufshcd_lrb *lrbp; in ufshcd_set_req_abort_skip() local
6936 lrbp = &hba->lrb[tag]; in ufshcd_set_req_abort_skip()
6937 lrbp->req_abort_skip = true; in ufshcd_set_req_abort_skip()
6956 struct ufshcd_lrb *lrbp = &hba->lrb[tag]; in ufshcd_try_to_abort_task() local
6963 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_try_to_abort_task()
7002 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_try_to_abort_task()
7033 struct ufshcd_lrb *lrbp = &hba->lrb[tag]; in ufshcd_abort() local
7088 if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN) { in ufshcd_abort()
7089 ufshcd_update_evt_hist(hba, UFS_EVT_ABORT, lrbp->lun); in ufshcd_abort()
7099 if (lrbp->req_abort_skip) { in ufshcd_abort()
7113 lrbp->cmd = NULL; in ufshcd_abort()