2 * arch/i386/kernel/acpi/processor.c
4 * Copyright (C) 2005 Intel Corporation
5 * Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
6 * - Added _PDC for platforms with Intel CPUs
9 #include <linux/kernel.h>
10 #include <linux/module.h>
11 #include <linux/init.h>
12 #include <linux/acpi.h>
14 #include <acpi/processor.h>
17 static void init_intel_pdc(struct acpi_processor
*pr
, struct cpuinfo_x86
*c
)
19 struct acpi_object_list
*obj_list
;
20 union acpi_object
*obj
;
23 /* allocate and initialize pdc. It will be used later. */
24 obj_list
= kmalloc(sizeof(struct acpi_object_list
), GFP_KERNEL
);
26 printk(KERN_ERR
"Memory allocation error\n");
30 obj
= kmalloc(sizeof(union acpi_object
), GFP_KERNEL
);
32 printk(KERN_ERR
"Memory allocation error\n");
37 buf
= kmalloc(12, GFP_KERNEL
);
39 printk(KERN_ERR
"Memory allocation error\n");
45 buf
[0] = ACPI_PDC_REVISION_ID
;
47 buf
[2] = ACPI_PDC_C_CAPABILITY_SMP
;
49 if (cpu_has(c
, X86_FEATURE_EST
))
50 buf
[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP
;
52 obj
->type
= ACPI_TYPE_BUFFER
;
53 obj
->buffer
.length
= 12;
54 obj
->buffer
.pointer
= (u8
*) buf
;
56 obj_list
->pointer
= obj
;
62 /* Initialize _PDC data based on the CPU vendor */
63 void arch_acpi_processor_init_pdc(struct acpi_processor
*pr
)
65 unsigned int cpu
= pr
->id
;
66 struct cpuinfo_x86
*c
= cpu_data
+ cpu
;
69 if (c
->x86_vendor
== X86_VENDOR_INTEL
)
70 init_intel_pdc(pr
, c
);
75 EXPORT_SYMBOL(arch_acpi_processor_init_pdc
);