libata: Separate out ata_dev_config_ncq_send_recv()
Move NCQ SEND/RECEIVE checks into a separate function. Signed-off-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
661ce1f0c4
commit
5a2335512a
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue