Lines Matching refs:lrbp
295 static inline int ufshcd_get_tr_ocs(struct ufshcd_lrb *lrbp) in ufshcd_get_tr_ocs() argument
297 return le32_to_cpu(lrbp->utr_descriptor_ptr->header.dword_2) & MASK_OCS; in ufshcd_get_tr_ocs()
795 static inline void ufshcd_copy_sense_data(struct ufshcd_lrb *lrbp) in ufshcd_copy_sense_data() argument
798 if (lrbp->sense_buffer && in ufshcd_copy_sense_data()
799 ufshcd_get_rsp_upiu_data_seg_len(lrbp->ucd_rsp_ptr)) { in ufshcd_copy_sense_data()
800 len = be16_to_cpu(lrbp->ucd_rsp_ptr->sr.sense_data_len); in ufshcd_copy_sense_data()
801 memcpy(lrbp->sense_buffer, in ufshcd_copy_sense_data()
802 lrbp->ucd_rsp_ptr->sr.sense_data, in ufshcd_copy_sense_data()
814 int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_copy_query_response() argument
818 memcpy(&query_res->upiu_res, &lrbp->ucd_rsp_ptr->qr, QUERY_OSF_SIZE); in ufshcd_copy_query_response()
821 if (lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) { in ufshcd_copy_query_response()
822 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + in ufshcd_copy_query_response()
828 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & in ufshcd_copy_query_response()
996 static int ufshcd_map_sg(struct ufshcd_lrb *lrbp) in ufshcd_map_sg() argument
1004 cmd = lrbp->cmd; in ufshcd_map_sg()
1010 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
1013 prd_table = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr; in ufshcd_map_sg()
1024 lrbp->utr_descriptor_ptr->prd_table_length = 0; in ufshcd_map_sg()
1079 static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp, in ufshcd_prepare_req_desc_hdr() argument
1082 struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr; in ufshcd_prepare_req_desc_hdr()
1097 dword_0 = data_direction | (lrbp->command_type in ufshcd_prepare_req_desc_hdr()
1099 if (lrbp->intr_cmd) in ufshcd_prepare_req_desc_hdr()
1121 void ufshcd_prepare_utp_scsi_cmd_upiu(struct ufshcd_lrb *lrbp, u32 upiu_flags) in ufshcd_prepare_utp_scsi_cmd_upiu() argument
1123 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_scsi_cmd_upiu()
1128 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_scsi_cmd_upiu()
1136 cpu_to_be32(lrbp->cmd->sdb.length); in ufshcd_prepare_utp_scsi_cmd_upiu()
1138 memcpy(ucd_req_ptr->sc.cdb, lrbp->cmd->cmnd, in ufshcd_prepare_utp_scsi_cmd_upiu()
1139 (min_t(unsigned short, lrbp->cmd->cmd_len, MAX_CDB_SIZE))); in ufshcd_prepare_utp_scsi_cmd_upiu()
1150 struct ufshcd_lrb *lrbp, u32 upiu_flags) in ufshcd_prepare_utp_query_req_upiu() argument
1152 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_query_req_upiu()
1155 u8 *descp = (u8 *)lrbp->ucd_req_ptr + GENERAL_UPIU_REQUEST_SIZE; in ufshcd_prepare_utp_query_req_upiu()
1160 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_query_req_upiu()
1178 static inline void ufshcd_prepare_utp_nop_upiu(struct ufshcd_lrb *lrbp) in ufshcd_prepare_utp_nop_upiu() argument
1180 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_nop_upiu()
1187 UPIU_TRANSACTION_NOP_OUT, 0, 0, lrbp->task_tag); in ufshcd_prepare_utp_nop_upiu()
1195 static int ufshcd_compose_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_compose_upiu() argument
1200 switch (lrbp->command_type) { in ufshcd_compose_upiu()
1202 if (likely(lrbp->cmd)) { in ufshcd_compose_upiu()
1203 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, in ufshcd_compose_upiu()
1204 lrbp->cmd->sc_data_direction); in ufshcd_compose_upiu()
1205 ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags); in ufshcd_compose_upiu()
1211 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); in ufshcd_compose_upiu()
1214 hba, lrbp, upiu_flags); in ufshcd_compose_upiu()
1216 ufshcd_prepare_utp_nop_upiu(lrbp); in ufshcd_compose_upiu()
1229 __func__, lrbp->command_type); in ufshcd_compose_upiu()
1271 struct ufshcd_lrb *lrbp; in ufshcd_queuecommand() local
1321 lrbp = &hba->lrb[tag]; in ufshcd_queuecommand()
1323 WARN_ON(lrbp->cmd); in ufshcd_queuecommand()
1324 lrbp->cmd = cmd; in ufshcd_queuecommand()
1325 lrbp->sense_bufflen = SCSI_SENSE_BUFFERSIZE; in ufshcd_queuecommand()
1326 lrbp->sense_buffer = cmd->sense_buffer; in ufshcd_queuecommand()
1327 lrbp->task_tag = tag; in ufshcd_queuecommand()
1328 lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun); in ufshcd_queuecommand()
1329 lrbp->intr_cmd = false; in ufshcd_queuecommand()
1330 lrbp->command_type = UTP_CMD_TYPE_SCSI; in ufshcd_queuecommand()
1333 ufshcd_compose_upiu(hba, lrbp); in ufshcd_queuecommand()
1334 err = ufshcd_map_sg(lrbp); in ufshcd_queuecommand()
1336 lrbp->cmd = NULL; in ufshcd_queuecommand()
1351 struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag) in ufshcd_compose_dev_cmd() argument
1353 lrbp->cmd = NULL; in ufshcd_compose_dev_cmd()
1354 lrbp->sense_bufflen = 0; in ufshcd_compose_dev_cmd()
1355 lrbp->sense_buffer = NULL; in ufshcd_compose_dev_cmd()
1356 lrbp->task_tag = tag; in ufshcd_compose_dev_cmd()
1357 lrbp->lun = 0; /* device management cmd is not specific to any LUN */ in ufshcd_compose_dev_cmd()
1358 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; in ufshcd_compose_dev_cmd()
1359 lrbp->intr_cmd = true; /* No interrupt aggregation */ in ufshcd_compose_dev_cmd()
1362 return ufshcd_compose_upiu(hba, lrbp); in ufshcd_compose_dev_cmd()
1389 ufshcd_check_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_check_query_response() argument
1394 query_res->response = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr) >> in ufshcd_check_query_response()
1405 ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_dev_cmd_completion() argument
1410 resp = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_dev_cmd_completion()
1421 err = ufshcd_check_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
1423 err = ufshcd_copy_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
1442 struct ufshcd_lrb *lrbp, int max_timeout) in ufshcd_wait_for_dev_cmd() argument
1454 err = ufshcd_get_tr_ocs(lrbp); in ufshcd_wait_for_dev_cmd()
1456 err = ufshcd_dev_cmd_completion(hba, lrbp); in ufshcd_wait_for_dev_cmd()
1462 if (!ufshcd_clear_cmd(hba, lrbp->task_tag)) in ufshcd_wait_for_dev_cmd()
1520 struct ufshcd_lrb *lrbp; in ufshcd_exec_dev_cmd() local
1534 lrbp = &hba->lrb[tag]; in ufshcd_exec_dev_cmd()
1535 WARN_ON(lrbp->cmd); in ufshcd_exec_dev_cmd()
1536 err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag); in ufshcd_exec_dev_cmd()
1546 err = ufshcd_wait_for_dev_cmd(hba, lrbp, timeout); in ufshcd_exec_dev_cmd()
2936 ufshcd_scsi_cmd_status(struct ufshcd_lrb *lrbp, int scsi_status) in ufshcd_scsi_cmd_status() argument
2942 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
2951 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
2970 ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_transfer_rsp_status() argument
2977 ocs = ufshcd_get_tr_ocs(lrbp); in ufshcd_transfer_rsp_status()
2981 result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
2989 result = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
2996 result = ufshcd_scsi_cmd_status(lrbp, scsi_status); in ufshcd_transfer_rsp_status()
2998 if (ufshcd_is_exception_event(lrbp->ucd_rsp_ptr)) in ufshcd_transfer_rsp_status()
3062 struct ufshcd_lrb *lrbp; in ufshcd_transfer_req_compl() local
3082 lrbp = &hba->lrb[index]; in ufshcd_transfer_req_compl()
3083 cmd = lrbp->cmd; in ufshcd_transfer_req_compl()
3085 result = ufshcd_transfer_rsp_status(hba, lrbp); in ufshcd_transfer_req_compl()
3089 lrbp->cmd = NULL; in ufshcd_transfer_req_compl()
3094 } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE) { in ufshcd_transfer_req_compl()
3689 struct ufshcd_lrb *lrbp; in ufshcd_eh_device_reset_handler() local
3696 lrbp = &hba->lrb[tag]; in ufshcd_eh_device_reset_handler()
3697 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, 0, UFS_LOGICAL_RESET, &resp); in ufshcd_eh_device_reset_handler()
3706 if (hba->lrb[pos].lun == lrbp->lun) { in ufshcd_eh_device_reset_handler()
3746 struct ufshcd_lrb *lrbp; in ufshcd_abort() local
3765 lrbp = &hba->lrb[tag]; in ufshcd_abort()
3767 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_abort()
3797 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_abort()