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