Home | History | Annotate | Line # | Download | only in arch
cpuctl_i386.h revision 1.2.28.2
      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