mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
FROMGIT: scsi: ufs: core: Split ufshcd_map_sg()
Take out the "map scatter-gather list to prdt" part of the code in
ufshcd_map_sg() and split it into a new function ufshcd_sgl_to_prdt().
Change-Id: Ie16b9cb0008133d04f29647d6f07751dd90d5dc8
Signed-off-by: Bean Huo <beanhuo@micron.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit 7a4df79d0b git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next)
Signed-off-by: Bart Van Assche <bvanassche@google.com>
This commit is contained in:
committed by
Treehugger Robot
parent
21e01886ef
commit
6e76eb7899
@@ -2405,38 +2405,30 @@ int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
|
||||
}
|
||||
|
||||
/**
|
||||
* ufshcd_map_sg - Map scatter-gather list to prdt
|
||||
* @hba: per adapter instance
|
||||
* @lrbp: pointer to local reference block
|
||||
*
|
||||
* Returns 0 in case of success, non-zero value in case of failure
|
||||
* ufshcd_sgl_to_prdt - SG list to PRTD (Physical Region Description Table, 4DW format)
|
||||
* @hba: per-adapter instance
|
||||
* @lrbp: pointer to local reference block
|
||||
* @sg_entries: The number of sg lists actually used
|
||||
* @sg_list: Pointer to SG list
|
||||
*/
|
||||
static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
|
||||
static void ufshcd_sgl_to_prdt(struct ufs_hba *hba, struct ufshcd_lrb *lrbp, int sg_entries,
|
||||
struct scatterlist *sg_list)
|
||||
{
|
||||
struct ufshcd_sg_entry *prd;
|
||||
struct scatterlist *sg;
|
||||
struct scsi_cmnd *cmd;
|
||||
int sg_segments;
|
||||
int i;
|
||||
int err;
|
||||
|
||||
cmd = lrbp->cmd;
|
||||
sg_segments = scsi_dma_map(cmd);
|
||||
if (sg_segments < 0)
|
||||
return sg_segments;
|
||||
|
||||
if (sg_segments) {
|
||||
if (sg_entries) {
|
||||
|
||||
if (hba->quirks & UFSHCD_QUIRK_PRDT_BYTE_GRAN)
|
||||
lrbp->utr_descriptor_ptr->prd_table_length =
|
||||
cpu_to_le16(sg_segments * hba->sg_entry_size);
|
||||
cpu_to_le16(sg_entries * hba->sg_entry_size);
|
||||
else
|
||||
lrbp->utr_descriptor_ptr->prd_table_length =
|
||||
cpu_to_le16(sg_segments);
|
||||
lrbp->utr_descriptor_ptr->prd_table_length = cpu_to_le16(sg_entries);
|
||||
|
||||
prd = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr;
|
||||
|
||||
scsi_for_each_sg(cmd, sg, sg_segments, i) {
|
||||
for_each_sg(sg_list, sg, sg_entries, i) {
|
||||
const unsigned int len = sg_dma_len(sg);
|
||||
|
||||
/*
|
||||
@@ -2456,6 +2448,25 @@ static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
|
||||
} else {
|
||||
lrbp->utr_descriptor_ptr->prd_table_length = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ufshcd_map_sg - Map scatter-gather list to prdt
|
||||
* @hba: per adapter instance
|
||||
* @lrbp: pointer to local reference block
|
||||
*
|
||||
* Returns 0 in case of success, non-zero value in case of failure
|
||||
*/
|
||||
static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
|
||||
{
|
||||
struct scsi_cmnd *cmd = lrbp->cmd;
|
||||
int sg_segments = scsi_dma_map(cmd);
|
||||
int err;
|
||||
|
||||
if (sg_segments < 0)
|
||||
return sg_segments;
|
||||
|
||||
ufshcd_sgl_to_prdt(hba, lrbp, sg_segments, scsi_sglist(cmd));
|
||||
|
||||
err = 0;
|
||||
trace_android_vh_ufs_fill_prdt(hba, lrbp, sg_segments, &err);
|
||||
|
||||
Reference in New Issue
Block a user