libata/libsas: Define ATA_CMD_NCQ_NON_DATA
authorHannes Reinecke <hare@suse.de>
Mon, 25 Apr 2016 10:45:45 +0000 (12:45 +0200)
committerTejun Heo <tj@kernel.org>
Mon, 9 May 2016 16:36:44 +0000 (12:36 -0400)
Define the NCQ NON DATA command and update libsas to handle it
correctly.

Signed-off-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
drivers/scsi/isci/request.c
drivers/scsi/libsas/sas_ata.c
drivers/scsi/mvsas/mv_sas.c
drivers/scsi/pm8001/pm8001_sas.c
include/linux/ata.h
include/trace/events/libata.h

index 860c9f8..bd20c54 100644 (file)
@@ -1632,6 +1632,7 @@ static u8 get_ata_protocol(u8 cmd, int direction)
        case ATA_CMD_FPDMA_READ:
        case ATA_CMD_FPDMA_RECV:
        case ATA_CMD_FPDMA_SEND:
+       case ATA_CMD_NCQ_NON_DATA:
        return SATA_PROTOCOL_FPDMA;
 
        case ATA_CMD_ID_ATA:
index 29456e0..b709d2b 100644 (file)
@@ -3171,7 +3171,8 @@ static enum sci_status isci_request_stp_request_construct(struct isci_request *i
        if (qc && (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
                   qc->tf.command == ATA_CMD_FPDMA_READ ||
                   qc->tf.command == ATA_CMD_FPDMA_RECV ||
-                  qc->tf.command == ATA_CMD_FPDMA_SEND)) {
+                  qc->tf.command == ATA_CMD_FPDMA_SEND ||
+                  qc->tf.command == ATA_CMD_NCQ_NON_DATA)) {
                fis->sector_count = qc->tag << 3;
                ireq->tc->type.stp.ncq_tag = qc->tag;
        }
index fe1cd26..935c430 100644 (file)
@@ -207,7 +207,8 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
        if (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
            qc->tf.command == ATA_CMD_FPDMA_READ ||
            qc->tf.command == ATA_CMD_FPDMA_RECV ||
-           qc->tf.command == ATA_CMD_FPDMA_SEND) {
+           qc->tf.command == ATA_CMD_FPDMA_SEND ||
+           qc->tf.command == ATA_CMD_NCQ_NON_DATA) {
                /* Need to zero out the tag libata assigned us */
                qc->tf.nsect = 0;
        }
index db37149..5b9fcff 100644 (file)
@@ -431,7 +431,8 @@ static u32 mvs_get_ncq_tag(struct sas_task *task, u32 *tag)
                if (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
                    qc->tf.command == ATA_CMD_FPDMA_READ ||
                    qc->tf.command == ATA_CMD_FPDMA_RECV ||
-                   qc->tf.command == ATA_CMD_FPDMA_SEND) {
+                   qc->tf.command == ATA_CMD_FPDMA_SEND ||
+                   qc->tf.command == ATA_CMD_NCQ_NON_DATA) {
                        *tag = qc->tag;
                        return 1;
                }
index 62abd98..dc33dfa 100644 (file)
@@ -282,7 +282,8 @@ u32 pm8001_get_ncq_tag(struct sas_task *task, u32 *tag)
                if (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
                    qc->tf.command == ATA_CMD_FPDMA_READ ||
                    qc->tf.command == ATA_CMD_FPDMA_RECV ||
-                   qc->tf.command == ATA_CMD_FPDMA_SEND) {
+                   qc->tf.command == ATA_CMD_FPDMA_SEND ||
+                   qc->tf.command == ATA_CMD_NCQ_NON_DATA) {
                        *tag = qc->tag;
                        return 1;
                }
index 00aebc4..b84210a 100644 (file)
@@ -243,6 +243,7 @@ enum {
        ATA_CMD_WRITE_QUEUED_FUA_EXT = 0x3E,
        ATA_CMD_FPDMA_READ      = 0x60,
        ATA_CMD_FPDMA_WRITE     = 0x61,
+       ATA_CMD_NCQ_NON_DATA    = 0x63,
        ATA_CMD_FPDMA_SEND      = 0x64,
        ATA_CMD_FPDMA_RECV      = 0x65,
        ATA_CMD_PIO_READ        = 0x20,
index 8b0fbd9..0168603 100644 (file)
@@ -39,6 +39,7 @@
                 ata_opcode_name(ATA_CMD_WRITE_QUEUED_FUA_EXT), \
                 ata_opcode_name(ATA_CMD_FPDMA_READ),           \
                 ata_opcode_name(ATA_CMD_FPDMA_WRITE),          \
+                ata_opcode_name(ATA_CMD_NCQ_NON_DATA),         \
                 ata_opcode_name(ATA_CMD_FPDMA_SEND),           \
                 ata_opcode_name(ATA_CMD_FPDMA_RECV),           \
                 ata_opcode_name(ATA_CMD_PIO_READ),             \