Lines Matching refs:lrbp

356 	struct ufshcd_lrb *lrbp = &hba->lrb[tag];
357 struct scsi_cmnd *cmd = lrbp->cmd;
379 lrbp->ucd_req_ptr->sc.exp_data_transfer_len);
453 struct ufshcd_lrb *lrbp;
458 lrbp = &hba->lrb[tag];
461 tag, ktime_to_us(lrbp->issue_time_stamp));
463 tag, ktime_to_us(lrbp->compl_time_stamp));
466 tag, (u64)lrbp->utrd_dma_addr);
468 ufshcd_hex_dump("UPIU TRD: ", lrbp->utr_descriptor_ptr,
471 (u64)lrbp->ucd_req_dma_addr);
472 ufshcd_hex_dump("UPIU REQ: ", lrbp->ucd_req_ptr,
475 (u64)lrbp->ucd_rsp_dma_addr);
476 ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr,
480 lrbp->utr_descriptor_ptr->prd_table_length);
487 (u64)lrbp->ucd_prdt_dma_addr);
490 ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr,
671 * @lrbp: pointer to local command reference block
676 static inline int ufshcd_get_tr_ocs(struct ufshcd_lrb *lrbp)
678 return le32_to_cpu(lrbp->utr_descriptor_ptr->header.dword_2) & MASK_OCS;
1962 struct ufshcd_lrb *lrbp = &hba->lrb[task_tag];
1964 lrbp->issue_time_stamp = ktime_get();
1965 lrbp->compl_time_stamp = ktime_set(0, 0);
1966 ufshcd_vops_setup_xfer_req(hba, task_tag, (lrbp->cmd ? true : false));
1977 * @lrbp: pointer to local reference block
1979 static inline void ufshcd_copy_sense_data(struct ufshcd_lrb *lrbp)
1982 if (lrbp->sense_buffer &&
1983 ufshcd_get_rsp_upiu_data_seg_len(lrbp->ucd_rsp_ptr)) {
1986 len = be16_to_cpu(lrbp->ucd_rsp_ptr->sr.sense_data_len);
1989 memcpy(lrbp->sense_buffer, lrbp->ucd_rsp_ptr->sr.sense_data,
1998 * @lrbp: pointer to local reference block
2001 int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
2005 memcpy(&query_res->upiu_res, &lrbp->ucd_rsp_ptr->qr, QUERY_OSF_SIZE);
2009 lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) {
2010 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr +
2016 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) &
2207 * @lrbp: pointer to local reference block
2211 static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
2219 cmd = lrbp->cmd;
2227 lrbp->utr_descriptor_ptr->prd_table_length =
2231 lrbp->utr_descriptor_ptr->prd_table_length =
2234 prd_table = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr;
2246 lrbp->utr_descriptor_ptr->prd_table_length = 0;
2297 * @lrbp: pointer to local reference block
2301 static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp,
2304 struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr;
2321 dword_0 = data_direction | (lrbp->command_type
2323 if (lrbp->intr_cmd)
2327 ufshcd_prepare_req_desc_hdr_crypto(lrbp, &dword_0, &dword_1, &dword_3);
2347 * @lrbp: local reference block pointer
2351 void ufshcd_prepare_utp_scsi_cmd_upiu(struct ufshcd_lrb *lrbp, u8 upiu_flags)
2353 struct scsi_cmnd *cmd = lrbp->cmd;
2354 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr;
2360 lrbp->lun, lrbp->task_tag);
2373 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp));
2380 * @lrbp: local reference block pointer
2384 struct ufshcd_lrb *lrbp, u8 upiu_flags)
2386 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr;
2393 lrbp->lun, lrbp->task_tag);
2412 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp));
2415 static inline void ufshcd_prepare_utp_nop_upiu(struct ufshcd_lrb *lrbp)
2417 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr;
2424 UPIU_TRANSACTION_NOP_OUT, 0, 0, lrbp->task_tag);
2429 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp));
2436 * @lrbp: pointer to local reference block
2439 struct ufshcd_lrb *lrbp)
2446 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE;
2448 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
2450 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE);
2452 ufshcd_prepare_utp_query_req_upiu(hba, lrbp, upiu_flags);
2454 ufshcd_prepare_utp_nop_upiu(lrbp);
2465 * @lrbp: pointer to local reference block
2467 static int ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
2474 lrbp->command_type = UTP_CMD_TYPE_SCSI;
2476 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
2478 if (likely(lrbp->cmd)) {
2479 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags,
2480 lrbp->cmd->sc_data_direction);
2481 ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags);
2530 struct ufshcd_lrb *lrbp;
2559 lrbp = &hba->lrb[tag];
2561 WARN_ON(lrbp->cmd);
2562 lrbp->cmd = cmd;
2563 lrbp->sense_bufflen = UFS_SENSE_SIZE;
2564 lrbp->sense_buffer = cmd->sense_buffer;
2565 lrbp->task_tag = tag;
2566 lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun);
2567 lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false;
2569 ufshcd_prepare_lrbp_crypto(cmd->request, lrbp);
2571 lrbp->req_abort_skip = false;
2573 ufshcd_comp_scsi_upiu(hba, lrbp);
2575 err = ufshcd_map_sg(hba, lrbp);
2577 lrbp->cmd = NULL;
2623 scsi_dma_unmap(lrbp->cmd);
2624 lrbp->cmd = NULL;
2635 struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag)
2637 lrbp->cmd = NULL;
2638 lrbp->sense_bufflen = 0;
2639 lrbp->sense_buffer = NULL;
2640 lrbp->task_tag = tag;
2641 lrbp->lun = 0; /* device management cmd is not specific to any LUN */
2642 lrbp->intr_cmd = true; /* No interrupt aggregation */
2643 ufshcd_prepare_lrbp_crypto(NULL, lrbp);
2646 return ufshcd_compose_devman_upiu(hba, lrbp);
2673 ufshcd_check_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
2678 query_res->response = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr) >>
2686 * @lrbp: pointer to local reference block
2689 ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
2695 resp = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr);
2706 err = ufshcd_check_query_response(hba, lrbp);
2708 err = ufshcd_copy_query_response(hba, lrbp);
2727 struct ufshcd_lrb *lrbp, int max_timeout)
2741 err = ufshcd_get_tr_ocs(lrbp);
2743 err = ufshcd_dev_cmd_completion(hba, lrbp);
2750 __func__, lrbp->task_tag);
2751 if (!ufshcd_clear_cmd(hba, lrbp->task_tag))
2759 ufshcd_outstanding_req_clear(hba, lrbp->task_tag);
2779 struct ufshcd_lrb *lrbp;
2804 lrbp = &hba->lrb[tag];
2805 WARN_ON(lrbp->cmd);
2806 err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag);
2819 err = ufshcd_wait_for_dev_cmd(hba, lrbp, timeout);
4786 * @lrbp: pointer to local reference block of completed command
4792 ufshcd_scsi_cmd_status(struct ufshcd_lrb *lrbp, int scsi_status)
4798 ufshcd_copy_sense_data(lrbp);
4808 ufshcd_copy_sense_data(lrbp);
4822 * @lrbp: pointer to local reference block of completed command
4827 ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
4834 ocs = ufshcd_get_tr_ocs(lrbp);
4837 if (be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_1) &
4844 result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr);
4852 result = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr);
4859 result = ufshcd_scsi_cmd_status(lrbp, scsi_status);
4874 ufshcd_is_exception_event(lrbp->ucd_rsp_ptr) &&
4917 ocs, lrbp->task_tag);
4925 ufshcd_print_trs(hba, 1 << lrbp->task_tag, true);
4973 struct ufshcd_lrb *lrbp;
4979 lrbp = &hba->lrb[index];
4980 lrbp->compl_time_stamp = ktime_get();
4981 cmd = lrbp->cmd;
4984 result = ufshcd_transfer_rsp_status(hba, lrbp);
4988 lrbp->cmd = NULL;
4989 /* Do not touch lrbp after scsi done */
4992 } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE ||
4993 lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) {
6385 struct ufshcd_lrb *lrbp;
6403 lrbp = &hba->lrb[tag];
6404 WARN_ON(lrbp->cmd);
6406 lrbp->cmd = NULL;
6407 lrbp->sense_bufflen = 0;
6408 lrbp->sense_buffer = NULL;
6409 lrbp->task_tag = tag;
6410 lrbp->lun = 0;
6411 lrbp->intr_cmd = true;
6412 ufshcd_prepare_lrbp_crypto(NULL, lrbp);
6418 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE;
6421 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
6428 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE);
6431 memcpy(lrbp->ucd_req_ptr, req_upiu, sizeof(*lrbp->ucd_req_ptr));
6437 memcpy(lrbp->ucd_req_ptr + 1, desc_buff, *buff_len);
6441 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp));
6456 ufshcd_wait_for_dev_cmd(hba, lrbp, QUERY_REQ_TIMEOUT);
6459 memcpy(rsp_upiu, lrbp->ucd_rsp_ptr, sizeof(*rsp_upiu));
6461 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + sizeof(*rsp_upiu);
6462 u16 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) &
6607 struct ufshcd_lrb *lrbp;
6611 lrbp = &hba->lrb[tag];
6612 lrbp->req_abort_skip = true;
6630 struct ufshcd_lrb *lrbp = &hba->lrb[tag];
6637 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
6676 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
6709 struct ufshcd_lrb *lrbp;
6715 lrbp = &hba->lrb[tag];
6730 if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN)
6773 if (lrbp->req_abort_skip)