Skip to contentSkip to conversation

ahci: add "em_buffer" attribute for AHCI hosts

PATCH In review Harry Zhang 2 participants 2 messages Apr 23, 2010 libata

lore
Share & tools
lore
#0 lore raw

PATCH v5 2/2 ahci: add "em_buffer" attribute for AHCI hosts

Add "em_buffer" attribute for SATA AHCI hosts to provide a way for userland to access AHCI EM (enclosure management) buffer directly if the host supports EM.

AHCI driver should support SGPIO EM messages. However the SATA/AHCI specs did not define the SGPIO message format filled in EM buffer. Different HW vendors may have different definitions. The mainly purpose of this attribute is to solve this issue by allowing HW vendors to provide userland drivers and tools for their SGPIO initiators.

---
v2: rebase this patch on the new upstream branch of linux-next.git

v3: do not use "ahci_em_messages" module parameter as EM message type
control, instead by detecting supported types at initialization. Remove EM message structure shared with userland, instead by simply writing the raw message into the buffer.
Move write function for this attribute from libata-scsi.c to libahci.c.
Add read function.
Add necessary definitions for EM in ahci.h.

v4: remove changes for EM message types.
Add PAGE_SIZE check for em_buffer read function. Report EAGAIN for read function when no message in the buffer.

v5: move this patch to second one.
Exam EM message type for SGPIO when enter r/w method. Use ata_port_printk to report warning for large read buffer.

 drivers/ata/ahci.h    |   10 +++-
 drivers/ata/libahci.c |  104 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 111 insertions(+), 3 deletions(-)
drivers/ata/ahci.h +7 -3
index 5edce44..7113c57 100644
@@ -224,9 +224,12 @@ enum {
 	EM_MAX_RETRY			= 5,
 
 	/* em_ctl bits */
-	EM_CTL_RST			= (1 << 9), /* Reset */
-	EM_CTL_TM			= (1 << 8), /* Transmit Message */
-	EM_CTL_ALHD			= (1 << 26), /* Activity LED */
+	EM_CTL_RST		= (1 << 9), /* Reset */
+	EM_CTL_TM		= (1 << 8), /* Transmit Message */
+	EM_CTL_MR		= (1 << 0), /* Message Recieved */
+	EM_CTL_ALHD		= (1 << 26), /* Activity LED */
+	EM_CTL_XMT		= (1 << 25), /* Transmit Only */
+	EM_CTL_SMB		= (1 << 24), /* Single Message Buffer */
 
 	/* em message type */
 	EM_MSG_TYPE_LED		= (1 << 0), /* LED */
@@ -288,6 +291,7 @@ struct ahci_host_priv {
 	u32			saved_cap2;	/* saved initial cap2 */
 	u32			saved_port_map;	/* saved initial port_map */
 	u32 			em_loc; /* enclosure management location */
+	u32			em_buf_sz;	/* EM buffer size in byte */
 	u32			em_msg_type;	/* EM message type */
 };
 
drivers/ata/libahci.c +104 -0

133 lines not on this page · raw message

Signature · 1 line
1.6.4.2
Acked-by on v5 2/2
#1 lore raw
Quoted 11 lines · Harry Zhang

Add "em_buffer" attribute for SATA AHCI hosts to provide a way for userland to access AHCI EM (enclosure management) buffer directly if the host supports EM.

AHCI driver should support SGPIO EM messages. However the SATA/AHCI specs did not define the SGPIO message format filled in EM buffer. Different HW vendors may have different definitions. The mainly purpose of this attribute is to solve this issue by allowing HW vendors to provide userland drivers and tools for their SGPIO initiators.

Thanks.

Signature · 1 line
tejun