xref: /linux-6.15/arch/alpha/kernel/err_impl.h (revision b2441318)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  *	linux/arch/alpha/kernel/err_impl.h
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  *	Copyright (C) 2000 Jeff Wiedemeier (Compaq Computer Corporation)
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  *	Contains declarations and macros to support Alpha error handling
81da177e4SLinus Torvalds  * 	implementations.
91da177e4SLinus Torvalds  */
101da177e4SLinus Torvalds 
11ec221208SDavid Howells #include <asm/mce.h>
12ec221208SDavid Howells 
131da177e4SLinus Torvalds union el_timestamp;
141da177e4SLinus Torvalds struct el_subpacket;
151da177e4SLinus Torvalds struct ev7_lf_subpackets;
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds struct el_subpacket_annotation {
181da177e4SLinus Torvalds 	struct el_subpacket_annotation *next;
191da177e4SLinus Torvalds 	u16 class;
201da177e4SLinus Torvalds 	u16 type;
211da177e4SLinus Torvalds 	u16 revision;
221da177e4SLinus Torvalds 	char *description;
231da177e4SLinus Torvalds 	char **annotation;
241da177e4SLinus Torvalds };
251da177e4SLinus Torvalds #define SUBPACKET_ANNOTATION(c, t, r, d, a) {NULL, (c), (t), (r), (d), (a)}
261da177e4SLinus Torvalds 
271da177e4SLinus Torvalds struct el_subpacket_handler {
281da177e4SLinus Torvalds 	struct el_subpacket_handler *next;
291da177e4SLinus Torvalds 	u16 class;
301da177e4SLinus Torvalds 	struct el_subpacket *(*handler)(struct el_subpacket *);
311da177e4SLinus Torvalds };
321da177e4SLinus Torvalds #define SUBPACKET_HANDLER_INIT(c, h) {NULL, (c), (h)}
331da177e4SLinus Torvalds 
341da177e4SLinus Torvalds /*
351da177e4SLinus Torvalds  * Manipulate a field from a register given it's name. defines
361da177e4SLinus Torvalds  * for the LSB (__S - shift count) and bitmask (__M) are required
371da177e4SLinus Torvalds  *
381da177e4SLinus Torvalds  * EXTRACT(u, f) - extracts the field and places it at bit position 0
391da177e4SLinus Torvalds  * GEN_MASK(f) - creates an in-position mask for the field
401da177e4SLinus Torvalds  */
411da177e4SLinus Torvalds #define EXTRACT(u, f) (((u) >> f##__S) & f##__M)
421da177e4SLinus Torvalds #define GEN_MASK(f) ((u64)f##__M << f##__S)
431da177e4SLinus Torvalds 
441da177e4SLinus Torvalds /*
451da177e4SLinus Torvalds  * err_common.c
461da177e4SLinus Torvalds  */
471da177e4SLinus Torvalds extern char *err_print_prefix;
481da177e4SLinus Torvalds 
491da177e4SLinus Torvalds extern void mchk_dump_mem(void *, size_t, char **);
501da177e4SLinus Torvalds extern void mchk_dump_logout_frame(struct el_common *);
511da177e4SLinus Torvalds extern void el_print_timestamp(union el_timestamp *);
521da177e4SLinus Torvalds extern void el_process_subpackets(struct el_subpacket *, int);
531da177e4SLinus Torvalds extern struct el_subpacket *el_process_subpacket(struct el_subpacket *);
541da177e4SLinus Torvalds extern void el_annotate_subpacket(struct el_subpacket *);
551da177e4SLinus Torvalds extern void cdl_check_console_data_log(void);
561da177e4SLinus Torvalds extern int cdl_register_subpacket_annotation(struct el_subpacket_annotation *);
571da177e4SLinus Torvalds extern int cdl_register_subpacket_handler(struct el_subpacket_handler *);
581da177e4SLinus Torvalds 
591da177e4SLinus Torvalds /*
601da177e4SLinus Torvalds  * err_ev7.c
611da177e4SLinus Torvalds  */
621da177e4SLinus Torvalds extern struct ev7_lf_subpackets *
631da177e4SLinus Torvalds ev7_collect_logout_frame_subpackets(struct el_subpacket *,
641da177e4SLinus Torvalds 				    struct ev7_lf_subpackets *);
651da177e4SLinus Torvalds extern void ev7_register_error_handlers(void);
661ffb1c0cSIvan Kokshaysky extern void ev7_machine_check(unsigned long, unsigned long);
671da177e4SLinus Torvalds 
681da177e4SLinus Torvalds /*
691da177e4SLinus Torvalds  * err_ev6.c
701da177e4SLinus Torvalds  */
711da177e4SLinus Torvalds extern void ev6_register_error_handlers(void);
721da177e4SLinus Torvalds extern int ev6_process_logout_frame(struct el_common *, int);
731ffb1c0cSIvan Kokshaysky extern void ev6_machine_check(unsigned long, unsigned long);
741da177e4SLinus Torvalds 
751da177e4SLinus Torvalds /*
761da177e4SLinus Torvalds  * err_marvel.c
771da177e4SLinus Torvalds  */
781ffb1c0cSIvan Kokshaysky extern void marvel_machine_check(unsigned long, unsigned long);
791da177e4SLinus Torvalds extern void marvel_register_error_handlers(void);
801da177e4SLinus Torvalds 
811da177e4SLinus Torvalds /*
821da177e4SLinus Torvalds  * err_titan.c
831da177e4SLinus Torvalds  */
841da177e4SLinus Torvalds extern int titan_process_logout_frame(struct el_common *, int);
851ffb1c0cSIvan Kokshaysky extern void titan_machine_check(unsigned long, unsigned long);
861da177e4SLinus Torvalds extern void titan_register_error_handlers(void);
871da177e4SLinus Torvalds extern int privateer_process_logout_frame(struct el_common *, int);
881ffb1c0cSIvan Kokshaysky extern void privateer_machine_check(unsigned long, unsigned long);
89