Lines Matching refs:lrbp

300 static inline int ufshcd_get_tr_ocs(struct ufshcd_lrb *lrbp)  in ufshcd_get_tr_ocs()  argument
302 return le32_to_cpu(lrbp->utr_descriptor_ptr->header.dword_2) & MASK_OCS; in ufshcd_get_tr_ocs()
811 static inline void ufshcd_copy_sense_data(struct ufshcd_lrb *lrbp) in ufshcd_copy_sense_data() argument
814 if (lrbp->sense_buffer && in ufshcd_copy_sense_data()
815 ufshcd_get_rsp_upiu_data_seg_len(lrbp->ucd_rsp_ptr)) { in ufshcd_copy_sense_data()
816 len = be16_to_cpu(lrbp->ucd_rsp_ptr->sr.sense_data_len); in ufshcd_copy_sense_data()
817 memcpy(lrbp->sense_buffer, in ufshcd_copy_sense_data()
818 lrbp->ucd_rsp_ptr->sr.sense_data, in ufshcd_copy_sense_data()
830 int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_copy_query_response() argument
834 memcpy(&query_res->upiu_res, &lrbp->ucd_rsp_ptr->qr, QUERY_OSF_SIZE); in ufshcd_copy_query_response()
837 if (lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) { in ufshcd_copy_query_response()
838 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + in ufshcd_copy_query_response()
844 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & in ufshcd_copy_query_response()
1012 static int ufshcd_map_sg(struct ufshcd_lrb *lrbp) in ufshcd_map_sg() argument
1020 cmd = lrbp->cmd; in ufshcd_map_sg()
1026 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
1029 prd_table = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr; in ufshcd_map_sg()
1040 lrbp->utr_descriptor_ptr->prd_table_length = 0; in ufshcd_map_sg()
1095 static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp, in ufshcd_prepare_req_desc_hdr() argument
1098 struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr; in ufshcd_prepare_req_desc_hdr()
1113 dword_0 = data_direction | (lrbp->command_type in ufshcd_prepare_req_desc_hdr()
1115 if (lrbp->intr_cmd) in ufshcd_prepare_req_desc_hdr()
1137 void ufshcd_prepare_utp_scsi_cmd_upiu(struct ufshcd_lrb *lrbp, u32 upiu_flags) in ufshcd_prepare_utp_scsi_cmd_upiu() argument
1139 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_scsi_cmd_upiu()
1144 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_scsi_cmd_upiu()
1152 cpu_to_be32(lrbp->cmd->sdb.length); in ufshcd_prepare_utp_scsi_cmd_upiu()
1154 memcpy(ucd_req_ptr->sc.cdb, lrbp->cmd->cmnd, in ufshcd_prepare_utp_scsi_cmd_upiu()
1155 (min_t(unsigned short, lrbp->cmd->cmd_len, MAX_CDB_SIZE))); in ufshcd_prepare_utp_scsi_cmd_upiu()
1166 struct ufshcd_lrb *lrbp, u32 upiu_flags) in ufshcd_prepare_utp_query_req_upiu() argument
1168 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_query_req_upiu()
1171 u8 *descp = (u8 *)lrbp->ucd_req_ptr + GENERAL_UPIU_REQUEST_SIZE; in ufshcd_prepare_utp_query_req_upiu()
1176 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_query_req_upiu()
1194 static inline void ufshcd_prepare_utp_nop_upiu(struct ufshcd_lrb *lrbp) in ufshcd_prepare_utp_nop_upiu() argument
1196 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_nop_upiu()
1203 UPIU_TRANSACTION_NOP_OUT, 0, 0, lrbp->task_tag); in ufshcd_prepare_utp_nop_upiu()
1211 static int ufshcd_compose_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_compose_upiu() argument
1216 switch (lrbp->command_type) { in ufshcd_compose_upiu()
1218 if (likely(lrbp->cmd)) { in ufshcd_compose_upiu()
1219 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, in ufshcd_compose_upiu()
1220 lrbp->cmd->sc_data_direction); in ufshcd_compose_upiu()
1221 ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags); in ufshcd_compose_upiu()
1227 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); in ufshcd_compose_upiu()
1230 hba, lrbp, upiu_flags); in ufshcd_compose_upiu()
1232 ufshcd_prepare_utp_nop_upiu(lrbp); in ufshcd_compose_upiu()
1245 __func__, lrbp->command_type); in ufshcd_compose_upiu()
1287 struct ufshcd_lrb *lrbp; in ufshcd_queuecommand() local
1337 lrbp = &hba->lrb[tag]; in ufshcd_queuecommand()
1339 WARN_ON(lrbp->cmd); in ufshcd_queuecommand()
1340 lrbp->cmd = cmd; in ufshcd_queuecommand()
1341 lrbp->sense_bufflen = SCSI_SENSE_BUFFERSIZE; in ufshcd_queuecommand()
1342 lrbp->sense_buffer = cmd->sense_buffer; in ufshcd_queuecommand()
1343 lrbp->task_tag = tag; in ufshcd_queuecommand()
1344 lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun); in ufshcd_queuecommand()
1345 lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false; in ufshcd_queuecommand()
1346 lrbp->command_type = UTP_CMD_TYPE_SCSI; in ufshcd_queuecommand()
1349 ufshcd_compose_upiu(hba, lrbp); in ufshcd_queuecommand()
1350 err = ufshcd_map_sg(lrbp); in ufshcd_queuecommand()
1352 lrbp->cmd = NULL; in ufshcd_queuecommand()
1367 struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag) in ufshcd_compose_dev_cmd() argument
1369 lrbp->cmd = NULL; in ufshcd_compose_dev_cmd()
1370 lrbp->sense_bufflen = 0; in ufshcd_compose_dev_cmd()
1371 lrbp->sense_buffer = NULL; in ufshcd_compose_dev_cmd()
1372 lrbp->task_tag = tag; in ufshcd_compose_dev_cmd()
1373 lrbp->lun = 0; /* device management cmd is not specific to any LUN */ in ufshcd_compose_dev_cmd()
1374 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; in ufshcd_compose_dev_cmd()
1375 lrbp->intr_cmd = true; /* No interrupt aggregation */ in ufshcd_compose_dev_cmd()
1378 return ufshcd_compose_upiu(hba, lrbp); in ufshcd_compose_dev_cmd()
1405 ufshcd_check_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_check_query_response() argument
1410 query_res->response = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr) >> in ufshcd_check_query_response()
1421 ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_dev_cmd_completion() argument
1426 resp = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_dev_cmd_completion()
1437 err = ufshcd_check_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
1439 err = ufshcd_copy_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
1458 struct ufshcd_lrb *lrbp, int max_timeout) in ufshcd_wait_for_dev_cmd() argument
1470 err = ufshcd_get_tr_ocs(lrbp); in ufshcd_wait_for_dev_cmd()
1472 err = ufshcd_dev_cmd_completion(hba, lrbp); in ufshcd_wait_for_dev_cmd()
1478 if (!ufshcd_clear_cmd(hba, lrbp->task_tag)) in ufshcd_wait_for_dev_cmd()
1536 struct ufshcd_lrb *lrbp; in ufshcd_exec_dev_cmd() local
1550 lrbp = &hba->lrb[tag]; in ufshcd_exec_dev_cmd()
1551 WARN_ON(lrbp->cmd); in ufshcd_exec_dev_cmd()
1552 err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag); in ufshcd_exec_dev_cmd()
1562 err = ufshcd_wait_for_dev_cmd(hba, lrbp, timeout); in ufshcd_exec_dev_cmd()
3031 ufshcd_scsi_cmd_status(struct ufshcd_lrb *lrbp, int scsi_status) in ufshcd_scsi_cmd_status() argument
3037 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
3046 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
3065 ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_transfer_rsp_status() argument
3072 ocs = ufshcd_get_tr_ocs(lrbp); in ufshcd_transfer_rsp_status()
3076 result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
3084 result = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
3091 result = ufshcd_scsi_cmd_status(lrbp, scsi_status); in ufshcd_transfer_rsp_status()
3093 if (ufshcd_is_exception_event(lrbp->ucd_rsp_ptr)) in ufshcd_transfer_rsp_status()
3157 struct ufshcd_lrb *lrbp; in ufshcd_transfer_req_compl() local
3178 lrbp = &hba->lrb[index]; in ufshcd_transfer_req_compl()
3179 cmd = lrbp->cmd; in ufshcd_transfer_req_compl()
3181 result = ufshcd_transfer_rsp_status(hba, lrbp); in ufshcd_transfer_req_compl()
3185 lrbp->cmd = NULL; in ufshcd_transfer_req_compl()
3190 } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE) { in ufshcd_transfer_req_compl()
3785 struct ufshcd_lrb *lrbp; in ufshcd_eh_device_reset_handler() local
3792 lrbp = &hba->lrb[tag]; in ufshcd_eh_device_reset_handler()
3793 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, 0, UFS_LOGICAL_RESET, &resp); in ufshcd_eh_device_reset_handler()
3802 if (hba->lrb[pos].lun == lrbp->lun) { in ufshcd_eh_device_reset_handler()
3842 struct ufshcd_lrb *lrbp; in ufshcd_abort() local
3861 lrbp = &hba->lrb[tag]; in ufshcd_abort()
3863 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_abort()
3893 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_abort()