xref: /linux/arch/x86/include/asm/cpu.h (revision f4cdf7ca9a1fdcca413157df19753f388a5a224e)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_X86_CPU_H
3 #define _ASM_X86_CPU_H
4 
5 #include <linux/device.h>
6 #include <linux/cpu.h>
7 #include <linux/topology.h>
8 #include <linux/nodemask.h>
9 #include <linux/percpu.h>
10 
11 #include <asm/ibt.h>
12 #include <asm/cpuid/leaf_types.h>
13 
14 #ifndef CONFIG_SMP
15 #define cpu_physical_id(cpu)			boot_cpu_physical_apicid
16 #endif /* CONFIG_SMP */
17 
18 #ifdef CONFIG_HOTPLUG_CPU
19 extern void soft_restart_cpu(void);
20 #endif
21 
22 extern void ap_init_aperfmperf(void);
23 
24 int mwait_usable(const struct cpuinfo_x86 *);
25 
26 unsigned int x86_family(unsigned int sig);
27 unsigned int x86_model(unsigned int sig);
28 unsigned int x86_stepping(unsigned int sig);
29 
30 unsigned int cpuid_family(const struct leaf_0x1_0 *l);
31 unsigned int cpuid_model(const struct leaf_0x1_0 *l);
32 
33 #ifdef CONFIG_X86_BUS_LOCK_DETECT
34 extern void __init sld_setup(struct cpuinfo_x86 *c);
35 extern bool handle_user_split_lock(struct pt_regs *regs, long error_code);
36 extern bool handle_guest_split_lock(unsigned long ip);
37 extern void handle_bus_lock(struct pt_regs *regs);
38 void split_lock_init(void);
39 void bus_lock_init(void);
40 #else
41 static inline void __init sld_setup(struct cpuinfo_x86 *c) {}
42 static inline bool handle_user_split_lock(struct pt_regs *regs, long error_code)
43 {
44 	return false;
45 }
46 
47 static inline bool handle_guest_split_lock(unsigned long ip)
48 {
49 	return false;
50 }
51 
52 static inline void handle_bus_lock(struct pt_regs *regs) {}
53 static inline void split_lock_init(void) {}
54 static inline void bus_lock_init(void) {}
55 #endif
56 
57 #ifdef CONFIG_IA32_FEAT_CTL
58 void init_ia32_feat_ctl(struct cpuinfo_x86 *c);
59 #else
60 static inline void init_ia32_feat_ctl(struct cpuinfo_x86 *c) {}
61 #endif
62 
63 extern __noendbr void cet_disable(void);
64 
65 struct cpu_signature;
66 
67 void intel_collect_cpu_info(struct cpu_signature *sig);
68 
69 extern u64 x86_read_arch_cap_msr(void);
70 bool intel_find_matching_signature(void *mc, struct cpu_signature *sig);
71 int intel_microcode_sanity_check(void *mc, bool print_err, int hdr_type);
72 
73 extern struct cpumask cpus_stop_mask;
74 
75 #endif /* _ASM_X86_CPU_H */
76