xref: /netbsd-src/usr.sbin/cpuctl/arch/cpuctl_i386.h (revision fae021bceb7c2ef963adb57fa8fefdc4d6139146)
1 /*      $NetBSD: cpuctl_i386.h,v 1.6 2021/10/07 13:04:18 msaitoh Exp $      */
2 
3 #include <machine/specialreg.h>
4 #include <x86/cputypes.h>
5 #include <x86/cacheinfo.h>
6 
7 struct cpu_info {
8 	const char	*ci_dev;
9 	int32_t		ci_cpu_type;	 /* for cpu's without cpuid */
10 	uint32_t	ci_signature;	 /* X86 cpuid type */
11 	uint32_t	ci_vendor[4];	 /* vendor string */
12 	int32_t		ci_max_cpuid;	 /* highest cpuid supported */
13 	uint32_t	ci_max_ext_cpuid; /* highest cpuid extended func lv */
14 	uint32_t	ci_family;	 /* from ci_signature */
15 	uint32_t	ci_model;	 /* from ci_signature */
16 	uint32_t	ci_feat_val[10]; /* X86 CPUID feature bits
17 					  *	[0] basic features %edx
18 					  *	[1] basic features %ecx
19 					  *	[2] extended features %edx
20 					  *	[3] extended features %ecx
21 					  *	[4] VIA padlock features
22 					  *	[5] structure ext. feat. %ebx
23 					  *	[6] structure ext. feat. %ecx
24 					  *     [7] structure ext. feat. %edx
25 					  *	[8] XCR0 bits (d:0 %eax)
26 					  *	[9] xsave flags (d:1 %eax)
27 					  */
28 	uint32_t	ci_cpu_class;	 /* CPU class */
29 	uint32_t	ci_brand_id;	 /* Intel brand id */
30 	uint32_t	ci_cpu_serial[3]; /* PIII serial number */
31 	uint64_t	ci_tsc_freq;	 /* cpu cycles/second */
32 	uint8_t		ci_packageid;
33 	uint8_t		ci_coreid;
34 	uint8_t		ci_smtid;
35 	uint32_t	ci_initapicid;	/* our initial APIC ID */
36 
37 	uint32_t	ci_cur_xsave;
38 	uint32_t	ci_max_xsave;
39 
40 	struct x86_cache_info ci_cinfo[CAI_COUNT];
41 	void		(*ci_info)(struct cpu_info *);
42 };
43 
44 extern int cpu_vendor;
45 
46 /* For x86/x86/identcpu_subr.c */
47 uint64_t cpu_tsc_freq_cpuid(struct cpu_info *);
48 void	cpu_dcp_cacheinfo(struct cpu_info *, uint32_t);
49 
50 /* Interfaces to code in i386-asm.S */
51 
52 #define	x86_cpuid(a,b)	x86_cpuid2((a),0,(b))
53 
54 void x86_cpuid2(uint32_t, uint32_t, uint32_t *);
55 uint32_t x86_identify(void);
56 uint32_t x86_xgetbv(void);
57