17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
67c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
77c478bd9Sstevel@tonic-gate  * with the License.
87c478bd9Sstevel@tonic-gate  *
97c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate  * and limitations under the License.
137c478bd9Sstevel@tonic-gate  *
147c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate  *
207c478bd9Sstevel@tonic-gate  * CDDL HEADER END
217c478bd9Sstevel@tonic-gate  */
227c478bd9Sstevel@tonic-gate /*
237c478bd9Sstevel@tonic-gate  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
247c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
257c478bd9Sstevel@tonic-gate  */
26*2a1fd0ffSPeter Tribble /*
27*2a1fd0ffSPeter Tribble  * Copyright 2019 Peter Tribble.
28*2a1fd0ffSPeter Tribble  */
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate #ifndef	_CPU_SGNBLK_DEFS_H
317c478bd9Sstevel@tonic-gate #define	_CPU_SGNBLK_DEFS_H
327c478bd9Sstevel@tonic-gate 
337c478bd9Sstevel@tonic-gate #ifdef __cplusplus
347c478bd9Sstevel@tonic-gate extern "C" {
357c478bd9Sstevel@tonic-gate #endif
367c478bd9Sstevel@tonic-gate 
377c478bd9Sstevel@tonic-gate #ifndef _ASM
387c478bd9Sstevel@tonic-gate 
397c478bd9Sstevel@tonic-gate #include <sys/types.h>
407c478bd9Sstevel@tonic-gate #include <sys/cpuvar.h>
417c478bd9Sstevel@tonic-gate 
427c478bd9Sstevel@tonic-gate #endif /* _ASM */
437c478bd9Sstevel@tonic-gate 
447c478bd9Sstevel@tonic-gate /*
457c478bd9Sstevel@tonic-gate  * Build a CPU signature given a signature, state and sub-state.
467c478bd9Sstevel@tonic-gate  */
477c478bd9Sstevel@tonic-gate #define	CPU_SIG_BLD(sig, state, sub_state) \
487c478bd9Sstevel@tonic-gate 	(((sig) << 16) | ((state) << 8) | (sub_state))
497c478bd9Sstevel@tonic-gate 
507c478bd9Sstevel@tonic-gate /*
517c478bd9Sstevel@tonic-gate  * Definition of a CPU signature.
527c478bd9Sstevel@tonic-gate  */
537c478bd9Sstevel@tonic-gate typedef union {
547c478bd9Sstevel@tonic-gate 	struct cpu_signature {
557c478bd9Sstevel@tonic-gate 		ushort_t	sig;		/* see xxxx_SIG below. */
567c478bd9Sstevel@tonic-gate 		uchar_t		state;		/* see SIGBST_xxxx below. */
577c478bd9Sstevel@tonic-gate 		uchar_t		sub_state;	/* EXIT_xxx if SIGBST_EXIT. */
587c478bd9Sstevel@tonic-gate 	} state_t;
597c478bd9Sstevel@tonic-gate 	uint32_t	signature;
607c478bd9Sstevel@tonic-gate } sig_state_t;
617c478bd9Sstevel@tonic-gate 
627c478bd9Sstevel@tonic-gate /*
637c478bd9Sstevel@tonic-gate  * CPU Signatures - the signature defines the entity that the CPU is executing.
647c478bd9Sstevel@tonic-gate  * This entity can be the OS, OPB or the debugger.  This signature consists of
657c478bd9Sstevel@tonic-gate  * two ASCII characters.
667c478bd9Sstevel@tonic-gate  */
677c478bd9Sstevel@tonic-gate #define	SIG_BLD(f, s)	(((f) << 8) | (s))
687c478bd9Sstevel@tonic-gate 
697c478bd9Sstevel@tonic-gate #define	OBP_SIG		SIG_BLD('O', 'B')
707c478bd9Sstevel@tonic-gate #define	OS_SIG		SIG_BLD('O', 'S')
717c478bd9Sstevel@tonic-gate #define	DBG_SIG		SIG_BLD('D', 'B')
727c478bd9Sstevel@tonic-gate #define	POST_SIG	SIG_BLD('P', 'O')
737c478bd9Sstevel@tonic-gate 
747c478bd9Sstevel@tonic-gate /*
757c478bd9Sstevel@tonic-gate  * CPU State - the state identifies what the CPU is doing.
767c478bd9Sstevel@tonic-gate  * The states should be defined in an increasing, linear
777c478bd9Sstevel@tonic-gate  * manner.
787c478bd9Sstevel@tonic-gate  */
797c478bd9Sstevel@tonic-gate #define	SIGST_NONE			0
807c478bd9Sstevel@tonic-gate #define	SIGST_RUN			1
817c478bd9Sstevel@tonic-gate #define	SIGST_EXIT			2
827c478bd9Sstevel@tonic-gate #define	SIGST_PRERUN			3
837c478bd9Sstevel@tonic-gate #define	SIGST_DOMAINSTOP		4
847c478bd9Sstevel@tonic-gate #define	SIGST_RESET			5
857c478bd9Sstevel@tonic-gate #define	SIGST_POWEROFF			6
867c478bd9Sstevel@tonic-gate #define	SIGST_DETACHED			7
877c478bd9Sstevel@tonic-gate #define	SIGST_CALLBACK			8
887c478bd9Sstevel@tonic-gate #define	SIGST_OFFLINE			9
897c478bd9Sstevel@tonic-gate #define	SIGST_BOOTING			10
907c478bd9Sstevel@tonic-gate #define	SIGST_UNKNOWN			11
917c478bd9Sstevel@tonic-gate #define	SIGST_ERROR_RESET		12
927c478bd9Sstevel@tonic-gate #define	SIGST_ERROR_RESET_SYNC		13
937c478bd9Sstevel@tonic-gate #define	SIGST_QUIESCED			14
947c478bd9Sstevel@tonic-gate #define	SIGST_QUIESCE_INPROGRESS	15
957c478bd9Sstevel@tonic-gate #define	SIGST_RESUME_INPROGRESS		16
967c478bd9Sstevel@tonic-gate #define	SIGST_INIT			17
977c478bd9Sstevel@tonic-gate #define	SIGST_LOADING			18
987c478bd9Sstevel@tonic-gate 
997c478bd9Sstevel@tonic-gate /*
1007c478bd9Sstevel@tonic-gate  *  CPU sub-state - the sub-state is used to further qualify
1017c478bd9Sstevel@tonic-gate  *  the state.
1027c478bd9Sstevel@tonic-gate  */
1037c478bd9Sstevel@tonic-gate #define	SIGSUBST_NULL			0
1047c478bd9Sstevel@tonic-gate #define	SIGSUBST_HALT			1
1057c478bd9Sstevel@tonic-gate #define	SIGSUBST_ENVIRON		2
1067c478bd9Sstevel@tonic-gate #define	SIGSUBST_REBOOT			3
1077c478bd9Sstevel@tonic-gate #define	SIGSUBST_PANIC			4
1087c478bd9Sstevel@tonic-gate #define	SIGSUBST_PANIC_CONT		5
1097c478bd9Sstevel@tonic-gate #define	SIGSUBST_HUNG			6
1107c478bd9Sstevel@tonic-gate #define	SIGSUBST_WATCH			7
1117c478bd9Sstevel@tonic-gate #define	SIGSUBST_PANIC_REBOOT		8
1127c478bd9Sstevel@tonic-gate #define	SIGSUBST_ERROR_RESET_REBOOT	9
1137c478bd9Sstevel@tonic-gate #define	SIGSUBST_OBP_RESET		10
1147c478bd9Sstevel@tonic-gate #define	SIGSUBST_DEBUG			11
1157c478bd9Sstevel@tonic-gate #define	SIGSUBST_DUMP			12
1167c478bd9Sstevel@tonic-gate #define	SIGSUBST_FAILED			13
1177c478bd9Sstevel@tonic-gate 
1187c478bd9Sstevel@tonic-gate #ifdef _KERNEL
1197c478bd9Sstevel@tonic-gate 
1207c478bd9Sstevel@tonic-gate #define	CPU_SIGNATURE(sig, state, sub_state, cpuid)			\
1217c478bd9Sstevel@tonic-gate {									\
1227c478bd9Sstevel@tonic-gate 	if (cpu_sgn_func)						\
1237c478bd9Sstevel@tonic-gate 		(*cpu_sgn_func)((sig), (state), (sub_state), (cpuid));	\
1247c478bd9Sstevel@tonic-gate }
1257c478bd9Sstevel@tonic-gate 
1267c478bd9Sstevel@tonic-gate extern void (*cpu_sgn_func)(ushort_t, uchar_t, uchar_t, int);
1277c478bd9Sstevel@tonic-gate 
1287c478bd9Sstevel@tonic-gate #endif	/* _KERNEL */
1297c478bd9Sstevel@tonic-gate 
1307c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
1317c478bd9Sstevel@tonic-gate }
1327c478bd9Sstevel@tonic-gate #endif
1337c478bd9Sstevel@tonic-gate 
1347c478bd9Sstevel@tonic-gate #endif	/* _CPU_SGNBLK_DEFS_H */
135