• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  acpi_bus.c - ACPI Bus Driver ($Revision: 80 $)
3  *
4  *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
5  *
6  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or (at
11  *  your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful, but
14  *  WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  *  General Public License for more details.
17  *
18  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19  */
20 
21 #include <linux/module.h>
22 #include <linux/init.h>
23 #include <linux/ioport.h>
24 #include <linux/kernel.h>
25 #include <linux/list.h>
26 #include <linux/sched.h>
27 #include <linux/pm.h>
28 #include <linux/device.h>
29 #include <linux/proc_fs.h>
30 #include <linux/acpi.h>
31 #include <linux/slab.h>
32 #include <linux/regulator/machine.h>
33 #include <linux/workqueue.h>
34 #include <linux/reboot.h>
35 #include <linux/delay.h>
36 #ifdef CONFIG_X86
37 #include <asm/mpspec.h>
38 #endif
39 #include <linux/acpi_iort.h>
40 #include <linux/pci.h>
41 #include <acpi/apei.h>
42 #include <linux/dmi.h>
43 #include <linux/suspend.h>
44 
45 #include "internal.h"
46 
47 #define _COMPONENT		ACPI_BUS_COMPONENT
48 ACPI_MODULE_NAME("bus");
49 
50 struct acpi_device *acpi_root;
51 struct proc_dir_entry *acpi_root_dir;
52 EXPORT_SYMBOL(acpi_root_dir);
53 
54 #ifdef CONFIG_X86
55 #ifdef CONFIG_ACPI_CUSTOM_DSDT
set_copy_dsdt(const struct dmi_system_id * id)56 static inline int set_copy_dsdt(const struct dmi_system_id *id)
57 {
58 	return 0;
59 }
60 #else
set_copy_dsdt(const struct dmi_system_id * id)61 static int set_copy_dsdt(const struct dmi_system_id *id)
62 {
63 	printk(KERN_NOTICE "%s detected - "
64 		"force copy of DSDT to local memory\n", id->ident);
65 	acpi_gbl_copy_dsdt_locally = 1;
66 	return 0;
67 }
68 #endif
69 
70 static struct dmi_system_id dsdt_dmi_table[] __initdata = {
71 	/*
72 	 * Invoke DSDT corruption work-around on all Toshiba Satellite.
73 	 * https://bugzilla.kernel.org/show_bug.cgi?id=14679
74 	 */
75 	{
76 	 .callback = set_copy_dsdt,
77 	 .ident = "TOSHIBA Satellite",
78 	 .matches = {
79 		DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
80 		DMI_MATCH(DMI_PRODUCT_NAME, "Satellite"),
81 		},
82 	},
83 	{}
84 };
85 #else
86 static struct dmi_system_id dsdt_dmi_table[] __initdata = {
87 	{}
88 };
89 #endif
90 
91 /* --------------------------------------------------------------------------
92                                 Device Management
93    -------------------------------------------------------------------------- */
94 
acpi_bus_get_status_handle(acpi_handle handle,unsigned long long * sta)95 acpi_status acpi_bus_get_status_handle(acpi_handle handle,
96 				       unsigned long long *sta)
97 {
98 	acpi_status status;
99 
100 	status = acpi_evaluate_integer(handle, "_STA", NULL, sta);
101 	if (ACPI_SUCCESS(status))
102 		return AE_OK;
103 
104 	if (status == AE_NOT_FOUND) {
105 		*sta = ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED |
106 		       ACPI_STA_DEVICE_UI      | ACPI_STA_DEVICE_FUNCTIONING;
107 		return AE_OK;
108 	}
109 	return status;
110 }
111 
acpi_bus_get_status(struct acpi_device * device)112 int acpi_bus_get_status(struct acpi_device *device)
113 {
114 	acpi_status status;
115 	unsigned long long sta;
116 
117 	status = acpi_bus_get_status_handle(device->handle, &sta);
118 	if (ACPI_FAILURE(status))
119 		return -ENODEV;
120 
121 	acpi_set_device_status(device, sta);
122 
123 	if (device->status.functional && !device->status.present) {
124 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]: "
125 		       "functional but not present;\n",
126 			device->pnp.bus_id, (u32)sta));
127 	}
128 
129 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n",
130 			  device->pnp.bus_id, (u32)sta));
131 	return 0;
132 }
133 EXPORT_SYMBOL(acpi_bus_get_status);
134 
acpi_bus_private_data_handler(acpi_handle handle,void * context)135 void acpi_bus_private_data_handler(acpi_handle handle,
136 				   void *context)
137 {
138 	return;
139 }
140 EXPORT_SYMBOL(acpi_bus_private_data_handler);
141 
acpi_bus_attach_private_data(acpi_handle handle,void * data)142 int acpi_bus_attach_private_data(acpi_handle handle, void *data)
143 {
144 	acpi_status status;
145 
146 	status = acpi_attach_data(handle,
147 			acpi_bus_private_data_handler, data);
148 	if (ACPI_FAILURE(status)) {
149 		acpi_handle_debug(handle, "Error attaching device data\n");
150 		return -ENODEV;
151 	}
152 
153 	return 0;
154 }
155 EXPORT_SYMBOL_GPL(acpi_bus_attach_private_data);
156 
acpi_bus_get_private_data(acpi_handle handle,void ** data)157 int acpi_bus_get_private_data(acpi_handle handle, void **data)
158 {
159 	acpi_status status;
160 
161 	if (!*data)
162 		return -EINVAL;
163 
164 	status = acpi_get_data(handle, acpi_bus_private_data_handler, data);
165 	if (ACPI_FAILURE(status)) {
166 		acpi_handle_debug(handle, "No context for object\n");
167 		return -ENODEV;
168 	}
169 
170 	return 0;
171 }
172 EXPORT_SYMBOL_GPL(acpi_bus_get_private_data);
173 
acpi_bus_detach_private_data(acpi_handle handle)174 void acpi_bus_detach_private_data(acpi_handle handle)
175 {
176 	acpi_detach_data(handle, acpi_bus_private_data_handler);
177 }
178 EXPORT_SYMBOL_GPL(acpi_bus_detach_private_data);
179 
acpi_print_osc_error(acpi_handle handle,struct acpi_osc_context * context,char * error)180 static void acpi_print_osc_error(acpi_handle handle,
181 				 struct acpi_osc_context *context, char *error)
182 {
183 	int i;
184 
185 	acpi_handle_debug(handle, "(%s): %s\n", context->uuid_str, error);
186 
187 	pr_debug("_OSC request data:");
188 	for (i = 0; i < context->cap.length; i += sizeof(u32))
189 		pr_debug(" %x", *((u32 *)(context->cap.pointer + i)));
190 
191 	pr_debug("\n");
192 }
193 
acpi_str_to_uuid(char * str,u8 * uuid)194 acpi_status acpi_str_to_uuid(char *str, u8 *uuid)
195 {
196 	int i;
197 	static int opc_map_to_uuid[16] = {6, 4, 2, 0, 11, 9, 16, 14, 19, 21,
198 		24, 26, 28, 30, 32, 34};
199 
200 	if (strlen(str) != 36)
201 		return AE_BAD_PARAMETER;
202 	for (i = 0; i < 36; i++) {
203 		if (i == 8 || i == 13 || i == 18 || i == 23) {
204 			if (str[i] != '-')
205 				return AE_BAD_PARAMETER;
206 		} else if (!isxdigit(str[i]))
207 			return AE_BAD_PARAMETER;
208 	}
209 	for (i = 0; i < 16; i++) {
210 		uuid[i] = hex_to_bin(str[opc_map_to_uuid[i]]) << 4;
211 		uuid[i] |= hex_to_bin(str[opc_map_to_uuid[i] + 1]);
212 	}
213 	return AE_OK;
214 }
215 EXPORT_SYMBOL_GPL(acpi_str_to_uuid);
216 
acpi_run_osc(acpi_handle handle,struct acpi_osc_context * context)217 acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context)
218 {
219 	acpi_status status;
220 	struct acpi_object_list input;
221 	union acpi_object in_params[4];
222 	union acpi_object *out_obj;
223 	u8 uuid[16];
224 	u32 errors;
225 	struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL};
226 
227 	if (!context)
228 		return AE_ERROR;
229 	if (ACPI_FAILURE(acpi_str_to_uuid(context->uuid_str, uuid)))
230 		return AE_ERROR;
231 	context->ret.length = ACPI_ALLOCATE_BUFFER;
232 	context->ret.pointer = NULL;
233 
234 	/* Setting up input parameters */
235 	input.count = 4;
236 	input.pointer = in_params;
237 	in_params[0].type 		= ACPI_TYPE_BUFFER;
238 	in_params[0].buffer.length 	= 16;
239 	in_params[0].buffer.pointer	= uuid;
240 	in_params[1].type 		= ACPI_TYPE_INTEGER;
241 	in_params[1].integer.value 	= context->rev;
242 	in_params[2].type 		= ACPI_TYPE_INTEGER;
243 	in_params[2].integer.value	= context->cap.length/sizeof(u32);
244 	in_params[3].type		= ACPI_TYPE_BUFFER;
245 	in_params[3].buffer.length 	= context->cap.length;
246 	in_params[3].buffer.pointer 	= context->cap.pointer;
247 
248 	status = acpi_evaluate_object(handle, "_OSC", &input, &output);
249 	if (ACPI_FAILURE(status))
250 		return status;
251 
252 	if (!output.length)
253 		return AE_NULL_OBJECT;
254 
255 	out_obj = output.pointer;
256 	if (out_obj->type != ACPI_TYPE_BUFFER
257 		|| out_obj->buffer.length != context->cap.length) {
258 		acpi_print_osc_error(handle, context,
259 			"_OSC evaluation returned wrong type");
260 		status = AE_TYPE;
261 		goto out_kfree;
262 	}
263 	/* Need to ignore the bit0 in result code */
264 	errors = *((u32 *)out_obj->buffer.pointer) & ~(1 << 0);
265 	if (errors) {
266 		if (errors & OSC_REQUEST_ERROR)
267 			acpi_print_osc_error(handle, context,
268 				"_OSC request failed");
269 		if (errors & OSC_INVALID_UUID_ERROR)
270 			acpi_print_osc_error(handle, context,
271 				"_OSC invalid UUID");
272 		if (errors & OSC_INVALID_REVISION_ERROR)
273 			acpi_print_osc_error(handle, context,
274 				"_OSC invalid revision");
275 		if (errors & OSC_CAPABILITIES_MASK_ERROR) {
276 			if (((u32 *)context->cap.pointer)[OSC_QUERY_DWORD]
277 			    & OSC_QUERY_ENABLE)
278 				goto out_success;
279 			status = AE_SUPPORT;
280 			goto out_kfree;
281 		}
282 		status = AE_ERROR;
283 		goto out_kfree;
284 	}
285 out_success:
286 	context->ret.length = out_obj->buffer.length;
287 	context->ret.pointer = kmemdup(out_obj->buffer.pointer,
288 				       context->ret.length, GFP_KERNEL);
289 	if (!context->ret.pointer) {
290 		status =  AE_NO_MEMORY;
291 		goto out_kfree;
292 	}
293 	status =  AE_OK;
294 
295 out_kfree:
296 	kfree(output.pointer);
297 	if (status != AE_OK)
298 		context->ret.pointer = NULL;
299 	return status;
300 }
301 EXPORT_SYMBOL(acpi_run_osc);
302 
303 bool osc_sb_apei_support_acked;
304 
305 /*
306  * ACPI 6.0 Section 8.4.4.2 Idle State Coordination
307  * OSPM supports platform coordinated low power idle(LPI) states
308  */
309 bool osc_pc_lpi_support_confirmed;
310 EXPORT_SYMBOL_GPL(osc_pc_lpi_support_confirmed);
311 
312 static u8 sb_uuid_str[] = "0811B06E-4A27-44F9-8D60-3CBBC22E7B48";
acpi_bus_osc_support(void)313 static void acpi_bus_osc_support(void)
314 {
315 	u32 capbuf[2];
316 	struct acpi_osc_context context = {
317 		.uuid_str = sb_uuid_str,
318 		.rev = 1,
319 		.cap.length = 8,
320 		.cap.pointer = capbuf,
321 	};
322 	acpi_handle handle;
323 
324 	capbuf[OSC_QUERY_DWORD] = OSC_QUERY_ENABLE;
325 	capbuf[OSC_SUPPORT_DWORD] = OSC_SB_PR3_SUPPORT; /* _PR3 is in use */
326 	if (IS_ENABLED(CONFIG_ACPI_PROCESSOR_AGGREGATOR))
327 		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PAD_SUPPORT;
328 	if (IS_ENABLED(CONFIG_ACPI_PROCESSOR))
329 		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PPC_OST_SUPPORT;
330 
331 	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_HOTPLUG_OST_SUPPORT;
332 	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PCLPI_SUPPORT;
333 
334 	if (!ghes_disable)
335 		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_APEI_SUPPORT;
336 	if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle)))
337 		return;
338 	if (ACPI_SUCCESS(acpi_run_osc(handle, &context))) {
339 		u32 *capbuf_ret = context.ret.pointer;
340 		if (context.ret.length > OSC_SUPPORT_DWORD) {
341 			osc_sb_apei_support_acked =
342 				capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_APEI_SUPPORT;
343 			osc_pc_lpi_support_confirmed =
344 				capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_PCLPI_SUPPORT;
345 		}
346 		kfree(context.ret.pointer);
347 	}
348 	/* do we need to check other returned cap? Sounds no */
349 }
350 
351 /* --------------------------------------------------------------------------
352                              Notification Handling
353    -------------------------------------------------------------------------- */
354 
355 /**
356  * acpi_bus_notify
357  * ---------------
358  * Callback for all 'system-level' device notifications (values 0x00-0x7F).
359  */
acpi_bus_notify(acpi_handle handle,u32 type,void * data)360 static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
361 {
362 	struct acpi_device *adev;
363 	struct acpi_driver *driver;
364 	u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
365 	bool hotplug_event = false;
366 
367 	switch (type) {
368 	case ACPI_NOTIFY_BUS_CHECK:
369 		acpi_handle_debug(handle, "ACPI_NOTIFY_BUS_CHECK event\n");
370 		hotplug_event = true;
371 		break;
372 
373 	case ACPI_NOTIFY_DEVICE_CHECK:
374 		acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_CHECK event\n");
375 		hotplug_event = true;
376 		break;
377 
378 	case ACPI_NOTIFY_DEVICE_WAKE:
379 		acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_WAKE event\n");
380 		break;
381 
382 	case ACPI_NOTIFY_EJECT_REQUEST:
383 		acpi_handle_debug(handle, "ACPI_NOTIFY_EJECT_REQUEST event\n");
384 		hotplug_event = true;
385 		break;
386 
387 	case ACPI_NOTIFY_DEVICE_CHECK_LIGHT:
388 		acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_CHECK_LIGHT event\n");
389 		/* TBD: Exactly what does 'light' mean? */
390 		break;
391 
392 	case ACPI_NOTIFY_FREQUENCY_MISMATCH:
393 		acpi_handle_err(handle, "Device cannot be configured due "
394 				"to a frequency mismatch\n");
395 		break;
396 
397 	case ACPI_NOTIFY_BUS_MODE_MISMATCH:
398 		acpi_handle_err(handle, "Device cannot be configured due "
399 				"to a bus mode mismatch\n");
400 		break;
401 
402 	case ACPI_NOTIFY_POWER_FAULT:
403 		acpi_handle_err(handle, "Device has suffered a power fault\n");
404 		break;
405 
406 	default:
407 		acpi_handle_debug(handle, "Unknown event type 0x%x\n", type);
408 		break;
409 	}
410 
411 	adev = acpi_bus_get_acpi_device(handle);
412 	if (!adev)
413 		goto err;
414 
415 	driver = adev->driver;
416 	if (driver && driver->ops.notify &&
417 	    (driver->flags & ACPI_DRIVER_ALL_NOTIFY_EVENTS))
418 		driver->ops.notify(adev, type);
419 
420 	if (hotplug_event && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
421 		return;
422 
423 	acpi_bus_put_acpi_device(adev);
424 	return;
425 
426  err:
427 	acpi_evaluate_ost(handle, type, ost_code, NULL);
428 }
429 
acpi_device_notify(acpi_handle handle,u32 event,void * data)430 static void acpi_device_notify(acpi_handle handle, u32 event, void *data)
431 {
432 	struct acpi_device *device = data;
433 
434 	device->driver->ops.notify(device, event);
435 }
436 
acpi_device_notify_fixed(void * data)437 static void acpi_device_notify_fixed(void *data)
438 {
439 	struct acpi_device *device = data;
440 
441 	/* Fixed hardware devices have no handles */
442 	acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device);
443 }
444 
acpi_device_fixed_event(void * data)445 static u32 acpi_device_fixed_event(void *data)
446 {
447 	acpi_os_execute(OSL_NOTIFY_HANDLER, acpi_device_notify_fixed, data);
448 	return ACPI_INTERRUPT_HANDLED;
449 }
450 
acpi_device_install_notify_handler(struct acpi_device * device)451 static int acpi_device_install_notify_handler(struct acpi_device *device)
452 {
453 	acpi_status status;
454 
455 	if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
456 		status =
457 		    acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
458 						     acpi_device_fixed_event,
459 						     device);
460 	else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
461 		status =
462 		    acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
463 						     acpi_device_fixed_event,
464 						     device);
465 	else
466 		status = acpi_install_notify_handler(device->handle,
467 						     ACPI_DEVICE_NOTIFY,
468 						     acpi_device_notify,
469 						     device);
470 
471 	if (ACPI_FAILURE(status))
472 		return -EINVAL;
473 	return 0;
474 }
475 
acpi_device_remove_notify_handler(struct acpi_device * device)476 static void acpi_device_remove_notify_handler(struct acpi_device *device)
477 {
478 	if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
479 		acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
480 						acpi_device_fixed_event);
481 	else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
482 		acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
483 						acpi_device_fixed_event);
484 	else
485 		acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
486 					   acpi_device_notify);
487 }
488 
489 /* Handle events targeting \_SB device (at present only graceful shutdown) */
490 
491 #define ACPI_SB_NOTIFY_SHUTDOWN_REQUEST 0x81
492 #define ACPI_SB_INDICATE_INTERVAL	10000
493 
sb_notify_work(struct work_struct * dummy)494 static void sb_notify_work(struct work_struct *dummy)
495 {
496 	acpi_handle sb_handle;
497 
498 	orderly_poweroff(true);
499 
500 	/*
501 	 * After initiating graceful shutdown, the ACPI spec requires OSPM
502 	 * to evaluate _OST method once every 10seconds to indicate that
503 	 * the shutdown is in progress
504 	 */
505 	acpi_get_handle(NULL, "\\_SB", &sb_handle);
506 	while (1) {
507 		pr_info("Graceful shutdown in progress.\n");
508 		acpi_evaluate_ost(sb_handle, ACPI_OST_EC_OSPM_SHUTDOWN,
509 				ACPI_OST_SC_OS_SHUTDOWN_IN_PROGRESS, NULL);
510 		msleep(ACPI_SB_INDICATE_INTERVAL);
511 	}
512 }
513 
acpi_sb_notify(acpi_handle handle,u32 event,void * data)514 static void acpi_sb_notify(acpi_handle handle, u32 event, void *data)
515 {
516 	static DECLARE_WORK(acpi_sb_work, sb_notify_work);
517 
518 	if (event == ACPI_SB_NOTIFY_SHUTDOWN_REQUEST) {
519 		if (!work_busy(&acpi_sb_work))
520 			schedule_work(&acpi_sb_work);
521 	} else
522 		pr_warn("event %x is not supported by \\_SB device\n", event);
523 }
524 
acpi_setup_sb_notify_handler(void)525 static int __init acpi_setup_sb_notify_handler(void)
526 {
527 	acpi_handle sb_handle;
528 
529 	if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &sb_handle)))
530 		return -ENXIO;
531 
532 	if (ACPI_FAILURE(acpi_install_notify_handler(sb_handle, ACPI_DEVICE_NOTIFY,
533 						acpi_sb_notify, NULL)))
534 		return -EINVAL;
535 
536 	return 0;
537 }
538 
539 /* --------------------------------------------------------------------------
540                              Device Matching
541    -------------------------------------------------------------------------- */
542 
543 /**
544  * acpi_get_first_physical_node - Get first physical node of an ACPI device
545  * @adev:	ACPI device in question
546  *
547  * Return: First physical node of ACPI device @adev
548  */
acpi_get_first_physical_node(struct acpi_device * adev)549 struct device *acpi_get_first_physical_node(struct acpi_device *adev)
550 {
551 	struct mutex *physical_node_lock = &adev->physical_node_lock;
552 	struct device *phys_dev;
553 
554 	mutex_lock(physical_node_lock);
555 	if (list_empty(&adev->physical_node_list)) {
556 		phys_dev = NULL;
557 	} else {
558 		const struct acpi_device_physical_node *node;
559 
560 		node = list_first_entry(&adev->physical_node_list,
561 					struct acpi_device_physical_node, node);
562 
563 		phys_dev = node->dev;
564 	}
565 	mutex_unlock(physical_node_lock);
566 	return phys_dev;
567 }
568 
acpi_primary_dev_companion(struct acpi_device * adev,const struct device * dev)569 static struct acpi_device *acpi_primary_dev_companion(struct acpi_device *adev,
570 						      const struct device *dev)
571 {
572 	const struct device *phys_dev = acpi_get_first_physical_node(adev);
573 
574 	return phys_dev && phys_dev == dev ? adev : NULL;
575 }
576 
577 /**
578  * acpi_device_is_first_physical_node - Is given dev first physical node
579  * @adev: ACPI companion device
580  * @dev: Physical device to check
581  *
582  * Function checks if given @dev is the first physical devices attached to
583  * the ACPI companion device. This distinction is needed in some cases
584  * where the same companion device is shared between many physical devices.
585  *
586  * Note that the caller have to provide valid @adev pointer.
587  */
acpi_device_is_first_physical_node(struct acpi_device * adev,const struct device * dev)588 bool acpi_device_is_first_physical_node(struct acpi_device *adev,
589 					const struct device *dev)
590 {
591 	return !!acpi_primary_dev_companion(adev, dev);
592 }
593 
594 /*
595  * acpi_companion_match() - Can we match via ACPI companion device
596  * @dev: Device in question
597  *
598  * Check if the given device has an ACPI companion and if that companion has
599  * a valid list of PNP IDs, and if the device is the first (primary) physical
600  * device associated with it.  Return the companion pointer if that's the case
601  * or NULL otherwise.
602  *
603  * If multiple physical devices are attached to a single ACPI companion, we need
604  * to be careful.  The usage scenario for this kind of relationship is that all
605  * of the physical devices in question use resources provided by the ACPI
606  * companion.  A typical case is an MFD device where all the sub-devices share
607  * the parent's ACPI companion.  In such cases we can only allow the primary
608  * (first) physical device to be matched with the help of the companion's PNP
609  * IDs.
610  *
611  * Additional physical devices sharing the ACPI companion can still use
612  * resources available from it but they will be matched normally using functions
613  * provided by their bus types (and analogously for their modalias).
614  */
acpi_companion_match(const struct device * dev)615 struct acpi_device *acpi_companion_match(const struct device *dev)
616 {
617 	struct acpi_device *adev;
618 
619 	adev = ACPI_COMPANION(dev);
620 	if (!adev)
621 		return NULL;
622 
623 	if (list_empty(&adev->pnp.ids))
624 		return NULL;
625 
626 	return acpi_primary_dev_companion(adev, dev);
627 }
628 
629 /**
630  * acpi_of_match_device - Match device object using the "compatible" property.
631  * @adev: ACPI device object to match.
632  * @of_match_table: List of device IDs to match against.
633  *
634  * If @dev has an ACPI companion which has ACPI_DT_NAMESPACE_HID in its list of
635  * identifiers and a _DSD object with the "compatible" property, use that
636  * property to match against the given list of identifiers.
637  */
acpi_of_match_device(struct acpi_device * adev,const struct of_device_id * of_match_table)638 static bool acpi_of_match_device(struct acpi_device *adev,
639 				 const struct of_device_id *of_match_table)
640 {
641 	const union acpi_object *of_compatible, *obj;
642 	int i, nval;
643 
644 	if (!adev)
645 		return false;
646 
647 	of_compatible = adev->data.of_compatible;
648 	if (!of_match_table || !of_compatible)
649 		return false;
650 
651 	if (of_compatible->type == ACPI_TYPE_PACKAGE) {
652 		nval = of_compatible->package.count;
653 		obj = of_compatible->package.elements;
654 	} else { /* Must be ACPI_TYPE_STRING. */
655 		nval = 1;
656 		obj = of_compatible;
657 	}
658 	/* Now we can look for the driver DT compatible strings */
659 	for (i = 0; i < nval; i++, obj++) {
660 		const struct of_device_id *id;
661 
662 		for (id = of_match_table; id->compatible[0]; id++)
663 			if (!strcasecmp(obj->string.pointer, id->compatible))
664 				return true;
665 	}
666 
667 	return false;
668 }
669 
__acpi_match_device_cls(const struct acpi_device_id * id,struct acpi_hardware_id * hwid)670 static bool __acpi_match_device_cls(const struct acpi_device_id *id,
671 				    struct acpi_hardware_id *hwid)
672 {
673 	int i, msk, byte_shift;
674 	char buf[3];
675 
676 	if (!id->cls)
677 		return false;
678 
679 	/* Apply class-code bitmask, before checking each class-code byte */
680 	for (i = 1; i <= 3; i++) {
681 		byte_shift = 8 * (3 - i);
682 		msk = (id->cls_msk >> byte_shift) & 0xFF;
683 		if (!msk)
684 			continue;
685 
686 		sprintf(buf, "%02x", (id->cls >> byte_shift) & msk);
687 		if (strncmp(buf, &hwid->id[(i - 1) * 2], 2))
688 			return false;
689 	}
690 	return true;
691 }
692 
__acpi_match_device(struct acpi_device * device,const struct acpi_device_id * ids,const struct of_device_id * of_ids)693 static const struct acpi_device_id *__acpi_match_device(
694 	struct acpi_device *device,
695 	const struct acpi_device_id *ids,
696 	const struct of_device_id *of_ids)
697 {
698 	const struct acpi_device_id *id;
699 	struct acpi_hardware_id *hwid;
700 
701 	/*
702 	 * If the device is not present, it is unnecessary to load device
703 	 * driver for it.
704 	 */
705 	if (!device || !device->status.present)
706 		return NULL;
707 
708 	list_for_each_entry(hwid, &device->pnp.ids, list) {
709 		/* First, check the ACPI/PNP IDs provided by the caller. */
710 		for (id = ids; id->id[0] || id->cls; id++) {
711 			if (id->id[0] && !strcmp((char *) id->id, hwid->id))
712 				return id;
713 			else if (id->cls && __acpi_match_device_cls(id, hwid))
714 				return id;
715 		}
716 
717 		/*
718 		 * Next, check ACPI_DT_NAMESPACE_HID and try to match the
719 		 * "compatible" property if found.
720 		 *
721 		 * The id returned by the below is not valid, but the only
722 		 * caller passing non-NULL of_ids here is only interested in
723 		 * whether or not the return value is NULL.
724 		 */
725 		if (!strcmp(ACPI_DT_NAMESPACE_HID, hwid->id)
726 		    && acpi_of_match_device(device, of_ids))
727 			return id;
728 	}
729 	return NULL;
730 }
731 
732 /**
733  * acpi_match_device - Match a struct device against a given list of ACPI IDs
734  * @ids: Array of struct acpi_device_id object to match against.
735  * @dev: The device structure to match.
736  *
737  * Check if @dev has a valid ACPI handle and if there is a struct acpi_device
738  * object for that handle and use that object to match against a given list of
739  * device IDs.
740  *
741  * Return a pointer to the first matching ID on success or %NULL on failure.
742  */
acpi_match_device(const struct acpi_device_id * ids,const struct device * dev)743 const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
744 					       const struct device *dev)
745 {
746 	return __acpi_match_device(acpi_companion_match(dev), ids, NULL);
747 }
748 EXPORT_SYMBOL_GPL(acpi_match_device);
749 
acpi_match_device_ids(struct acpi_device * device,const struct acpi_device_id * ids)750 int acpi_match_device_ids(struct acpi_device *device,
751 			  const struct acpi_device_id *ids)
752 {
753 	return __acpi_match_device(device, ids, NULL) ? 0 : -ENOENT;
754 }
755 EXPORT_SYMBOL(acpi_match_device_ids);
756 
acpi_driver_match_device(struct device * dev,const struct device_driver * drv)757 bool acpi_driver_match_device(struct device *dev,
758 			      const struct device_driver *drv)
759 {
760 	if (!drv->acpi_match_table)
761 		return acpi_of_match_device(ACPI_COMPANION(dev),
762 					    drv->of_match_table);
763 
764 	return !!__acpi_match_device(acpi_companion_match(dev),
765 				     drv->acpi_match_table, drv->of_match_table);
766 }
767 EXPORT_SYMBOL_GPL(acpi_driver_match_device);
768 
769 /* --------------------------------------------------------------------------
770                               ACPI Driver Management
771    -------------------------------------------------------------------------- */
772 
773 /**
774  * acpi_bus_register_driver - register a driver with the ACPI bus
775  * @driver: driver being registered
776  *
777  * Registers a driver with the ACPI bus.  Searches the namespace for all
778  * devices that match the driver's criteria and binds.  Returns zero for
779  * success or a negative error status for failure.
780  */
acpi_bus_register_driver(struct acpi_driver * driver)781 int acpi_bus_register_driver(struct acpi_driver *driver)
782 {
783 	int ret;
784 
785 	if (acpi_disabled)
786 		return -ENODEV;
787 	driver->drv.name = driver->name;
788 	driver->drv.bus = &acpi_bus_type;
789 	driver->drv.owner = driver->owner;
790 
791 	ret = driver_register(&driver->drv);
792 	return ret;
793 }
794 
795 EXPORT_SYMBOL(acpi_bus_register_driver);
796 
797 /**
798  * acpi_bus_unregister_driver - unregisters a driver with the ACPI bus
799  * @driver: driver to unregister
800  *
801  * Unregisters a driver with the ACPI bus.  Searches the namespace for all
802  * devices that match the driver's criteria and unbinds.
803  */
acpi_bus_unregister_driver(struct acpi_driver * driver)804 void acpi_bus_unregister_driver(struct acpi_driver *driver)
805 {
806 	driver_unregister(&driver->drv);
807 }
808 
809 EXPORT_SYMBOL(acpi_bus_unregister_driver);
810 
811 /* --------------------------------------------------------------------------
812                               ACPI Bus operations
813    -------------------------------------------------------------------------- */
814 
acpi_bus_match(struct device * dev,struct device_driver * drv)815 static int acpi_bus_match(struct device *dev, struct device_driver *drv)
816 {
817 	struct acpi_device *acpi_dev = to_acpi_device(dev);
818 	struct acpi_driver *acpi_drv = to_acpi_driver(drv);
819 
820 	return acpi_dev->flags.match_driver
821 		&& !acpi_match_device_ids(acpi_dev, acpi_drv->ids);
822 }
823 
acpi_device_uevent(struct device * dev,struct kobj_uevent_env * env)824 static int acpi_device_uevent(struct device *dev, struct kobj_uevent_env *env)
825 {
826 	return __acpi_device_uevent_modalias(to_acpi_device(dev), env);
827 }
828 
acpi_device_probe(struct device * dev)829 static int acpi_device_probe(struct device *dev)
830 {
831 	struct acpi_device *acpi_dev = to_acpi_device(dev);
832 	struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver);
833 	int ret;
834 
835 	if (acpi_dev->handler && !acpi_is_pnp_device(acpi_dev))
836 		return -EINVAL;
837 
838 	if (!acpi_drv->ops.add)
839 		return -ENOSYS;
840 
841 	ret = acpi_drv->ops.add(acpi_dev);
842 	if (ret)
843 		return ret;
844 
845 	acpi_dev->driver = acpi_drv;
846 	ACPI_DEBUG_PRINT((ACPI_DB_INFO,
847 			  "Driver [%s] successfully bound to device [%s]\n",
848 			  acpi_drv->name, acpi_dev->pnp.bus_id));
849 
850 	if (acpi_drv->ops.notify) {
851 		ret = acpi_device_install_notify_handler(acpi_dev);
852 		if (ret) {
853 			if (acpi_drv->ops.remove)
854 				acpi_drv->ops.remove(acpi_dev);
855 
856 			acpi_dev->driver = NULL;
857 			acpi_dev->driver_data = NULL;
858 			return ret;
859 		}
860 	}
861 
862 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found driver [%s] for device [%s]\n",
863 			  acpi_drv->name, acpi_dev->pnp.bus_id));
864 	get_device(dev);
865 	return 0;
866 }
867 
acpi_device_remove(struct device * dev)868 static int acpi_device_remove(struct device * dev)
869 {
870 	struct acpi_device *acpi_dev = to_acpi_device(dev);
871 	struct acpi_driver *acpi_drv = acpi_dev->driver;
872 
873 	if (acpi_drv) {
874 		if (acpi_drv->ops.notify)
875 			acpi_device_remove_notify_handler(acpi_dev);
876 		if (acpi_drv->ops.remove)
877 			acpi_drv->ops.remove(acpi_dev);
878 	}
879 	acpi_dev->driver = NULL;
880 	acpi_dev->driver_data = NULL;
881 
882 	put_device(dev);
883 	return 0;
884 }
885 
886 struct bus_type acpi_bus_type = {
887 	.name		= "acpi",
888 	.match		= acpi_bus_match,
889 	.probe		= acpi_device_probe,
890 	.remove		= acpi_device_remove,
891 	.uevent		= acpi_device_uevent,
892 };
893 
894 /* --------------------------------------------------------------------------
895                              Initialization/Cleanup
896    -------------------------------------------------------------------------- */
897 
acpi_bus_init_irq(void)898 static int __init acpi_bus_init_irq(void)
899 {
900 	acpi_status status;
901 	char *message = NULL;
902 
903 
904 	/*
905 	 * Let the system know what interrupt model we are using by
906 	 * evaluating the \_PIC object, if exists.
907 	 */
908 
909 	switch (acpi_irq_model) {
910 	case ACPI_IRQ_MODEL_PIC:
911 		message = "PIC";
912 		break;
913 	case ACPI_IRQ_MODEL_IOAPIC:
914 		message = "IOAPIC";
915 		break;
916 	case ACPI_IRQ_MODEL_IOSAPIC:
917 		message = "IOSAPIC";
918 		break;
919 	case ACPI_IRQ_MODEL_GIC:
920 		message = "GIC";
921 		break;
922 	case ACPI_IRQ_MODEL_PLATFORM:
923 		message = "platform specific model";
924 		break;
925 	default:
926 		printk(KERN_WARNING PREFIX "Unknown interrupt routing model\n");
927 		return -ENODEV;
928 	}
929 
930 	printk(KERN_INFO PREFIX "Using %s for interrupt routing\n", message);
931 
932 	status = acpi_execute_simple_method(NULL, "\\_PIC", acpi_irq_model);
933 	if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
934 		ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PIC"));
935 		return -ENODEV;
936 	}
937 
938 	return 0;
939 }
940 
941 /**
942  * acpi_early_init - Initialize ACPICA and populate the ACPI namespace.
943  *
944  * The ACPI tables are accessible after this, but the handling of events has not
945  * been initialized and the global lock is not available yet, so AML should not
946  * be executed at this point.
947  *
948  * Doing this before switching the EFI runtime services to virtual mode allows
949  * the EfiBootServices memory to be freed slightly earlier on boot.
950  */
acpi_early_init(void)951 void __init acpi_early_init(void)
952 {
953 	acpi_status status;
954 
955 	if (acpi_disabled)
956 		return;
957 
958 	printk(KERN_INFO PREFIX "Core revision %08x\n", ACPI_CA_VERSION);
959 
960 	/* It's safe to verify table checksums during late stage */
961 	acpi_gbl_verify_table_checksum = TRUE;
962 
963 	/* enable workarounds, unless strict ACPI spec. compliance */
964 	if (!acpi_strict)
965 		acpi_gbl_enable_interpreter_slack = TRUE;
966 
967 	acpi_gbl_permanent_mmap = 1;
968 
969 	/*
970 	 * If the machine falls into the DMI check table,
971 	 * DSDT will be copied to memory
972 	 */
973 	dmi_check_system(dsdt_dmi_table);
974 
975 	status = acpi_reallocate_root_table();
976 	if (ACPI_FAILURE(status)) {
977 		printk(KERN_ERR PREFIX
978 		       "Unable to reallocate ACPI tables\n");
979 		goto error0;
980 	}
981 
982 	status = acpi_initialize_subsystem();
983 	if (ACPI_FAILURE(status)) {
984 		printk(KERN_ERR PREFIX
985 		       "Unable to initialize the ACPI Interpreter\n");
986 		goto error0;
987 	}
988 
989 	if (!acpi_gbl_parse_table_as_term_list &&
990 	    acpi_gbl_group_module_level_code) {
991 		status = acpi_load_tables();
992 		if (ACPI_FAILURE(status)) {
993 			printk(KERN_ERR PREFIX
994 			       "Unable to load the System Description Tables\n");
995 			goto error0;
996 		}
997 	}
998 
999 #ifdef CONFIG_X86
1000 	if (!acpi_ioapic) {
1001 		/* compatible (0) means level (3) */
1002 		if (!(acpi_sci_flags & ACPI_MADT_TRIGGER_MASK)) {
1003 			acpi_sci_flags &= ~ACPI_MADT_TRIGGER_MASK;
1004 			acpi_sci_flags |= ACPI_MADT_TRIGGER_LEVEL;
1005 		}
1006 		/* Set PIC-mode SCI trigger type */
1007 		acpi_pic_sci_set_trigger(acpi_gbl_FADT.sci_interrupt,
1008 					 (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) >> 2);
1009 	} else {
1010 		/*
1011 		 * now that acpi_gbl_FADT is initialized,
1012 		 * update it with result from INT_SRC_OVR parsing
1013 		 */
1014 		acpi_gbl_FADT.sci_interrupt = acpi_sci_override_gsi;
1015 	}
1016 #endif
1017 	return;
1018 
1019  error0:
1020 	disable_acpi();
1021 }
1022 
1023 /**
1024  * acpi_subsystem_init - Finalize the early initialization of ACPI.
1025  *
1026  * Switch over the platform to the ACPI mode (if possible).
1027  *
1028  * Doing this too early is generally unsafe, but at the same time it needs to be
1029  * done before all things that really depend on ACPI.  The right spot appears to
1030  * be before finalizing the EFI initialization.
1031  */
acpi_subsystem_init(void)1032 void __init acpi_subsystem_init(void)
1033 {
1034 	acpi_status status;
1035 
1036 	if (acpi_disabled)
1037 		return;
1038 
1039 	status = acpi_enable_subsystem(~ACPI_NO_ACPI_ENABLE);
1040 	if (ACPI_FAILURE(status)) {
1041 		printk(KERN_ERR PREFIX "Unable to enable ACPI\n");
1042 		disable_acpi();
1043 	} else {
1044 		/*
1045 		 * If the system is using ACPI then we can be reasonably
1046 		 * confident that any regulators are managed by the firmware
1047 		 * so tell the regulator core it has everything it needs to
1048 		 * know.
1049 		 */
1050 		regulator_has_full_constraints();
1051 	}
1052 }
1053 
acpi_bus_table_handler(u32 event,void * table,void * context)1054 static acpi_status acpi_bus_table_handler(u32 event, void *table, void *context)
1055 {
1056 	acpi_scan_table_handler(event, table, context);
1057 
1058 	return acpi_sysfs_table_handler(event, table, context);
1059 }
1060 
acpi_bus_init(void)1061 static int __init acpi_bus_init(void)
1062 {
1063 	int result;
1064 	acpi_status status;
1065 
1066 	acpi_os_initialize1();
1067 
1068 	/*
1069 	 * ACPI 2.0 requires the EC driver to be loaded and work before
1070 	 * the EC device is found in the namespace (i.e. before
1071 	 * acpi_load_tables() is called).
1072 	 *
1073 	 * This is accomplished by looking for the ECDT table, and getting
1074 	 * the EC parameters out of that.
1075 	 */
1076 	status = acpi_ec_ecdt_probe();
1077 	/* Ignore result. Not having an ECDT is not fatal. */
1078 
1079 	if (acpi_gbl_parse_table_as_term_list ||
1080 	    !acpi_gbl_group_module_level_code) {
1081 		status = acpi_load_tables();
1082 		if (ACPI_FAILURE(status)) {
1083 			printk(KERN_ERR PREFIX
1084 			       "Unable to load the System Description Tables\n");
1085 			goto error1;
1086 		}
1087 	}
1088 
1089 	status = acpi_enable_subsystem(ACPI_NO_ACPI_ENABLE);
1090 	if (ACPI_FAILURE(status)) {
1091 		printk(KERN_ERR PREFIX
1092 		       "Unable to start the ACPI Interpreter\n");
1093 		goto error1;
1094 	}
1095 
1096 	status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION);
1097 	if (ACPI_FAILURE(status)) {
1098 		printk(KERN_ERR PREFIX "Unable to initialize ACPI objects\n");
1099 		goto error1;
1100 	}
1101 
1102 	/* Set capability bits for _OSC under processor scope */
1103 	acpi_early_processor_osc();
1104 
1105 	/*
1106 	 * _OSC method may exist in module level code,
1107 	 * so it must be run after ACPI_FULL_INITIALIZATION
1108 	 */
1109 	acpi_bus_osc_support();
1110 
1111 	/*
1112 	 * _PDC control method may load dynamic SSDT tables,
1113 	 * and we need to install the table handler before that.
1114 	 */
1115 	status = acpi_install_table_handler(acpi_bus_table_handler, NULL);
1116 
1117 	acpi_sysfs_init();
1118 
1119 	acpi_early_processor_set_pdc();
1120 
1121 	/*
1122 	 * Maybe EC region is required at bus_scan/acpi_get_devices. So it
1123 	 * is necessary to enable it as early as possible.
1124 	 */
1125 	acpi_ec_dsdt_probe();
1126 
1127 	printk(KERN_INFO PREFIX "Interpreter enabled\n");
1128 
1129 	/* Initialize sleep structures */
1130 	acpi_sleep_init();
1131 
1132 	/*
1133 	 * Get the system interrupt model and evaluate \_PIC.
1134 	 */
1135 	result = acpi_bus_init_irq();
1136 	if (result)
1137 		goto error1;
1138 
1139 	/*
1140 	 * Register the for all standard device notifications.
1141 	 */
1142 	status =
1143 	    acpi_install_notify_handler(ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY,
1144 					&acpi_bus_notify, NULL);
1145 	if (ACPI_FAILURE(status)) {
1146 		printk(KERN_ERR PREFIX
1147 		       "Unable to register for device notifications\n");
1148 		goto error1;
1149 	}
1150 
1151 	/*
1152 	 * Create the top ACPI proc directory
1153 	 */
1154 	acpi_root_dir = proc_mkdir(ACPI_BUS_FILE_ROOT, NULL);
1155 
1156 	result = bus_register(&acpi_bus_type);
1157 	if (!result)
1158 		return 0;
1159 
1160 	/* Mimic structured exception handling */
1161       error1:
1162 	acpi_terminate();
1163 	return -ENODEV;
1164 }
1165 
1166 struct kobject *acpi_kobj;
1167 EXPORT_SYMBOL_GPL(acpi_kobj);
1168 
acpi_init(void)1169 static int __init acpi_init(void)
1170 {
1171 	int result;
1172 
1173 	if (acpi_disabled) {
1174 		printk(KERN_INFO PREFIX "Interpreter disabled.\n");
1175 		return -ENODEV;
1176 	}
1177 
1178 	acpi_kobj = kobject_create_and_add("acpi", firmware_kobj);
1179 	if (!acpi_kobj) {
1180 		printk(KERN_WARNING "%s: kset create error\n", __func__);
1181 		acpi_kobj = NULL;
1182 	}
1183 
1184 	init_acpi_device_notify();
1185 	result = acpi_bus_init();
1186 	if (result) {
1187 		disable_acpi();
1188 		return result;
1189 	}
1190 
1191 	pci_mmcfg_late_init();
1192 	acpi_iort_init();
1193 	acpi_scan_init();
1194 	acpi_ec_init();
1195 	acpi_debugfs_init();
1196 	acpi_sleep_proc_init();
1197 	acpi_wakeup_device_init();
1198 	acpi_debugger_init();
1199 	acpi_setup_sb_notify_handler();
1200 	return 0;
1201 }
1202 
1203 subsys_initcall(acpi_init);
1204