Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab5b3a5b authored by Tejun Heo's avatar Tejun Heo
Browse files

[PATCH] libata-hp-prep: update ata_scsi_find_dev() and friends



Separate out ata_find_dev() and __ata_scsi_find_dev() from
ata_scsi_find_dev().  These will be used by later hotplug
implementation.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
parent 72fa4b74
Loading
Loading
Loading
Loading
+25 −15
Original line number Original line Diff line number Diff line
@@ -52,8 +52,12 @@
#define SECTOR_SIZE	512
#define SECTOR_SIZE	512


typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc, const u8 *scsicmd);
typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc, const u8 *scsicmd);
static struct ata_device *

ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev);
static struct ata_device * __ata_scsi_find_dev(struct ata_port *ap,
					const struct scsi_device *scsidev);
static struct ata_device * ata_scsi_find_dev(struct ata_port *ap,
					    const struct scsi_device *scsidev);



#define RW_RECOVERY_MPAGE 0x1
#define RW_RECOVERY_MPAGE 0x1
#define RW_RECOVERY_MPAGE_LEN 12
#define RW_RECOVERY_MPAGE_LEN 12
@@ -2308,6 +2312,23 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc, const u8 *scsicmd)
	return 0;
	return 0;
}
}


static struct ata_device * ata_find_dev(struct ata_port *ap, int id)
{
	if (likely(id < ATA_MAX_DEVICES))
		return &ap->device[id];
	return NULL;
}

static struct ata_device * __ata_scsi_find_dev(struct ata_port *ap,
					const struct scsi_device *scsidev)
{
	/* skip commands not addressed to targets we simulate */
	if (unlikely(scsidev->channel || scsidev->lun))
		return NULL;

	return ata_find_dev(ap, scsidev->id);
}

/**
/**
 *	ata_scsi_find_dev - lookup ata_device from scsi_cmnd
 *	ata_scsi_find_dev - lookup ata_device from scsi_cmnd
 *	@ap: ATA port to which the device is attached
 *	@ap: ATA port to which the device is attached
@@ -2324,23 +2345,12 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc, const u8 *scsicmd)
 *	RETURNS:
 *	RETURNS:
 *	Associated ATA device, or %NULL if not found.
 *	Associated ATA device, or %NULL if not found.
 */
 */

static struct ata_device *
static struct ata_device *
ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)
ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)
{
{
	struct ata_device *dev;
	struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);

	/* skip commands not addressed to targets we simulate */
	if (likely(scsidev->id < ATA_MAX_DEVICES))
		dev = &ap->device[scsidev->id];
	else
		return NULL;

	if (unlikely((scsidev->channel != 0) ||
		     (scsidev->lun != 0)))
		return NULL;


	if (unlikely(!ata_dev_enabled(dev)))
	if (unlikely(!dev || !ata_dev_enabled(dev)))
		return NULL;
		return NULL;


	if (!atapi_enabled || (ap->flags & ATA_FLAG_NO_ATAPI)) {
	if (!atapi_enabled || (ap->flags & ATA_FLAG_NO_ATAPI)) {