|
@@ -239,6 +239,8 @@ enum {
|
|
|
ATA_CMD_WRITE_QUEUED_FUA_EXT = 0x3E,
|
|
|
ATA_CMD_FPDMA_READ = 0x60,
|
|
|
ATA_CMD_FPDMA_WRITE = 0x61,
|
|
|
+ ATA_CMD_FPDMA_SEND = 0x64,
|
|
|
+ ATA_CMD_FPDMA_RECV = 0x65,
|
|
|
ATA_CMD_PIO_READ = 0x20,
|
|
|
ATA_CMD_PIO_READ_EXT = 0x24,
|
|
|
ATA_CMD_PIO_WRITE = 0x30,
|
|
@@ -293,8 +295,13 @@ enum {
|
|
|
/* marked obsolete in the ATA/ATAPI-7 spec */
|
|
|
ATA_CMD_RESTORE = 0x10,
|
|
|
|
|
|
+ /* Subcmds for ATA_CMD_FPDMA_SEND */
|
|
|
+ ATA_SUBCMD_FPDMA_SEND_DSM = 0x00,
|
|
|
+ ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 0x02,
|
|
|
+
|
|
|
/* READ_LOG_EXT pages */
|
|
|
ATA_LOG_SATA_NCQ = 0x10,
|
|
|
+ ATA_LOG_NCQ_SEND_RECV = 0x13,
|
|
|
ATA_LOG_SATA_ID_DEV_DATA = 0x30,
|
|
|
ATA_LOG_SATA_SETTINGS = 0x08,
|
|
|
ATA_LOG_DEVSLP_OFFSET = 0x30,
|
|
@@ -305,6 +312,15 @@ enum {
|
|
|
ATA_LOG_DEVSLP_VALID = 0x07,
|
|
|
ATA_LOG_DEVSLP_VALID_MASK = 0x80,
|
|
|
|
|
|
+ /* NCQ send and receive log */
|
|
|
+ ATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0x00,
|
|
|
+ ATA_LOG_NCQ_SEND_RECV_SUBCMDS_DSM = (1 << 0),
|
|
|
+ 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_WR_LOG_OFFSET = 0x0C,
|
|
|
+ ATA_LOG_NCQ_SEND_RECV_SIZE = 0x10,
|
|
|
+
|
|
|
/* READ/WRITE LONG (obsolete) */
|
|
|
ATA_CMD_READ_LONG = 0x22,
|
|
|
ATA_CMD_READ_LONG_ONCE = 0x23,
|
|
@@ -772,6 +788,11 @@ static inline int ata_id_rotation_rate(const u16 *id)
|
|
|
return val;
|
|
|
}
|
|
|
|
|
|
+static inline bool ata_id_has_ncq_send_and_recv(const u16 *id)
|
|
|
+{
|
|
|
+ return id[ATA_ID_SATA_CAPABILITY_2] & BIT(6);
|
|
|
+}
|
|
|
+
|
|
|
static inline bool ata_id_has_trim(const u16 *id)
|
|
|
{
|
|
|
if (ata_id_major_version(id) >= 7 &&
|