1 1.55 imil /* $NetBSD: cpuvar.h,v 1.55 2025/05/01 05:17:31 imil Exp $ */ 2 1.1 fvdl 3 1.1 fvdl /*- 4 1.18 ad * Copyright (c) 2000, 2007 The NetBSD Foundation, Inc. 5 1.1 fvdl * All rights reserved. 6 1.1 fvdl * 7 1.1 fvdl * This code is derived from software contributed to The NetBSD Foundation 8 1.1 fvdl * by RedBack Networks Inc. 9 1.1 fvdl * 10 1.1 fvdl * Author: Bill Sommerfeld 11 1.1 fvdl * 12 1.1 fvdl * Redistribution and use in source and binary forms, with or without 13 1.1 fvdl * modification, are permitted provided that the following conditions 14 1.1 fvdl * are met: 15 1.1 fvdl * 1. Redistributions of source code must retain the above copyright 16 1.1 fvdl * notice, this list of conditions and the following disclaimer. 17 1.1 fvdl * 2. Redistributions in binary form must reproduce the above copyright 18 1.1 fvdl * notice, this list of conditions and the following disclaimer in the 19 1.1 fvdl * documentation and/or other materials provided with the distribution. 20 1.1 fvdl * 21 1.1 fvdl * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 22 1.1 fvdl * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 23 1.1 fvdl * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24 1.1 fvdl * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 25 1.1 fvdl * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 1.1 fvdl * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 1.1 fvdl * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 1.1 fvdl * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 1.1 fvdl * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 1.1 fvdl * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 1.1 fvdl * POSSIBILITY OF SUCH DAMAGE. 32 1.1 fvdl */ 33 1.1 fvdl 34 1.1 fvdl /* 35 1.1 fvdl * Copyright (c) 1999 Stefan Grefen 36 1.1 fvdl * 37 1.1 fvdl * Redistribution and use in source and binary forms, with or without 38 1.1 fvdl * modification, are permitted provided that the following conditions 39 1.1 fvdl * are met: 40 1.1 fvdl * 1. Redistributions of source code must retain the above copyright 41 1.1 fvdl * notice, this list of conditions and the following disclaimer. 42 1.1 fvdl * 2. Redistributions in binary form must reproduce the above copyright 43 1.1 fvdl * notice, this list of conditions and the following disclaimer in the 44 1.1 fvdl * documentation and/or other materials provided with the distribution. 45 1.1 fvdl * 3. All advertising materials mentioning features or use of this software 46 1.1 fvdl * must display the following acknowledgement: 47 1.1 fvdl * This product includes software developed by the NetBSD 48 1.1 fvdl * Foundation, Inc. and its contributors. 49 1.1 fvdl * 4. Neither the name of The NetBSD Foundation nor the names of its 50 1.1 fvdl * contributors may be used to endorse or promote products derived 51 1.1 fvdl * from this software without specific prior written permission. 52 1.1 fvdl * 53 1.1 fvdl * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY 54 1.1 fvdl * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 55 1.1 fvdl * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 56 1.1 fvdl * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR AND CONTRIBUTORS BE LIABLE 57 1.1 fvdl * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 58 1.1 fvdl * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 59 1.1 fvdl * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 60 1.1 fvdl * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 61 1.1 fvdl * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 62 1.1 fvdl * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 63 1.1 fvdl * SUCH DAMAGE. 64 1.1 fvdl */ 65 1.1 fvdl 66 1.8 yamt #ifndef _X86_CPUVAR_H_ 67 1.8 yamt #define _X86_CPUVAR_H_ 68 1.8 yamt 69 1.48 christos struct cpu_info; 70 1.1 fvdl struct cpu_functions { 71 1.51 cherry #ifndef XENPV 72 1.20 joerg int (*start)(struct cpu_info *, paddr_t); 73 1.51 cherry #else /* XENPV */ 74 1.45 cherry int (*start)(struct cpu_info *, vaddr_t); 75 1.51 cherry #endif /* XENPV */ 76 1.3 junyoung int (*stop)(struct cpu_info *); 77 1.3 junyoung void (*cleanup)(struct cpu_info *); 78 1.1 fvdl }; 79 1.1 fvdl 80 1.7 drochner extern const struct cpu_functions mp_cpu_funcs; 81 1.1 fvdl 82 1.1 fvdl #define CPU_ROLE_SP 0 83 1.1 fvdl #define CPU_ROLE_BP 1 84 1.1 fvdl #define CPU_ROLE_AP 2 85 1.1 fvdl 86 1.1 fvdl struct cpu_attach_args { 87 1.34 jruoho int cpu_id; 88 1.1 fvdl int cpu_number; 89 1.1 fvdl int cpu_role; 90 1.7 drochner const struct cpu_functions *cpu_func; 91 1.1 fvdl }; 92 1.1 fvdl 93 1.39 jmcneill struct cpufeature_attach_args { 94 1.39 jmcneill struct cpu_info *ci; 95 1.39 jmcneill const char *name; 96 1.39 jmcneill }; 97 1.39 jmcneill 98 1.1 fvdl #ifdef _KERNEL 99 1.46 rmind #include <sys/kcpuset.h> 100 1.28 yamt #if defined(_KERNEL_OPT) 101 1.2 martin #include "opt_multiprocessor.h" 102 1.52 bouyer #include "opt_xen.h" 103 1.28 yamt #endif /* defined(_KERNEL_OPT) */ 104 1.1 fvdl 105 1.50 nonaka extern int (*x86_ipi)(int, int, int); 106 1.3 junyoung int x86_ipi_init(int); 107 1.27 ad int x86_ipi_startup(int, int); 108 1.17 ad void x86_errata(void); 109 1.3 junyoung 110 1.3 junyoung void identifycpu(struct cpu_info *); 111 1.21 yamt void identifycpu_cpuids(struct cpu_info *); 112 1.3 junyoung void cpu_init(struct cpu_info *); 113 1.22 yamt void cpu_init_tss(struct cpu_info *); 114 1.3 junyoung void cpu_init_first(void); 115 1.53 yamaguch void cpu_init_idt(struct cpu_info *); 116 1.1 fvdl 117 1.25 joerg void x86_cpu_idle_init(void); 118 1.25 joerg void x86_cpu_idle_halt(void); 119 1.25 joerg void x86_cpu_idle_mwait(void); 120 1.52 bouyer #ifdef XEN 121 1.25 joerg void x86_cpu_idle_xen(void); 122 1.25 joerg #endif 123 1.25 joerg 124 1.18 ad void cpu_get_tsc_freq(struct cpu_info *); 125 1.33 cegger void pat_init(struct cpu_info *); 126 1.18 ad 127 1.54 imil bool has_lapic(void); 128 1.54 imil 129 1.17 ad extern int cpu_vendor; 130 1.19 ad extern bool x86_mp_online; 131 1.55 imil extern u_int cpu_max_hypervisor_cpuid; 132 1.17 ad 133 1.47 maxv extern uint32_t cpu_feature[7]; 134 1.32 jym 135 1.33 cegger #endif /* _KERNEL */ 136 1.8 yamt 137 1.8 yamt #endif /* !_X86_CPUVAR_H_ */ 138