diff mbox

[RFC,v2,4/9] spcn: add definitions for the PRS command and modifiers

Message ID 1421910562-18973-5-git-send-email-clg@fr.ibm.com
State Superseded
Headers show

Commit Message

Cédric Le Goater Jan. 22, 2015, 7:09 a.m. UTC
The structures and values are from the SPCN specification document 
and from :

	https://w3-01.ibm.com/stg/linux/ltc/mailinglists/pipermail/sapphire/2014-January/001280.html

for the new PRS modifier 0x1C which retrieves the power supplies watts.

Signed-off-by: Cédric Le Goater <clg@fr.ibm.com>
---
 include/spcn.h |   94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
diff mbox

Patch

diff --git a/include/spcn.h b/include/spcn.h
index 1945e8d49232..2f3172812151 100644
--- a/include/spcn.h
+++ b/include/spcn.h
@@ -90,4 +90,98 @@  enum {
 	SENSOR_FRC_IO_BP,
 };
 
+/*
+ * Common to all PRS modifiers (subcommands)
+ */
+struct sensor_header {
+	uint16_t frc;	/* Frame resource class */
+	uint16_t rid;	/* Resource ID */
+} __packed;
+
+/*
+ * Data layout for PRS modifier PRS_STATUS 0x01, 0x02
+ */
+struct sensor_prs {
+	struct sensor_header header;
+	uint16_t src;	/* unused */
+	uint16_t status;
+} __packed;
+
+#define PRS_STATUS_ON_SUPPORTED	0x0010
+#define PRS_STATUS_ON		0x0008
+#define PRS_STATUS_AC_FAULTED	0x0004
+#define PRS_STATUS_FAULTED	0x0002
+#define PRS_STATUS_PRESENT	0x0001
+
+/*
+ * Data layout for PRS modifier SENSOR_PARAM 0x10, 0x11
+ */
+struct sensor_param {
+	struct sensor_header header;
+	char location[4];
+	char __reserved[4];
+	uint16_t threshold;
+	uint16_t status;
+} __packed;
+
+/*
+ * Data layout for PRS modifier SENSOR_DATA 0x12, 0x13
+ */
+struct sensor_data {
+	struct sensor_header header;
+	uint16_t data;
+	uint16_t status;
+} __packed;
+
+#define SENSOR_STATUS_EM_ALERT	0x0004
+#define SENSOR_STATUS_FAULTED	0x0002
+#define SENSOR_STATUS_PRESENT	0x0001
+
+/* Power sensor is retrieved thru a new PRS modifier 0x1C, data
+ * response is as follows:
+ *
+ * Byte 0:
+ *
+ *	Bit 7: Data valid
+ *	Bit 4-6: reserved
+ *	Bit 0-3: Number of power supply or data records
+ *
+ * Each data record is 5 Bytes following above byte 0:
+ *
+ * Data Record: Byte 0: Power supply ID {00, 01, 02, 03, ...}
+ *	     Byte 1-4: Power sensor value in milli-watts
+ *
+ * Example Power Sensor data: (Tuleta)
+ * 84 00 00 00 00 00
+ *    01 00 00 00 00
+ *    02 00 02 5d 78
+ *    03 00 02 0f 58
+ *    00 00 00 00 00
+ *
+ * 0x84: Bit 7 is valid bit and there are 4 power supplies
+ * 0x00 00 00 00 00
+ *   |  ^^^^^^^^^^^ Power in milli-watts
+ *   \-- Power supply ID
+ *
+ * Ox03 00 02 0f 58
+ *   |  ^^^^^^^^^^^ Power in milli-watts (135000 mW)
+ *   \-- Power supply ID
+ */
+
+#define POWER_SUPPLY_MAX 8
+
+struct sensor_power_supply {
+	uint8_t	rid;		/* Power supply ID */
+	uint32_t milliwatts;
+} __packed;
+
+struct sensor_power {
+	uint8_t status;
+	struct sensor_power_supply supplies[POWER_SUPPLY_MAX];
+} __packed;
+
+#define sensor_power_is_valid(s)	((s)->status & 0x80)
+#define sensor_power_count(s)		((s)->status & 0x0f)
+
+
 #endif /* __SPCN_H */