1 #include <xen/cpumask.h>
2 #include <asm/current.h>
3 #include <asm/mpspec.h>
4 #include <asm/genapic.h>
5 #include <asm/fixmap.h>
6 #include <asm/apicdef.h>
7 #include <xen/kernel.h>
8 #include <xen/smp.h>
9 #include <xen/init.h>
10 #include <xen/dmi.h>
11 #include <asm/mach-default/mach_mpparse.h>
12 #include <asm/io_apic.h>
13 
force_bigsmp(struct dmi_system_id * d)14 static __init int force_bigsmp(struct dmi_system_id *d)
15 {
16 	printk(KERN_NOTICE "%s detected: force use of apic=bigsmp\n", d->ident);
17 	def_to_bigsmp = true;
18 	return 0;
19 }
20 
21 
22 static struct dmi_system_id __initdata bigsmp_dmi_table[] = {
23 	{ force_bigsmp, "UNISYS ES7000-ONE", {
24 		DMI_MATCH(DMI_PRODUCT_NAME, "ES7000-ONE")
25 	 }},
26 
27 	 { }
28 };
29 
30 
probe_bigsmp(void)31 static __init int probe_bigsmp(void)
32 {
33 	/*
34 	 * We don't implement cluster mode, so force use of
35 	 * physical mode in both cases.
36 	 */
37 	if (acpi_gbl_FADT.flags &
38 	    (ACPI_FADT_APIC_CLUSTER | ACPI_FADT_APIC_PHYSICAL))
39 		def_to_bigsmp = true;
40 	else if (!def_to_bigsmp)
41 		dmi_check_system(bigsmp_dmi_table);
42 	return def_to_bigsmp;
43 }
44 
45 const struct genapic apic_bigsmp = {
46 	APIC_INIT("bigsmp", probe_bigsmp),
47 	GENAPIC_PHYS
48 };
49