Commit e77044c5 authored by Avri Altman's avatar Avri Altman Committed by Martin K. Petersen

scsi: ufs-bsg: Add support for uic commands in ufs_bsg_request()

Make ufshcd_send_uic_cmd() public for that.
Signed-off-by: default avatarAvri Altman <avri.altman@wdc.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarBart Van Assche <Bart.VanAssche@wdc.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 95e34bf9
...@@ -84,6 +84,7 @@ static int ufs_bsg_request(struct bsg_job *job) ...@@ -84,6 +84,7 @@ static int ufs_bsg_request(struct bsg_job *job)
struct ufs_hba *hba = shost_priv(dev_to_shost(job->dev->parent)); struct ufs_hba *hba = shost_priv(dev_to_shost(job->dev->parent));
unsigned int req_len = job->request_len; unsigned int req_len = job->request_len;
unsigned int reply_len = job->reply_len; unsigned int reply_len = job->reply_len;
struct uic_command uc = {};
int msgcode; int msgcode;
uint8_t *desc_buff = NULL; uint8_t *desc_buff = NULL;
int desc_len = 0; int desc_len = 0;
...@@ -116,6 +117,16 @@ static int ufs_bsg_request(struct bsg_job *job) ...@@ -116,6 +117,16 @@ static int ufs_bsg_request(struct bsg_job *job)
dev_err(hba->dev, dev_err(hba->dev,
"exe raw upiu: error code %d\n", ret); "exe raw upiu: error code %d\n", ret);
break;
case UPIU_TRANSACTION_UIC_CMD:
memcpy(&uc, &bsg_request->upiu_req.uc, UIC_CMD_SIZE);
ret = ufshcd_send_uic_cmd(hba, &uc);
if (ret)
dev_dbg(hba->dev,
"send uic cmd: error code %d\n", ret);
memcpy(&bsg_reply->upiu_rsp.uc, &uc, UIC_CMD_SIZE);
break; break;
default: default:
ret = -ENOTSUPP; ret = -ENOTSUPP;
......
...@@ -2059,8 +2059,7 @@ __ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd, ...@@ -2059,8 +2059,7 @@ __ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd,
* *
* Returns 0 only if success. * Returns 0 only if success.
*/ */
static int int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
{ {
int ret; int ret;
unsigned long flags; unsigned long flags;
......
...@@ -895,6 +895,8 @@ int ufshcd_map_desc_id_to_length(struct ufs_hba *hba, enum desc_idn desc_id, ...@@ -895,6 +895,8 @@ int ufshcd_map_desc_id_to_length(struct ufs_hba *hba, enum desc_idn desc_id,
u32 ufshcd_get_local_unipro_ver(struct ufs_hba *hba); u32 ufshcd_get_local_unipro_ver(struct ufs_hba *hba);
int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd);
int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba, int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba,
struct utp_upiu_req *req_upiu, struct utp_upiu_req *req_upiu,
struct utp_upiu_req *rsp_upiu, struct utp_upiu_req *rsp_upiu,
......
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
*/ */
#define UFS_CDB_SIZE 16 #define UFS_CDB_SIZE 16
#define UPIU_TRANSACTION_UIC_CMD 0x1F
/* uic commands are 4DW long, per UFSHCI V2.1 paragraph 5.6.1 */
#define UIC_CMD_SIZE (sizeof(u32) * 4)
/** /**
* struct utp_upiu_header - UPIU header structure * struct utp_upiu_header - UPIU header structure
......
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