1  // SPDX-License-Identifier: GPL-2.0-or-later
2  /*
3   *  acpi_bus.c - ACPI Bus Driver ($Revision: 80 $)
4   *
5   *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
6   */
7  
8  #define pr_fmt(fmt) "ACPI: " fmt
9  
10  #include <linux/module.h>
11  #include <linux/init.h>
12  #include <linux/ioport.h>
13  #include <linux/kernel.h>
14  #include <linux/list.h>
15  #include <linux/sched.h>
16  #include <linux/pm.h>
17  #include <linux/device.h>
18  #include <linux/proc_fs.h>
19  #include <linux/acpi.h>
20  #include <linux/slab.h>
21  #include <linux/regulator/machine.h>
22  #include <linux/workqueue.h>
23  #include <linux/reboot.h>
24  #include <linux/delay.h>
25  #ifdef CONFIG_X86
26  #include <asm/mpspec.h>
27  #include <linux/dmi.h>
28  #endif
29  #include <linux/acpi_viot.h>
30  #include <linux/pci.h>
31  #include <acpi/apei.h>
32  #include <linux/suspend.h>
33  #include <linux/prmt.h>
34  
35  #include "internal.h"
36  
37  struct acpi_device *acpi_root;
38  struct proc_dir_entry *acpi_root_dir;
39  EXPORT_SYMBOL(acpi_root_dir);
40  
41  #ifdef CONFIG_X86
42  #ifdef CONFIG_ACPI_CUSTOM_DSDT
set_copy_dsdt(const struct dmi_system_id * id)43  static inline int set_copy_dsdt(const struct dmi_system_id *id)
44  {
45  	return 0;
46  }
47  #else
set_copy_dsdt(const struct dmi_system_id * id)48  static int set_copy_dsdt(const struct dmi_system_id *id)
49  {
50  	pr_notice("%s detected - force copy of DSDT to local memory\n", id->ident);
51  	acpi_gbl_copy_dsdt_locally = 1;
52  	return 0;
53  }
54  #endif
55  
56  static const struct dmi_system_id dsdt_dmi_table[] __initconst = {
57  	/*
58  	 * Invoke DSDT corruption work-around on all Toshiba Satellite.
59  	 * https://bugzilla.kernel.org/show_bug.cgi?id=14679
60  	 */
61  	{
62  	 .callback = set_copy_dsdt,
63  	 .ident = "TOSHIBA Satellite",
64  	 .matches = {
65  		DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
66  		DMI_MATCH(DMI_PRODUCT_NAME, "Satellite"),
67  		},
68  	},
69  	{}
70  };
71  #endif
72  
73  /* --------------------------------------------------------------------------
74                                  Device Management
75     -------------------------------------------------------------------------- */
76  
acpi_bus_get_status_handle(acpi_handle handle,unsigned long long * sta)77  acpi_status acpi_bus_get_status_handle(acpi_handle handle,
78  				       unsigned long long *sta)
79  {
80  	acpi_status status;
81  
82  	status = acpi_evaluate_integer(handle, "_STA", NULL, sta);
83  	if (ACPI_SUCCESS(status))
84  		return AE_OK;
85  
86  	if (status == AE_NOT_FOUND) {
87  		*sta = ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED |
88  		       ACPI_STA_DEVICE_UI      | ACPI_STA_DEVICE_FUNCTIONING;
89  		return AE_OK;
90  	}
91  	return status;
92  }
93  EXPORT_SYMBOL_GPL(acpi_bus_get_status_handle);
94  
acpi_bus_get_status(struct acpi_device * device)95  int acpi_bus_get_status(struct acpi_device *device)
96  {
97  	acpi_status status;
98  	unsigned long long sta;
99  
100  	if (acpi_device_override_status(device, &sta)) {
101  		acpi_set_device_status(device, sta);
102  		return 0;
103  	}
104  
105  	/* Battery devices must have their deps met before calling _STA */
106  	if (acpi_device_is_battery(device) && device->dep_unmet) {
107  		acpi_set_device_status(device, 0);
108  		return 0;
109  	}
110  
111  	status = acpi_bus_get_status_handle(device->handle, &sta);
112  	if (ACPI_FAILURE(status))
113  		return -ENODEV;
114  
115  	if (!device->status.present && device->status.enabled) {
116  		pr_info(FW_BUG "Device [%s] status [%08x]: not present and enabled\n",
117  			device->pnp.bus_id, (u32)sta);
118  		device->status.enabled = 0;
119  		/*
120  		 * The status is clearly invalid, so clear the functional bit as
121  		 * well to avoid attempting to use the device.
122  		 */
123  		device->status.functional = 0;
124  	}
125  
126  	acpi_set_device_status(device, sta);
127  
128  	if (device->status.functional && !device->status.present) {
129  		pr_debug("Device [%s] status [%08x]: functional but not present\n",
130  			 device->pnp.bus_id, (u32)sta);
131  	}
132  
133  	pr_debug("Device [%s] status [%08x]\n", device->pnp.bus_id, (u32)sta);
134  	return 0;
135  }
136  EXPORT_SYMBOL(acpi_bus_get_status);
137  
acpi_bus_private_data_handler(acpi_handle handle,void * context)138  void acpi_bus_private_data_handler(acpi_handle handle,
139  				   void *context)
140  {
141  	return;
142  }
143  EXPORT_SYMBOL(acpi_bus_private_data_handler);
144  
acpi_bus_attach_private_data(acpi_handle handle,void * data)145  int acpi_bus_attach_private_data(acpi_handle handle, void *data)
146  {
147  	acpi_status status;
148  
149  	status = acpi_attach_data(handle,
150  			acpi_bus_private_data_handler, data);
151  	if (ACPI_FAILURE(status)) {
152  		acpi_handle_debug(handle, "Error attaching device data\n");
153  		return -ENODEV;
154  	}
155  
156  	return 0;
157  }
158  EXPORT_SYMBOL_GPL(acpi_bus_attach_private_data);
159  
acpi_bus_get_private_data(acpi_handle handle,void ** data)160  int acpi_bus_get_private_data(acpi_handle handle, void **data)
161  {
162  	acpi_status status;
163  
164  	if (!data)
165  		return -EINVAL;
166  
167  	status = acpi_get_data(handle, acpi_bus_private_data_handler, data);
168  	if (ACPI_FAILURE(status)) {
169  		acpi_handle_debug(handle, "No context for object\n");
170  		return -ENODEV;
171  	}
172  
173  	return 0;
174  }
175  EXPORT_SYMBOL_GPL(acpi_bus_get_private_data);
176  
acpi_bus_detach_private_data(acpi_handle handle)177  void acpi_bus_detach_private_data(acpi_handle handle)
178  {
179  	acpi_detach_data(handle, acpi_bus_private_data_handler);
180  }
181  EXPORT_SYMBOL_GPL(acpi_bus_detach_private_data);
182  
acpi_print_osc_error(acpi_handle handle,struct acpi_osc_context * context,char * error)183  static void acpi_print_osc_error(acpi_handle handle,
184  				 struct acpi_osc_context *context, char *error)
185  {
186  	int i;
187  
188  	acpi_handle_debug(handle, "(%s): %s\n", context->uuid_str, error);
189  
190  	pr_debug("_OSC request data:");
191  	for (i = 0; i < context->cap.length; i += sizeof(u32))
192  		pr_debug(" %x", *((u32 *)(context->cap.pointer + i)));
193  
194  	pr_debug("\n");
195  }
196  
acpi_run_osc(acpi_handle handle,struct acpi_osc_context * context)197  acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context)
198  {
199  	acpi_status status;
200  	struct acpi_object_list input;
201  	union acpi_object in_params[4];
202  	union acpi_object *out_obj;
203  	guid_t guid;
204  	u32 errors;
205  	struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL};
206  
207  	if (!context)
208  		return AE_ERROR;
209  	if (guid_parse(context->uuid_str, &guid))
210  		return AE_ERROR;
211  	context->ret.length = ACPI_ALLOCATE_BUFFER;
212  	context->ret.pointer = NULL;
213  
214  	/* Setting up input parameters */
215  	input.count = 4;
216  	input.pointer = in_params;
217  	in_params[0].type 		= ACPI_TYPE_BUFFER;
218  	in_params[0].buffer.length 	= 16;
219  	in_params[0].buffer.pointer	= (u8 *)&guid;
220  	in_params[1].type 		= ACPI_TYPE_INTEGER;
221  	in_params[1].integer.value 	= context->rev;
222  	in_params[2].type 		= ACPI_TYPE_INTEGER;
223  	in_params[2].integer.value	= context->cap.length/sizeof(u32);
224  	in_params[3].type		= ACPI_TYPE_BUFFER;
225  	in_params[3].buffer.length 	= context->cap.length;
226  	in_params[3].buffer.pointer 	= context->cap.pointer;
227  
228  	status = acpi_evaluate_object(handle, "_OSC", &input, &output);
229  	if (ACPI_FAILURE(status))
230  		return status;
231  
232  	if (!output.length)
233  		return AE_NULL_OBJECT;
234  
235  	out_obj = output.pointer;
236  	if (out_obj->type != ACPI_TYPE_BUFFER
237  		|| out_obj->buffer.length != context->cap.length) {
238  		acpi_print_osc_error(handle, context,
239  			"_OSC evaluation returned wrong type");
240  		status = AE_TYPE;
241  		goto out_kfree;
242  	}
243  	/* Need to ignore the bit0 in result code */
244  	errors = *((u32 *)out_obj->buffer.pointer) & ~(1 << 0);
245  	if (errors) {
246  		if (errors & OSC_REQUEST_ERROR)
247  			acpi_print_osc_error(handle, context,
248  				"_OSC request failed");
249  		if (errors & OSC_INVALID_UUID_ERROR)
250  			acpi_print_osc_error(handle, context,
251  				"_OSC invalid UUID");
252  		if (errors & OSC_INVALID_REVISION_ERROR)
253  			acpi_print_osc_error(handle, context,
254  				"_OSC invalid revision");
255  		if (errors & OSC_CAPABILITIES_MASK_ERROR) {
256  			if (((u32 *)context->cap.pointer)[OSC_QUERY_DWORD]
257  			    & OSC_QUERY_ENABLE)
258  				goto out_success;
259  			status = AE_SUPPORT;
260  			goto out_kfree;
261  		}
262  		status = AE_ERROR;
263  		goto out_kfree;
264  	}
265  out_success:
266  	context->ret.length = out_obj->buffer.length;
267  	context->ret.pointer = kmemdup(out_obj->buffer.pointer,
268  				       context->ret.length, GFP_KERNEL);
269  	if (!context->ret.pointer) {
270  		status =  AE_NO_MEMORY;
271  		goto out_kfree;
272  	}
273  	status =  AE_OK;
274  
275  out_kfree:
276  	kfree(output.pointer);
277  	return status;
278  }
279  EXPORT_SYMBOL(acpi_run_osc);
280  
281  bool osc_sb_apei_support_acked;
282  
283  /*
284   * ACPI 6.0 Section 8.4.4.2 Idle State Coordination
285   * OSPM supports platform coordinated low power idle(LPI) states
286   */
287  bool osc_pc_lpi_support_confirmed;
288  EXPORT_SYMBOL_GPL(osc_pc_lpi_support_confirmed);
289  
290  /*
291   * ACPI 6.2 Section 6.2.11.2 'Platform-Wide OSPM Capabilities':
292   *   Starting with ACPI Specification 6.2, all _CPC registers can be in
293   *   PCC, System Memory, System IO, or Functional Fixed Hardware address
294   *   spaces. OSPM support for this more flexible register space scheme is
295   *   indicated by the “Flexible Address Space for CPPC Registers” _OSC bit.
296   *
297   * Otherwise (cf ACPI 6.1, s8.4.7.1.1.X), _CPC registers must be in:
298   * - PCC or Functional Fixed Hardware address space if defined
299   * - SystemMemory address space (NULL register) if not defined
300   */
301  bool osc_cpc_flexible_adr_space_confirmed;
302  EXPORT_SYMBOL_GPL(osc_cpc_flexible_adr_space_confirmed);
303  
304  /*
305   * ACPI 6.4 Operating System Capabilities for USB.
306   */
307  bool osc_sb_native_usb4_support_confirmed;
308  EXPORT_SYMBOL_GPL(osc_sb_native_usb4_support_confirmed);
309  
310  bool osc_sb_cppc2_support_acked;
311  
312  static u8 sb_uuid_str[] = "0811B06E-4A27-44F9-8D60-3CBBC22E7B48";
acpi_bus_osc_negotiate_platform_control(void)313  static void acpi_bus_osc_negotiate_platform_control(void)
314  {
315  	u32 capbuf[2], *capbuf_ret;
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  	if (IS_ENABLED(CONFIG_ACPI_THERMAL))
331  		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_FAST_THERMAL_SAMPLING_SUPPORT;
332  	if (IS_ENABLED(CONFIG_ACPI_BATTERY))
333  		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_BATTERY_CHARGE_LIMITING_SUPPORT;
334  
335  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_HOTPLUG_OST_SUPPORT;
336  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PCLPI_SUPPORT;
337  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_OVER_16_PSTATES_SUPPORT;
338  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_GED_SUPPORT;
339  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_IRQ_RESOURCE_SOURCE_SUPPORT;
340  	if (IS_ENABLED(CONFIG_ACPI_PRMT))
341  		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PRM_SUPPORT;
342  	if (IS_ENABLED(CONFIG_ACPI_FFH))
343  		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_FFH_OPR_SUPPORT;
344  
345  #ifdef CONFIG_ARM64
346  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_GENERIC_INITIATOR_SUPPORT;
347  #endif
348  #ifdef CONFIG_X86
349  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_GENERIC_INITIATOR_SUPPORT;
350  #endif
351  
352  #ifdef CONFIG_ACPI_CPPC_LIB
353  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPC_SUPPORT;
354  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPCV2_SUPPORT;
355  #endif
356  
357  	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPC_FLEXIBLE_ADR_SPACE;
358  
359  	if (IS_ENABLED(CONFIG_SCHED_MC_PRIO))
360  		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPC_DIVERSE_HIGH_SUPPORT;
361  
362  	if (IS_ENABLED(CONFIG_USB4))
363  		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_NATIVE_USB4_SUPPORT;
364  
365  	if (!ghes_disable)
366  		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_APEI_SUPPORT;
367  	if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle)))
368  		return;
369  
370  	if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
371  		return;
372  
373  	capbuf_ret = context.ret.pointer;
374  	if (context.ret.length <= OSC_SUPPORT_DWORD) {
375  		kfree(context.ret.pointer);
376  		return;
377  	}
378  
379  	/*
380  	 * Now run _OSC again with query flag clear and with the caps
381  	 * supported by both the OS and the platform.
382  	 */
383  	capbuf[OSC_QUERY_DWORD] = 0;
384  	capbuf[OSC_SUPPORT_DWORD] = capbuf_ret[OSC_SUPPORT_DWORD];
385  	kfree(context.ret.pointer);
386  
387  	if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
388  		return;
389  
390  	capbuf_ret = context.ret.pointer;
391  	if (context.ret.length > OSC_SUPPORT_DWORD) {
392  #ifdef CONFIG_ACPI_CPPC_LIB
393  		osc_sb_cppc2_support_acked = capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_CPCV2_SUPPORT;
394  #endif
395  
396  		osc_sb_apei_support_acked =
397  			capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_APEI_SUPPORT;
398  		osc_pc_lpi_support_confirmed =
399  			capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_PCLPI_SUPPORT;
400  		osc_sb_native_usb4_support_confirmed =
401  			capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_NATIVE_USB4_SUPPORT;
402  		osc_cpc_flexible_adr_space_confirmed =
403  			capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_CPC_FLEXIBLE_ADR_SPACE;
404  	}
405  
406  	kfree(context.ret.pointer);
407  }
408  
409  /*
410   * Native control of USB4 capabilities. If any of the tunneling bits is
411   * set it means OS is in control and we use software based connection
412   * manager.
413   */
414  u32 osc_sb_native_usb4_control;
415  EXPORT_SYMBOL_GPL(osc_sb_native_usb4_control);
416  
acpi_bus_decode_usb_osc(const char * msg,u32 bits)417  static void acpi_bus_decode_usb_osc(const char *msg, u32 bits)
418  {
419  	pr_info("%s USB3%c DisplayPort%c PCIe%c XDomain%c\n", msg,
420  	       (bits & OSC_USB_USB3_TUNNELING) ? '+' : '-',
421  	       (bits & OSC_USB_DP_TUNNELING) ? '+' : '-',
422  	       (bits & OSC_USB_PCIE_TUNNELING) ? '+' : '-',
423  	       (bits & OSC_USB_XDOMAIN) ? '+' : '-');
424  }
425  
426  static u8 sb_usb_uuid_str[] = "23A0D13A-26AB-486C-9C5F-0FFA525A575A";
acpi_bus_osc_negotiate_usb_control(void)427  static void acpi_bus_osc_negotiate_usb_control(void)
428  {
429  	u32 capbuf[3], *capbuf_ret;
430  	struct acpi_osc_context context = {
431  		.uuid_str = sb_usb_uuid_str,
432  		.rev = 1,
433  		.cap.length = sizeof(capbuf),
434  		.cap.pointer = capbuf,
435  	};
436  	acpi_handle handle;
437  	acpi_status status;
438  	u32 control;
439  
440  	if (!osc_sb_native_usb4_support_confirmed)
441  		return;
442  
443  	if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle)))
444  		return;
445  
446  	control = OSC_USB_USB3_TUNNELING | OSC_USB_DP_TUNNELING |
447  		  OSC_USB_PCIE_TUNNELING | OSC_USB_XDOMAIN;
448  
449  	/*
450  	 * Run _OSC first with query bit set, trying to get control over
451  	 * all tunneling. The platform can then clear out bits in the
452  	 * control dword that it does not want to grant to the OS.
453  	 */
454  	capbuf[OSC_QUERY_DWORD] = OSC_QUERY_ENABLE;
455  	capbuf[OSC_SUPPORT_DWORD] = 0;
456  	capbuf[OSC_CONTROL_DWORD] = control;
457  
458  	status = acpi_run_osc(handle, &context);
459  	if (ACPI_FAILURE(status))
460  		return;
461  
462  	if (context.ret.length != sizeof(capbuf)) {
463  		pr_info("USB4 _OSC: returned invalid length buffer\n");
464  		goto out_free;
465  	}
466  
467  	/*
468  	 * Run _OSC again now with query bit clear and the control dword
469  	 * matching what the platform granted (which may not have all
470  	 * the control bits set).
471  	 */
472  	capbuf_ret = context.ret.pointer;
473  
474  	capbuf[OSC_QUERY_DWORD] = 0;
475  	capbuf[OSC_CONTROL_DWORD] = capbuf_ret[OSC_CONTROL_DWORD];
476  
477  	kfree(context.ret.pointer);
478  
479  	status = acpi_run_osc(handle, &context);
480  	if (ACPI_FAILURE(status))
481  		return;
482  
483  	if (context.ret.length != sizeof(capbuf)) {
484  		pr_info("USB4 _OSC: returned invalid length buffer\n");
485  		goto out_free;
486  	}
487  
488  	osc_sb_native_usb4_control =
489  		control & acpi_osc_ctx_get_pci_control(&context);
490  
491  	acpi_bus_decode_usb_osc("USB4 _OSC: OS supports", control);
492  	acpi_bus_decode_usb_osc("USB4 _OSC: OS controls",
493  				osc_sb_native_usb4_control);
494  
495  out_free:
496  	kfree(context.ret.pointer);
497  }
498  
499  /* --------------------------------------------------------------------------
500                               Notification Handling
501     -------------------------------------------------------------------------- */
502  
503  /**
504   * acpi_bus_notify - Global system-level (0x00-0x7F) notifications handler
505   * @handle: Target ACPI object.
506   * @type: Notification type.
507   * @data: Ignored.
508   *
509   * This only handles notifications related to device hotplug.
510   */
acpi_bus_notify(acpi_handle handle,u32 type,void * data)511  static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
512  {
513  	struct acpi_device *adev;
514  
515  	switch (type) {
516  	case ACPI_NOTIFY_BUS_CHECK:
517  		acpi_handle_debug(handle, "ACPI_NOTIFY_BUS_CHECK event\n");
518  		break;
519  
520  	case ACPI_NOTIFY_DEVICE_CHECK:
521  		acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_CHECK event\n");
522  		break;
523  
524  	case ACPI_NOTIFY_DEVICE_WAKE:
525  		acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_WAKE event\n");
526  		return;
527  
528  	case ACPI_NOTIFY_EJECT_REQUEST:
529  		acpi_handle_debug(handle, "ACPI_NOTIFY_EJECT_REQUEST event\n");
530  		break;
531  
532  	case ACPI_NOTIFY_DEVICE_CHECK_LIGHT:
533  		acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_CHECK_LIGHT event\n");
534  		/* TBD: Exactly what does 'light' mean? */
535  		return;
536  
537  	case ACPI_NOTIFY_FREQUENCY_MISMATCH:
538  		acpi_handle_err(handle, "Device cannot be configured due "
539  				"to a frequency mismatch\n");
540  		return;
541  
542  	case ACPI_NOTIFY_BUS_MODE_MISMATCH:
543  		acpi_handle_err(handle, "Device cannot be configured due "
544  				"to a bus mode mismatch\n");
545  		return;
546  
547  	case ACPI_NOTIFY_POWER_FAULT:
548  		acpi_handle_err(handle, "Device has suffered a power fault\n");
549  		return;
550  
551  	default:
552  		acpi_handle_debug(handle, "Unknown event type 0x%x\n", type);
553  		return;
554  	}
555  
556  	adev = acpi_get_acpi_dev(handle);
557  
558  	if (adev && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
559  		return;
560  
561  	acpi_put_acpi_dev(adev);
562  
563  	acpi_evaluate_ost(handle, type, ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL);
564  }
565  
acpi_notify_device(acpi_handle handle,u32 event,void * data)566  static void acpi_notify_device(acpi_handle handle, u32 event, void *data)
567  {
568  	struct acpi_device *device = data;
569  	struct acpi_driver *acpi_drv = to_acpi_driver(device->dev.driver);
570  
571  	acpi_drv->ops.notify(device, event);
572  }
573  
acpi_device_install_notify_handler(struct acpi_device * device,struct acpi_driver * acpi_drv)574  static int acpi_device_install_notify_handler(struct acpi_device *device,
575  					      struct acpi_driver *acpi_drv)
576  {
577  	u32 type = acpi_drv->flags & ACPI_DRIVER_ALL_NOTIFY_EVENTS ?
578  				ACPI_ALL_NOTIFY : ACPI_DEVICE_NOTIFY;
579  	acpi_status status;
580  
581  	status = acpi_install_notify_handler(device->handle, type,
582  					     acpi_notify_device, device);
583  	if (ACPI_FAILURE(status))
584  		return -EINVAL;
585  
586  	return 0;
587  }
588  
acpi_device_remove_notify_handler(struct acpi_device * device,struct acpi_driver * acpi_drv)589  static void acpi_device_remove_notify_handler(struct acpi_device *device,
590  					      struct acpi_driver *acpi_drv)
591  {
592  	u32 type = acpi_drv->flags & ACPI_DRIVER_ALL_NOTIFY_EVENTS ?
593  				ACPI_ALL_NOTIFY : ACPI_DEVICE_NOTIFY;
594  
595  	acpi_remove_notify_handler(device->handle, type,
596  				   acpi_notify_device);
597  
598  	acpi_os_wait_events_complete();
599  }
600  
acpi_dev_install_notify_handler(struct acpi_device * adev,u32 handler_type,acpi_notify_handler handler,void * context)601  int acpi_dev_install_notify_handler(struct acpi_device *adev,
602  				    u32 handler_type,
603  				    acpi_notify_handler handler, void *context)
604  {
605  	acpi_status status;
606  
607  	status = acpi_install_notify_handler(adev->handle, handler_type,
608  					     handler, context);
609  	if (ACPI_FAILURE(status))
610  		return -ENODEV;
611  
612  	return 0;
613  }
614  EXPORT_SYMBOL_GPL(acpi_dev_install_notify_handler);
615  
acpi_dev_remove_notify_handler(struct acpi_device * adev,u32 handler_type,acpi_notify_handler handler)616  void acpi_dev_remove_notify_handler(struct acpi_device *adev,
617  				    u32 handler_type,
618  				    acpi_notify_handler handler)
619  {
620  	acpi_remove_notify_handler(adev->handle, handler_type, handler);
621  	acpi_os_wait_events_complete();
622  }
623  EXPORT_SYMBOL_GPL(acpi_dev_remove_notify_handler);
624  
625  /* Handle events targeting \_SB device (at present only graceful shutdown) */
626  
627  #define ACPI_SB_NOTIFY_SHUTDOWN_REQUEST 0x81
628  #define ACPI_SB_INDICATE_INTERVAL	10000
629  
sb_notify_work(struct work_struct * dummy)630  static void sb_notify_work(struct work_struct *dummy)
631  {
632  	acpi_handle sb_handle;
633  
634  	orderly_poweroff(true);
635  
636  	/*
637  	 * After initiating graceful shutdown, the ACPI spec requires OSPM
638  	 * to evaluate _OST method once every 10seconds to indicate that
639  	 * the shutdown is in progress
640  	 */
641  	acpi_get_handle(NULL, "\\_SB", &sb_handle);
642  	while (1) {
643  		pr_info("Graceful shutdown in progress.\n");
644  		acpi_evaluate_ost(sb_handle, ACPI_OST_EC_OSPM_SHUTDOWN,
645  				ACPI_OST_SC_OS_SHUTDOWN_IN_PROGRESS, NULL);
646  		msleep(ACPI_SB_INDICATE_INTERVAL);
647  	}
648  }
649  
acpi_sb_notify(acpi_handle handle,u32 event,void * data)650  static void acpi_sb_notify(acpi_handle handle, u32 event, void *data)
651  {
652  	static DECLARE_WORK(acpi_sb_work, sb_notify_work);
653  
654  	if (event == ACPI_SB_NOTIFY_SHUTDOWN_REQUEST) {
655  		if (!work_busy(&acpi_sb_work))
656  			schedule_work(&acpi_sb_work);
657  	} else {
658  		pr_warn("event %x is not supported by \\_SB device\n", event);
659  	}
660  }
661  
acpi_setup_sb_notify_handler(void)662  static int __init acpi_setup_sb_notify_handler(void)
663  {
664  	acpi_handle sb_handle;
665  
666  	if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &sb_handle)))
667  		return -ENXIO;
668  
669  	if (ACPI_FAILURE(acpi_install_notify_handler(sb_handle, ACPI_DEVICE_NOTIFY,
670  						acpi_sb_notify, NULL)))
671  		return -EINVAL;
672  
673  	return 0;
674  }
675  
676  /* --------------------------------------------------------------------------
677                               Device Matching
678     -------------------------------------------------------------------------- */
679  
680  /**
681   * acpi_get_first_physical_node - Get first physical node of an ACPI device
682   * @adev:	ACPI device in question
683   *
684   * Return: First physical node of ACPI device @adev
685   */
acpi_get_first_physical_node(struct acpi_device * adev)686  struct device *acpi_get_first_physical_node(struct acpi_device *adev)
687  {
688  	struct mutex *physical_node_lock = &adev->physical_node_lock;
689  	struct device *phys_dev;
690  
691  	mutex_lock(physical_node_lock);
692  	if (list_empty(&adev->physical_node_list)) {
693  		phys_dev = NULL;
694  	} else {
695  		const struct acpi_device_physical_node *node;
696  
697  		node = list_first_entry(&adev->physical_node_list,
698  					struct acpi_device_physical_node, node);
699  
700  		phys_dev = node->dev;
701  	}
702  	mutex_unlock(physical_node_lock);
703  	return phys_dev;
704  }
705  EXPORT_SYMBOL_GPL(acpi_get_first_physical_node);
706  
acpi_primary_dev_companion(struct acpi_device * adev,const struct device * dev)707  static struct acpi_device *acpi_primary_dev_companion(struct acpi_device *adev,
708  						      const struct device *dev)
709  {
710  	const struct device *phys_dev = acpi_get_first_physical_node(adev);
711  
712  	return phys_dev && phys_dev == dev ? adev : NULL;
713  }
714  
715  /**
716   * acpi_device_is_first_physical_node - Is given dev first physical node
717   * @adev: ACPI companion device
718   * @dev: Physical device to check
719   *
720   * Function checks if given @dev is the first physical devices attached to
721   * the ACPI companion device. This distinction is needed in some cases
722   * where the same companion device is shared between many physical devices.
723   *
724   * Note that the caller have to provide valid @adev pointer.
725   */
acpi_device_is_first_physical_node(struct acpi_device * adev,const struct device * dev)726  bool acpi_device_is_first_physical_node(struct acpi_device *adev,
727  					const struct device *dev)
728  {
729  	return !!acpi_primary_dev_companion(adev, dev);
730  }
731  
732  /*
733   * acpi_companion_match() - Can we match via ACPI companion device
734   * @dev: Device in question
735   *
736   * Check if the given device has an ACPI companion and if that companion has
737   * a valid list of PNP IDs, and if the device is the first (primary) physical
738   * device associated with it.  Return the companion pointer if that's the case
739   * or NULL otherwise.
740   *
741   * If multiple physical devices are attached to a single ACPI companion, we need
742   * to be careful.  The usage scenario for this kind of relationship is that all
743   * of the physical devices in question use resources provided by the ACPI
744   * companion.  A typical case is an MFD device where all the sub-devices share
745   * the parent's ACPI companion.  In such cases we can only allow the primary
746   * (first) physical device to be matched with the help of the companion's PNP
747   * IDs.
748   *
749   * Additional physical devices sharing the ACPI companion can still use
750   * resources available from it but they will be matched normally using functions
751   * provided by their bus types (and analogously for their modalias).
752   */
acpi_companion_match(const struct device * dev)753  const struct acpi_device *acpi_companion_match(const struct device *dev)
754  {
755  	struct acpi_device *adev;
756  
757  	adev = ACPI_COMPANION(dev);
758  	if (!adev)
759  		return NULL;
760  
761  	if (list_empty(&adev->pnp.ids))
762  		return NULL;
763  
764  	return acpi_primary_dev_companion(adev, dev);
765  }
766  
767  /**
768   * acpi_of_match_device - Match device object using the "compatible" property.
769   * @adev: ACPI device object to match.
770   * @of_match_table: List of device IDs to match against.
771   * @of_id: OF ID if matched
772   *
773   * If @dev has an ACPI companion which has ACPI_DT_NAMESPACE_HID in its list of
774   * identifiers and a _DSD object with the "compatible" property, use that
775   * property to match against the given list of identifiers.
776   */
acpi_of_match_device(const struct acpi_device * adev,const struct of_device_id * of_match_table,const struct of_device_id ** of_id)777  static bool acpi_of_match_device(const struct acpi_device *adev,
778  				 const struct of_device_id *of_match_table,
779  				 const struct of_device_id **of_id)
780  {
781  	const union acpi_object *of_compatible, *obj;
782  	int i, nval;
783  
784  	if (!adev)
785  		return false;
786  
787  	of_compatible = adev->data.of_compatible;
788  	if (!of_match_table || !of_compatible)
789  		return false;
790  
791  	if (of_compatible->type == ACPI_TYPE_PACKAGE) {
792  		nval = of_compatible->package.count;
793  		obj = of_compatible->package.elements;
794  	} else { /* Must be ACPI_TYPE_STRING. */
795  		nval = 1;
796  		obj = of_compatible;
797  	}
798  	/* Now we can look for the driver DT compatible strings */
799  	for (i = 0; i < nval; i++, obj++) {
800  		const struct of_device_id *id;
801  
802  		for (id = of_match_table; id->compatible[0]; id++)
803  			if (!strcasecmp(obj->string.pointer, id->compatible)) {
804  				if (of_id)
805  					*of_id = id;
806  				return true;
807  			}
808  	}
809  
810  	return false;
811  }
812  
acpi_of_modalias(struct acpi_device * adev,char * modalias,size_t len)813  static bool acpi_of_modalias(struct acpi_device *adev,
814  			     char *modalias, size_t len)
815  {
816  	const union acpi_object *of_compatible;
817  	const union acpi_object *obj;
818  	const char *str, *chr;
819  
820  	of_compatible = adev->data.of_compatible;
821  	if (!of_compatible)
822  		return false;
823  
824  	if (of_compatible->type == ACPI_TYPE_PACKAGE)
825  		obj = of_compatible->package.elements;
826  	else /* Must be ACPI_TYPE_STRING. */
827  		obj = of_compatible;
828  
829  	str = obj->string.pointer;
830  	chr = strchr(str, ',');
831  	strscpy(modalias, chr ? chr + 1 : str, len);
832  
833  	return true;
834  }
835  
836  /**
837   * acpi_set_modalias - Set modalias using "compatible" property or supplied ID
838   * @adev:	ACPI device object to match
839   * @default_id:	ID string to use as default if no compatible string found
840   * @modalias:   Pointer to buffer that modalias value will be copied into
841   * @len:	Length of modalias buffer
842   *
843   * This is a counterpart of of_alias_from_compatible() for struct acpi_device
844   * objects. If there is a compatible string for @adev, it will be copied to
845   * @modalias with the vendor prefix stripped; otherwise, @default_id will be
846   * used.
847   */
acpi_set_modalias(struct acpi_device * adev,const char * default_id,char * modalias,size_t len)848  void acpi_set_modalias(struct acpi_device *adev, const char *default_id,
849  		       char *modalias, size_t len)
850  {
851  	if (!acpi_of_modalias(adev, modalias, len))
852  		strscpy(modalias, default_id, len);
853  }
854  EXPORT_SYMBOL_GPL(acpi_set_modalias);
855  
__acpi_match_device_cls(const struct acpi_device_id * id,struct acpi_hardware_id * hwid)856  static bool __acpi_match_device_cls(const struct acpi_device_id *id,
857  				    struct acpi_hardware_id *hwid)
858  {
859  	int i, msk, byte_shift;
860  	char buf[3];
861  
862  	if (!id->cls)
863  		return false;
864  
865  	/* Apply class-code bitmask, before checking each class-code byte */
866  	for (i = 1; i <= 3; i++) {
867  		byte_shift = 8 * (3 - i);
868  		msk = (id->cls_msk >> byte_shift) & 0xFF;
869  		if (!msk)
870  			continue;
871  
872  		sprintf(buf, "%02x", (id->cls >> byte_shift) & msk);
873  		if (strncmp(buf, &hwid->id[(i - 1) * 2], 2))
874  			return false;
875  	}
876  	return true;
877  }
878  
__acpi_match_device(const struct acpi_device * device,const struct acpi_device_id * acpi_ids,const struct of_device_id * of_ids,const struct acpi_device_id ** acpi_id,const struct of_device_id ** of_id)879  static bool __acpi_match_device(const struct acpi_device *device,
880  				const struct acpi_device_id *acpi_ids,
881  				const struct of_device_id *of_ids,
882  				const struct acpi_device_id **acpi_id,
883  				const struct of_device_id **of_id)
884  {
885  	const struct acpi_device_id *id;
886  	struct acpi_hardware_id *hwid;
887  
888  	/*
889  	 * If the device is not present, it is unnecessary to load device
890  	 * driver for it.
891  	 */
892  	if (!device || !device->status.present)
893  		return false;
894  
895  	list_for_each_entry(hwid, &device->pnp.ids, list) {
896  		/* First, check the ACPI/PNP IDs provided by the caller. */
897  		if (acpi_ids) {
898  			for (id = acpi_ids; id->id[0] || id->cls; id++) {
899  				if (id->id[0] && !strcmp((char *)id->id, hwid->id))
900  					goto out_acpi_match;
901  				if (id->cls && __acpi_match_device_cls(id, hwid))
902  					goto out_acpi_match;
903  			}
904  		}
905  
906  		/*
907  		 * Next, check ACPI_DT_NAMESPACE_HID and try to match the
908  		 * "compatible" property if found.
909  		 */
910  		if (!strcmp(ACPI_DT_NAMESPACE_HID, hwid->id))
911  			return acpi_of_match_device(device, of_ids, of_id);
912  	}
913  	return false;
914  
915  out_acpi_match:
916  	if (acpi_id)
917  		*acpi_id = id;
918  	return true;
919  }
920  
921  /**
922   * acpi_match_acpi_device - Match an ACPI device against a given list of ACPI IDs
923   * @ids: Array of struct acpi_device_id objects to match against.
924   * @adev: The ACPI device pointer to match.
925   *
926   * Match the ACPI device @adev against a given list of ACPI IDs @ids.
927   *
928   * Return:
929   * a pointer to the first matching ACPI ID on success or %NULL on failure.
930   */
acpi_match_acpi_device(const struct acpi_device_id * ids,const struct acpi_device * adev)931  const struct acpi_device_id *acpi_match_acpi_device(const struct acpi_device_id *ids,
932  						    const struct acpi_device *adev)
933  {
934  	const struct acpi_device_id *id = NULL;
935  
936  	__acpi_match_device(adev, ids, NULL, &id, NULL);
937  	return id;
938  }
939  EXPORT_SYMBOL_GPL(acpi_match_acpi_device);
940  
941  /**
942   * acpi_match_device - Match a struct device against a given list of ACPI IDs
943   * @ids: Array of struct acpi_device_id object to match against.
944   * @dev: The device structure to match.
945   *
946   * Check if @dev has a valid ACPI handle and if there is a struct acpi_device
947   * object for that handle and use that object to match against a given list of
948   * device IDs.
949   *
950   * Return a pointer to the first matching ID on success or %NULL on failure.
951   */
acpi_match_device(const struct acpi_device_id * ids,const struct device * dev)952  const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
953  					       const struct device *dev)
954  {
955  	return acpi_match_acpi_device(ids, acpi_companion_match(dev));
956  }
957  EXPORT_SYMBOL_GPL(acpi_match_device);
958  
acpi_of_device_get_match_data(const struct device * dev)959  static const void *acpi_of_device_get_match_data(const struct device *dev)
960  {
961  	struct acpi_device *adev = ACPI_COMPANION(dev);
962  	const struct of_device_id *match = NULL;
963  
964  	if (!acpi_of_match_device(adev, dev->driver->of_match_table, &match))
965  		return NULL;
966  
967  	return match->data;
968  }
969  
acpi_device_get_match_data(const struct device * dev)970  const void *acpi_device_get_match_data(const struct device *dev)
971  {
972  	const struct acpi_device_id *acpi_ids = dev->driver->acpi_match_table;
973  	const struct acpi_device_id *match;
974  
975  	if (!acpi_ids)
976  		return acpi_of_device_get_match_data(dev);
977  
978  	match = acpi_match_device(acpi_ids, dev);
979  	if (!match)
980  		return NULL;
981  
982  	return (const void *)match->driver_data;
983  }
984  EXPORT_SYMBOL_GPL(acpi_device_get_match_data);
985  
acpi_match_device_ids(struct acpi_device * device,const struct acpi_device_id * ids)986  int acpi_match_device_ids(struct acpi_device *device,
987  			  const struct acpi_device_id *ids)
988  {
989  	return __acpi_match_device(device, ids, NULL, NULL, NULL) ? 0 : -ENOENT;
990  }
991  EXPORT_SYMBOL(acpi_match_device_ids);
992  
acpi_driver_match_device(struct device * dev,const struct device_driver * drv)993  bool acpi_driver_match_device(struct device *dev,
994  			      const struct device_driver *drv)
995  {
996  	const struct acpi_device_id *acpi_ids = drv->acpi_match_table;
997  	const struct of_device_id *of_ids = drv->of_match_table;
998  
999  	if (!acpi_ids)
1000  		return acpi_of_match_device(ACPI_COMPANION(dev), of_ids, NULL);
1001  
1002  	return __acpi_match_device(acpi_companion_match(dev), acpi_ids, of_ids, NULL, NULL);
1003  }
1004  EXPORT_SYMBOL_GPL(acpi_driver_match_device);
1005  
1006  /* --------------------------------------------------------------------------
1007                                ACPI Driver Management
1008     -------------------------------------------------------------------------- */
1009  
1010  /**
1011   * __acpi_bus_register_driver - register a driver with the ACPI bus
1012   * @driver: driver being registered
1013   * @owner: owning module/driver
1014   *
1015   * Registers a driver with the ACPI bus.  Searches the namespace for all
1016   * devices that match the driver's criteria and binds.  Returns zero for
1017   * success or a negative error status for failure.
1018   */
__acpi_bus_register_driver(struct acpi_driver * driver,struct module * owner)1019  int __acpi_bus_register_driver(struct acpi_driver *driver, struct module *owner)
1020  {
1021  	if (acpi_disabled)
1022  		return -ENODEV;
1023  	driver->drv.name = driver->name;
1024  	driver->drv.bus = &acpi_bus_type;
1025  	driver->drv.owner = owner;
1026  
1027  	return driver_register(&driver->drv);
1028  }
1029  
1030  EXPORT_SYMBOL(__acpi_bus_register_driver);
1031  
1032  /**
1033   * acpi_bus_unregister_driver - unregisters a driver with the ACPI bus
1034   * @driver: driver to unregister
1035   *
1036   * Unregisters a driver with the ACPI bus.  Searches the namespace for all
1037   * devices that match the driver's criteria and unbinds.
1038   */
acpi_bus_unregister_driver(struct acpi_driver * driver)1039  void acpi_bus_unregister_driver(struct acpi_driver *driver)
1040  {
1041  	driver_unregister(&driver->drv);
1042  }
1043  
1044  EXPORT_SYMBOL(acpi_bus_unregister_driver);
1045  
1046  /* --------------------------------------------------------------------------
1047                                ACPI Bus operations
1048     -------------------------------------------------------------------------- */
1049  
acpi_bus_match(struct device * dev,const struct device_driver * drv)1050  static int acpi_bus_match(struct device *dev, const struct device_driver *drv)
1051  {
1052  	struct acpi_device *acpi_dev = to_acpi_device(dev);
1053  	const struct acpi_driver *acpi_drv = to_acpi_driver(drv);
1054  
1055  	return acpi_dev->flags.match_driver
1056  		&& !acpi_match_device_ids(acpi_dev, acpi_drv->ids);
1057  }
1058  
acpi_device_uevent(const struct device * dev,struct kobj_uevent_env * env)1059  static int acpi_device_uevent(const struct device *dev, struct kobj_uevent_env *env)
1060  {
1061  	return __acpi_device_uevent_modalias(to_acpi_device(dev), env);
1062  }
1063  
acpi_device_probe(struct device * dev)1064  static int acpi_device_probe(struct device *dev)
1065  {
1066  	struct acpi_device *acpi_dev = to_acpi_device(dev);
1067  	struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver);
1068  	int ret;
1069  
1070  	if (acpi_dev->handler && !acpi_is_pnp_device(acpi_dev))
1071  		return -EINVAL;
1072  
1073  	if (!acpi_drv->ops.add)
1074  		return -ENOSYS;
1075  
1076  	ret = acpi_drv->ops.add(acpi_dev);
1077  	if (ret) {
1078  		acpi_dev->driver_data = NULL;
1079  		return ret;
1080  	}
1081  
1082  	pr_debug("Driver [%s] successfully bound to device [%s]\n",
1083  		 acpi_drv->name, acpi_dev->pnp.bus_id);
1084  
1085  	if (acpi_drv->ops.notify) {
1086  		ret = acpi_device_install_notify_handler(acpi_dev, acpi_drv);
1087  		if (ret) {
1088  			if (acpi_drv->ops.remove)
1089  				acpi_drv->ops.remove(acpi_dev);
1090  
1091  			acpi_dev->driver_data = NULL;
1092  			return ret;
1093  		}
1094  	}
1095  
1096  	pr_debug("Found driver [%s] for device [%s]\n", acpi_drv->name,
1097  		 acpi_dev->pnp.bus_id);
1098  
1099  	get_device(dev);
1100  	return 0;
1101  }
1102  
acpi_device_remove(struct device * dev)1103  static void acpi_device_remove(struct device *dev)
1104  {
1105  	struct acpi_device *acpi_dev = to_acpi_device(dev);
1106  	struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver);
1107  
1108  	if (acpi_drv->ops.notify)
1109  		acpi_device_remove_notify_handler(acpi_dev, acpi_drv);
1110  
1111  	if (acpi_drv->ops.remove)
1112  		acpi_drv->ops.remove(acpi_dev);
1113  
1114  	acpi_dev->driver_data = NULL;
1115  
1116  	put_device(dev);
1117  }
1118  
1119  const struct bus_type acpi_bus_type = {
1120  	.name		= "acpi",
1121  	.match		= acpi_bus_match,
1122  	.probe		= acpi_device_probe,
1123  	.remove		= acpi_device_remove,
1124  	.uevent		= acpi_device_uevent,
1125  };
1126  
acpi_bus_for_each_dev(int (* fn)(struct device *,void *),void * data)1127  int acpi_bus_for_each_dev(int (*fn)(struct device *, void *), void *data)
1128  {
1129  	return bus_for_each_dev(&acpi_bus_type, NULL, data, fn);
1130  }
1131  EXPORT_SYMBOL_GPL(acpi_bus_for_each_dev);
1132  
1133  struct acpi_dev_walk_context {
1134  	int (*fn)(struct acpi_device *, void *);
1135  	void *data;
1136  };
1137  
acpi_dev_for_one_check(struct device * dev,void * context)1138  static int acpi_dev_for_one_check(struct device *dev, void *context)
1139  {
1140  	struct acpi_dev_walk_context *adwc = context;
1141  
1142  	if (dev->bus != &acpi_bus_type)
1143  		return 0;
1144  
1145  	return adwc->fn(to_acpi_device(dev), adwc->data);
1146  }
1147  EXPORT_SYMBOL_GPL(acpi_dev_for_each_child);
1148  
acpi_dev_for_each_child(struct acpi_device * adev,int (* fn)(struct acpi_device *,void *),void * data)1149  int acpi_dev_for_each_child(struct acpi_device *adev,
1150  			    int (*fn)(struct acpi_device *, void *), void *data)
1151  {
1152  	struct acpi_dev_walk_context adwc = {
1153  		.fn = fn,
1154  		.data = data,
1155  	};
1156  
1157  	return device_for_each_child(&adev->dev, &adwc, acpi_dev_for_one_check);
1158  }
1159  
acpi_dev_for_each_child_reverse(struct acpi_device * adev,int (* fn)(struct acpi_device *,void *),void * data)1160  int acpi_dev_for_each_child_reverse(struct acpi_device *adev,
1161  				    int (*fn)(struct acpi_device *, void *),
1162  				    void *data)
1163  {
1164  	struct acpi_dev_walk_context adwc = {
1165  		.fn = fn,
1166  		.data = data,
1167  	};
1168  
1169  	return device_for_each_child_reverse(&adev->dev, &adwc, acpi_dev_for_one_check);
1170  }
1171  
1172  /* --------------------------------------------------------------------------
1173                               Initialization/Cleanup
1174     -------------------------------------------------------------------------- */
1175  
acpi_bus_init_irq(void)1176  static int __init acpi_bus_init_irq(void)
1177  {
1178  	acpi_status status;
1179  	char *message = NULL;
1180  
1181  
1182  	/*
1183  	 * Let the system know what interrupt model we are using by
1184  	 * evaluating the \_PIC object, if exists.
1185  	 */
1186  
1187  	switch (acpi_irq_model) {
1188  	case ACPI_IRQ_MODEL_PIC:
1189  		message = "PIC";
1190  		break;
1191  	case ACPI_IRQ_MODEL_IOAPIC:
1192  		message = "IOAPIC";
1193  		break;
1194  	case ACPI_IRQ_MODEL_IOSAPIC:
1195  		message = "IOSAPIC";
1196  		break;
1197  	case ACPI_IRQ_MODEL_GIC:
1198  		message = "GIC";
1199  		break;
1200  	case ACPI_IRQ_MODEL_PLATFORM:
1201  		message = "platform specific model";
1202  		break;
1203  	case ACPI_IRQ_MODEL_LPIC:
1204  		message = "LPIC";
1205  		break;
1206  	case ACPI_IRQ_MODEL_RINTC:
1207  		message = "RINTC";
1208  		break;
1209  	default:
1210  		pr_info("Unknown interrupt routing model\n");
1211  		return -ENODEV;
1212  	}
1213  
1214  	pr_info("Using %s for interrupt routing\n", message);
1215  
1216  	status = acpi_execute_simple_method(NULL, "\\_PIC", acpi_irq_model);
1217  	if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
1218  		pr_info("_PIC evaluation failed: %s\n", acpi_format_exception(status));
1219  		return -ENODEV;
1220  	}
1221  
1222  	return 0;
1223  }
1224  
1225  /**
1226   * acpi_early_init - Initialize ACPICA and populate the ACPI namespace.
1227   *
1228   * The ACPI tables are accessible after this, but the handling of events has not
1229   * been initialized and the global lock is not available yet, so AML should not
1230   * be executed at this point.
1231   *
1232   * Doing this before switching the EFI runtime services to virtual mode allows
1233   * the EfiBootServices memory to be freed slightly earlier on boot.
1234   */
acpi_early_init(void)1235  void __init acpi_early_init(void)
1236  {
1237  	acpi_status status;
1238  
1239  	if (acpi_disabled)
1240  		return;
1241  
1242  	pr_info("Core revision %08x\n", ACPI_CA_VERSION);
1243  
1244  	/* enable workarounds, unless strict ACPI spec. compliance */
1245  	if (!acpi_strict)
1246  		acpi_gbl_enable_interpreter_slack = TRUE;
1247  
1248  	acpi_permanent_mmap = true;
1249  
1250  #ifdef CONFIG_X86
1251  	/*
1252  	 * If the machine falls into the DMI check table,
1253  	 * DSDT will be copied to memory.
1254  	 * Note that calling dmi_check_system() here on other architectures
1255  	 * would not be OK because only x86 initializes dmi early enough.
1256  	 * Thankfully only x86 systems need such quirks for now.
1257  	 */
1258  	dmi_check_system(dsdt_dmi_table);
1259  #endif
1260  
1261  	status = acpi_reallocate_root_table();
1262  	if (ACPI_FAILURE(status)) {
1263  		pr_err("Unable to reallocate ACPI tables\n");
1264  		goto error0;
1265  	}
1266  
1267  	status = acpi_initialize_subsystem();
1268  	if (ACPI_FAILURE(status)) {
1269  		pr_err("Unable to initialize the ACPI Interpreter\n");
1270  		goto error0;
1271  	}
1272  
1273  #ifdef CONFIG_X86
1274  	if (!acpi_ioapic) {
1275  		/* compatible (0) means level (3) */
1276  		if (!(acpi_sci_flags & ACPI_MADT_TRIGGER_MASK)) {
1277  			acpi_sci_flags &= ~ACPI_MADT_TRIGGER_MASK;
1278  			acpi_sci_flags |= ACPI_MADT_TRIGGER_LEVEL;
1279  		}
1280  		/* Set PIC-mode SCI trigger type */
1281  		acpi_pic_sci_set_trigger(acpi_gbl_FADT.sci_interrupt,
1282  					 (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) >> 2);
1283  	} else {
1284  		/*
1285  		 * now that acpi_gbl_FADT is initialized,
1286  		 * update it with result from INT_SRC_OVR parsing
1287  		 */
1288  		acpi_gbl_FADT.sci_interrupt = acpi_sci_override_gsi;
1289  	}
1290  #endif
1291  	return;
1292  
1293   error0:
1294  	disable_acpi();
1295  }
1296  
1297  /**
1298   * acpi_subsystem_init - Finalize the early initialization of ACPI.
1299   *
1300   * Switch over the platform to the ACPI mode (if possible).
1301   *
1302   * Doing this too early is generally unsafe, but at the same time it needs to be
1303   * done before all things that really depend on ACPI.  The right spot appears to
1304   * be before finalizing the EFI initialization.
1305   */
acpi_subsystem_init(void)1306  void __init acpi_subsystem_init(void)
1307  {
1308  	acpi_status status;
1309  
1310  	if (acpi_disabled)
1311  		return;
1312  
1313  	status = acpi_enable_subsystem(~ACPI_NO_ACPI_ENABLE);
1314  	if (ACPI_FAILURE(status)) {
1315  		pr_err("Unable to enable ACPI\n");
1316  		disable_acpi();
1317  	} else {
1318  		/*
1319  		 * If the system is using ACPI then we can be reasonably
1320  		 * confident that any regulators are managed by the firmware
1321  		 * so tell the regulator core it has everything it needs to
1322  		 * know.
1323  		 */
1324  		regulator_has_full_constraints();
1325  	}
1326  }
1327  
acpi_bus_table_handler(u32 event,void * table,void * context)1328  static acpi_status acpi_bus_table_handler(u32 event, void *table, void *context)
1329  {
1330  	if (event == ACPI_TABLE_EVENT_LOAD)
1331  		acpi_scan_table_notify();
1332  
1333  	return acpi_sysfs_table_handler(event, table, context);
1334  }
1335  
acpi_bus_init(void)1336  static int __init acpi_bus_init(void)
1337  {
1338  	int result;
1339  	acpi_status status;
1340  
1341  	acpi_os_initialize1();
1342  
1343  	status = acpi_load_tables();
1344  	if (ACPI_FAILURE(status)) {
1345  		pr_err("Unable to load the System Description Tables\n");
1346  		goto error1;
1347  	}
1348  
1349  	/*
1350  	 * ACPI 2.0 requires the EC driver to be loaded and work before the EC
1351  	 * device is found in the namespace.
1352  	 *
1353  	 * This is accomplished by looking for the ECDT table and getting the EC
1354  	 * parameters out of that.
1355  	 *
1356  	 * Do that before calling acpi_initialize_objects() which may trigger EC
1357  	 * address space accesses.
1358  	 */
1359  	acpi_ec_ecdt_probe();
1360  
1361  	status = acpi_enable_subsystem(ACPI_NO_ACPI_ENABLE);
1362  	if (ACPI_FAILURE(status)) {
1363  		pr_err("Unable to start the ACPI Interpreter\n");
1364  		goto error1;
1365  	}
1366  
1367  	status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION);
1368  	if (ACPI_FAILURE(status)) {
1369  		pr_err("Unable to initialize ACPI objects\n");
1370  		goto error1;
1371  	}
1372  
1373  	/*
1374  	 * _OSC method may exist in module level code,
1375  	 * so it must be run after ACPI_FULL_INITIALIZATION
1376  	 */
1377  	acpi_bus_osc_negotiate_platform_control();
1378  	acpi_bus_osc_negotiate_usb_control();
1379  
1380  	/*
1381  	 * _PDC control method may load dynamic SSDT tables,
1382  	 * and we need to install the table handler before that.
1383  	 */
1384  	status = acpi_install_table_handler(acpi_bus_table_handler, NULL);
1385  
1386  	acpi_sysfs_init();
1387  
1388  	acpi_early_processor_control_setup();
1389  
1390  	/*
1391  	 * Maybe EC region is required at bus_scan/acpi_get_devices. So it
1392  	 * is necessary to enable it as early as possible.
1393  	 */
1394  	acpi_ec_dsdt_probe();
1395  
1396  	pr_info("Interpreter enabled\n");
1397  
1398  	/* Initialize sleep structures */
1399  	acpi_sleep_init();
1400  
1401  	/*
1402  	 * Get the system interrupt model and evaluate \_PIC.
1403  	 */
1404  	result = acpi_bus_init_irq();
1405  	if (result)
1406  		goto error1;
1407  
1408  	/*
1409  	 * Register the for all standard device notifications.
1410  	 */
1411  	status =
1412  	    acpi_install_notify_handler(ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY,
1413  					&acpi_bus_notify, NULL);
1414  	if (ACPI_FAILURE(status)) {
1415  		pr_err("Unable to register for system notifications\n");
1416  		goto error1;
1417  	}
1418  
1419  	/*
1420  	 * Create the top ACPI proc directory
1421  	 */
1422  	acpi_root_dir = proc_mkdir(ACPI_BUS_FILE_ROOT, NULL);
1423  
1424  	result = bus_register(&acpi_bus_type);
1425  	if (!result)
1426  		return 0;
1427  
1428  	/* Mimic structured exception handling */
1429        error1:
1430  	acpi_terminate();
1431  	return -ENODEV;
1432  }
1433  
1434  struct kobject *acpi_kobj;
1435  EXPORT_SYMBOL_GPL(acpi_kobj);
1436  
acpi_init(void)1437  static int __init acpi_init(void)
1438  {
1439  	int result;
1440  
1441  	if (acpi_disabled) {
1442  		pr_info("Interpreter disabled.\n");
1443  		return -ENODEV;
1444  	}
1445  
1446  	acpi_kobj = kobject_create_and_add("acpi", firmware_kobj);
1447  	if (!acpi_kobj)
1448  		pr_debug("%s: kset create error\n", __func__);
1449  
1450  	init_prmt();
1451  	acpi_init_pcc();
1452  	result = acpi_bus_init();
1453  	if (result) {
1454  		kobject_put(acpi_kobj);
1455  		disable_acpi();
1456  		return result;
1457  	}
1458  	acpi_init_ffh();
1459  
1460  	pci_mmcfg_late_init();
1461  	acpi_viot_early_init();
1462  	acpi_hest_init();
1463  	acpi_ghes_init();
1464  	acpi_arm_init();
1465  	acpi_riscv_init();
1466  	acpi_scan_init();
1467  	acpi_ec_init();
1468  	acpi_debugfs_init();
1469  	acpi_sleep_proc_init();
1470  	acpi_wakeup_device_init();
1471  	acpi_debugger_init();
1472  	acpi_setup_sb_notify_handler();
1473  	acpi_viot_init();
1474  	return 0;
1475  }
1476  
1477  subsys_initcall(acpi_init);
1478