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.
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.
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]
22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _SYS_MACHCPUVAR_H
27 #define _SYS_MACHCPUVAR_H
29 #pragma ident "%Z%%M% %I% %E% SMI"
32 #include <sys/clock.h>
33 #include <sys/machparam.h>
34 #include <sys/machpcb.h>
35 #include <sys/privregs.h>
36 #include <sys/machlock.h>
44 #include <sys/obpdefs.h>
45 #include <sys/async.h>
46 #include <sys/fm/protocol.h>
49 * CPU state ptl1_panic save.
51 typedef struct ptl1_trapregs
{
59 typedef struct ptl1_regs
{
60 ptl1_trapregs_t ptl1_trap_regs
[PTL1_MAXTL
];
69 uint64_t ptl1_dmmu_sfar
;
70 uint64_t ptl1_dmmu_sfsr
;
71 uint64_t ptl1_dmmu_tag_access
;
72 uint64_t ptl1_immu_sfsr
;
73 uint64_t ptl1_immu_tag_access
;
74 struct rwindow ptl1_rwindow
[MAXWIN
];
75 uint32_t ptl1_softint
;
80 uint8_t ptl1_otherwin
;
81 uint8_t ptl1_cleanwin
;
83 uint8_t ptl1_canrestore
;
86 typedef struct ptl1_state
{
87 ptl1_regs_t ptl1_regs
;
88 uint32_t ptl1_entry_count
;
89 uintptr_t ptl1_stktop
;
94 * Machine specific fields of the cpu struct
95 * defined in common/sys/cpuvar.h.
103 uint16_t divisor
; /* Estar %tick clock ratio */
104 uint8_t intrcnt
; /* number of back-to-back interrupts */
105 u_longlong_t tmp1
; /* per-cpu tmps */
106 u_longlong_t tmp2
; /* used in trap processing */
110 label_t
*ofd
[HIGH_LEVELS
]; /* saved pil ofd */
111 uintptr_t lfd
[HIGH_LEVELS
]; /* saved ret PC */
112 struct on_trap_data
*otd
[HIGH_LEVELS
]; /* saved pil otd */
114 struct intr_vec
*intr_head
[PIL_LEVELS
]; /* intr queue heads per pil */
115 struct intr_vec
*intr_tail
[PIL_LEVELS
]; /* intr queue tails per pil */
116 boolean_t poke_cpu_outstanding
;
118 * The cpu module allocates a private data structure for the
119 * E$ data, which is needed for the specific cpu type.
121 void *cpu_private
; /* ptr to cpu private data */
123 * per-MMU ctxdom CPU data.
126 struct mmu_ctx
*cpu_mmu_ctxp
;
128 ptl1_state_t ptl1_state
;
130 uint64_t pil_high_start
[HIGH_LEVELS
]; /* high-level intrs */
133 * intrstat[][] is used to keep track of ticks used at a given pil
134 * level. intrstat[pil][0] is cumulative and exported via kstats.
135 * intrstat[pil][1] is used in intr_get_time() and is private.
136 * 2-dimensional array improves cache locality.
139 uint64_t intrstat
[PIL_MAX
+1][2];
140 kthread_t
*startup_thread
;
143 typedef struct machcpu machcpu_t
;
145 #define cpu_startup_thread cpu_m.startup_thread
146 #define CPU_MMU_IDX(cp) ((cp)->cpu_m.cpu_mmu_idx)
147 #define CPU_MMU_CTXP(cp) ((cp)->cpu_m.cpu_mmu_ctxp)
148 #define NINTR_THREADS (LOCK_LEVEL) /* number of interrupt threads */
151 * Macro to access the "cpu private" data structure.
153 #define CPU_PRIVATE(cp) ((cp)->cpu_m.cpu_private)
156 * The OpenBoot Standalone Interface supplies the kernel with
157 * implementation dependent parameters through the devinfo/property mechanism
159 #define MAXSYSNAME 20
162 * Used to indicate busy/idle state of a cpu.
163 * msram field will be set with ECACHE_CPU_MIRROR if we are on
164 * mirrored sram module.
166 #define ECACHE_CPU_IDLE 0x0 /* CPU is idle */
167 #define ECACHE_CPU_BUSY 0x1 /* CPU is busy */
168 #define ECACHE_CPU_MIRROR 0x2 /* E$ is mirrored */
169 #define ECACHE_CPU_NON_MIRROR 0x3 /* E$ is not mirrored */
172 * A CPU FRU FMRI string minus the unum component.
174 #define CPU_FRU_FMRI FM_FMRI_SCHEME_HC":///" \
178 char name
[MAXSYSNAME
];
179 char fru_fmri
[sizeof (CPU_FRU_FMRI
) + UNUM_NAMLEN
];
185 uint_t tick_nsec_scale
;
191 int ecache_associativity
;
199 extern struct cpu_node cpunodes
[];
207 #endif /* _SYS_MACHCPUVAR_H */