2 * arch/ia64/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
)
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_EST_CAPABILITY_SMP
;
49 * The default of PDC_SMP_T_SWCOORD bit is set for IA64 cpu so
50 * that OSPM is capable of native ACPI throttling software
51 * coordination using BIOS supplied _TSD info.
53 buf
[2] |= ACPI_PDC_SMP_T_SWCOORD
;
55 obj
->type
= ACPI_TYPE_BUFFER
;
56 obj
->buffer
.length
= 12;
57 obj
->buffer
.pointer
= (u8
*) buf
;
59 obj_list
->pointer
= obj
;
65 /* Initialize _PDC data based on the CPU vendor */
66 void arch_acpi_processor_init_pdc(struct acpi_processor
*pr
)
73 EXPORT_SYMBOL(arch_acpi_processor_init_pdc
);
75 void arch_acpi_processor_cleanup_pdc(struct acpi_processor
*pr
)
78 kfree(pr
->pdc
->pointer
->buffer
.pointer
);
79 kfree(pr
->pdc
->pointer
);
85 EXPORT_SYMBOL(arch_acpi_processor_cleanup_pdc
);