Thread (23 messages) 23 messages, 3 authors, 2013-08-12

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

From: Sergei Shtylyov <hidden>
Date: 2013-08-09 14:17:51

Hello.

On 08/09/2013 08:49 AM, Marc C wrote:
From: Marc Carino <redacted>
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 <redacted>
[...]
quoted hunk ↗ jump to hunk
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...

WBR, Sergei
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help