lrbp 334 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp = &hba->lrb[tag]; lrbp 339 drivers/scsi/ufs/ufshcd.c if (lrbp->cmd) lrbp 344 drivers/scsi/ufs/ufshcd.c if (lrbp->cmd) { /* data phase exists */ lrbp 347 drivers/scsi/ufs/ufshcd.c opcode = (u8)(*lrbp->cmd->cmnd); lrbp 353 drivers/scsi/ufs/ufshcd.c if (lrbp->cmd->request && lrbp->cmd->request->bio) lrbp 355 drivers/scsi/ufs/ufshcd.c lrbp->cmd->request->bio->bi_iter.bi_sector; lrbp 357 drivers/scsi/ufs/ufshcd.c lrbp->ucd_req_ptr->sc.exp_data_transfer_len); lrbp 443 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp; lrbp 448 drivers/scsi/ufs/ufshcd.c lrbp = &hba->lrb[tag]; lrbp 451 drivers/scsi/ufs/ufshcd.c tag, ktime_to_us(lrbp->issue_time_stamp)); lrbp 453 drivers/scsi/ufs/ufshcd.c tag, ktime_to_us(lrbp->compl_time_stamp)); lrbp 456 drivers/scsi/ufs/ufshcd.c tag, (u64)lrbp->utrd_dma_addr); lrbp 458 drivers/scsi/ufs/ufshcd.c ufshcd_hex_dump("UPIU TRD: ", lrbp->utr_descriptor_ptr, lrbp 461 drivers/scsi/ufs/ufshcd.c (u64)lrbp->ucd_req_dma_addr); lrbp 462 drivers/scsi/ufs/ufshcd.c ufshcd_hex_dump("UPIU REQ: ", lrbp->ucd_req_ptr, lrbp 465 drivers/scsi/ufs/ufshcd.c (u64)lrbp->ucd_rsp_dma_addr); lrbp 466 drivers/scsi/ufs/ufshcd.c ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr, lrbp 470 drivers/scsi/ufs/ufshcd.c lrbp->utr_descriptor_ptr->prd_table_length); lrbp 474 drivers/scsi/ufs/ufshcd.c (u64)lrbp->ucd_prdt_dma_addr); lrbp 477 drivers/scsi/ufs/ufshcd.c ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr, lrbp 640 drivers/scsi/ufs/ufshcd.c static inline int ufshcd_get_tr_ocs(struct ufshcd_lrb *lrbp) lrbp 642 drivers/scsi/ufs/ufshcd.c return le32_to_cpu(lrbp->utr_descriptor_ptr->header.dword_2) & MASK_OCS; lrbp 1898 drivers/scsi/ufs/ufshcd.c static inline void ufshcd_copy_sense_data(struct ufshcd_lrb *lrbp) lrbp 1901 drivers/scsi/ufs/ufshcd.c if (lrbp->sense_buffer && lrbp 1902 drivers/scsi/ufs/ufshcd.c ufshcd_get_rsp_upiu_data_seg_len(lrbp->ucd_rsp_ptr)) { lrbp 1905 drivers/scsi/ufs/ufshcd.c len = be16_to_cpu(lrbp->ucd_rsp_ptr->sr.sense_data_len); lrbp 1908 drivers/scsi/ufs/ufshcd.c memcpy(lrbp->sense_buffer, lrbp->ucd_rsp_ptr->sr.sense_data, lrbp 1920 drivers/scsi/ufs/ufshcd.c int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) lrbp 1924 drivers/scsi/ufs/ufshcd.c memcpy(&query_res->upiu_res, &lrbp->ucd_rsp_ptr->qr, QUERY_OSF_SIZE); lrbp 1928 drivers/scsi/ufs/ufshcd.c lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) { lrbp 1929 drivers/scsi/ufs/ufshcd.c u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + lrbp 1935 drivers/scsi/ufs/ufshcd.c resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & lrbp 2106 drivers/scsi/ufs/ufshcd.c static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) lrbp 2114 drivers/scsi/ufs/ufshcd.c cmd = lrbp->cmd; lrbp 2121 drivers/scsi/ufs/ufshcd.c lrbp->utr_descriptor_ptr->prd_table_length = lrbp 2125 drivers/scsi/ufs/ufshcd.c lrbp->utr_descriptor_ptr->prd_table_length = lrbp 2128 drivers/scsi/ufs/ufshcd.c prd_table = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr; lrbp 2140 drivers/scsi/ufs/ufshcd.c lrbp->utr_descriptor_ptr->prd_table_length = 0; lrbp 2195 drivers/scsi/ufs/ufshcd.c static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp, lrbp 2198 drivers/scsi/ufs/ufshcd.c struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr; lrbp 2213 drivers/scsi/ufs/ufshcd.c dword_0 = data_direction | (lrbp->command_type lrbp 2215 drivers/scsi/ufs/ufshcd.c if (lrbp->intr_cmd) lrbp 2242 drivers/scsi/ufs/ufshcd.c void ufshcd_prepare_utp_scsi_cmd_upiu(struct ufshcd_lrb *lrbp, u32 upiu_flags) lrbp 2244 drivers/scsi/ufs/ufshcd.c struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; lrbp 2250 drivers/scsi/ufs/ufshcd.c lrbp->lun, lrbp->task_tag); lrbp 2258 drivers/scsi/ufs/ufshcd.c cpu_to_be32(lrbp->cmd->sdb.length); lrbp 2260 drivers/scsi/ufs/ufshcd.c cdb_len = min_t(unsigned short, lrbp->cmd->cmd_len, UFS_CDB_SIZE); lrbp 2262 drivers/scsi/ufs/ufshcd.c memcpy(ucd_req_ptr->sc.cdb, lrbp->cmd->cmnd, cdb_len); lrbp 2264 drivers/scsi/ufs/ufshcd.c memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); lrbp 2275 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp, u32 upiu_flags) lrbp 2277 drivers/scsi/ufs/ufshcd.c struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; lrbp 2284 drivers/scsi/ufs/ufshcd.c lrbp->lun, lrbp->task_tag); lrbp 2303 drivers/scsi/ufs/ufshcd.c memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); lrbp 2306 drivers/scsi/ufs/ufshcd.c static inline void ufshcd_prepare_utp_nop_upiu(struct ufshcd_lrb *lrbp) lrbp 2308 drivers/scsi/ufs/ufshcd.c struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; lrbp 2315 drivers/scsi/ufs/ufshcd.c UPIU_TRANSACTION_NOP_OUT, 0, 0, lrbp->task_tag); lrbp 2320 drivers/scsi/ufs/ufshcd.c memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); lrbp 2329 drivers/scsi/ufs/ufshcd.c static int ufshcd_comp_devman_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) lrbp 2336 drivers/scsi/ufs/ufshcd.c lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; lrbp 2338 drivers/scsi/ufs/ufshcd.c lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; lrbp 2340 drivers/scsi/ufs/ufshcd.c ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); lrbp 2342 drivers/scsi/ufs/ufshcd.c ufshcd_prepare_utp_query_req_upiu(hba, lrbp, upiu_flags); lrbp 2344 drivers/scsi/ufs/ufshcd.c ufshcd_prepare_utp_nop_upiu(lrbp); lrbp 2357 drivers/scsi/ufs/ufshcd.c static int ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) lrbp 2364 drivers/scsi/ufs/ufshcd.c lrbp->command_type = UTP_CMD_TYPE_SCSI; lrbp 2366 drivers/scsi/ufs/ufshcd.c lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; lrbp 2368 drivers/scsi/ufs/ufshcd.c if (likely(lrbp->cmd)) { lrbp 2369 drivers/scsi/ufs/ufshcd.c ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, lrbp 2370 drivers/scsi/ufs/ufshcd.c lrbp->cmd->sc_data_direction); lrbp 2371 drivers/scsi/ufs/ufshcd.c ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags); lrbp 2399 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp; lrbp 2468 drivers/scsi/ufs/ufshcd.c lrbp = &hba->lrb[tag]; lrbp 2470 drivers/scsi/ufs/ufshcd.c WARN_ON(lrbp->cmd); lrbp 2471 drivers/scsi/ufs/ufshcd.c lrbp->cmd = cmd; lrbp 2472 drivers/scsi/ufs/ufshcd.c lrbp->sense_bufflen = UFS_SENSE_SIZE; lrbp 2473 drivers/scsi/ufs/ufshcd.c lrbp->sense_buffer = cmd->sense_buffer; lrbp 2474 drivers/scsi/ufs/ufshcd.c lrbp->task_tag = tag; lrbp 2475 drivers/scsi/ufs/ufshcd.c lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun); lrbp 2476 drivers/scsi/ufs/ufshcd.c lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false; lrbp 2477 drivers/scsi/ufs/ufshcd.c lrbp->req_abort_skip = false; lrbp 2479 drivers/scsi/ufs/ufshcd.c ufshcd_comp_scsi_upiu(hba, lrbp); lrbp 2481 drivers/scsi/ufs/ufshcd.c err = ufshcd_map_sg(hba, lrbp); lrbp 2484 drivers/scsi/ufs/ufshcd.c lrbp->cmd = NULL; lrbp 2493 drivers/scsi/ufs/ufshcd.c ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false)); lrbp 2503 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag) lrbp 2505 drivers/scsi/ufs/ufshcd.c lrbp->cmd = NULL; lrbp 2506 drivers/scsi/ufs/ufshcd.c lrbp->sense_bufflen = 0; lrbp 2507 drivers/scsi/ufs/ufshcd.c lrbp->sense_buffer = NULL; lrbp 2508 drivers/scsi/ufs/ufshcd.c lrbp->task_tag = tag; lrbp 2509 drivers/scsi/ufs/ufshcd.c lrbp->lun = 0; /* device management cmd is not specific to any LUN */ lrbp 2510 drivers/scsi/ufs/ufshcd.c lrbp->intr_cmd = true; /* No interrupt aggregation */ lrbp 2513 drivers/scsi/ufs/ufshcd.c return ufshcd_comp_devman_upiu(hba, lrbp); lrbp 2540 drivers/scsi/ufs/ufshcd.c ufshcd_check_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) lrbp 2545 drivers/scsi/ufs/ufshcd.c query_res->response = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr) >> lrbp 2556 drivers/scsi/ufs/ufshcd.c ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) lrbp 2562 drivers/scsi/ufs/ufshcd.c resp = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); lrbp 2573 drivers/scsi/ufs/ufshcd.c err = ufshcd_check_query_response(hba, lrbp); lrbp 2575 drivers/scsi/ufs/ufshcd.c err = ufshcd_copy_query_response(hba, lrbp); lrbp 2594 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp, int max_timeout) lrbp 2608 drivers/scsi/ufs/ufshcd.c err = ufshcd_get_tr_ocs(lrbp); lrbp 2610 drivers/scsi/ufs/ufshcd.c err = ufshcd_dev_cmd_completion(hba, lrbp); lrbp 2617 drivers/scsi/ufs/ufshcd.c __func__, lrbp->task_tag); lrbp 2618 drivers/scsi/ufs/ufshcd.c if (!ufshcd_clear_cmd(hba, lrbp->task_tag)) lrbp 2626 drivers/scsi/ufs/ufshcd.c ufshcd_outstanding_req_clear(hba, lrbp->task_tag); lrbp 2682 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp; lrbp 2698 drivers/scsi/ufs/ufshcd.c lrbp = &hba->lrb[tag]; lrbp 2699 drivers/scsi/ufs/ufshcd.c WARN_ON(lrbp->cmd); lrbp 2700 drivers/scsi/ufs/ufshcd.c err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag); lrbp 2710 drivers/scsi/ufs/ufshcd.c ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false)); lrbp 2714 drivers/scsi/ufs/ufshcd.c err = ufshcd_wait_for_dev_cmd(hba, lrbp, timeout); lrbp 4682 drivers/scsi/ufs/ufshcd.c ufshcd_scsi_cmd_status(struct ufshcd_lrb *lrbp, int scsi_status) lrbp 4688 drivers/scsi/ufs/ufshcd.c ufshcd_copy_sense_data(lrbp); lrbp 4698 drivers/scsi/ufs/ufshcd.c ufshcd_copy_sense_data(lrbp); lrbp 4717 drivers/scsi/ufs/ufshcd.c ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) lrbp 4724 drivers/scsi/ufs/ufshcd.c ocs = ufshcd_get_tr_ocs(lrbp); lrbp 4728 drivers/scsi/ufs/ufshcd.c result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); lrbp 4736 drivers/scsi/ufs/ufshcd.c result = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr); lrbp 4743 drivers/scsi/ufs/ufshcd.c result = ufshcd_scsi_cmd_status(lrbp, scsi_status); lrbp 4758 drivers/scsi/ufs/ufshcd.c ufshcd_is_exception_event(lrbp->ucd_rsp_ptr)) lrbp 4791 drivers/scsi/ufs/ufshcd.c ocs, lrbp->task_tag); lrbp 4798 drivers/scsi/ufs/ufshcd.c ufshcd_print_trs(hba, 1 << lrbp->task_tag, true); lrbp 4829 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp; lrbp 4835 drivers/scsi/ufs/ufshcd.c lrbp = &hba->lrb[index]; lrbp 4836 drivers/scsi/ufs/ufshcd.c cmd = lrbp->cmd; lrbp 4839 drivers/scsi/ufs/ufshcd.c result = ufshcd_transfer_rsp_status(hba, lrbp); lrbp 4843 drivers/scsi/ufs/ufshcd.c lrbp->cmd = NULL; lrbp 4848 drivers/scsi/ufs/ufshcd.c } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE || lrbp 4849 drivers/scsi/ufs/ufshcd.c lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) { lrbp 4859 drivers/scsi/ufs/ufshcd.c lrbp->compl_time_stamp = ktime_get(); lrbp 5801 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp; lrbp 5813 drivers/scsi/ufs/ufshcd.c lrbp = &hba->lrb[tag]; lrbp 5814 drivers/scsi/ufs/ufshcd.c WARN_ON(lrbp->cmd); lrbp 5816 drivers/scsi/ufs/ufshcd.c lrbp->cmd = NULL; lrbp 5817 drivers/scsi/ufs/ufshcd.c lrbp->sense_bufflen = 0; lrbp 5818 drivers/scsi/ufs/ufshcd.c lrbp->sense_buffer = NULL; lrbp 5819 drivers/scsi/ufs/ufshcd.c lrbp->task_tag = tag; lrbp 5820 drivers/scsi/ufs/ufshcd.c lrbp->lun = 0; lrbp 5821 drivers/scsi/ufs/ufshcd.c lrbp->intr_cmd = true; lrbp 5827 drivers/scsi/ufs/ufshcd.c lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; lrbp 5830 drivers/scsi/ufs/ufshcd.c lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; lrbp 5837 drivers/scsi/ufs/ufshcd.c ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); lrbp 5840 drivers/scsi/ufs/ufshcd.c memcpy(lrbp->ucd_req_ptr, req_upiu, sizeof(*lrbp->ucd_req_ptr)); lrbp 5846 drivers/scsi/ufs/ufshcd.c memcpy(lrbp->ucd_req_ptr + 1, desc_buff, *buff_len); lrbp 5850 drivers/scsi/ufs/ufshcd.c memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); lrbp 5865 drivers/scsi/ufs/ufshcd.c ufshcd_wait_for_dev_cmd(hba, lrbp, QUERY_REQ_TIMEOUT); lrbp 5868 drivers/scsi/ufs/ufshcd.c memcpy(rsp_upiu, lrbp->ucd_rsp_ptr, sizeof(*rsp_upiu)); lrbp 5870 drivers/scsi/ufs/ufshcd.c u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + sizeof(*rsp_upiu); lrbp 5871 drivers/scsi/ufs/ufshcd.c u16 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & lrbp 5976 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp; lrbp 5983 drivers/scsi/ufs/ufshcd.c lrbp = &hba->lrb[tag]; lrbp 5984 drivers/scsi/ufs/ufshcd.c err = ufshcd_issue_tm_cmd(hba, lrbp->lun, 0, UFS_LOGICAL_RESET, &resp); lrbp 5993 drivers/scsi/ufs/ufshcd.c if (hba->lrb[pos].lun == lrbp->lun) { lrbp 6017 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp; lrbp 6021 drivers/scsi/ufs/ufshcd.c lrbp = &hba->lrb[tag]; lrbp 6022 drivers/scsi/ufs/ufshcd.c lrbp->req_abort_skip = true; lrbp 6047 drivers/scsi/ufs/ufshcd.c struct ufshcd_lrb *lrbp; lrbp 6053 drivers/scsi/ufs/ufshcd.c lrbp = &hba->lrb[tag]; lrbp 6068 drivers/scsi/ufs/ufshcd.c if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN) lrbp 6110 drivers/scsi/ufs/ufshcd.c if (lrbp->req_abort_skip) { lrbp 6116 drivers/scsi/ufs/ufshcd.c err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, lrbp 6155 drivers/scsi/ufs/ufshcd.c err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,