Merge with Linux 2.5.59.
[linux-2.6/linux-mips.git] / arch / alpha / kernel / err_impl.h
blob32c709ab75c44f7397ba53fdbecd23d98dbb7055
1 /*
2 * linux/arch/alpha/kernel/err_impl.h
4 * Copyright (C) 2000 Jeff Wiedemeier (Compaq Computer Corporation)
6 * Contains declarations and macros to support Alpha error handling
7 * implementations.
8 */
11 * SCB Vector definitions
13 #define SCB_Q_SYSERR 0x620
14 #define SCB_Q_PROCERR 0x630
15 #define SCB_Q_SYSMCHK 0x660
16 #define SCB_Q_PROCMCHK 0x670
17 #define SCB_Q_SYSEVENT 0x680
20 * Disposition definitions for logout frame parser
22 #define MCHK_DISPOSITION_UNKNOWN_ERROR 0x00
23 #define MCHK_DISPOSITION_REPORT 0x01
24 #define MCHK_DISPOSITION_DISMISS 0x02
27 * Error Log definitions
30 * Types
33 #define EL_CLASS__TERMINATION (0)
34 # define EL_TYPE__TERMINATION__TERMINATION (0)
35 #define EL_CLASS__HEADER (5)
36 # define EL_TYPE__HEADER__SYSTEM_ERROR_FRAME (1)
37 # define EL_TYPE__HEADER__SYSTEM_EVENT_FRAME (2)
38 # define EL_TYPE__HEADER__HALT_FRAME (3)
39 # define EL_TYPE__HEADER__LOGOUT_FRAME (19)
40 #define EL_CLASS__GENERAL_NOTIFICATION (9)
41 #define EL_CLASS__PCI_ERROR_FRAME (11)
42 #define EL_CLASS__REGATTA_FAMILY (12)
43 # define EL_TYPE__REGATTA__PROCESSOR_ERROR_FRAME (1)
44 # define EL_TYPE__REGATTA__SYSTEM_ERROR_FRAME (2)
45 # define EL_TYPE__REGATTA__ENVIRONMENTAL_FRAME (3)
46 # define EL_TYPE__REGATTA__TITAN_PCHIP0_EXTENDED (8)
47 # define EL_TYPE__REGATTA__TITAN_PCHIP1_EXTENDED (9)
48 # define EL_TYPE__REGATTA__TITAN_MEMORY_EXTENDED (10)
49 # define EL_TYPE__REGATTA__PROCESSOR_DBL_ERROR_HALT (11)
50 # define EL_TYPE__REGATTA__SYSTEM_DBL_ERROR_HALT (12)
51 #define EL_CLASS__PAL (14)
52 # define EL_TYPE__PAL__LOGOUT_FRAME (1)
53 # define EL_TYPE__PAL__EV7_PROCESSOR (4)
54 # define EL_TYPE__PAL__EV7_ZBOX (5)
55 # define EL_TYPE__PAL__EV7_RBOX (6)
56 # define EL_TYPE__PAL__EV7_IO (7)
58 union el_timestamp {
59 struct {
60 u8 second;
61 u8 minute;
62 u8 hour;
63 u8 day;
64 u8 month;
65 u8 year;
66 } b;
67 u64 as_int;
70 struct el_subpacket {
71 u16 length; /* length of header (in bytes) */
72 u16 class; /* header class and type... */
73 u16 type; /* ...determine content */
74 u16 revision; /* header revision */
75 union {
76 struct { /* Class 5, Type 1 - System Error */
77 u32 frame_length;
78 u32 frame_packet_count;
79 } sys_err;
80 struct { /* Class 5, Type 2 - System Event */
81 union el_timestamp timestamp;
82 u32 frame_length;
83 u32 frame_packet_count;
84 } sys_event;
85 struct { /* Class 5, Type 3 - Double Error Halt */
86 u16 halt_code;
87 u16 reserved;
88 union el_timestamp timestamp;
89 u32 frame_length;
90 u32 frame_packet_count;
91 } err_halt;
92 struct { /* Clasee 5, Type 19 - Logout Frame Header */
93 u32 frame_length;
94 u32 frame_flags;
95 u32 cpu_offset;
96 u32 system_offset;
97 } logout_header;
98 struct { /* Class 12 - Regatta */
99 u64 cpuid;
100 u64 data_start[1];
101 } regatta_frame;
102 struct { /* Raw */
103 u64 data_start[1];
104 } raw;
105 } by_type;
108 struct el_subpacket_annotation {
109 struct el_subpacket_annotation *next;
110 u16 class;
111 u16 type;
112 u16 revision;
113 char *description;
114 char **annotation;
116 #define SUBPACKET_ANNOTATION(c, t, r, d, a) {NULL, (c), (t), (r), (d), (a)}
118 struct el_subpacket_handler {
119 struct el_subpacket_handler *next;
120 u16 class;
121 struct el_subpacket *(*handler)(struct el_subpacket *);
123 #define SUBPACKET_HANDLER_INIT(c, h) {NULL, (c), (h)}
126 * Extract a field from a register given it's name. defines
127 * for the LSB (__S - shift count) and bitmask (__M) are required
129 #define EXTRACT(u, f) (((u) >> f##__S) & f##__M)
132 * err_common.c
134 extern char *err_print_prefix;
136 extern void mchk_dump_mem(void *, size_t, char **);
137 extern void mchk_dump_logout_frame(struct el_common *);
138 extern void ev7_register_error_handlers(void);
139 extern void ev7_machine_check(u64, u64, struct pt_regs *);
140 extern void ev6_register_error_handlers(void);
141 extern int ev6_process_logout_frame(struct el_common *, int);
142 extern void ev6_machine_check(u64, u64, struct pt_regs *);
143 extern struct el_subpacket *el_process_subpacket(struct el_subpacket *);
144 extern void el_annotate_subpacket(struct el_subpacket *);
145 extern void cdl_check_console_data_log(void);
146 extern int cdl_register_subpacket_annotation(struct el_subpacket_annotation *);
147 extern int cdl_register_subpacket_handler(struct el_subpacket_handler *);
150 * err_marvel.c
152 extern void marvel_machine_check(u64, u64, struct pt_regs *);
153 extern void marvel_register_error_handlers(void);
156 * err_titan.c
158 extern int titan_process_logout_frame(struct el_common *, int);
159 extern void titan_machine_check(u64, u64, struct pt_regs *);
160 extern void titan_register_error_handlers(void);
161 extern int privateer_process_logout_frame(struct el_common *, int);
162 extern void privateer_machine_check(u64, u64, struct pt_regs *);