Commit 391e388f authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Martin K. Petersen

scsi: ufs: cleanup struct utp_task_req_desc

Remove the pointless task_req_upiu and task_rsp_upiu indirections,
which are __le32 arrays always cast to given structures and just add
the members directly.  Also clean up variables names in use in the
callers a bit to make the code more readable.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAvri Altman <avri.altman@wdc.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 51aef716
...@@ -519,36 +519,6 @@ struct utp_upiu_rsp { ...@@ -519,36 +519,6 @@ struct utp_upiu_rsp {
}; };
}; };
/**
* struct utp_upiu_task_req - Task request UPIU structure
* @header - UPIU header structure DW0 to DW-2
* @input_param1: Input parameter 1 DW-3
* @input_param2: Input parameter 2 DW-4
* @input_param3: Input parameter 3 DW-5
* @reserved: Reserved double words DW-6 to DW-7
*/
struct utp_upiu_task_req {
struct utp_upiu_header header;
__be32 input_param1;
__be32 input_param2;
__be32 input_param3;
__be32 reserved[2];
};
/**
* struct utp_upiu_task_rsp - Task Management Response UPIU structure
* @header: UPIU header structure DW0-DW-2
* @output_param1: Ouput parameter 1 DW3
* @output_param2: Output parameter 2 DW4
* @reserved: Reserved double words DW-5 to DW-7
*/
struct utp_upiu_task_rsp {
struct utp_upiu_header header;
__be32 output_param1;
__be32 output_param2;
__be32 reserved[3];
};
/** /**
* struct ufs_query_req - parameters for building a query request * struct ufs_query_req - parameters for building a query request
* @query_func: UPIU header query function * @query_func: UPIU header query function
......
...@@ -326,14 +326,11 @@ static void ufshcd_add_query_upiu_trace(struct ufs_hba *hba, unsigned int tag, ...@@ -326,14 +326,11 @@ static void ufshcd_add_query_upiu_trace(struct ufs_hba *hba, unsigned int tag,
static void ufshcd_add_tm_upiu_trace(struct ufs_hba *hba, unsigned int tag, static void ufshcd_add_tm_upiu_trace(struct ufs_hba *hba, unsigned int tag,
const char *str) const char *str)
{ {
struct utp_task_req_desc *descp;
struct utp_upiu_task_req *task_req;
int off = (int)tag - hba->nutrs; int off = (int)tag - hba->nutrs;
struct utp_task_req_desc *descp = &hba->utmrdl_base_addr[off];
descp = &hba->utmrdl_base_addr[off]; trace_ufshcd_upiu(dev_name(hba->dev), str, &descp->req_header,
task_req = (struct utp_upiu_task_req *)descp->task_req_upiu; &descp->input_param1);
trace_ufshcd_upiu(dev_name(hba->dev), str, &task_req->header,
&task_req->input_param1);
} }
static void ufshcd_add_command_trace(struct ufs_hba *hba, static void ufshcd_add_command_trace(struct ufs_hba *hba,
...@@ -475,22 +472,13 @@ void ufshcd_print_trs(struct ufs_hba *hba, unsigned long bitmap, bool pr_prdt) ...@@ -475,22 +472,13 @@ void ufshcd_print_trs(struct ufs_hba *hba, unsigned long bitmap, bool pr_prdt)
static void ufshcd_print_tmrs(struct ufs_hba *hba, unsigned long bitmap) static void ufshcd_print_tmrs(struct ufs_hba *hba, unsigned long bitmap)
{ {
struct utp_task_req_desc *tmrdp;
int tag; int tag;
for_each_set_bit(tag, &bitmap, hba->nutmrs) { for_each_set_bit(tag, &bitmap, hba->nutmrs) {
tmrdp = &hba->utmrdl_base_addr[tag]; struct utp_task_req_desc *tmrdp = &hba->utmrdl_base_addr[tag];
dev_err(hba->dev, "TM[%d] - Task Management Header\n", tag); dev_err(hba->dev, "TM[%d] - Task Management Header\n", tag);
ufshcd_hex_dump("TM TRD: ", &tmrdp->header, ufshcd_hex_dump("", tmrdp, sizeof(*tmrdp));
sizeof(struct request_desc_header));
dev_err(hba->dev, "TM[%d] - Task Management Request UPIU\n",
tag);
ufshcd_hex_dump("TM REQ: ", tmrdp->task_req_upiu,
sizeof(struct utp_upiu_req));
dev_err(hba->dev, "TM[%d] - Task Management Response UPIU\n",
tag);
ufshcd_hex_dump("TM RSP: ", tmrdp->task_rsp_upiu,
sizeof(struct utp_task_req_desc));
} }
} }
...@@ -4638,31 +4626,22 @@ static void ufshcd_slave_destroy(struct scsi_device *sdev) ...@@ -4638,31 +4626,22 @@ static void ufshcd_slave_destroy(struct scsi_device *sdev)
*/ */
static int ufshcd_task_req_compl(struct ufs_hba *hba, u32 index, u8 *resp) static int ufshcd_task_req_compl(struct ufs_hba *hba, u32 index, u8 *resp)
{ {
struct utp_task_req_desc *task_req_descp; struct utp_task_req_desc *treq = hba->utmrdl_base_addr + index;
struct utp_upiu_task_rsp *task_rsp_upiup;
unsigned long flags; unsigned long flags;
int ocs_value; int ocs_value;
int task_result;
spin_lock_irqsave(hba->host->host_lock, flags); spin_lock_irqsave(hba->host->host_lock, flags);
/* Clear completed tasks from outstanding_tasks */ /* Clear completed tasks from outstanding_tasks */
__clear_bit(index, &hba->outstanding_tasks); __clear_bit(index, &hba->outstanding_tasks);
task_req_descp = hba->utmrdl_base_addr; ocs_value = ufshcd_get_tmr_ocs(treq);
ocs_value = ufshcd_get_tmr_ocs(&task_req_descp[index]);
if (ocs_value == OCS_SUCCESS) { if (ocs_value != OCS_SUCCESS)
task_rsp_upiup = (struct utp_upiu_task_rsp *)
task_req_descp[index].task_rsp_upiu;
task_result = be32_to_cpu(task_rsp_upiup->output_param1);
task_result = task_result & MASK_TM_SERVICE_RESP;
if (resp)
*resp = (u8)task_result;
} else {
dev_err(hba->dev, "%s: failed, ocs = 0x%x\n", dev_err(hba->dev, "%s: failed, ocs = 0x%x\n",
__func__, ocs_value); __func__, ocs_value);
} else if (resp)
*resp = be32_to_cpu(treq->output_param1) & MASK_TM_SERVICE_RESP;
spin_unlock_irqrestore(hba->host->host_lock, flags); spin_unlock_irqrestore(hba->host->host_lock, flags);
return ocs_value; return ocs_value;
...@@ -5638,8 +5617,7 @@ static int ufshcd_clear_tm_cmd(struct ufs_hba *hba, int tag) ...@@ -5638,8 +5617,7 @@ static int ufshcd_clear_tm_cmd(struct ufs_hba *hba, int tag)
static int ufshcd_issue_tm_cmd(struct ufs_hba *hba, int lun_id, int task_id, static int ufshcd_issue_tm_cmd(struct ufs_hba *hba, int lun_id, int task_id,
u8 tm_function, u8 *tm_response) u8 tm_function, u8 *tm_response)
{ {
struct utp_task_req_desc *task_req_descp; struct utp_task_req_desc *treq;
struct utp_upiu_task_req *task_req_upiup;
struct Scsi_Host *host; struct Scsi_Host *host;
unsigned long flags; unsigned long flags;
int free_slot; int free_slot;
...@@ -5657,29 +5635,23 @@ static int ufshcd_issue_tm_cmd(struct ufs_hba *hba, int lun_id, int task_id, ...@@ -5657,29 +5635,23 @@ static int ufshcd_issue_tm_cmd(struct ufs_hba *hba, int lun_id, int task_id,
ufshcd_hold(hba, false); ufshcd_hold(hba, false);
spin_lock_irqsave(host->host_lock, flags); spin_lock_irqsave(host->host_lock, flags);
task_req_descp = hba->utmrdl_base_addr; treq = hba->utmrdl_base_addr + free_slot;
task_req_descp += free_slot;
/* Configure task request descriptor */ /* Configure task request descriptor */
task_req_descp->header.dword_0 = cpu_to_le32(UTP_REQ_DESC_INT_CMD); treq->header.dword_0 = cpu_to_le32(UTP_REQ_DESC_INT_CMD);
task_req_descp->header.dword_2 = treq->header.dword_2 = cpu_to_le32(OCS_INVALID_COMMAND_STATUS);
cpu_to_le32(OCS_INVALID_COMMAND_STATUS);
/* Configure task request UPIU */ /* Configure task request UPIU */
task_req_upiup =
(struct utp_upiu_task_req *) task_req_descp->task_req_upiu;
task_tag = hba->nutrs + free_slot; task_tag = hba->nutrs + free_slot;
task_req_upiup->header.dword_0 = treq->req_header.dword_0 = UPIU_HEADER_DWORD(UPIU_TRANSACTION_TASK_REQ,
UPIU_HEADER_DWORD(UPIU_TRANSACTION_TASK_REQ, 0, 0, lun_id, task_tag);
lun_id, task_tag); treq->req_header.dword_1 = UPIU_HEADER_DWORD(0, tm_function, 0, 0);
task_req_upiup->header.dword_1 =
UPIU_HEADER_DWORD(0, tm_function, 0, 0);
/* /*
* The host shall provide the same value for LUN field in the basic * The host shall provide the same value for LUN field in the basic
* header and for Input Parameter. * header and for Input Parameter.
*/ */
task_req_upiup->input_param1 = cpu_to_be32(lun_id); treq->input_param1 = cpu_to_be32(lun_id);
task_req_upiup->input_param2 = cpu_to_be32(task_id); treq->input_param2 = cpu_to_be32(task_id);
ufshcd_vops_setup_task_mgmt(hba, free_slot, tm_function); ufshcd_vops_setup_task_mgmt(hba, free_slot, tm_function);
......
...@@ -433,22 +433,25 @@ struct utp_transfer_req_desc { ...@@ -433,22 +433,25 @@ struct utp_transfer_req_desc {
__le16 prd_table_offset; __le16 prd_table_offset;
}; };
/** /*
* struct utp_task_req_desc - UTMRD structure * UTMRD structure.
* @header: UTMRD header DW-0 to DW-3
* @task_req_upiu: Pointer to task request UPIU DW-4 to DW-11
* @task_rsp_upiu: Pointer to task response UPIU DW12 to DW-19
*/ */
struct utp_task_req_desc { struct utp_task_req_desc {
/* DW 0-3 */ /* DW 0-3 */
struct request_desc_header header; struct request_desc_header header;
/* DW 4-11 */ /* DW 4-11 - Task request UPIU structure */
__le32 task_req_upiu[TASK_REQ_UPIU_SIZE_DWORDS]; struct utp_upiu_header req_header;
__be32 input_param1;
/* DW 12-19 */ __be32 input_param2;
__le32 task_rsp_upiu[TASK_RSP_UPIU_SIZE_DWORDS]; __be32 input_param3;
__be32 __reserved1[2];
/* DW 12-19 - Task Management Response UPIU structure */
struct utp_upiu_header rsp_header;
__be32 output_param1;
__be32 output_param2;
__be32 __reserved2[3];
}; };
#endif /* End of Header */ #endif /* End of Header */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment