Similar with the vops setup_xfer_req in ufshcd_send_command(), this change
adds the vops compl_xfer_req in __ufshcd_transfer_req_compl() such that
vendor drivers can make use of the two hooks to do variant stuffs.

Signed-off-by: Kiwoong Kim <kwmad....@samsung.com>
Signed-off-by: Can Guo <c...@codeaurora.org>

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index e221add..7ca7564 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -5016,6 +5016,7 @@ static void __ufshcd_transfer_req_compl(struct ufs_hba 
*hba,
                lrbp->in_use = false;
                lrbp->compl_time_stamp = ktime_get();
                cmd = lrbp->cmd;
+               ufshcd_vops_compl_xfer_req(hba, index, (cmd) ? true : false);
                if (cmd) {
                        ufshcd_add_command_trace(hba, index, "complete");
                        result = ufshcd_transfer_rsp_status(hba, lrbp);
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 9bb5f0e..e3fb62f 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -310,7 +310,7 @@ struct ufs_pwr_mode_info {
  *                     is carried out to allow vendor spesific capabilities
  *                     to be set.
  * @setup_xfer_req: called before any transfer request is issued
- *                  to set some things
+ * @compl_xfer_req: called when any transfer request is completed
  * @setup_task_mgmt: called before any task management request is issued
  *                  to set some things
  * @hibern8_notify: called around hibern8 enter/exit
@@ -341,6 +341,7 @@ struct ufs_hba_variant_ops {
                                        struct ufs_pa_layer_attr *,
                                        struct ufs_pa_layer_attr *);
        void    (*setup_xfer_req)(struct ufs_hba *, int, bool);
+       void    (*compl_xfer_req)(struct ufs_hba *hba, int tag, bool is_scsi);
        void    (*setup_task_mgmt)(struct ufs_hba *, int, u8);
        void    (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme,
                                        enum ufs_notify_change_status);
@@ -1166,6 +1167,13 @@ static inline void ufshcd_vops_setup_xfer_req(struct 
ufs_hba *hba, int tag,
                return hba->vops->setup_xfer_req(hba, tag, is_scsi_cmd);
 }
 
+static inline void ufshcd_vops_compl_xfer_req(struct ufs_hba *hba,
+                                             int tag, bool is_scsi)
+{
+       if (hba->vops && hba->vops->compl_xfer_req)
+               hba->vops->compl_xfer_req(hba, tag, is_scsi);
+}
+
 static inline void ufshcd_vops_setup_task_mgmt(struct ufs_hba *hba,
                                        int tag, u8 tm_function)
 {
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux 
Foundation Collaborative Project.

Reply via email to