[PATCH RFC v3 15/22] scsi: libsas: Add sas_ata_setup_device()

John Garry
2022-10-25T09:52:24Z

Add a function which does a custom sdev alloc - essentially replicates
what we do in sas_rphy_add() in terms of sdev parent and id.

Signed-off-by: John Garry <john.garry@huawei.com>
---
drivers/scsi/libsas/sas_ata.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)

diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 78e6046fb55a..a46a2d345422 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -523,6 +523,25 @@ static int sas_ata_prereset(struct ata_link *link, unsigned long deadline)
return res;
}

+static int sas_ata_setup_device(struct ata_device *dev)
+{
+ u64 lun = 0;
+ int channel = 0;
+ struct ata_link *link = dev->link;
+ struct ata_port *ap = link->ap;
+ struct scsi_device *sdev;
+ struct domain_device *ddev = ap->private_data;
+ struct sas_rphy *rphy = ddev->rphy;
+ struct device *parent = &rphy->dev;
+ uint id = rphy->scsi_target_id;
+
+ sdev = scsi_get_dev(parent, channel, id, lun);
+ if (!sdev)
+ return -ENODEV;
+ dev->sdev = sdev;
+ return 0;
+}
+
static struct ata_port_operations sas_sata_ops = {
.prereset = sas_ata_prereset,
.hardreset = sas_ata_hard_reset,
@@ -537,6 +556,7 @@ static struct ata_port_operations sas_sata_ops = {
.set_dmamode = sas_ata_set_dmamode,
.sched_eh = sas_ata_sched_eh,
.end_eh = sas_ata_end_eh,
+ .setup_scsi_device = sas_ata_setup_device,
};

static struct ata_port_info sata_port_info = {
--
2.35.3