From: Vinayak Kale <vinayak.k...@seagate.com>

This patch is needed to make NCQ commands with FPDMA protocol value
(eg READ/WRITE FPDMA) work over SCSI Generic (SG) interface.

Signed-off-by: Vinayak Kale <vinayak.k...@seagate.com>
---
Changes in v2:
 - Decoupled tf->flags changes in ata_scsi_pass_thru() from this patch
   as per Tejun's suggestion. A separate patch will be sent for that change.

 drivers/ata/libata-scsi.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 0d7f0da..c2af592 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -2914,12 +2914,14 @@ ata_scsi_map_proto(u8 byte1)
        case 5:         /* PIO Data-out */
                return ATA_PROT_PIO;
 
+       case 12:        /* FPDMA */
+               return ATA_PROT_NCQ;
+
        case 0:         /* Hard Reset */
        case 1:         /* SRST */
        case 8:         /* Device Diagnostic */
        case 9:         /* Device Reset */
        case 7:         /* DMA Queued */
-       case 12:        /* FPDMA */
        case 15:        /* Return Response Info */
        default:        /* Reserved */
                break;
@@ -2992,6 +2994,10 @@ static unsigned int ata_scsi_pass_thru(struct 
ata_queued_cmd *qc)
                tf->command = cdb[9];
        }
 
+       /* For NCQ commands with FPDMA protocol, copy the tag value */
+       if (tf->protocol == ATA_PROT_NCQ)
+               tf->nsect = qc->tag << 3;
+
        /* enforce correct master/slave bit */
        tf->device = dev->devno ?
                tf->device | ATA_DEV1 : tf->device & ~ATA_DEV1;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to