#include <machine/specialreg.h>
#include <x86/cputypes.h>
#include <x86/cacheinfo.h>
struct cpu_info {
const char *ci_dev;
int32_t ci_cpu_type;
uint32_t ci_signature;
uint32_t ci_vendor[4];
int32_t ci_max_cpuid;
uint32_t ci_max_ext_cpuid;
uint32_t ci_family;
uint32_t ci_model;
uint32_t ci_feat_val[10];
uint32_t ci_cpu_class;
uint32_t ci_brand_id;
uint32_t ci_cpu_serial[3];
uint64_t ci_tsc_freq;
uint8_t ci_packageid;
uint8_t ci_coreid;
uint8_t ci_smtid;
uint32_t ci_initapicid;
uint32_t ci_cur_xsave;
uint32_t ci_max_xsave;
struct x86_cache_info ci_cinfo[CAI_COUNT];
void (*ci_info)(struct cpu_info *);
};
extern int cpu_vendor;
uint64_t cpu_tsc_freq_cpuid(struct cpu_info *);
void cpu_dcp_cacheinfo(struct cpu_info *, uint32_t);
#define x86_cpuid(a,b) x86_cpuid2((a),0,(b))
void x86_cpuid2(uint32_t, uint32_t, uint32_t *);
uint32_t x86_identify(void);
uint32_t x86_xgetbv(void);