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

Commit 5a233551 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Tejun Heo
Browse files

libata: Separate out ata_dev_config_ncq_send_recv()



Move NCQ SEND/RECEIVE checks into a separate function.

Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 661ce1f0
Loading
Loading
Loading
Loading
+27 −20
Original line number Original line Diff line number Diff line
@@ -2079,6 +2079,31 @@ static inline u8 ata_dev_knobble(struct ata_device *dev)
	return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id)));
	return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id)));
}
}


static void ata_dev_config_ncq_send_recv(struct ata_device *dev)
{
	struct ata_port *ap = dev->link->ap;
	unsigned int err_mask;

	err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_SEND_RECV,
				     0, ap->sector_buf, 1);
	if (err_mask) {
		ata_dev_dbg(dev,
			    "failed to get NCQ Send/Recv Log Emask 0x%x\n",
			    err_mask);
	} else {
		u8 *cmds = dev->ncq_send_recv_cmds;

		dev->flags |= ATA_DFLAG_NCQ_SEND_RECV;
		memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_SEND_RECV_SIZE);

		if (dev->horkage & ATA_HORKAGE_NO_NCQ_TRIM) {
			ata_dev_dbg(dev, "disabling queued TRIM support\n");
			cmds[ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET] &=
				~ATA_LOG_NCQ_SEND_RECV_DSM_TRIM;
		}
	}
}

static int ata_dev_config_ncq(struct ata_device *dev,
static int ata_dev_config_ncq(struct ata_device *dev,
			       char *desc, size_t desc_sz)
			       char *desc, size_t desc_sz)
{
{
@@ -2124,26 +2149,8 @@ static int ata_dev_config_ncq(struct ata_device *dev,
			ddepth, aa_desc);
			ddepth, aa_desc);


	if ((ap->flags & ATA_FLAG_FPDMA_AUX) &&
	if ((ap->flags & ATA_FLAG_FPDMA_AUX) &&
	    ata_id_has_ncq_send_and_recv(dev->id)) {
	    ata_id_has_ncq_send_and_recv(dev->id))
		err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_SEND_RECV,
		ata_dev_config_ncq_send_recv(dev);
					     0, ap->sector_buf, 1);
		if (err_mask) {
			ata_dev_dbg(dev,
				    "failed to get NCQ Send/Recv Log Emask 0x%x\n",
				    err_mask);
		} else {
			u8 *cmds = dev->ncq_send_recv_cmds;

			dev->flags |= ATA_DFLAG_NCQ_SEND_RECV;
			memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_SEND_RECV_SIZE);

			if (dev->horkage & ATA_HORKAGE_NO_NCQ_TRIM) {
				ata_dev_dbg(dev, "disabling queued TRIM support\n");
				cmds[ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET] &=
					~ATA_LOG_NCQ_SEND_RECV_DSM_TRIM;
			}
		}
	}


	return 0;
	return 0;
}
}