Files
Arquivotheca.Solaris-2.5/uts/sun4d/sys/machthread.h
seta75D 7c4988eac0 Init
2021-10-11 19:38:01 -03:00

73 lines
2.0 KiB
C
Executable File

/*
* Copyright (c) 1992 by Sun Microsystems, Inc.
*/
#ifndef _SYS_MACHTHREAD_H
#define _SYS_MACHTHREAD_H
#pragma ident "@(#)machthread.h 1.23 93/06/08 SMI"
#ifdef __cplusplus
extern "C" {
#endif
#define PROC_REG %g6 /* pointer to current proc struct */
#define FLAG_REG PROC_REG /* also used as flag for mutex_enter */
#define THREAD_REG %g7 /* pointer to current thread data */
/*
* This code *knows* device_id encodings,
* any revision of conventions, or hardware *MUST* be reflected here!
* XXX this should really just be reading the jtag value from some ASIC.
*/
#define ASI_BB 0x2f
#define BB_BASE 0xf0000000
#define XOFF_BOOTBUS_STATUS3 0x14 /* dual only */
#define BB_CPU_MASK 0xf8
#define BB_CPU_SHIFT (3 - 2) /* 3 bits, word aligned */
#define BB_VER2_SHIFT 3
#define ASI_VIK_MTMP1 0x40
/*
* Assembly macro to find address of the current CPU.
* This way is slow but always works for sure. We use
* this macro to setup the 'fast' lookup register, see
* CPU_INDEX, SET_FAST_CPU_INDEX below.
*/
#define CPU_INDEX_SLOW(scr) \
.global cpu; \
set BB_BASE + (XOFF_BOOTBUS_STATUS3 << 16), scr; \
lduba [scr]ASI_BB, scr; \
and scr, BB_CPU_MASK, scr; \
srl scr, BB_VER2_SHIFT, scr;
/*
* Assembly macro to find address of the current CPU.
* Used when coming in from a user trap - cannot use THREAD_REG.
*
* This is the fast way to get CPU ID. We use MTMP1 (Emulation Temporaries)
* on Viking. This register is loaded with CPU ID when
* each CPU starts. i.e. before mlsetup() for cpu0, and in cpu_startup()
* for every other CPU, SET_FAST_CPU_INDEX is called.
*/
#define CPU_INDEX(scr) \
lda [%g0]ASI_VIK_MTMP1, scr;
#define SET_FAST_CPU_INDEX(scr) \
sta scr, [%g0]ASI_VIK_MTMP1;
#define CPU_ADDR(reg, scr) \
set cpu, reg; /* address of cpu structure */ \
CPU_INDEX(scr); /* get cpu index */ \
sll scr, 2, scr; /* convert index to word size */ \
ld [reg + scr], reg;
#ifdef __cplusplus
}
#endif
#endif /* _SYS_MACHTHREAD_H */