Home | History | Annotate | Download | only in sys
      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 2009 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 #include <sys/async.h>
     30 
     31 #ifdef	__cplusplus
     32 extern "C" {
     33 #endif
     34 
     35 #ifdef _KERNEL
     36 
     37 /*
     38  * Sets trap table entry ttentry by overwriting eight instructions from ttlabel.
     39  */
     40 #define	OPL_SET_TRAP(ttentry, ttlabel)					\
     41 		bcopy((const void *)&ttlabel, &ttentry, 32);		\
     42 		flush_instr_mem((caddr_t)&ttentry, 32);
     43 
     44 /*
     45  * The same thing as above, but to patch 7 instructions.
     46  */
     47 #define	OPL_PATCH_28(ttentry, ttlabel)					\
     48 		bcopy((const void *)&ttlabel, &ttentry, 28);		\
     49 		flush_instr_mem((caddr_t)&ttentry, 28);
     50 
     51 /*
     52  * Define for max size of "reason" string in panic flows.  Since this is on
     53  * the stack, we want to keep it as small as is reasonable.
     54  */
     55 #define	MAX_REASON_STRING	40
     56 
     57 /*
     58  * These error types are specific to Olympus and are used internally for the
     59  * opl fault structure flt_type field.
     60  */
     61 #define	OPL_CPU_SYNC_UE		1
     62 #define	OPL_CPU_SYNC_OTHERS	2
     63 #define	OPL_CPU_URGENT		3
     64 #define	OPL_CPU_INV_SFSR	4
     65 #define	OPL_CPU_INV_UGESR	5
     66 
     67 #ifndef _ASM
     68 
     69 /*
     70  * Define Olympus family (SPARC64-VI) specific asynchronous error structure
     71  */
     72 typedef struct olympus_async_flt {
     73 	struct async_flt cmn_asyncflt;  /* common - see sun4u/sys/async.h */
     74 	ushort_t flt_type;		/* types of faults - cpu specific */
     75 	uint64_t flt_bit;		/* fault bit for this log msg */
     76 	ushort_t flt_eid_mod;		/* module ID (type of hardware) */
     77 	ushort_t flt_eid_sid;		/* source ID */
     78 } opl_async_flt_t;
     79 
     80 /*
     81  * Error type table struct.
     82  */
     83 typedef struct ecc_type_to_info {
     84 	uint64_t	ec_afsr_bit;	/* SFSR bit of error */
     85 	char		*ec_reason;	/* Short error description */
     86 	uint_t		ec_flags;	/* Trap type error should be seen at */
     87 	int		ec_flt_type;	/* Used for error logging */
     88 	char		*ec_desc;	/* Long error description */
     89 	uint64_t	ec_err_payload;	/* FM ereport payload information */
     90 	char		*ec_err_class;	/* FM ereport class */
     91 } ecc_type_to_info_t;
     92 
     93 /*
     94  * Redefine fault status bit field definitions taken from
     95  * "async.h". Reused reserved Ultrasparc3 specific fault status
     96  * bits here since they are by definition mutually exclusive
     97  * w.r.t. OPL
     98  */
     99 #define	OPL_ECC_ISYNC_TRAP	0x0100
    100 #define	OPL_ECC_DSYNC_TRAP	0x0200
    101 #define	OPL_ECC_SYNC_TRAP	(OPL_ECC_ISYNC_TRAP|OPL_ECC_DSYNC_TRAP)
    102 #define	OPL_ECC_URGENT_TRAP	0x0400
    103 
    104 #define	TRAP_TYPE_URGENT	0x40
    105 
    106 /*
    107  * Since all the files share a bunch of routines between each other
    108  * we will put all the "extern" definitions in this header file so that we
    109  * don't have to repeat it all in every file.
    110  */
    111 
    112 /*
    113  * functions that are defined in the OPL,SPARC64-VI cpu module:
    114  */
    115 extern void shipit(int, int);
    116 extern void cpu_page_retire(opl_async_flt_t *opl_flt);
    117 extern void cpu_init_trap(void);
    118 extern void cpu_error_ecache_flush(void);
    119 extern void flush_ecache(uint64_t physaddr, size_t ecachesize, size_t linesize);
    120 extern void stick_adj(int64_t skew);
    121 extern void stick_timestamp(int64_t *ts);
    122 extern void hwblkpagecopy(const void *src, void *dst);
    123 extern void opl_error_setup(uint64_t);
    124 extern int  cpu_queue_events(opl_async_flt_t *, char *, uint64_t);
    125 extern void ras_cntr_reset(void *);
    126 
    127 /*
    128  * variables and structures that are defined outside the FJSV,SPARC64-VI
    129  * cpu module:
    130  */
    131 extern uint64_t xc_tick_limit;
    132 extern uint64_t xc_tick_jump_limit;
    133 
    134 /*
    135  * Labels used for the trap_table patching
    136  */
    137 extern uint32_t tt0_iae;
    138 extern uint32_t tt1_iae;
    139 extern uint32_t tt0_dae;
    140 extern uint32_t tt1_dae;
    141 extern uint32_t tt0_asdat;
    142 extern uint32_t tt1_asdat;
    143 
    144 extern uint32_t tt0_flushw;
    145 extern uint32_t opl_cleanw_patch;
    146 
    147 extern void opl_serr_instr(void);
    148 extern void opl_ugerr_instr(void);
    149 
    150 extern void opl_ta3_instr(void);
    151 extern void opl_ta4_instr(void);
    152 
    153 /*
    154  * D$ and I$ global parameters.
    155  */
    156 extern int dcache_size;
    157 extern int dcache_linesize;
    158 extern int icache_size;
    159 extern int icache_linesize;
    160 
    161 #endif /* _ASM */
    162 
    163 #endif /* _KERNEL */
    164 
    165 #ifdef	__cplusplus
    166 }
    167 #endif
    168 
    169 #endif	/* _SYS_OPL_MODULE_H */
    170