@@ -43,9 +43,6 @@ obj-$(CONFIG_INDIRECT_THUNK) += indirect-thunk.o
obj-y += ioport_emulate.o
obj-y += irq.o
obj-$(CONFIG_KEXEC) += machine_kexec.o
-obj-y += microcode_amd.o
-obj-y += microcode_intel.o
-obj-y += microcode.o
obj-y += mm.o x86_64/mm.o
obj-$(CONFIG_HVM) += monitor.o
obj-y += mpparse.o
@@ -1,4 +1,5 @@
obj-y += mcheck/
+obj-y += microcode/
obj-y += mtrr/
obj-y += amd.o
new file mode 100644
@@ -0,0 +1,3 @@
+obj-y += amd.o
+obj-y += core.o
+obj-y += intel.o
similarity index 99%
rename from xen/arch/x86/microcode_amd.c
rename to xen/arch/x86/cpu/microcode/amd.c
@@ -16,16 +16,14 @@
#include <xen/err.h>
#include <xen/init.h>
-#include <xen/kernel.h>
-#include <xen/lib.h>
-#include <xen/sched.h>
-#include <xen/smp.h>
-#include <xen/spinlock.h>
+#include <xen/mm.h> /* TODO: Fix asm/tlbflush.h breakage */
+#include <asm/hvm/svm/svm.h>
#include <asm/msr.h>
#include <asm/processor.h>
-#include <asm/microcode.h>
-#include <asm/hvm/svm/svm.h>
+#include <asm/system.h>
+
+#include "private.h"
#define pr_debug(x...) ((void)0)
similarity index 99%
rename from xen/arch/x86/microcode.c
rename to xen/arch/x86/cpu/microcode/core.c
@@ -22,29 +22,22 @@
*/
#include <xen/cpu.h>
+#include <xen/earlycpio.h>
#include <xen/err.h>
+#include <xen/guest_access.h>
#include <xen/init.h>
-#include <xen/kernel.h>
-#include <xen/lib.h>
-#include <xen/notifier.h>
#include <xen/param.h>
-#include <xen/sched.h>
-#include <xen/smp.h>
-#include <xen/softirq.h>
#include <xen/spinlock.h>
#include <xen/stop_machine.h>
-#include <xen/tasklet.h>
-#include <xen/guest_access.h>
-#include <xen/earlycpio.h>
#include <xen/watchdog.h>
#include <asm/apic.h>
#include <asm/delay.h>
-#include <asm/msr.h>
#include <asm/nmi.h>
#include <asm/processor.h>
#include <asm/setup.h>
-#include <asm/microcode.h>
+
+#include "private.h"
/*
* Before performing a late microcode update on any thread, we
similarity index 98%
rename from xen/arch/x86/microcode_intel.c
rename to xen/arch/x86/cpu/microcode/intel.c
@@ -23,15 +23,12 @@
#include <xen/err.h>
#include <xen/init.h>
-#include <xen/kernel.h>
-#include <xen/lib.h>
-#include <xen/sched.h>
-#include <xen/smp.h>
-#include <xen/spinlock.h>
#include <asm/msr.h>
#include <asm/processor.h>
-#include <asm/microcode.h>
+#include <asm/system.h>
+
+#include "private.h"
#define pr_debug(x...) ((void)0)
similarity index 78%
copy from xen/include/asm-x86/microcode.h
copy to xen/arch/x86/cpu/microcode/private.h
@@ -1,7 +1,9 @@
-#ifndef ASM_X86__MICROCODE_H
-#define ASM_X86__MICROCODE_H
+#ifndef ASM_X86_MICROCODE_PRIVATE_H
+#define ASM_X86_MICROCODE_PRIVATE_H
-#include <xen/percpu.h>
+#include <xen/types.h>
+
+#include <asm/microcode.h>
enum microcode_match_result {
OLD_UCODE, /* signature matched, but revision id is older or equal */
@@ -9,8 +11,6 @@ enum microcode_match_result {
MIS_UCODE, /* signature mismatched */
};
-struct cpu_signature;
-
struct microcode_patch {
union {
struct microcode_intel *mc_intel;
@@ -32,13 +32,6 @@ struct microcode_ops {
const struct microcode_patch *new, const struct microcode_patch *old);
};
-struct cpu_signature {
- unsigned int sig;
- unsigned int pf;
- unsigned int rev;
-};
-
-DECLARE_PER_CPU(struct cpu_signature, cpu_sig);
extern const struct microcode_ops *microcode_ops;
-#endif /* ASM_X86__MICROCODE_H */
+#endif /* ASM_X86_MICROCODE_PRIVATE_H */
@@ -3,35 +3,6 @@
#include <xen/percpu.h>
-enum microcode_match_result {
- OLD_UCODE, /* signature matched, but revision id is older or equal */
- NEW_UCODE, /* signature matched, but revision id is newer */
- MIS_UCODE, /* signature mismatched */
-};
-
-struct cpu_signature;
-
-struct microcode_patch {
- union {
- struct microcode_intel *mc_intel;
- struct microcode_amd *mc_amd;
- void *mc;
- };
-};
-
-struct microcode_ops {
- struct microcode_patch *(*cpu_request_microcode)(const void *buf,
- size_t size);
- int (*collect_cpu_info)(struct cpu_signature *csig);
- int (*apply_microcode)(const struct microcode_patch *patch);
- int (*start_update)(void);
- void (*end_update_percpu)(void);
- void (*free_patch)(void *mc);
- bool (*match_cpu)(const struct microcode_patch *patch);
- enum microcode_match_result (*compare_patch)(
- const struct microcode_patch *new, const struct microcode_patch *old);
-};
-
struct cpu_signature {
unsigned int sig;
unsigned int pf;
@@ -39,6 +10,5 @@ struct cpu_signature {
};
DECLARE_PER_CPU(struct cpu_signature, cpu_sig);
-extern const struct microcode_ops *microcode_ops;
#endif /* ASM_X86__MICROCODE_H */