xref: /illumos-gate/usr/src/uts/sun4u/sys/opl_module.h (revision 948f2876ce2a3010558f4f6937e16086ebcd36f2)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef _SYS_OPL_MODULE_H
27 #define	_SYS_OPL_MODULE_H
28 
29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
30 
31 #include <sys/async.h>
32 
33 #ifdef	__cplusplus
34 extern "C" {
35 #endif
36 
37 #ifdef _KERNEL
38 
39 /*
40  * Sets trap table entry ttentry by overwriting eight instructions from ttlabel.
41  */
42 #define	OPL_SET_TRAP(ttentry, ttlabel)					\
43 		bcopy((const void *)&ttlabel, &ttentry, 32);		\
44 		flush_instr_mem((caddr_t)&ttentry, 32);
45 
46 /*
47  * Define for max size of "reason" string in panic flows.  Since this is on
48  * the stack, we want to keep it as small as is reasonable.
49  */
50 #define	MAX_REASON_STRING	40
51 
52 /*
53  * These error types are specific to Olympus and are used internally for the
54  * opl fault structure flt_type field.
55  */
56 #define	OPL_CPU_SYNC_UE		1
57 #define	OPL_CPU_SYNC_OTHERS	2
58 #define	OPL_CPU_URGENT		3
59 #define	OPL_CPU_INV_SFSR	4
60 #define	OPL_CPU_INV_UGESR	5
61 
62 #ifndef _ASM
63 
64 /*
65  * Define Olympus family (SPARC64-VI) specific asynchronous error structure
66  */
67 typedef struct olympus_async_flt {
68 	struct async_flt cmn_asyncflt;  /* common - see sun4u/sys/async.h */
69 	ushort_t flt_type;		/* types of faults - cpu specific */
70 	uint64_t flt_bit;		/* fault bit for this log msg */
71 	ushort_t flt_eid_mod;		/* module ID (type of hardware) */
72 	ushort_t flt_eid_sid;		/* source ID */
73 } opl_async_flt_t;
74 
75 /*
76  * Error type table struct.
77  */
78 typedef struct ecc_type_to_info {
79 	uint64_t	ec_afsr_bit;	/* SFSR bit of error */
80 	char		*ec_reason;	/* Short error description */
81 	uint_t		ec_flags;	/* Trap type error should be seen at */
82 	int		ec_flt_type;	/* Used for error logging */
83 	char		*ec_desc;	/* Long error description */
84 	uint64_t	ec_err_payload;	/* FM ereport payload information */
85 	char		*ec_err_class;	/* FM ereport class */
86 } ecc_type_to_info_t;
87 
88 /*
89  * Redefine fault status bit field definitions taken from
90  * "async.h". Reused reserved Ultrasparc3 specific fault status
91  * bits here since they are by definition mutually exclusive
92  * w.r.t. OPL
93  */
94 #define	OPL_ECC_ISYNC_TRAP	0x0100
95 #define	OPL_ECC_DSYNC_TRAP	0x0200
96 #define	OPL_ECC_SYNC_TRAP	(OPL_ECC_ISYNC_TRAP|OPL_ECC_DSYNC_TRAP)
97 #define	OPL_ECC_URGENT_TRAP	0x0400
98 
99 #define	TRAP_TYPE_URGENT	0x40
100 
101 /*
102  * Since all the files share a bunch of routines between each other
103  * we will put all the "extern" definitions in this header file so that we
104  * don't have to repeat it all in every file.
105  */
106 
107 /*
108  * functions that are defined in the OPL,SPARC64-VI cpu module:
109  */
110 extern void shipit(int, int);
111 extern void cpu_page_retire(opl_async_flt_t *opl_flt);
112 extern void cpu_init_trap(void);
113 extern void cpu_error_ecache_flush(void);
114 extern void flush_ecache(uint64_t physaddr, size_t ecachesize, size_t linesize);
115 extern void stick_adj(int64_t skew);
116 extern void stick_timestamp(int64_t *ts);
117 extern void hwblkpagecopy(const void *src, void *dst);
118 extern void opl_error_setup(uint64_t);
119 extern void opl_mpg_enable(void);
120 extern int  cpu_queue_events(opl_async_flt_t *, char *, uint64_t);
121 extern void ras_cntr_reset(void *);
122 
123 /*
124  * variables and structures that are defined outside the FJSV,SPARC64-VI
125  * cpu module:
126  */
127 extern uint64_t xc_tick_limit;
128 extern uint64_t xc_tick_jump_limit;
129 
130 /*
131  * Labels used for the trap_table patching
132  */
133 extern uint32_t tt0_iae;
134 extern uint32_t tt1_iae;
135 extern uint32_t tt0_dae;
136 extern uint32_t tt1_dae;
137 extern uint32_t tt0_asdat;
138 extern uint32_t tt1_asdat;
139 
140 extern void opl_serr_instr(void);
141 extern void opl_ugerr_instr(void);
142 
143 /*
144  * D$ and I$ global parameters.
145  */
146 extern int dcache_size;
147 extern int dcache_linesize;
148 extern int icache_size;
149 extern int icache_linesize;
150 
151 #endif /* _ASM */
152 
153 #endif /* _KERNEL */
154 
155 #ifdef	__cplusplus
156 }
157 #endif
158 
159 #endif	/* _SYS_OPL_MODULE_H */
160