1*0Sstevel@tonic-gate /* 2*0Sstevel@tonic-gate * CDDL HEADER START 3*0Sstevel@tonic-gate * 4*0Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*0Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*0Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*0Sstevel@tonic-gate * with the License. 8*0Sstevel@tonic-gate * 9*0Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*0Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*0Sstevel@tonic-gate * See the License for the specific language governing permissions 12*0Sstevel@tonic-gate * and limitations under the License. 13*0Sstevel@tonic-gate * 14*0Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*0Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*0Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*0Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*0Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*0Sstevel@tonic-gate * 20*0Sstevel@tonic-gate * CDDL HEADER END 21*0Sstevel@tonic-gate */ 22*0Sstevel@tonic-gate /* 23*0Sstevel@tonic-gate * Copyright (c) 2000 by Sun Microsystems, Inc. 24*0Sstevel@tonic-gate * All rights reserved. 25*0Sstevel@tonic-gate */ 26*0Sstevel@tonic-gate 27*0Sstevel@tonic-gate #ifndef _CPU_SGN_H 28*0Sstevel@tonic-gate #define _CPU_SGN_H 29*0Sstevel@tonic-gate 30*0Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 31*0Sstevel@tonic-gate 32*0Sstevel@tonic-gate #ifdef __cplusplus 33*0Sstevel@tonic-gate extern "C" { 34*0Sstevel@tonic-gate #endif 35*0Sstevel@tonic-gate 36*0Sstevel@tonic-gate #ifndef _ASM 37*0Sstevel@tonic-gate #include <sys/types.h> 38*0Sstevel@tonic-gate #include <sys/cpuvar.h> 39*0Sstevel@tonic-gate #endif /* _ASM */ 40*0Sstevel@tonic-gate 41*0Sstevel@tonic-gate /* 42*0Sstevel@tonic-gate * BBSRAM virtual address - 64 bits max. 43*0Sstevel@tonic-gate */ 44*0Sstevel@tonic-gate typedef uint64_t vaddr_t; 45*0Sstevel@tonic-gate 46*0Sstevel@tonic-gate /* 47*0Sstevel@tonic-gate * Special type for BBSRAM offsets (rather than pointers). 48*0Sstevel@tonic-gate * This must be a 32 bit value 49*0Sstevel@tonic-gate */ 50*0Sstevel@tonic-gate typedef uint32_t bboff_t; 51*0Sstevel@tonic-gate 52*0Sstevel@tonic-gate /* 53*0Sstevel@tonic-gate * As long as each component of the revision is less than 54*0Sstevel@tonic-gate * 256, this trick will work. So we check for that and generate a 55*0Sstevel@tonic-gate * syntax error if the SID is out of range. 56*0Sstevel@tonic-gate */ 57*0Sstevel@tonic-gate #define SIGB_MBOX_SIZE 64 58*0Sstevel@tonic-gate /* reserved space - rounds size of sigblock_t to 512 */ 59*0Sstevel@tonic-gate #define SIGB_RESV 16 60*0Sstevel@tonic-gate 61*0Sstevel@tonic-gate #define BASE_ADDR_T_OFFSET 0xFE0 /* BBSRAM base_addr_t offset */ 62*0Sstevel@tonic-gate 63*0Sstevel@tonic-gate #define CVC_OUT_SIZ 1024 /* cvc output buffer size */ 64*0Sstevel@tonic-gate #define CVC_IN_SIZ 256 /* cvc input buffer size */ 65*0Sstevel@tonic-gate 66*0Sstevel@tonic-gate /* make sure the assembler doesn't see the C code */ 67*0Sstevel@tonic-gate #ifndef _ASM 68*0Sstevel@tonic-gate 69*0Sstevel@tonic-gate /* 70*0Sstevel@tonic-gate * The reserved hardware interrupt 7F is used as a pointer structure 71*0Sstevel@tonic-gate * to the two processors' signature blocks in bbsram. Each trap entry 72*0Sstevel@tonic-gate * is 32 bytes, so this structure is always present at bbsram offset 73*0Sstevel@tonic-gate * 0xFE0. 74*0Sstevel@tonic-gate * Over time, we may discover other items that need pointers, that don't 75*0Sstevel@tonic-gate * logically fit in the sigblocks themselves. This structure declares 76*0Sstevel@tonic-gate * the global use of these 8 words. 77*0Sstevel@tonic-gate * The spare_x words are reserved in case a design change calls for 78*0Sstevel@tonic-gate * using 64-bit virtual addresses instead of offsets. This is 79*0Sstevel@tonic-gate * considered unlikely. 80*0Sstevel@tonic-gate * 81*0Sstevel@tonic-gate * The offsets and this structure are normally created by POST when it 82*0Sstevel@tonic-gate * initially creates the sigblocks. Subsequent programs may move the 83*0Sstevel@tonic-gate * sigblocks in bbsram as they see fit, as long as this structure is changed 84*0Sstevel@tonic-gate * to reflect the new location. 85*0Sstevel@tonic-gate */ 86*0Sstevel@tonic-gate 87*0Sstevel@tonic-gate typedef struct { 88*0Sstevel@tonic-gate bboff_t sigblk_offset_0; /* BBSRAM sig block 0 offset */ 89*0Sstevel@tonic-gate uint32_t spare_0; /* spare word just in case */ 90*0Sstevel@tonic-gate bboff_t sigblk_offset_1; /* BBSRAM sig block 1 offset */ 91*0Sstevel@tonic-gate uint32_t spare_1; /* another just in case */ 92*0Sstevel@tonic-gate uint32_t pad[4]; /* trap is 8 32-bit words long */ 93*0Sstevel@tonic-gate } base_addr_t; 94*0Sstevel@tonic-gate 95*0Sstevel@tonic-gate 96*0Sstevel@tonic-gate /* 97*0Sstevel@tonic-gate * The following are used in the flag field of the mailbox structure. 98*0Sstevel@tonic-gate * They are used to synchronize access with the mailbox between the 99*0Sstevel@tonic-gate * SSP and Host, and indicate direction of the given message. 100*0Sstevel@tonic-gate */ 101*0Sstevel@tonic-gate #define SIGB_MBOX_EMPTY 0 102*0Sstevel@tonic-gate #define SIGB_MBOX_BUSY 1 103*0Sstevel@tonic-gate #define HOST_TO_CBS 2 104*0Sstevel@tonic-gate #define CBS_TO_HOST 3 105*0Sstevel@tonic-gate 106*0Sstevel@tonic-gate /* for sigblk polling */ 107*0Sstevel@tonic-gate #define SIGB_INTR_OFF 0x00 108*0Sstevel@tonic-gate #define SIGB_INTR_SEND 0xFF 109*0Sstevel@tonic-gate 110*0Sstevel@tonic-gate typedef short mboxflag_t; 111*0Sstevel@tonic-gate 112*0Sstevel@tonic-gate /* 113*0Sstevel@tonic-gate * BE CAREFUL with modifications. To optimize transfers on the 114*0Sstevel@tonic-gate * bootbus between the kernel and mailbox, try to make sure the data 115*0Sstevel@tonic-gate * field falls on a 16 byte boundary. 116*0Sstevel@tonic-gate */ 117*0Sstevel@tonic-gate typedef struct { 118*0Sstevel@tonic-gate /* 0 */ short intr; 119*0Sstevel@tonic-gate /* 2 */ mboxflag_t flag; 120*0Sstevel@tonic-gate /* 4 */ int32_t len; 121*0Sstevel@tonic-gate /* 8 */ uint32_t cmd; 122*0Sstevel@tonic-gate /* c */ char data[SIGB_MBOX_SIZE]; 123*0Sstevel@tonic-gate } sigbmbox_t; /* sizeof = 76 (0x4c) = 19X */ 124*0Sstevel@tonic-gate 125*0Sstevel@tonic-gate typedef struct { 126*0Sstevel@tonic-gate uchar_t cvc_output_buf[CVC_OUT_SIZ]; 127*0Sstevel@tonic-gate uchar_t cvc_input_buf[CVC_IN_SIZ]; 128*0Sstevel@tonic-gate uchar_t cvc_obp_input_flag; /* !=0 -> OBP wants CVC input */ 129*0Sstevel@tonic-gate } sigb_cvc_t; 130*0Sstevel@tonic-gate 131*0Sstevel@tonic-gate /* 132*0Sstevel@tonic-gate * Every CPU signature, state, or substate transition is captured 133*0Sstevel@tonic-gate * in the ring buffer. OS or OBP will be the writer of the ring buffer 134*0Sstevel@tonic-gate * and control board executive (via JTAG) will be the sole reader. Because of 135*0Sstevel@tonic-gate * space limitation in the BBSRAM, the ring buffer can only be 64 entries big. 136*0Sstevel@tonic-gate * A ring buffer is necessary because of the speed difference between the 137*0Sstevel@tonic-gate * reader and writer, and to prevent race condition. 138*0Sstevel@tonic-gate * 139*0Sstevel@tonic-gate * The ring buffer structure contains two pointers, one for reading and 140*0Sstevel@tonic-gate * one for writing, and the buffer itself. The last 6 bits in each of the 141*0Sstevel@tonic-gate * pointer identify an entry in the buffer. The read pointer represents 142*0Sstevel@tonic-gate * the next entry the reader should read. The write pointer represents the 143*0Sstevel@tonic-gate * next entry the writer is going to write. For the reader, the ring buffer 144*0Sstevel@tonic-gate * contains un-read entries if the read and write pointers are different. 145*0Sstevel@tonic-gate * 146*0Sstevel@tonic-gate * In most situations, the reader should be able to keep up with the 147*0Sstevel@tonic-gate * writer. However, in the case where the writer is transitioning 148*0Sstevel@tonic-gate * rapidly, the reader may not be able to keep up and causes an overflow. 149*0Sstevel@tonic-gate * When an overflow happens, instead of suspending the writer, the 150*0Sstevel@tonic-gate * writer continues to write. 151*0Sstevel@tonic-gate * 152*0Sstevel@tonic-gate * The first transition that causes an overflow has 2 consequences 153*0Sstevel@tonic-gate * because of this continuous write action: 154*0Sstevel@tonic-gate * 1. The ring buffer is flushed, all previous transitions history are lost. 155*0Sstevel@tonic-gate * 156*0Sstevel@tonic-gate * Flushing the ring buffer is acceptable since the reader is not 157*0Sstevel@tonic-gate * able to keep up with rapid transitions, it is better off to start 158*0Sstevel@tonic-gate * from the current transition than trying to catch up. 159*0Sstevel@tonic-gate * 160*0Sstevel@tonic-gate * 2. The new transition is recorded in the ring buffer. However, bcecause of 161*0Sstevel@tonic-gate * the way the write pointer is updated, both the read and write pointers 162*0Sstevel@tonic-gate * will be identical which makes the reader thinks there is no transition to 163*0Sstevel@tonic-gate * read. 164*0Sstevel@tonic-gate * 165*0Sstevel@tonic-gate * Even though the reader does not see the most current signature/state in the 166*0Sstevel@tonic-gate * ring buffer, it can be found in the signature block data structure. 167*0Sstevel@tonic-gate * The reader can do a read in the signature block to obtain the current 168*0Sstevel@tonic-gate * signature/block if the read/write pointers indicate the buffer is empty. 169*0Sstevel@tonic-gate * The problem will go away once the writer starts writing again. 170*0Sstevel@tonic-gate * 171*0Sstevel@tonic-gate * Initial condition: 172*0Sstevel@tonic-gate * rd_ptr = 0 173*0Sstevel@tonic-gate * wr_ptr = 0 174*0Sstevel@tonic-gate * 175*0Sstevel@tonic-gate * To write a signature into the ring buffer, the steps are: 176*0Sstevel@tonic-gate * 1. write signature into ringbuf[wr_ptr] 177*0Sstevel@tonic-gate * 2. increment wr_ptr by 1 modulo SIGB_RB_SIZ using RB_IDX_MASK 178*0Sstevel@tonic-gate * 179*0Sstevel@tonic-gate * Note: the writer always writes to the ring buffer and the signature 180*0Sstevel@tonic-gate * field in the signature block data structure. 181*0Sstevel@tonic-gate * 182*0Sstevel@tonic-gate * To read a signature from the ring buffer, the steps are: 183*0Sstevel@tonic-gate * 1. compare rd_ptr and wr_ptr 184*0Sstevel@tonic-gate * 2. if they are not equal then 185*0Sstevel@tonic-gate * read signature ringbuf[rd_ptr] 186*0Sstevel@tonic-gate * increment rd_ptr by 1 modulo SIGB_RB_SIZ using RB_IDX_MASK 187*0Sstevel@tonic-gate * save a copy of the signature locally 188*0Sstevel@tonic-gate * return the signature 189*0Sstevel@tonic-gate * 3. else 190*0Sstevel@tonic-gate * read signature from the signature block data structure 191*0Sstevel@tonic-gate * if signature is not the same as the last signature then 192*0Sstevel@tonic-gate * return the signature 193*0Sstevel@tonic-gate * 194*0Sstevel@tonic-gate */ 195*0Sstevel@tonic-gate 196*0Sstevel@tonic-gate #define SIGB_RB_SIZ 64 /* ring buffer size */ 197*0Sstevel@tonic-gate #define RB_IDX_MASK 0x3f /* mask to determine read/write index */ 198*0Sstevel@tonic-gate 199*0Sstevel@tonic-gate typedef struct { 200*0Sstevel@tonic-gate /* 0 */ uchar_t rd_ptr; /* entry to read */ 201*0Sstevel@tonic-gate /* 1 */ uchar_t wr_ptr; /* next entry to write */ 202*0Sstevel@tonic-gate /* 4 */ sig_state_t ringbuf[SIGB_RB_SIZ]; 203*0Sstevel@tonic-gate } sigb_ringbuf_t; /* sizeof = 260 (0x104) = 65X */ 204*0Sstevel@tonic-gate 205*0Sstevel@tonic-gate typedef struct cpu_sgnblk { 206*0Sstevel@tonic-gate /* 0 */ uint32_t sigb_magic; /* SIGBLOCK_MAGIC */ 207*0Sstevel@tonic-gate /* 4 */ uint32_t sigb_version; /* changes with each SID */ 208*0Sstevel@tonic-gate /* 8 */ uint32_t sigb_flags; /* struct sigblock status */ 209*0Sstevel@tonic-gate /* c */ uint32_t sigb_heartbeat; /* prog's heartbeat */ 210*0Sstevel@tonic-gate 211*0Sstevel@tonic-gate /* 10 */ uint32_t sigb_leds; /* Software LED */ 212*0Sstevel@tonic-gate /* 14 */ sig_state_t sigb_signature; /* Current signature & state */ 213*0Sstevel@tonic-gate 214*0Sstevel@tonic-gate /* 215*0Sstevel@tonic-gate * sigb_ringbuf captures the last SIGB_RB_SIZ signature/state 216*0Sstevel@tonic-gate * transitions. 217*0Sstevel@tonic-gate */ 218*0Sstevel@tonic-gate /* 18 */ sigb_ringbuf_t sigb_ringbuf; 219*0Sstevel@tonic-gate 220*0Sstevel@tonic-gate /* 221*0Sstevel@tonic-gate * sigb_host_mbox is intended for msgs targeted for the Host and 222*0Sstevel@tonic-gate * follows the protocol: 223*0Sstevel@tonic-gate * SSP -> [cmd] -> Host -> [resp] -> SSP. 224*0Sstevel@tonic-gate */ 225*0Sstevel@tonic-gate /* 11c */ sigbmbox_t sigb_host_mbox; 226*0Sstevel@tonic-gate 227*0Sstevel@tonic-gate /* 168 */ char sigb_idn[sizeof (sigbmbox_t)]; 228*0Sstevel@tonic-gate 229*0Sstevel@tonic-gate /* 1b4 */ bboff_t sigb_obp_mbox; /* OBP/DHLP mailbox. */ 230*0Sstevel@tonic-gate 231*0Sstevel@tonic-gate /* 1b8 */ bboff_t sigb_postconfig; /* config info from POST */ 232*0Sstevel@tonic-gate 233*0Sstevel@tonic-gate /* 1bc */ uint32_t sigb_post; /* POST opaque */ 234*0Sstevel@tonic-gate 235*0Sstevel@tonic-gate /* 1c0 */ bboff_t sigb_slavep; /* Slave startup block offset */ 236*0Sstevel@tonic-gate 237*0Sstevel@tonic-gate /* 1c4 */ bboff_t sigb_resetinfo_off; /* Resetinfo offset */ 238*0Sstevel@tonic-gate 239*0Sstevel@tonic-gate /* 1c8 */ bboff_t sigb_cvc_off; /* CVC offset */ 240*0Sstevel@tonic-gate 241*0Sstevel@tonic-gate /* 1cc */ bboff_t sigb_eeprom_off; /* EEPROM offset */ 242*0Sstevel@tonic-gate 243*0Sstevel@tonic-gate /* 1d0 */ vaddr_t sigb_wdog_reset_vec; /* Watchdog Reset Vector */ 244*0Sstevel@tonic-gate 245*0Sstevel@tonic-gate /* 1d8 */ vaddr_t sigb_xir_reset_vec; /* XIR Reset vector */ 246*0Sstevel@tonic-gate 247*0Sstevel@tonic-gate /* 1e0 */ vaddr_t sigb_sir_reset_vec; /* SIR Reset Vector */ 248*0Sstevel@tonic-gate 249*0Sstevel@tonic-gate /* 1e8 */ vaddr_t sigb_red_state_reset_vec; /* RED State Reset Vector */ 250*0Sstevel@tonic-gate 251*0Sstevel@tonic-gate /* 1f0 */ uchar_t sigb_resv_array[SIGB_RESV]; /* reserved space */ 252*0Sstevel@tonic-gate } cpu_sgnblk_t; /* sizeof = 512 (0x200) = 128X */ 253*0Sstevel@tonic-gate 254*0Sstevel@tonic-gate #endif /* _ASM */ 255*0Sstevel@tonic-gate 256*0Sstevel@tonic-gate /* 257*0Sstevel@tonic-gate * Mailbox commands. 258*0Sstevel@tonic-gate * 259*0Sstevel@tonic-gate * The commands are listed here so that they are in a central place 260*0Sstevel@tonic-gate * for all users of the signature block mailbox. Want to be careful 261*0Sstevel@tonic-gate * that some subsystems don't accidently use the same value for a 262*0Sstevel@tonic-gate * command. For this reason we introduce a cookie for each subsystem. 263*0Sstevel@tonic-gate */ 264*0Sstevel@tonic-gate 265*0Sstevel@tonic-gate #define SIGB_HANDLER_BUSY (-2) 266*0Sstevel@tonic-gate #define SIGB_BAD_MBOX_CMD (-1) 267*0Sstevel@tonic-gate #define SSP_CMD ('S' << 8) /* generic SSP */ 268*0Sstevel@tonic-gate #define SSP_CMD_SUCCESS (SSP_CMD | 0x1) 269*0Sstevel@tonic-gate #define SSP_GOTO_OBP (SSP_CMD | 0x2) 270*0Sstevel@tonic-gate #define SSP_GOTO_PANIC (SSP_CMD | 0x3) 271*0Sstevel@tonic-gate #define SSP_ENVIRON (SSP_CMD | 0x4) /* environmental intr */ 272*0Sstevel@tonic-gate 273*0Sstevel@tonic-gate #ifdef _KERNEL 274*0Sstevel@tonic-gate 275*0Sstevel@tonic-gate #ifdef _STARFIRE 276*0Sstevel@tonic-gate 277*0Sstevel@tonic-gate extern void juggle_sgnblk_poll(struct cpu *); 278*0Sstevel@tonic-gate extern int sgnblk_poll_register(void (*)(processorid_t, cpu_sgnblk_t *)); 279*0Sstevel@tonic-gate extern int sgnblk_poll_unregister(void (*)(processorid_t, cpu_sgnblk_t *)); 280*0Sstevel@tonic-gate extern int sgnblk_poll_reference(void (*)(cpu_sgnblk_t *, void *), void *); 281*0Sstevel@tonic-gate extern void sgnblk_poll_unreference(void (*)(cpu_sgnblk_t *, void *)); 282*0Sstevel@tonic-gate 283*0Sstevel@tonic-gate extern cpu_sgnblk_t *cpu_sgnblkp[NCPU]; 284*0Sstevel@tonic-gate 285*0Sstevel@tonic-gate /* 286*0Sstevel@tonic-gate * Starfire specific signatures 287*0Sstevel@tonic-gate */ 288*0Sstevel@tonic-gate #define POST_SIG SIG_BLD('P', 'O') 289*0Sstevel@tonic-gate #define DHLP_SIG SIG_BLD('D', 'H') 290*0Sstevel@tonic-gate 291*0Sstevel@tonic-gate /* 292*0Sstevel@tonic-gate * Starfire specific Sigblock states. 293*0Sstevel@tonic-gate */ 294*0Sstevel@tonic-gate #define SIGBST_NONE 0 /* no state */ 295*0Sstevel@tonic-gate #define SIGBST_RUN 1 /* running */ 296*0Sstevel@tonic-gate #define SIGBST_EXIT 2 /* finished */ 297*0Sstevel@tonic-gate #define SIGBST_PRERUN 3 /* pre-exec */ 298*0Sstevel@tonic-gate #define SIGBST_ARBSTOP 4 /* transient arbstop state */ 299*0Sstevel@tonic-gate #define SIGBST_RESET 5 /* reset */ 300*0Sstevel@tonic-gate #define SIGBST_POWEROFF 6 /* no power */ 301*0Sstevel@tonic-gate #define SIGBST_DETACHED 7 /* spinning in OBP after DR DETACH */ 302*0Sstevel@tonic-gate #define SIGBST_CALLBACK 8 /* kernel calling back into OBP */ 303*0Sstevel@tonic-gate #define SIGBST_WATCHDOG 9 /* OBP running after watchdog */ 304*0Sstevel@tonic-gate #define SIGBST_WATCHDOG_SYNC 10 /* OBP "sync" after watchdog reset */ 305*0Sstevel@tonic-gate #define SIGBST_OFFLINE 11 /* cpu offline */ 306*0Sstevel@tonic-gate #define SIGBST_BOOTING 12 /* booting */ 307*0Sstevel@tonic-gate #define SIGBST_UNKNOWN 13 /* unknown */ 308*0Sstevel@tonic-gate #define SIGBST_XIR 14 /* OBP running after XIR */ 309*0Sstevel@tonic-gate #define SIGBST_XIR_SYNC 15 /* OBP trying "sync" in XIR */ 310*0Sstevel@tonic-gate #define SIGBST_SIR 16 /* OBP running after SIR */ 311*0Sstevel@tonic-gate #define SIGBST_SIR_SYNC 17 /* OBP trying "sync" in SIR */ 312*0Sstevel@tonic-gate #define SIGBST_REDMODE 18 /* OBP running after REDMODE */ 313*0Sstevel@tonic-gate #define SIGBST_REDMODE_SYNC 19 /* OBP trying "sync" in REDMODE */ 314*0Sstevel@tonic-gate #define SIGBST_QUIESCED 20 /* system quiesced */ 315*0Sstevel@tonic-gate #define SIGBST_QUIESCE_INPROGRESS 21 /* system quiesce in-progress */ 316*0Sstevel@tonic-gate #define SIGBST_RESUME_INPROGRESS 22 /* system resume in-progress */ 317*0Sstevel@tonic-gate 318*0Sstevel@tonic-gate /* 319*0Sstevel@tonic-gate * Starfire specific Sigblock sub-states 320*0Sstevel@tonic-gate */ 321*0Sstevel@tonic-gate #define EXIT_NULL 0 322*0Sstevel@tonic-gate #define EXIT_HALT 1 323*0Sstevel@tonic-gate #define EXIT_ENVIRON 2 324*0Sstevel@tonic-gate #define EXIT_REBOOT 3 325*0Sstevel@tonic-gate #define EXIT_PANIC1 4 326*0Sstevel@tonic-gate #define EXIT_PANIC2 5 327*0Sstevel@tonic-gate #define EXIT_HUNG 6 328*0Sstevel@tonic-gate #define EXIT_WATCH 7 329*0Sstevel@tonic-gate #define EXIT_PANIC_REBOOT 8 330*0Sstevel@tonic-gate #define EXIT_WATCHDOG_REBOOT 9 331*0Sstevel@tonic-gate #define EXIT_SOFT_INIT_RESET 10 /* SIR */ 332*0Sstevel@tonic-gate #define EXIT_EXTERN_INIT_RESET 11 /* XIR */ 333*0Sstevel@tonic-gate #define EXIT_REDMODE_REBOOT 12 /* REDMODE */ 334*0Sstevel@tonic-gate #define EXIT_OBP_RESET 13 /* OBP RESET */ 335*0Sstevel@tonic-gate 336*0Sstevel@tonic-gate #else 337*0Sstevel@tonic-gate 338*0Sstevel@tonic-gate #define REGISTER_BBUS_INTR() 339*0Sstevel@tonic-gate #define CPU_SGN_MAPIN(cpuid) 340*0Sstevel@tonic-gate #define CPU_SGN_MAPOUT(cpuid) 341*0Sstevel@tonic-gate #define CPU_SGN_EXISTS(cpuid) (0) 342*0Sstevel@tonic-gate #define SGN_CPU_IS_OS(cpuid) (0) 343*0Sstevel@tonic-gate #define SGN_CPU_IS_OBP(cpuid) (0) 344*0Sstevel@tonic-gate #define SGN_CPU_STATE_IS_DETACHED(cpuid) (0) 345*0Sstevel@tonic-gate 346*0Sstevel@tonic-gate #endif /* _STARFIRE */ 347*0Sstevel@tonic-gate 348*0Sstevel@tonic-gate #endif /* _KERNEL */ 349*0Sstevel@tonic-gate 350*0Sstevel@tonic-gate #ifdef __cplusplus 351*0Sstevel@tonic-gate } 352*0Sstevel@tonic-gate #endif 353*0Sstevel@tonic-gate 354*0Sstevel@tonic-gate #endif /* _CPU_SGN_H */ 355