at v2.6.26 29 kB view raw
1/* 2 * acpi_processor.c - ACPI Processor Driver ($Revision: 71 $) 3 * 4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> 5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> 6 * Copyright (C) 2004 Dominik Brodowski <linux@brodo.de> 7 * Copyright (C) 2004 Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> 8 * - Added processor hotplug support 9 * 10 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 * 12 * This program is free software; you can redistribute it and/or modify 13 * it under the terms of the GNU General Public License as published by 14 * the Free Software Foundation; either version 2 of the License, or (at 15 * your option) any later version. 16 * 17 * This program is distributed in the hope that it will be useful, but 18 * WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 * General Public License for more details. 21 * 22 * You should have received a copy of the GNU General Public License along 23 * with this program; if not, write to the Free Software Foundation, Inc., 24 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 25 * 26 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 27 * TBD: 28 * 1. Make # power states dynamic. 29 * 2. Support duty_cycle values that span bit 4. 30 * 3. Optimize by having scheduler determine business instead of 31 * having us try to calculate it here. 32 * 4. Need C1 timing -- must modify kernel (IRQ handler) to get this. 33 */ 34 35#include <linux/kernel.h> 36#include <linux/module.h> 37#include <linux/init.h> 38#include <linux/types.h> 39#include <linux/pci.h> 40#include <linux/pm.h> 41#include <linux/cpufreq.h> 42#include <linux/cpu.h> 43#include <linux/proc_fs.h> 44#include <linux/seq_file.h> 45#include <linux/dmi.h> 46#include <linux/moduleparam.h> 47#include <linux/cpuidle.h> 48 49#include <asm/io.h> 50#include <asm/system.h> 51#include <asm/cpu.h> 52#include <asm/delay.h> 53#include <asm/uaccess.h> 54#include <asm/processor.h> 55#include <asm/smp.h> 56#include <asm/acpi.h> 57 58#include <acpi/acpi_bus.h> 59#include <acpi/acpi_drivers.h> 60#include <acpi/processor.h> 61 62#define ACPI_PROCESSOR_COMPONENT 0x01000000 63#define ACPI_PROCESSOR_CLASS "processor" 64#define ACPI_PROCESSOR_DEVICE_NAME "Processor" 65#define ACPI_PROCESSOR_FILE_INFO "info" 66#define ACPI_PROCESSOR_FILE_THROTTLING "throttling" 67#define ACPI_PROCESSOR_FILE_LIMIT "limit" 68#define ACPI_PROCESSOR_NOTIFY_PERFORMANCE 0x80 69#define ACPI_PROCESSOR_NOTIFY_POWER 0x81 70#define ACPI_PROCESSOR_NOTIFY_THROTTLING 0x82 71 72#define ACPI_PROCESSOR_LIMIT_USER 0 73#define ACPI_PROCESSOR_LIMIT_THERMAL 1 74 75#define _COMPONENT ACPI_PROCESSOR_COMPONENT 76ACPI_MODULE_NAME("processor_core"); 77 78MODULE_AUTHOR("Paul Diefenbaugh"); 79MODULE_DESCRIPTION("ACPI Processor Driver"); 80MODULE_LICENSE("GPL"); 81 82static int acpi_processor_add(struct acpi_device *device); 83static int acpi_processor_start(struct acpi_device *device); 84static int acpi_processor_remove(struct acpi_device *device, int type); 85static int acpi_processor_info_open_fs(struct inode *inode, struct file *file); 86static void acpi_processor_notify(acpi_handle handle, u32 event, void *data); 87static acpi_status acpi_processor_hotadd_init(acpi_handle handle, int *p_cpu); 88static int acpi_processor_handle_eject(struct acpi_processor *pr); 89 90 91static const struct acpi_device_id processor_device_ids[] = { 92 {ACPI_PROCESSOR_HID, 0}, 93 {"", 0}, 94}; 95MODULE_DEVICE_TABLE(acpi, processor_device_ids); 96 97static struct acpi_driver acpi_processor_driver = { 98 .name = "processor", 99 .class = ACPI_PROCESSOR_CLASS, 100 .ids = processor_device_ids, 101 .ops = { 102 .add = acpi_processor_add, 103 .remove = acpi_processor_remove, 104 .start = acpi_processor_start, 105 .suspend = acpi_processor_suspend, 106 .resume = acpi_processor_resume, 107 }, 108}; 109 110#define INSTALL_NOTIFY_HANDLER 1 111#define UNINSTALL_NOTIFY_HANDLER 2 112 113static const struct file_operations acpi_processor_info_fops = { 114 .owner = THIS_MODULE, 115 .open = acpi_processor_info_open_fs, 116 .read = seq_read, 117 .llseek = seq_lseek, 118 .release = single_release, 119}; 120 121struct acpi_processor *processors[NR_CPUS]; 122struct acpi_processor_errata errata __read_mostly; 123 124/* -------------------------------------------------------------------------- 125 Errata Handling 126 -------------------------------------------------------------------------- */ 127 128static int acpi_processor_errata_piix4(struct pci_dev *dev) 129{ 130 u8 value1 = 0; 131 u8 value2 = 0; 132 133 134 if (!dev) 135 return -EINVAL; 136 137 /* 138 * Note that 'dev' references the PIIX4 ACPI Controller. 139 */ 140 141 switch (dev->revision) { 142 case 0: 143 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4 A-step\n")); 144 break; 145 case 1: 146 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4 B-step\n")); 147 break; 148 case 2: 149 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4E\n")); 150 break; 151 case 3: 152 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4M\n")); 153 break; 154 default: 155 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found unknown PIIX4\n")); 156 break; 157 } 158 159 switch (dev->revision) { 160 161 case 0: /* PIIX4 A-step */ 162 case 1: /* PIIX4 B-step */ 163 /* 164 * See specification changes #13 ("Manual Throttle Duty Cycle") 165 * and #14 ("Enabling and Disabling Manual Throttle"), plus 166 * erratum #5 ("STPCLK# Deassertion Time") from the January 167 * 2002 PIIX4 specification update. Applies to only older 168 * PIIX4 models. 169 */ 170 errata.piix4.throttle = 1; 171 172 case 2: /* PIIX4E */ 173 case 3: /* PIIX4M */ 174 /* 175 * See erratum #18 ("C3 Power State/BMIDE and Type-F DMA 176 * Livelock") from the January 2002 PIIX4 specification update. 177 * Applies to all PIIX4 models. 178 */ 179 180 /* 181 * BM-IDE 182 * ------ 183 * Find the PIIX4 IDE Controller and get the Bus Master IDE 184 * Status register address. We'll use this later to read 185 * each IDE controller's DMA status to make sure we catch all 186 * DMA activity. 187 */ 188 dev = pci_get_subsys(PCI_VENDOR_ID_INTEL, 189 PCI_DEVICE_ID_INTEL_82371AB, 190 PCI_ANY_ID, PCI_ANY_ID, NULL); 191 if (dev) { 192 errata.piix4.bmisx = pci_resource_start(dev, 4); 193 pci_dev_put(dev); 194 } 195 196 /* 197 * Type-F DMA 198 * ---------- 199 * Find the PIIX4 ISA Controller and read the Motherboard 200 * DMA controller's status to see if Type-F (Fast) DMA mode 201 * is enabled (bit 7) on either channel. Note that we'll 202 * disable C3 support if this is enabled, as some legacy 203 * devices won't operate well if fast DMA is disabled. 204 */ 205 dev = pci_get_subsys(PCI_VENDOR_ID_INTEL, 206 PCI_DEVICE_ID_INTEL_82371AB_0, 207 PCI_ANY_ID, PCI_ANY_ID, NULL); 208 if (dev) { 209 pci_read_config_byte(dev, 0x76, &value1); 210 pci_read_config_byte(dev, 0x77, &value2); 211 if ((value1 & 0x80) || (value2 & 0x80)) 212 errata.piix4.fdma = 1; 213 pci_dev_put(dev); 214 } 215 216 break; 217 } 218 219 if (errata.piix4.bmisx) 220 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 221 "Bus master activity detection (BM-IDE) erratum enabled\n")); 222 if (errata.piix4.fdma) 223 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 224 "Type-F DMA livelock erratum (C3 disabled)\n")); 225 226 return 0; 227} 228 229static int acpi_processor_errata(struct acpi_processor *pr) 230{ 231 int result = 0; 232 struct pci_dev *dev = NULL; 233 234 235 if (!pr) 236 return -EINVAL; 237 238 /* 239 * PIIX4 240 */ 241 dev = pci_get_subsys(PCI_VENDOR_ID_INTEL, 242 PCI_DEVICE_ID_INTEL_82371AB_3, PCI_ANY_ID, 243 PCI_ANY_ID, NULL); 244 if (dev) { 245 result = acpi_processor_errata_piix4(dev); 246 pci_dev_put(dev); 247 } 248 249 return result; 250} 251 252/* -------------------------------------------------------------------------- 253 Common ACPI processor functions 254 -------------------------------------------------------------------------- */ 255 256/* 257 * _PDC is required for a BIOS-OS handshake for most of the newer 258 * ACPI processor features. 259 */ 260static int acpi_processor_set_pdc(struct acpi_processor *pr) 261{ 262 struct acpi_object_list *pdc_in = pr->pdc; 263 acpi_status status = AE_OK; 264 265 266 if (!pdc_in) 267 return status; 268 269 status = acpi_evaluate_object(pr->handle, "_PDC", pdc_in, NULL); 270 271 if (ACPI_FAILURE(status)) 272 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 273 "Could not evaluate _PDC, using legacy perf. control...\n")); 274 275 return status; 276} 277 278/* -------------------------------------------------------------------------- 279 FS Interface (/proc) 280 -------------------------------------------------------------------------- */ 281 282static struct proc_dir_entry *acpi_processor_dir = NULL; 283 284static int acpi_processor_info_seq_show(struct seq_file *seq, void *offset) 285{ 286 struct acpi_processor *pr = seq->private; 287 288 289 if (!pr) 290 goto end; 291 292 seq_printf(seq, "processor id: %d\n" 293 "acpi id: %d\n" 294 "bus mastering control: %s\n" 295 "power management: %s\n" 296 "throttling control: %s\n" 297 "limit interface: %s\n", 298 pr->id, 299 pr->acpi_id, 300 pr->flags.bm_control ? "yes" : "no", 301 pr->flags.power ? "yes" : "no", 302 pr->flags.throttling ? "yes" : "no", 303 pr->flags.limit ? "yes" : "no"); 304 305 end: 306 return 0; 307} 308 309static int acpi_processor_info_open_fs(struct inode *inode, struct file *file) 310{ 311 return single_open(file, acpi_processor_info_seq_show, 312 PDE(inode)->data); 313} 314 315static int acpi_processor_add_fs(struct acpi_device *device) 316{ 317 struct proc_dir_entry *entry = NULL; 318 319 320 if (!acpi_device_dir(device)) { 321 acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device), 322 acpi_processor_dir); 323 if (!acpi_device_dir(device)) 324 return -ENODEV; 325 } 326 acpi_device_dir(device)->owner = THIS_MODULE; 327 328 /* 'info' [R] */ 329 entry = proc_create_data(ACPI_PROCESSOR_FILE_INFO, 330 S_IRUGO, acpi_device_dir(device), 331 &acpi_processor_info_fops, 332 acpi_driver_data(device)); 333 if (!entry) 334 return -EIO; 335 336 /* 'throttling' [R/W] */ 337 entry = proc_create_data(ACPI_PROCESSOR_FILE_THROTTLING, 338 S_IFREG | S_IRUGO | S_IWUSR, 339 acpi_device_dir(device), 340 &acpi_processor_throttling_fops, 341 acpi_driver_data(device)); 342 if (!entry) 343 return -EIO; 344 345 /* 'limit' [R/W] */ 346 entry = proc_create_data(ACPI_PROCESSOR_FILE_LIMIT, 347 S_IFREG | S_IRUGO | S_IWUSR, 348 acpi_device_dir(device), 349 &acpi_processor_limit_fops, 350 acpi_driver_data(device)); 351 if (!entry) 352 return -EIO; 353 return 0; 354} 355 356static int acpi_processor_remove_fs(struct acpi_device *device) 357{ 358 359 if (acpi_device_dir(device)) { 360 remove_proc_entry(ACPI_PROCESSOR_FILE_INFO, 361 acpi_device_dir(device)); 362 remove_proc_entry(ACPI_PROCESSOR_FILE_THROTTLING, 363 acpi_device_dir(device)); 364 remove_proc_entry(ACPI_PROCESSOR_FILE_LIMIT, 365 acpi_device_dir(device)); 366 remove_proc_entry(acpi_device_bid(device), acpi_processor_dir); 367 acpi_device_dir(device) = NULL; 368 } 369 370 return 0; 371} 372 373/* Use the acpiid in MADT to map cpus in case of SMP */ 374 375#ifndef CONFIG_SMP 376static int get_cpu_id(acpi_handle handle, u32 acpi_id) {return -1;} 377#else 378 379static struct acpi_table_madt *madt; 380 381static int map_lapic_id(struct acpi_subtable_header *entry, 382 u32 acpi_id, int *apic_id) 383{ 384 struct acpi_madt_local_apic *lapic = 385 (struct acpi_madt_local_apic *)entry; 386 if ((lapic->lapic_flags & ACPI_MADT_ENABLED) && 387 lapic->processor_id == acpi_id) { 388 *apic_id = lapic->id; 389 return 1; 390 } 391 return 0; 392} 393 394static int map_lsapic_id(struct acpi_subtable_header *entry, 395 u32 acpi_id, int *apic_id) 396{ 397 struct acpi_madt_local_sapic *lsapic = 398 (struct acpi_madt_local_sapic *)entry; 399 /* Only check enabled APICs*/ 400 if (lsapic->lapic_flags & ACPI_MADT_ENABLED) { 401 /* First check against id */ 402 if (lsapic->processor_id == acpi_id) { 403 *apic_id = (lsapic->id << 8) | lsapic->eid; 404 return 1; 405 /* Check against optional uid */ 406 } else if (entry->length >= 16 && 407 lsapic->uid == acpi_id) { 408 *apic_id = lsapic->uid; 409 return 1; 410 } 411 } 412 return 0; 413} 414 415static int map_madt_entry(u32 acpi_id) 416{ 417 unsigned long madt_end, entry; 418 int apic_id = -1; 419 420 if (!madt) 421 return apic_id; 422 423 entry = (unsigned long)madt; 424 madt_end = entry + madt->header.length; 425 426 /* Parse all entries looking for a match. */ 427 428 entry += sizeof(struct acpi_table_madt); 429 while (entry + sizeof(struct acpi_subtable_header) < madt_end) { 430 struct acpi_subtable_header *header = 431 (struct acpi_subtable_header *)entry; 432 if (header->type == ACPI_MADT_TYPE_LOCAL_APIC) { 433 if (map_lapic_id(header, acpi_id, &apic_id)) 434 break; 435 } else if (header->type == ACPI_MADT_TYPE_LOCAL_SAPIC) { 436 if (map_lsapic_id(header, acpi_id, &apic_id)) 437 break; 438 } 439 entry += header->length; 440 } 441 return apic_id; 442} 443 444static int map_mat_entry(acpi_handle handle, u32 acpi_id) 445{ 446 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 447 union acpi_object *obj; 448 struct acpi_subtable_header *header; 449 int apic_id = -1; 450 451 if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer))) 452 goto exit; 453 454 if (!buffer.length || !buffer.pointer) 455 goto exit; 456 457 obj = buffer.pointer; 458 if (obj->type != ACPI_TYPE_BUFFER || 459 obj->buffer.length < sizeof(struct acpi_subtable_header)) { 460 goto exit; 461 } 462 463 header = (struct acpi_subtable_header *)obj->buffer.pointer; 464 if (header->type == ACPI_MADT_TYPE_LOCAL_APIC) { 465 map_lapic_id(header, acpi_id, &apic_id); 466 } else if (header->type == ACPI_MADT_TYPE_LOCAL_SAPIC) { 467 map_lsapic_id(header, acpi_id, &apic_id); 468 } 469 470exit: 471 if (buffer.pointer) 472 kfree(buffer.pointer); 473 return apic_id; 474} 475 476static int get_cpu_id(acpi_handle handle, u32 acpi_id) 477{ 478 int i; 479 int apic_id = -1; 480 481 apic_id = map_mat_entry(handle, acpi_id); 482 if (apic_id == -1) 483 apic_id = map_madt_entry(acpi_id); 484 if (apic_id == -1) 485 return apic_id; 486 487 for_each_possible_cpu(i) { 488 if (cpu_physical_id(i) == apic_id) 489 return i; 490 } 491 return -1; 492} 493#endif 494 495/* -------------------------------------------------------------------------- 496 Driver Interface 497 -------------------------------------------------------------------------- */ 498 499static int acpi_processor_get_info(struct acpi_processor *pr, unsigned has_uid) 500{ 501 acpi_status status = 0; 502 union acpi_object object = { 0 }; 503 struct acpi_buffer buffer = { sizeof(union acpi_object), &object }; 504 int cpu_index; 505 static int cpu0_initialized; 506 507 508 if (!pr) 509 return -EINVAL; 510 511 if (num_online_cpus() > 1) 512 errata.smp = TRUE; 513 514 acpi_processor_errata(pr); 515 516 /* 517 * Check to see if we have bus mastering arbitration control. This 518 * is required for proper C3 usage (to maintain cache coherency). 519 */ 520 if (acpi_gbl_FADT.pm2_control_block && acpi_gbl_FADT.pm2_control_length) { 521 pr->flags.bm_control = 1; 522 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 523 "Bus mastering arbitration control present\n")); 524 } else 525 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 526 "No bus mastering arbitration control\n")); 527 528 /* Check if it is a Device with HID and UID */ 529 if (has_uid) { 530 unsigned long value; 531 status = acpi_evaluate_integer(pr->handle, METHOD_NAME__UID, 532 NULL, &value); 533 if (ACPI_FAILURE(status)) { 534 printk(KERN_ERR PREFIX "Evaluating processor _UID\n"); 535 return -ENODEV; 536 } 537 pr->acpi_id = value; 538 } else { 539 /* 540 * Evalute the processor object. Note that it is common on SMP to 541 * have the first (boot) processor with a valid PBLK address while 542 * all others have a NULL address. 543 */ 544 status = acpi_evaluate_object(pr->handle, NULL, NULL, &buffer); 545 if (ACPI_FAILURE(status)) { 546 printk(KERN_ERR PREFIX "Evaluating processor object\n"); 547 return -ENODEV; 548 } 549 550 /* 551 * TBD: Synch processor ID (via LAPIC/LSAPIC structures) on SMP. 552 * >>> 'acpi_get_processor_id(acpi_id, &id)' in arch/xxx/acpi.c 553 */ 554 pr->acpi_id = object.processor.proc_id; 555 } 556 cpu_index = get_cpu_id(pr->handle, pr->acpi_id); 557 558 /* Handle UP system running SMP kernel, with no LAPIC in MADT */ 559 if (!cpu0_initialized && (cpu_index == -1) && 560 (num_online_cpus() == 1)) { 561 cpu_index = 0; 562 } 563 564 cpu0_initialized = 1; 565 566 pr->id = cpu_index; 567 568 /* 569 * Extra Processor objects may be enumerated on MP systems with 570 * less than the max # of CPUs. They should be ignored _iff 571 * they are physically not present. 572 */ 573 if (pr->id == -1) { 574 if (ACPI_FAILURE 575 (acpi_processor_hotadd_init(pr->handle, &pr->id))) { 576 return -ENODEV; 577 } 578 } 579 580 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Processor [%d:%d]\n", pr->id, 581 pr->acpi_id)); 582 583 if (!object.processor.pblk_address) 584 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No PBLK (NULL address)\n")); 585 else if (object.processor.pblk_length != 6) 586 printk(KERN_ERR PREFIX "Invalid PBLK length [%d]\n", 587 object.processor.pblk_length); 588 else { 589 pr->throttling.address = object.processor.pblk_address; 590 pr->throttling.duty_offset = acpi_gbl_FADT.duty_offset; 591 pr->throttling.duty_width = acpi_gbl_FADT.duty_width; 592 593 pr->pblk = object.processor.pblk_address; 594 595 /* 596 * We don't care about error returns - we just try to mark 597 * these reserved so that nobody else is confused into thinking 598 * that this region might be unused.. 599 * 600 * (In particular, allocating the IO range for Cardbus) 601 */ 602 request_region(pr->throttling.address, 6, "ACPI CPU throttle"); 603 } 604 605 /* 606 * If ACPI describes a slot number for this CPU, we can use it 607 * ensure we get the right value in the "physical id" field 608 * of /proc/cpuinfo 609 */ 610 status = acpi_evaluate_object(pr->handle, "_SUN", NULL, &buffer); 611 if (ACPI_SUCCESS(status)) 612 arch_fix_phys_package_id(pr->id, object.integer.value); 613 614 return 0; 615} 616 617static void *processor_device_array[NR_CPUS]; 618 619static int __cpuinit acpi_processor_start(struct acpi_device *device) 620{ 621 int result = 0; 622 acpi_status status = AE_OK; 623 struct acpi_processor *pr; 624 625 626 pr = acpi_driver_data(device); 627 628 result = acpi_processor_get_info(pr, device->flags.unique_id); 629 if (result) { 630 /* Processor is physically not present */ 631 return 0; 632 } 633 634 BUG_ON((pr->id >= nr_cpu_ids) || (pr->id < 0)); 635 636 /* 637 * Buggy BIOS check 638 * ACPI id of processors can be reported wrongly by the BIOS. 639 * Don't trust it blindly 640 */ 641 if (processor_device_array[pr->id] != NULL && 642 processor_device_array[pr->id] != device) { 643 printk(KERN_WARNING "BIOS reported wrong ACPI id " 644 "for the processor\n"); 645 return -ENODEV; 646 } 647 processor_device_array[pr->id] = device; 648 649 processors[pr->id] = pr; 650 651 result = acpi_processor_add_fs(device); 652 if (result) 653 goto end; 654 655 status = acpi_install_notify_handler(pr->handle, ACPI_DEVICE_NOTIFY, 656 acpi_processor_notify, pr); 657 658 /* _PDC call should be done before doing anything else (if reqd.). */ 659 arch_acpi_processor_init_pdc(pr); 660 acpi_processor_set_pdc(pr); 661#ifdef CONFIG_CPU_FREQ 662 acpi_processor_ppc_has_changed(pr); 663#endif 664 acpi_processor_get_throttling_info(pr); 665 acpi_processor_get_limit_info(pr); 666 667 668 acpi_processor_power_init(pr, device); 669 670 pr->cdev = thermal_cooling_device_register("Processor", device, 671 &processor_cooling_ops); 672 if (IS_ERR(pr->cdev)) { 673 result = PTR_ERR(pr->cdev); 674 goto end; 675 } 676 677 printk(KERN_INFO PREFIX 678 "%s is registered as cooling_device%d\n", 679 device->dev.bus_id, pr->cdev->id); 680 681 result = sysfs_create_link(&device->dev.kobj, 682 &pr->cdev->device.kobj, 683 "thermal_cooling"); 684 if (result) 685 printk(KERN_ERR PREFIX "Create sysfs link\n"); 686 result = sysfs_create_link(&pr->cdev->device.kobj, 687 &device->dev.kobj, 688 "device"); 689 if (result) 690 printk(KERN_ERR PREFIX "Create sysfs link\n"); 691 692 if (pr->flags.throttling) { 693 printk(KERN_INFO PREFIX "%s [%s] (supports", 694 acpi_device_name(device), acpi_device_bid(device)); 695 printk(" %d throttling states", pr->throttling.state_count); 696 printk(")\n"); 697 } 698 699 end: 700 701 return result; 702} 703 704static void acpi_processor_notify(acpi_handle handle, u32 event, void *data) 705{ 706 struct acpi_processor *pr = data; 707 struct acpi_device *device = NULL; 708 int saved; 709 710 if (!pr) 711 return; 712 713 if (acpi_bus_get_device(pr->handle, &device)) 714 return; 715 716 switch (event) { 717 case ACPI_PROCESSOR_NOTIFY_PERFORMANCE: 718 saved = pr->performance_platform_limit; 719 acpi_processor_ppc_has_changed(pr); 720 if (saved == pr->performance_platform_limit) 721 break; 722 acpi_bus_generate_proc_event(device, event, 723 pr->performance_platform_limit); 724 acpi_bus_generate_netlink_event(device->pnp.device_class, 725 device->dev.bus_id, event, 726 pr->performance_platform_limit); 727 break; 728 case ACPI_PROCESSOR_NOTIFY_POWER: 729 acpi_processor_cst_has_changed(pr); 730 acpi_bus_generate_proc_event(device, event, 0); 731 acpi_bus_generate_netlink_event(device->pnp.device_class, 732 device->dev.bus_id, event, 0); 733 break; 734 case ACPI_PROCESSOR_NOTIFY_THROTTLING: 735 acpi_processor_tstate_has_changed(pr); 736 acpi_bus_generate_proc_event(device, event, 0); 737 acpi_bus_generate_netlink_event(device->pnp.device_class, 738 device->dev.bus_id, event, 0); 739 default: 740 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 741 "Unsupported event [0x%x]\n", event)); 742 break; 743 } 744 745 return; 746} 747 748static int acpi_cpu_soft_notify(struct notifier_block *nfb, 749 unsigned long action, void *hcpu) 750{ 751 unsigned int cpu = (unsigned long)hcpu; 752 struct acpi_processor *pr = processors[cpu]; 753 754 if (action == CPU_ONLINE && pr) { 755 acpi_processor_ppc_has_changed(pr); 756 acpi_processor_cst_has_changed(pr); 757 acpi_processor_tstate_has_changed(pr); 758 } 759 return NOTIFY_OK; 760} 761 762static struct notifier_block acpi_cpu_notifier = 763{ 764 .notifier_call = acpi_cpu_soft_notify, 765}; 766 767static int acpi_processor_add(struct acpi_device *device) 768{ 769 struct acpi_processor *pr = NULL; 770 771 772 if (!device) 773 return -EINVAL; 774 775 pr = kzalloc(sizeof(struct acpi_processor), GFP_KERNEL); 776 if (!pr) 777 return -ENOMEM; 778 779 pr->handle = device->handle; 780 strcpy(acpi_device_name(device), ACPI_PROCESSOR_DEVICE_NAME); 781 strcpy(acpi_device_class(device), ACPI_PROCESSOR_CLASS); 782 acpi_driver_data(device) = pr; 783 784 return 0; 785} 786 787static int acpi_processor_remove(struct acpi_device *device, int type) 788{ 789 acpi_status status = AE_OK; 790 struct acpi_processor *pr = NULL; 791 792 793 if (!device || !acpi_driver_data(device)) 794 return -EINVAL; 795 796 pr = acpi_driver_data(device); 797 798 if (pr->id >= nr_cpu_ids) { 799 kfree(pr); 800 return 0; 801 } 802 803 if (type == ACPI_BUS_REMOVAL_EJECT) { 804 if (acpi_processor_handle_eject(pr)) 805 return -EINVAL; 806 } 807 808 acpi_processor_power_exit(pr, device); 809 810 status = acpi_remove_notify_handler(pr->handle, ACPI_DEVICE_NOTIFY, 811 acpi_processor_notify); 812 813 acpi_processor_remove_fs(device); 814 815 if (pr->cdev) { 816 sysfs_remove_link(&device->dev.kobj, "thermal_cooling"); 817 sysfs_remove_link(&pr->cdev->device.kobj, "device"); 818 thermal_cooling_device_unregister(pr->cdev); 819 pr->cdev = NULL; 820 } 821 822 processors[pr->id] = NULL; 823 processor_device_array[pr->id] = NULL; 824 kfree(pr); 825 826 return 0; 827} 828 829#ifdef CONFIG_ACPI_HOTPLUG_CPU 830/**************************************************************************** 831 * Acpi processor hotplug support * 832 ****************************************************************************/ 833 834static int is_processor_present(acpi_handle handle) 835{ 836 acpi_status status; 837 unsigned long sta = 0; 838 839 840 status = acpi_evaluate_integer(handle, "_STA", NULL, &sta); 841 842 if (ACPI_SUCCESS(status) && (sta & ACPI_STA_DEVICE_PRESENT)) 843 return 1; 844 845 /* 846 * _STA is mandatory for a processor that supports hot plug 847 */ 848 if (status == AE_NOT_FOUND) 849 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 850 "Processor does not support hot plug\n")); 851 else 852 ACPI_EXCEPTION((AE_INFO, status, 853 "Processor Device is not present")); 854 return 0; 855} 856 857static 858int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device) 859{ 860 acpi_handle phandle; 861 struct acpi_device *pdev; 862 struct acpi_processor *pr; 863 864 865 if (acpi_get_parent(handle, &phandle)) { 866 return -ENODEV; 867 } 868 869 if (acpi_bus_get_device(phandle, &pdev)) { 870 return -ENODEV; 871 } 872 873 if (acpi_bus_add(device, pdev, handle, ACPI_BUS_TYPE_PROCESSOR)) { 874 return -ENODEV; 875 } 876 877 acpi_bus_start(*device); 878 879 pr = acpi_driver_data(*device); 880 if (!pr) 881 return -ENODEV; 882 883 if ((pr->id >= 0) && (pr->id < nr_cpu_ids)) { 884 kobject_uevent(&(*device)->dev.kobj, KOBJ_ONLINE); 885 } 886 return 0; 887} 888 889static void __ref acpi_processor_hotplug_notify(acpi_handle handle, 890 u32 event, void *data) 891{ 892 struct acpi_processor *pr; 893 struct acpi_device *device = NULL; 894 int result; 895 896 897 switch (event) { 898 case ACPI_NOTIFY_BUS_CHECK: 899 case ACPI_NOTIFY_DEVICE_CHECK: 900 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 901 "Processor driver received %s event\n", 902 (event == ACPI_NOTIFY_BUS_CHECK) ? 903 "ACPI_NOTIFY_BUS_CHECK" : "ACPI_NOTIFY_DEVICE_CHECK")); 904 905 if (!is_processor_present(handle)) 906 break; 907 908 if (acpi_bus_get_device(handle, &device)) { 909 result = acpi_processor_device_add(handle, &device); 910 if (result) 911 printk(KERN_ERR PREFIX 912 "Unable to add the device\n"); 913 break; 914 } 915 916 pr = acpi_driver_data(device); 917 if (!pr) { 918 printk(KERN_ERR PREFIX "Driver data is NULL\n"); 919 break; 920 } 921 922 if (pr->id >= 0 && (pr->id < nr_cpu_ids)) { 923 kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE); 924 break; 925 } 926 927 result = acpi_processor_start(device); 928 if ((!result) && ((pr->id >= 0) && (pr->id < nr_cpu_ids))) { 929 kobject_uevent(&device->dev.kobj, KOBJ_ONLINE); 930 } else { 931 printk(KERN_ERR PREFIX "Device [%s] failed to start\n", 932 acpi_device_bid(device)); 933 } 934 break; 935 case ACPI_NOTIFY_EJECT_REQUEST: 936 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 937 "received ACPI_NOTIFY_EJECT_REQUEST\n")); 938 939 if (acpi_bus_get_device(handle, &device)) { 940 printk(KERN_ERR PREFIX 941 "Device don't exist, dropping EJECT\n"); 942 break; 943 } 944 pr = acpi_driver_data(device); 945 if (!pr) { 946 printk(KERN_ERR PREFIX 947 "Driver data is NULL, dropping EJECT\n"); 948 return; 949 } 950 951 if ((pr->id < nr_cpu_ids) && (cpu_present(pr->id))) 952 kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE); 953 break; 954 default: 955 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 956 "Unsupported event [0x%x]\n", event)); 957 break; 958 } 959 960 return; 961} 962 963static acpi_status 964processor_walk_namespace_cb(acpi_handle handle, 965 u32 lvl, void *context, void **rv) 966{ 967 acpi_status status; 968 int *action = context; 969 acpi_object_type type = 0; 970 971 status = acpi_get_type(handle, &type); 972 if (ACPI_FAILURE(status)) 973 return (AE_OK); 974 975 if (type != ACPI_TYPE_PROCESSOR) 976 return (AE_OK); 977 978 switch (*action) { 979 case INSTALL_NOTIFY_HANDLER: 980 acpi_install_notify_handler(handle, 981 ACPI_SYSTEM_NOTIFY, 982 acpi_processor_hotplug_notify, 983 NULL); 984 break; 985 case UNINSTALL_NOTIFY_HANDLER: 986 acpi_remove_notify_handler(handle, 987 ACPI_SYSTEM_NOTIFY, 988 acpi_processor_hotplug_notify); 989 break; 990 default: 991 break; 992 } 993 994 return (AE_OK); 995} 996 997static acpi_status acpi_processor_hotadd_init(acpi_handle handle, int *p_cpu) 998{ 999 1000 if (!is_processor_present(handle)) { 1001 return AE_ERROR; 1002 } 1003 1004 if (acpi_map_lsapic(handle, p_cpu)) 1005 return AE_ERROR; 1006 1007 if (arch_register_cpu(*p_cpu)) { 1008 acpi_unmap_lsapic(*p_cpu); 1009 return AE_ERROR; 1010 } 1011 1012 return AE_OK; 1013} 1014 1015static int acpi_processor_handle_eject(struct acpi_processor *pr) 1016{ 1017 if (cpu_online(pr->id)) { 1018 return (-EINVAL); 1019 } 1020 arch_unregister_cpu(pr->id); 1021 acpi_unmap_lsapic(pr->id); 1022 return (0); 1023} 1024#else 1025static acpi_status acpi_processor_hotadd_init(acpi_handle handle, int *p_cpu) 1026{ 1027 return AE_ERROR; 1028} 1029static int acpi_processor_handle_eject(struct acpi_processor *pr) 1030{ 1031 return (-EINVAL); 1032} 1033#endif 1034 1035static 1036void acpi_processor_install_hotplug_notify(void) 1037{ 1038#ifdef CONFIG_ACPI_HOTPLUG_CPU 1039 int action = INSTALL_NOTIFY_HANDLER; 1040 acpi_walk_namespace(ACPI_TYPE_PROCESSOR, 1041 ACPI_ROOT_OBJECT, 1042 ACPI_UINT32_MAX, 1043 processor_walk_namespace_cb, &action, NULL); 1044#endif 1045 register_hotcpu_notifier(&acpi_cpu_notifier); 1046} 1047 1048static 1049void acpi_processor_uninstall_hotplug_notify(void) 1050{ 1051#ifdef CONFIG_ACPI_HOTPLUG_CPU 1052 int action = UNINSTALL_NOTIFY_HANDLER; 1053 acpi_walk_namespace(ACPI_TYPE_PROCESSOR, 1054 ACPI_ROOT_OBJECT, 1055 ACPI_UINT32_MAX, 1056 processor_walk_namespace_cb, &action, NULL); 1057#endif 1058 unregister_hotcpu_notifier(&acpi_cpu_notifier); 1059} 1060 1061/* 1062 * We keep the driver loaded even when ACPI is not running. 1063 * This is needed for the powernow-k8 driver, that works even without 1064 * ACPI, but needs symbols from this driver 1065 */ 1066 1067static int __init acpi_processor_init(void) 1068{ 1069 int result = 0; 1070 1071 1072 memset(&processors, 0, sizeof(processors)); 1073 memset(&errata, 0, sizeof(errata)); 1074 1075#ifdef CONFIG_SMP 1076 if (ACPI_FAILURE(acpi_get_table(ACPI_SIG_MADT, 0, 1077 (struct acpi_table_header **)&madt))) 1078 madt = NULL; 1079#endif 1080 1081 acpi_processor_dir = proc_mkdir(ACPI_PROCESSOR_CLASS, acpi_root_dir); 1082 if (!acpi_processor_dir) 1083 return -ENOMEM; 1084 acpi_processor_dir->owner = THIS_MODULE; 1085 1086 result = cpuidle_register_driver(&acpi_idle_driver); 1087 if (result < 0) 1088 goto out_proc; 1089 1090 result = acpi_bus_register_driver(&acpi_processor_driver); 1091 if (result < 0) 1092 goto out_cpuidle; 1093 1094 acpi_processor_install_hotplug_notify(); 1095 1096 acpi_thermal_cpufreq_init(); 1097 1098 acpi_processor_ppc_init(); 1099 1100 acpi_processor_throttling_init(); 1101 1102 return 0; 1103 1104out_cpuidle: 1105 cpuidle_unregister_driver(&acpi_idle_driver); 1106 1107out_proc: 1108 remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir); 1109 1110 return result; 1111} 1112 1113static void __exit acpi_processor_exit(void) 1114{ 1115 acpi_processor_ppc_exit(); 1116 1117 acpi_thermal_cpufreq_exit(); 1118 1119 acpi_processor_uninstall_hotplug_notify(); 1120 1121 acpi_bus_unregister_driver(&acpi_processor_driver); 1122 1123 cpuidle_unregister_driver(&acpi_idle_driver); 1124 1125 remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir); 1126 1127 return; 1128} 1129 1130module_init(acpi_processor_init); 1131module_exit(acpi_processor_exit); 1132 1133EXPORT_SYMBOL(acpi_processor_set_thermal_limit); 1134 1135MODULE_ALIAS("processor");