Home | History | Annotate | Line # | Download | only in arch
      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