Re: [PATCH v3 1/3] libata: Populate host-to-device FIS "auxiliary" field

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/09/2013 06:17 PM, Sergei Shtylyov wrote:

From: Marc Carino <marc.ceeeee@xxxxxxxxx>

SATA 3.1 added an "auxiliary" field to the host-to-device FIS.

Since there is no analog between the new field and the ATA
taskfile, a new element was added to 'struct ata_queued_cmd."

Signed-off-by: Marc Carino <marc.ceeeee@xxxxxxxxx>

[...]

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index c24354d..9d02c47 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -532,6 +532,34 @@ int atapi_cmd_type(u8 opcode)
  }

  /**
+ *    ata_qc_to_fis - Convert struct ata_queued_cmd to SATA FIS structure
+ *    @qc: struct ata_queued_cmd to convert
+ *    @pmp: Port multiplier port
+ *    @is_cmd: This FIS is for command
+ *    @fis: Buffer into which data will output
+ *
+ *    Converts a struct ata_queued_cmd to a Serial ATA
+ *    FIS structure (Register - Host to Device).
+ *
+ *    Beginning with SATA 3.1, the ATA taskfile does not completely describe
+ *    all of the fields in a host-to-device FIS. More specifically, the
+ *    'auxiliary' field has no ATA taskfile analog, and thus requires us
+ *    to populate the FIS via the ata_queued_cmd structure.
+ *
+ *    LOCKING:
+ *    Inherited from caller.
+ */
+void ata_qc_to_fis(const struct ata_queued_cmd *qc, u8 pmp, int is_cmd, u8
*fis)
+{
+    ata_tf_to_fis(&qc->tf, pmp, is_cmd, fis);
+
+    fis[16] = qc->auxiliary & 0xff;
+    fis[17] = (qc->auxiliary >> 8) & 0xff;
+    fis[18] = (qc->auxiliary >> 16) & 0xff;
+    fis[19] = (qc->auxiliary >> 24) & 0xff;
+}
+
+/**
   *    ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure
   *    @tf: Taskfile to convert
   *    @pmp: Port multiplier port
@@ -6877,6 +6905,7 @@ EXPORT_SYMBOL_GPL(ata_sg_init);
  EXPORT_SYMBOL_GPL(ata_qc_complete);
  EXPORT_SYMBOL_GPL(ata_qc_complete_multiple);
  EXPORT_SYMBOL_GPL(atapi_cmd_type);
+EXPORT_SYMBOL_GPL(ata_qc_to_fis);
  EXPORT_SYMBOL_GPL(ata_tf_to_fis);

    I think we should now unexport this function and make it static since it
would be no longer valid to call it from the drivers...

I was somewhat rash in this conclusion: drivers use this function not only to issue commands but also to fake D2H FIS and not only that...

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux