more changes on original files
[linux-2.4.git] / arch / alpha / kernel / err_impl.h
1 /*
2  *      linux/arch/alpha/kernel/err_impl.h
3  *
4  *      Copyright (C) 2000 Jeff Wiedemeier (Compaq Computer Corporation)
5  *
6  *      Contains declarations and macros to support Alpha error handling
7  *      implementations.
8  */
9
10 /*
11  * SCB Vector definitions
12  */
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
18
19 /*
20  * Disposition definitions for logout frame parser
21  */
22 #define MCHK_DISPOSITION_UNKNOWN_ERROR          0x00
23 #define MCHK_DISPOSITION_REPORT                 0x01
24 #define MCHK_DISPOSITION_DISMISS                0x02
25
26 /*
27  * Error Log definitions
28  */
29 /*
30  * Types
31  */
32
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)
57
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;
68 };
69
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;
106 };
107
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;
115 };
116 #define SUBPACKET_ANNOTATION(c, t, r, d, a) {NULL, (c), (t), (r), (d), (a)}
117
118 struct el_subpacket_handler {
119         struct el_subpacket_handler *next;
120         u16 class;
121         struct el_subpacket *(*handler)(struct el_subpacket *);
122 };
123 #define SUBPACKET_HANDLER_INIT(c, h) {NULL, (c), (h)}
124
125 /*
126  * Extract a field from a register given it's name. defines
127  * for the LSB (__S - shift count) and bitmask (__M) are required
128  */
129 #define EXTRACT(u, f) (((u) >> f##__S) & f##__M)
130
131 /*
132  * err_common.c
133  */
134 extern char *err_print_prefix;
135
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 *);
148
149 /*
150  * err_marvel.c
151  */
152 extern void marvel_machine_check(u64, u64, struct pt_regs *);
153 extern void marvel_register_error_handlers(void);
154
155 /*
156  * err_titan.c
157  */
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 *);