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