scsi: libsas: Add sas_execute_ssp_tmf()
authorJohn Garry <john.garry@huawei.com>
Thu, 17 Feb 2022 15:42:38 +0000 (23:42 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 19 Feb 2022 20:59:35 +0000 (15:59 -0500)
Add a function to issue an SSP TMF.

Add a temp prototype to keep make W=1 happy.

Link: https://lore.kernel.org/r/1645112566-115804-11-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com>
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/libsas/sas_scsi_host.c

index d040021..af2dd95 100644 (file)
@@ -937,6 +937,9 @@ int sas_execute_tmf(struct domain_device *device, void *parameter,
                task->dev = device;
                task->task_proto = device->tproto;
 
+               if (!dev_is_sata(device))
+                       memcpy(&task->ssp_task, parameter, para_len);
+
                task->task_done = sas_task_internal_done;
                task->tmf = tmf;
 
@@ -1022,6 +1025,21 @@ int sas_execute_tmf(struct domain_device *device, void *parameter,
        return res;
 }
 
+int sas_execute_ssp_tmf(struct domain_device *device, u8 *lun,
+                       struct sas_tmf_task *tmf);
+int sas_execute_ssp_tmf(struct domain_device *device, u8 *lun,
+                       struct sas_tmf_task *tmf)
+{
+       struct sas_ssp_task ssp_task;
+
+       if (!(device->tproto & SAS_PROTOCOL_SSP))
+               return TMF_RESP_FUNC_ESUPP;
+
+       memcpy(ssp_task.LUN, lun, 8);
+
+       return sas_execute_tmf(device, &ssp_task, sizeof(ssp_task), -1, tmf);
+}
+
 /*
  * Tell an upper layer that it needs to initiate an abort for a given task.
  * This should only ever be called by an LLDD.