aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/include/fsp-leds.h
diff options
context:
space:
mode:
Diffstat (limited to 'roms/skiboot/include/fsp-leds.h')
-rw-r--r--roms/skiboot/include/fsp-leds.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/roms/skiboot/include/fsp-leds.h b/roms/skiboot/include/fsp-leds.h
new file mode 100644
index 000000000..499e477d6
--- /dev/null
+++ b/roms/skiboot/include/fsp-leds.h
@@ -0,0 +1,158 @@
+// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+/*
+ * SPCN based LED location code and other information
+ *
+ * Copyright 2013-2016 IBM Corp.
+ */
+
+#ifndef __FSP_LEDS_H
+#define __FSP_LEDS_H
+
+/* Supported FSP response codes */
+#define FSP_IND_NOT_IMPLMNTD 0x00 /* Indicator not implemented */
+#define FSP_IND_IMPLMNTD 0x04 /* Indicator implemented */
+#define FSP_IND_IMPL_UNKNOWN 0x08 /* Implementation unknown */
+#define FSP_IND_INACTIVE 0x00 /* Indicator not active */
+#define FSP_IND_IDENTIFY_ACTV 0x01 /* Identify state active */
+#define FSP_IND_FAULT_ACTV 0x02 /* Fault state active */
+#define FSP_IND_STATE_UNKNOWN 0xff /* Indicator state unknown */
+#define FSP_RSRC_NOT_PRESENT 0x00 /* Resource not present */
+#define FSP_RSRC_PRESENT 0x40 /* Resource present */
+#define FSP_RSRC_PRSNC_UNKNOWN 0x80 /* Resource presence unknown */
+
+/* LED exclusive bits */
+#define FSP_LED_EXCL_FAULT (1UL << 0)
+#define FSP_LED_EXCL_IDENTIFY (1UL << 1)
+
+/* LED update message source */
+enum spcn_cmd_src {
+ SPCN_SRC_FSP = 0,
+ SPCN_SRC_OPAL = 1,
+ SPCN_SRC_MAX = 2
+};
+
+/* SPCN set LED */
+struct spcn_led_data {
+ u8 lc_len;
+ __be16 state;
+ char lc_code[LOC_CODE_SIZE];
+} __packed;
+
+/* LED data */
+struct fsp_led_data {
+ u16 rid; /* Resource ID */
+ u8 lc_len; /* Location code len */
+ char loc_code[LOC_CODE_SIZE];
+ u16 parms; /* Parameters */
+ u16 status; /* Status */
+ u16 excl_bit; /* Exclusive LED bit */
+ struct list_node link;
+};
+
+/* FSP location code request */
+struct fsp_loc_code_req {
+ __be16 len;
+ __be16 req_type;
+ u8 raw_len;
+ u8 lc_sz;
+ char loc_code[LOC_CODE_SIZE];
+} __packed;
+
+/* FSP location code data */
+struct fsp_loc_code_data {
+ __be16 size;
+ __be32 ccin;
+ u8 status;
+ u8 ind_state;
+ u8 raw_len;
+ u8 fld_sz;
+
+ /* The size below must include the padding to
+ * make the whole structure aligned to a
+ * multiple of 4 bytes
+ */
+ char loc_code[LOC_CODE_SIZE + 2]; /* 82 */
+
+ /* We need to pack the structure otherwise the
+ * compiler adds additional alignment to make
+ * it 8 bytes aligned
+ */
+} __packed;
+
+/* Get indicator state request */
+struct fsp_get_ind_state_req {
+ __be16 size;
+ u8 lc_len;
+ u8 fld_sz;
+ char loc_code[LOC_CODE_SIZE];
+} __packed;
+
+/* Set indicator state request */
+struct fsp_set_ind_state_req {
+ __be16 size;
+ __be16 req_type;
+ u8 reserved[3];
+ u8 ind_state;
+ u8 lc_len;
+ u8 fld_sz;
+ char loc_code[LOC_CODE_SIZE];
+} __packed;
+
+/* LED set SPCN command */
+struct led_set_cmd {
+ char loc_code[LOC_CODE_SIZE];
+ u8 command;
+ u8 state;
+ u16 ckpt_status; /* Checkpointed status */
+ u16 ckpt_excl_bit; /* Checkpointed exclusive status */
+ u64 async_token; /* OPAL async token */
+ enum spcn_cmd_src cmd_src; /* OPAL or FSP based */
+ struct list_node link;
+};
+
+/* System Attention Indicator */
+struct sai_data {
+ uint8_t state;
+ char loc_code[LOC_CODE_SIZE];
+};
+
+/* LED commands and state */
+#define LED_COMMAND_FAULT 1
+#define LED_COMMAND_IDENTIFY 0
+#define LED_STATE_ON 1
+#define LED_STATE_OFF 0
+
+/* FSP get loc-code list command request type */
+#define GET_LC_CMPLT_SYS 0x8000
+#define GET_LC_ENCLOSURES 0x4000
+#define GET_LC_ENCL_DESCENDANTS 0x2000
+#define GET_LC_SINGLE_LOC_CODE 0x0100
+
+/* FSP set indicator command request type */
+#define SET_IND_ENCLOSURE 0x4000
+#define SET_IND_SINGLE_LOC_CODE 0x0001
+
+/* Response buffer */
+#define OUTBUF_HEADER_SIZE 8
+
+/* LED miscellaneous */
+#define LOC_CODE_LEN 1
+#define LED_CONTROL_LEN 2
+#define FSP_LC_STRUCT_FIXED_SZ 0x0a
+
+/* LED Device tree property names */
+#define DT_PROPERTY_LED_COMPATIBLE "ibm,opal-v3-led"
+#define DT_PROPERTY_LED_NODE "leds"
+#define DT_PROPERTY_LED_MODE "led-mode"
+#define DT_PROPERTY_LED_TYPES "led-types"
+
+/* LED Mode */
+#define LED_MODE_LIGHT_PATH "lightpath"
+#define LED_MODE_GUIDING_LIGHT "guidinglight"
+
+/* LED type */
+#define LED_TYPE_IDENTIFY "identify"
+#define LED_TYPE_FAULT "fault"
+#define LED_TYPE_ATTENTION "attention"
+
+#endif