1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 *	include/asm-parisc/pdc_chassis.h
4 *
5 *	Copyright (C) 2002 Laurent Canet <canetl@esiee.fr>
6 *	Copyright (C) 2002 Thibaut Varene <varenet@parisc-linux.org>
7 *
8 *      TODO:	- handle processor number on SMP systems (Reporting Entity ID)
9 *      	- handle message ID
10 *      	- handle timestamps
11 */
12
13
14#ifndef _PARISC_PDC_CHASSIS_H
15#define _PARISC_PDC_CHASSIS_H
16
17/*
18 * ----------
19 * Prototypes
20 * ----------
21 */
22
23int pdc_chassis_send_status(int message);
24void parisc_pdc_chassis_init(void);
25
26
27/*
28 * -----------------
29 * Direct call names
30 * -----------------
31 * They setup everything for you, the Log message and the corresponding LED state
32 */
33
34#define PDC_CHASSIS_DIRECT_BSTART	0
35#define PDC_CHASSIS_DIRECT_BCOMPLETE	1
36#define PDC_CHASSIS_DIRECT_SHUTDOWN	2
37#define PDC_CHASSIS_DIRECT_PANIC	3
38#define PDC_CHASSIS_DIRECT_HPMC		4
39#define PDC_CHASSIS_DIRECT_LPMC		5
40#define PDC_CHASSIS_DIRECT_DUMP		6	/* not yet implemented */
41#define PDC_CHASSIS_DIRECT_OOPS		7	/* not yet implemented */
42
43
44/*
45 * ------------
46 * LEDs control
47 * ------------
48 * Set the three LEDs -- Run, Attn, and Fault.
49 */
50
51/* Old PDC LED control */
52#define PDC_CHASSIS_DISP_DATA(v)	((unsigned long)(v) << 17)
53
54/*
55 * Available PDC PAT LED states
56 */
57
58#define PDC_CHASSIS_LED_RUN_OFF		(0ULL << 4)
59#define PDC_CHASSIS_LED_RUN_FLASH	(1ULL << 4)
60#define PDC_CHASSIS_LED_RUN_ON		(2ULL << 4)
61#define PDC_CHASSIS_LED_RUN_NC		(3ULL << 4)
62#define PDC_CHASSIS_LED_ATTN_OFF	(0ULL << 6)
63#define PDC_CHASSIS_LED_ATTN_FLASH	(1ULL << 6)
64#define PDC_CHASSIS_LED_ATTN_NC		(3ULL << 6)	/* ATTN ON is invalid */
65#define PDC_CHASSIS_LED_FAULT_OFF	(0ULL << 8)
66#define PDC_CHASSIS_LED_FAULT_FLASH	(1ULL << 8)
67#define PDC_CHASSIS_LED_FAULT_ON	(2ULL << 8)
68#define PDC_CHASSIS_LED_FAULT_NC	(3ULL << 8)
69#define PDC_CHASSIS_LED_VALID		(1ULL << 10)
70
71/*
72 * Valid PDC PAT LED states combinations
73 */
74
75/* System running normally */
76#define PDC_CHASSIS_LSTATE_RUN_NORMAL	(PDC_CHASSIS_LED_RUN_ON		| \
77					 PDC_CHASSIS_LED_ATTN_OFF	| \
78					 PDC_CHASSIS_LED_FAULT_OFF	| \
79					 PDC_CHASSIS_LED_VALID		)
80/* System crashed and rebooted itself successfully */
81#define PDC_CHASSIS_LSTATE_RUN_CRASHREC	(PDC_CHASSIS_LED_RUN_ON		| \
82					 PDC_CHASSIS_LED_ATTN_OFF	| \
83					 PDC_CHASSIS_LED_FAULT_FLASH	| \
84					 PDC_CHASSIS_LED_VALID		)
85/* There was a system interruption that did not take the system down */
86#define PDC_CHASSIS_LSTATE_RUN_SYSINT	(PDC_CHASSIS_LED_RUN_ON		| \
87					 PDC_CHASSIS_LED_ATTN_FLASH	| \
88					 PDC_CHASSIS_LED_FAULT_OFF	| \
89					 PDC_CHASSIS_LED_VALID		)
90/* System running and unexpected reboot or non-critical error detected */
91#define PDC_CHASSIS_LSTATE_RUN_NCRIT	(PDC_CHASSIS_LED_RUN_ON		| \
92					 PDC_CHASSIS_LED_ATTN_FLASH	| \
93					 PDC_CHASSIS_LED_FAULT_FLASH	| \
94					 PDC_CHASSIS_LED_VALID		)
95/* Executing non-OS code */
96#define PDC_CHASSIS_LSTATE_NONOS	(PDC_CHASSIS_LED_RUN_FLASH	| \
97					 PDC_CHASSIS_LED_ATTN_OFF	| \
98					 PDC_CHASSIS_LED_FAULT_OFF	| \
99					 PDC_CHASSIS_LED_VALID		)
100/* Boot failed - Executing non-OS code */
101#define PDC_CHASSIS_LSTATE_NONOS_BFAIL	(PDC_CHASSIS_LED_RUN_FLASH	| \
102					 PDC_CHASSIS_LED_ATTN_OFF	| \
103					 PDC_CHASSIS_LED_FAULT_ON	| \
104					 PDC_CHASSIS_LED_VALID		)
105/* Unexpected reboot occurred - Executing non-OS code */
106#define PDC_CHASSIS_LSTATE_NONOS_UNEXP	(PDC_CHASSIS_LED_RUN_FLASH	| \
107					 PDC_CHASSIS_LED_ATTN_OFF	| \
108					 PDC_CHASSIS_LED_FAULT_FLASH	| \
109					 PDC_CHASSIS_LED_VALID		)
110/* Executing non-OS code - Non-critical error detected */
111#define PDC_CHASSIS_LSTATE_NONOS_NCRIT	(PDC_CHASSIS_LED_RUN_FLASH	| \
112					 PDC_CHASSIS_LED_ATTN_FLASH	| \
113					 PDC_CHASSIS_LED_FAULT_OFF	| \
114					 PDC_CHASSIS_LED_VALID		)
115/* Boot failed - Executing non-OS code - Non-critical error detected */
116#define PDC_CHASSIS_LSTATE_BFAIL_NCRIT	(PDC_CHASSIS_LED_RUN_FLASH	| \
117					 PDC_CHASSIS_LED_ATTN_FLASH	| \
118					 PDC_CHASSIS_LED_FAULT_ON	| \
119					 PDC_CHASSIS_LED_VALID		)
120/* Unexpected reboot/recovering - Executing non-OS code - Non-critical error detected */
121#define PDC_CHASSIS_LSTATE_UNEXP_NCRIT	(PDC_CHASSIS_LED_RUN_FLASH	| \
122					 PDC_CHASSIS_LED_ATTN_FLASH	| \
123					 PDC_CHASSIS_LED_FAULT_FLASH	| \
124					 PDC_CHASSIS_LED_VALID		)
125/* Cannot execute PDC */
126#define PDC_CHASSIS_LSTATE_CANNOT_PDC	(PDC_CHASSIS_LED_RUN_OFF	| \
127					 PDC_CHASSIS_LED_ATTN_OFF	| \
128					 PDC_CHASSIS_LED_FAULT_OFF	| \
129					 PDC_CHASSIS_LED_VALID		)
130/* Boot failed - OS not up - PDC has detected a failure that prevents boot */
131#define PDC_CHASSIS_LSTATE_FATAL_BFAIL	(PDC_CHASSIS_LED_RUN_OFF	| \
132					 PDC_CHASSIS_LED_ATTN_OFF	| \
133					 PDC_CHASSIS_LED_FAULT_ON	| \
134					 PDC_CHASSIS_LED_VALID		)
135/* No code running - Non-critical error detected (double fault situation) */
136#define PDC_CHASSIS_LSTATE_NOCODE_NCRIT	(PDC_CHASSIS_LED_RUN_OFF	| \
137					 PDC_CHASSIS_LED_ATTN_FLASH	| \
138					 PDC_CHASSIS_LED_FAULT_OFF	| \
139					 PDC_CHASSIS_LED_VALID		)
140/* Boot failed - OS not up - Fatal failure detected - Non-critical error detected */
141#define PDC_CHASSIS_LSTATE_FATAL_NCRIT	(PDC_CHASSIS_LED_RUN_OFF	| \
142					 PDC_CHASSIS_LED_ATTN_FLASH	| \
143					 PDC_CHASSIS_LED_FAULT_ON	| \
144					 PDC_CHASSIS_LED_VALID		)
145/* All other states are invalid */
146
147
148/*
149 * --------------
150 * PDC Log events
151 * --------------
152 * Here follows bits needed to fill up the log event sent to PDC_CHASSIS
153 * The log message contains: Alert level, Source, Source detail,
154 * Source ID, Problem detail, Caller activity, Activity status,
155 * Caller subactivity, Reporting entity type, Reporting entity ID,
156 * Data type, Unique message ID and EOM.
157 */
158
159/* Alert level */
160#define PDC_CHASSIS_ALERT_FORWARD	(0ULL << 36)	/* no failure detected */
161#define PDC_CHASSIS_ALERT_SERPROC	(1ULL << 36)	/* service proc - no failure */
162#define PDC_CHASSIS_ALERT_NURGENT	(2ULL << 36)	/* non-urgent operator attn */
163#define PDC_CHASSIS_ALERT_BLOCKED	(3ULL << 36)	/* system blocked */
164#define PDC_CHASSIS_ALERT_CONF_CHG	(4ULL << 36)	/* unexpected configuration change */
165#define PDC_CHASSIS_ALERT_ENV_PB	(5ULL << 36)	/* boot possible, environmental pb */
166#define PDC_CHASSIS_ALERT_PENDING	(6ULL << 36)	/* boot possible, pending failure */
167#define PDC_CHASSIS_ALERT_PERF_IMP	(8ULL << 36)	/* boot possible, performance impaired */
168#define PDC_CHASSIS_ALERT_FUNC_IMP	(10ULL << 36)	/* boot possible, functionality impaired */
169#define PDC_CHASSIS_ALERT_SOFT_FAIL	(12ULL << 36)	/* software failure */
170#define PDC_CHASSIS_ALERT_HANG		(13ULL << 36)	/* system hang */
171#define PDC_CHASSIS_ALERT_ENV_FATAL	(14ULL << 36)	/* fatal power or environmental pb */
172#define PDC_CHASSIS_ALERT_HW_FATAL	(15ULL << 36)	/* fatal hardware problem */
173
174/* Source */
175#define PDC_CHASSIS_SRC_NONE		(0ULL << 28)	/* unknown, no source stated */
176#define PDC_CHASSIS_SRC_PROC		(1ULL << 28)	/* processor */
177/* For later use ? */
178#define PDC_CHASSIS_SRC_PROC_CACHE	(2ULL << 28)	/* processor cache*/
179#define PDC_CHASSIS_SRC_PDH		(3ULL << 28)	/* processor dependent hardware */
180#define PDC_CHASSIS_SRC_PWR		(4ULL << 28)	/* power */
181#define PDC_CHASSIS_SRC_FAB		(5ULL << 28)	/* fabric connector */
182#define PDC_CHASSIS_SRC_PLATi		(6ULL << 28)	/* platform */
183#define PDC_CHASSIS_SRC_MEM		(7ULL << 28)	/* memory */
184#define PDC_CHASSIS_SRC_IO		(8ULL << 28)	/* I/O */
185#define PDC_CHASSIS_SRC_CELL		(9ULL << 28)	/* cell */
186#define PDC_CHASSIS_SRC_PD		(10ULL << 28)	/* protected domain */
187
188/* Source detail field */
189#define PDC_CHASSIS_SRC_D_PROC		(1ULL << 24)	/* processor general */
190
191/* Source ID - platform dependent */
192#define PDC_CHASSIS_SRC_ID_UNSPEC	(0ULL << 16)
193
194/* Problem detail - problem source dependent */
195#define PDC_CHASSIS_PB_D_PROC_NONE	(0ULL << 32)	/* no problem detail */
196#define PDC_CHASSIS_PB_D_PROC_TIMEOUT	(4ULL << 32)	/* timeout */
197
198/* Caller activity */
199#define PDC_CHASSIS_CALL_ACT_HPUX_BL	(7ULL << 12)	/* Boot Loader */
200#define PDC_CHASSIS_CALL_ACT_HPUX_PD	(8ULL << 12)	/* SAL_PD activities */
201#define PDC_CHASSIS_CALL_ACT_HPUX_EVENT	(9ULL << 12)	/* SAL_EVENTS activities */
202#define PDC_CHASSIS_CALL_ACT_HPUX_IO	(10ULL << 12)	/* SAL_IO activities */
203#define PDC_CHASSIS_CALL_ACT_HPUX_PANIC	(11ULL << 12)	/* System panic */
204#define PDC_CHASSIS_CALL_ACT_HPUX_INIT	(12ULL << 12)	/* System initialization */
205#define PDC_CHASSIS_CALL_ACT_HPUX_SHUT	(13ULL << 12)	/* System shutdown */
206#define PDC_CHASSIS_CALL_ACT_HPUX_WARN	(14ULL << 12)	/* System warning */
207#define PDC_CHASSIS_CALL_ACT_HPUX_DU	(15ULL << 12)	/* Display_Activity() update */
208
209/* Activity status - implementation dependent */
210#define PDC_CHASSIS_ACT_STATUS_UNSPEC	(0ULL << 0)
211
212/* Caller subactivity - implementation dependent */
213/* FIXME: other subactivities ? */
214#define PDC_CHASSIS_CALL_SACT_UNSPEC	(0ULL << 4)	/* implementation dependent */
215
216/* Reporting entity type */
217#define PDC_CHASSIS_RET_GENERICOS	(12ULL << 52)	/* generic OSes */
218#define PDC_CHASSIS_RET_IA64_NT		(13ULL << 52)	/* IA-64 NT */
219#define PDC_CHASSIS_RET_HPUX		(14ULL << 52)	/* HP-UX */
220#define PDC_CHASSIS_RET_DIAG		(15ULL << 52)	/* offline diagnostics & utilities */
221
222/* Reporting entity ID */
223#define PDC_CHASSIS_REID_UNSPEC		(0ULL << 44)
224
225/* Data type */
226#define PDC_CHASSIS_DT_NONE		(0ULL << 59)	/* data field unused */
227/* For later use ? Do we need these ? */
228#define PDC_CHASSIS_DT_PHYS_ADDR	(1ULL << 59)	/* physical address */
229#define PDC_CHASSIS_DT_DATA_EXPECT	(2ULL << 59)	/* expected data */
230#define PDC_CHASSIS_DT_ACTUAL		(3ULL << 59)	/* actual data */
231#define PDC_CHASSIS_DT_PHYS_LOC		(4ULL << 59)	/* physical location */
232#define PDC_CHASSIS_DT_PHYS_LOC_EXT	(5ULL << 59)	/* physical location extension */
233#define PDC_CHASSIS_DT_TAG		(6ULL << 59)	/* tag */
234#define PDC_CHASSIS_DT_SYNDROME		(7ULL << 59)	/* syndrome */
235#define PDC_CHASSIS_DT_CODE_ADDR	(8ULL << 59)	/* code address */
236#define PDC_CHASSIS_DT_ASCII_MSG	(9ULL << 59)	/* ascii message */
237#define PDC_CHASSIS_DT_POST		(10ULL << 59)	/* POST code */
238#define PDC_CHASSIS_DT_TIMESTAMP	(11ULL << 59)	/* timestamp */
239#define PDC_CHASSIS_DT_DEV_STAT		(12ULL << 59)	/* device status */
240#define PDC_CHASSIS_DT_DEV_TYPE		(13ULL << 59)	/* device type */
241#define PDC_CHASSIS_DT_PB_DET		(14ULL << 59)	/* problem detail */
242#define PDC_CHASSIS_DT_ACT_LEV		(15ULL << 59)	/* activity level/timeout */
243#define PDC_CHASSIS_DT_SER_NUM		(16ULL << 59)	/* serial number */
244#define PDC_CHASSIS_DT_REV_NUM		(17ULL << 59)	/* revision number */
245#define PDC_CHASSIS_DT_INTERRUPT	(18ULL << 59)	/* interruption information */
246#define PDC_CHASSIS_DT_TEST_NUM		(19ULL << 59)	/* test number */
247#define PDC_CHASSIS_DT_STATE_CHG	(20ULL << 59)	/* major changes in system state */
248#define PDC_CHASSIS_DT_PROC_DEALLOC	(21ULL << 59)	/* processor deallocate */
249#define PDC_CHASSIS_DT_RESET		(30ULL << 59)	/* reset type and cause */
250#define PDC_CHASSIS_DT_PA_LEGACY	(31ULL << 59)	/* legacy PA hex chassis code */
251
252/* System states - part of major changes in system state data field */
253#define PDC_CHASSIS_SYSTATE_BSTART	(0ULL << 0)	/* boot start */
254#define PDC_CHASSIS_SYSTATE_BCOMP	(1ULL << 0)	/* boot complete */
255#define PDC_CHASSIS_SYSTATE_CHANGE	(2ULL << 0)	/* major change */
256#define PDC_CHASSIS_SYSTATE_LED		(3ULL << 0)	/* LED change */
257#define PDC_CHASSIS_SYSTATE_PANIC	(9ULL << 0)	/* OS Panic */
258#define PDC_CHASSIS_SYSTATE_DUMP	(10ULL << 0)	/* memory dump */
259#define PDC_CHASSIS_SYSTATE_HPMC	(11ULL << 0)	/* processing HPMC */
260#define PDC_CHASSIS_SYSTATE_HALT	(15ULL << 0)	/* system halted */
261
262/* Message ID */
263#define PDC_CHASSIS_MSG_ID		(0ULL << 40)	/* we do not handle msg IDs atm */
264
265/* EOM - separates log entries */
266#define PDC_CHASSIS_EOM_CLEAR		(0ULL << 43)
267#define PDC_CHASSIS_EOM_SET		(1ULL << 43)
268
269/*
270 * Preformated well known messages
271 */
272
273/* Boot started */
274#define PDC_CHASSIS_PMSG_BSTART		(PDC_CHASSIS_ALERT_SERPROC	| \
275					 PDC_CHASSIS_SRC_PROC		| \
276					 PDC_CHASSIS_SRC_D_PROC		| \
277					 PDC_CHASSIS_SRC_ID_UNSPEC	| \
278					 PDC_CHASSIS_PB_D_PROC_NONE	| \
279					 PDC_CHASSIS_CALL_ACT_HPUX_INIT	| \
280					 PDC_CHASSIS_ACT_STATUS_UNSPEC	| \
281					 PDC_CHASSIS_CALL_SACT_UNSPEC	| \
282					 PDC_CHASSIS_RET_HPUX		| \
283					 PDC_CHASSIS_REID_UNSPEC	| \
284					 PDC_CHASSIS_DT_STATE_CHG	| \
285					 PDC_CHASSIS_SYSTATE_BSTART	| \
286					 PDC_CHASSIS_MSG_ID		| \
287					 PDC_CHASSIS_EOM_SET		)
288
289/* Boot complete */
290#define PDC_CHASSIS_PMSG_BCOMPLETE	(PDC_CHASSIS_ALERT_SERPROC	| \
291					 PDC_CHASSIS_SRC_PROC		| \
292					 PDC_CHASSIS_SRC_D_PROC		| \
293					 PDC_CHASSIS_SRC_ID_UNSPEC	| \
294					 PDC_CHASSIS_PB_D_PROC_NONE	| \
295					 PDC_CHASSIS_CALL_ACT_HPUX_INIT	| \
296					 PDC_CHASSIS_ACT_STATUS_UNSPEC	| \
297					 PDC_CHASSIS_CALL_SACT_UNSPEC	| \
298					 PDC_CHASSIS_RET_HPUX		| \
299					 PDC_CHASSIS_REID_UNSPEC	| \
300					 PDC_CHASSIS_DT_STATE_CHG	| \
301					 PDC_CHASSIS_SYSTATE_BCOMP	| \
302					 PDC_CHASSIS_MSG_ID		| \
303					 PDC_CHASSIS_EOM_SET		)
304
305/* Shutdown */
306#define PDC_CHASSIS_PMSG_SHUTDOWN	(PDC_CHASSIS_ALERT_SERPROC	| \
307					 PDC_CHASSIS_SRC_PROC		| \
308					 PDC_CHASSIS_SRC_D_PROC		| \
309					 PDC_CHASSIS_SRC_ID_UNSPEC	| \
310					 PDC_CHASSIS_PB_D_PROC_NONE	| \
311					 PDC_CHASSIS_CALL_ACT_HPUX_SHUT	| \
312					 PDC_CHASSIS_ACT_STATUS_UNSPEC	| \
313					 PDC_CHASSIS_CALL_SACT_UNSPEC	| \
314					 PDC_CHASSIS_RET_HPUX		| \
315					 PDC_CHASSIS_REID_UNSPEC	| \
316					 PDC_CHASSIS_DT_STATE_CHG	| \
317					 PDC_CHASSIS_SYSTATE_HALT	| \
318					 PDC_CHASSIS_MSG_ID		| \
319					 PDC_CHASSIS_EOM_SET		)
320
321/* Panic */
322#define PDC_CHASSIS_PMSG_PANIC		(PDC_CHASSIS_ALERT_SOFT_FAIL	| \
323					 PDC_CHASSIS_SRC_PROC		| \
324					 PDC_CHASSIS_SRC_D_PROC		| \
325					 PDC_CHASSIS_SRC_ID_UNSPEC	| \
326					 PDC_CHASSIS_PB_D_PROC_NONE	| \
327					 PDC_CHASSIS_CALL_ACT_HPUX_PANIC| \
328					 PDC_CHASSIS_ACT_STATUS_UNSPEC	| \
329					 PDC_CHASSIS_CALL_SACT_UNSPEC	| \
330					 PDC_CHASSIS_RET_HPUX		| \
331					 PDC_CHASSIS_REID_UNSPEC	| \
332					 PDC_CHASSIS_DT_STATE_CHG	| \
333					 PDC_CHASSIS_SYSTATE_PANIC	| \
334					 PDC_CHASSIS_MSG_ID		| \
335					 PDC_CHASSIS_EOM_SET		)
336
337// FIXME: extrapolated data
338/* HPMC */
339#define PDC_CHASSIS_PMSG_HPMC		(PDC_CHASSIS_ALERT_CONF_CHG /*?*/	| \
340					 PDC_CHASSIS_SRC_PROC		| \
341					 PDC_CHASSIS_SRC_D_PROC		| \
342					 PDC_CHASSIS_SRC_ID_UNSPEC	| \
343					 PDC_CHASSIS_PB_D_PROC_NONE	| \
344					 PDC_CHASSIS_CALL_ACT_HPUX_WARN	| \
345					 PDC_CHASSIS_RET_HPUX		| \
346					 PDC_CHASSIS_DT_STATE_CHG	| \
347					 PDC_CHASSIS_SYSTATE_HPMC	| \
348					 PDC_CHASSIS_MSG_ID		| \
349					 PDC_CHASSIS_EOM_SET		)
350
351/* LPMC */
352#define PDC_CHASSIS_PMSG_LPMC		(PDC_CHASSIS_ALERT_BLOCKED /*?*/| \
353					 PDC_CHASSIS_SRC_PROC		| \
354					 PDC_CHASSIS_SRC_D_PROC		| \
355					 PDC_CHASSIS_SRC_ID_UNSPEC	| \
356					 PDC_CHASSIS_PB_D_PROC_NONE	| \
357					 PDC_CHASSIS_CALL_ACT_HPUX_WARN	| \
358					 PDC_CHASSIS_ACT_STATUS_UNSPEC	| \
359					 PDC_CHASSIS_CALL_SACT_UNSPEC	| \
360					 PDC_CHASSIS_RET_HPUX		| \
361					 PDC_CHASSIS_REID_UNSPEC	| \
362					 PDC_CHASSIS_DT_STATE_CHG	| \
363					 PDC_CHASSIS_SYSTATE_CHANGE	| \
364					 PDC_CHASSIS_MSG_ID		| \
365					 PDC_CHASSIS_EOM_SET		)
366
367#endif /* _PARISC_PDC_CHASSIS_H */
368