1 /* 2 * arch/ia64/kernel/acpi-processor.c 3 * 4 * Copyright (C) 2005 Intel Corporation 5 * Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> 6 * - Added _PDC for platforms with Intel CPUs 7 */ 8 9 #include <linux/kernel.h> 10 #include <linux/module.h> 11 #include <linux/init.h> 12 #include <linux/acpi.h> 13 14 #include <acpi/processor.h> 15 #include <asm/acpi.h> 16 init_intel_pdc(struct acpi_processor * pr)17static void init_intel_pdc(struct acpi_processor *pr) 18 { 19 struct acpi_object_list *obj_list; 20 union acpi_object *obj; 21 u32 *buf; 22 23 /* allocate and initialize pdc. It will be used later. */ 24 obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL); 25 if (!obj_list) { 26 printk(KERN_ERR "Memory allocation error\n"); 27 return; 28 } 29 30 obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL); 31 if (!obj) { 32 printk(KERN_ERR "Memory allocation error\n"); 33 kfree(obj_list); 34 return; 35 } 36 37 buf = kmalloc(12, GFP_KERNEL); 38 if (!buf) { 39 printk(KERN_ERR "Memory allocation error\n"); 40 kfree(obj); 41 kfree(obj_list); 42 return; 43 } 44 45 buf[0] = ACPI_PDC_REVISION_ID; 46 buf[1] = 1; 47 buf[2] = ACPI_PDC_EST_CAPABILITY_SMP; 48 /* 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. 52 */ 53 buf[2] |= ACPI_PDC_SMP_T_SWCOORD; 54 55 obj->type = ACPI_TYPE_BUFFER; 56 obj->buffer.length = 12; 57 obj->buffer.pointer = (u8 *) buf; 58 obj_list->count = 1; 59 obj_list->pointer = obj; 60 pr->pdc = obj_list; 61 62 return; 63 } 64 65 /* Initialize _PDC data based on the CPU vendor */ arch_acpi_processor_init_pdc(struct acpi_processor * pr)66void arch_acpi_processor_init_pdc(struct acpi_processor *pr) 67 { 68 pr->pdc = NULL; 69 init_intel_pdc(pr); 70 return; 71 } 72 73 EXPORT_SYMBOL(arch_acpi_processor_init_pdc); 74