1 #ifndef ARCH_X86_CPU_H 2 3 #define ARCH_X86_CPU_H 4 5 struct cpu_model_info { 6 int vendor; 7 int family; 8 const char *model_names[16]; 9 }; 10 11 /* attempt to consolidate cpu attributes */ 12 struct cpu_dev { 13 const char *c_vendor; 14 15 /* some have two possibilities for cpuid string */ 16 const char *c_ident[2]; 17 18 struct cpu_model_info c_models[4]; 19 20 void (*c_early_init)(struct cpuinfo_x86 *); 21 void (*c_bsp_init)(struct cpuinfo_x86 *); 22 void (*c_init)(struct cpuinfo_x86 *); 23 void (*c_identify)(struct cpuinfo_x86 *); 24 unsigned int (*c_size_cache)(struct cpuinfo_x86 *, unsigned int); 25 int c_x86_vendor; 26 }; 27 28 #define cpu_dev_register(cpu_devX) \ 29 static const struct cpu_dev *const __cpu_dev_##cpu_devX __used \ 30 __attribute__((__section__(".x86_cpu_dev.init"))) = \ 31 &cpu_devX; 32 33 extern const struct cpu_dev *const __x86_cpu_dev_start[], 34 *const __x86_cpu_dev_end[]; 35 36 extern void get_cpu_cap(struct cpuinfo_x86 *c); 37 extern void cpu_detect_cache_sizes(struct cpuinfo_x86 *c); 38 extern void get_cpu_cap(struct cpuinfo_x86 *c); 39 40 #endif 41