libata: Add command definitions for NCQ Encapsulation for READ LOG DMA EXT
authorHannes Reinecke <hare@suse.de>
Mon, 25 Apr 2016 10:45:47 +0000 (12:45 +0200)
committerTejun Heo <tj@kernel.org>
Mon, 9 May 2016 16:36:45 +0000 (12:36 -0400)
ACS-4 defines an NCQ encapsulation for READ LOG DMA EXT.

Signed-off-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
include/linux/ata.h
include/linux/libata.h

index b84210a..94ccde5 100644 (file)
@@ -306,6 +306,9 @@ enum {
        /* marked obsolete in the ATA/ATAPI-7 spec */
        ATA_CMD_RESTORE         = 0x10,
 
+       /* Subcmds for ATA_CMD_FPDMA_RECV */
+       ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT = 0x01,
+
        /* Subcmds for ATA_CMD_FPDMA_SEND */
        ATA_SUBCMD_FPDMA_SEND_DSM            = 0x00,
        ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 0x02,
@@ -329,7 +332,9 @@ enum {
        ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET        = 0x04,
        ATA_LOG_NCQ_SEND_RECV_DSM_TRIM          = (1 << 0),
        ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET     = 0x08,
+       ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED  = (1 << 0),
        ATA_LOG_NCQ_SEND_RECV_WR_LOG_OFFSET     = 0x0C,
+       ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED  = (1 << 0),
        ATA_LOG_NCQ_SEND_RECV_SIZE              = 0x10,
 
        /* READ/WRITE LONG (obsolete) */
index a418bca..09ddb5a 100644 (file)
@@ -1642,6 +1642,13 @@ static inline bool ata_fpdma_dsm_supported(struct ata_device *dev)
                 ATA_LOG_NCQ_SEND_RECV_DSM_TRIM);
 }
 
+static inline bool ata_fpdma_read_log_supported(struct ata_device *dev)
+{
+       return (dev->flags & ATA_DFLAG_NCQ_SEND_RECV) &&
+               (dev->ncq_send_recv_cmds[ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET] &
+                ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED);
+}
+
 static inline void ata_qc_set_polling(struct ata_queued_cmd *qc)
 {
        qc->tf.ctl |= ATA_NIEN;