Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/acpi/bus.c
26278 views
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 <[email protected]>
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
43
static inline int set_copy_dsdt(const struct dmi_system_id *id)
44
{
45
return 0;
46
}
47
#else
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
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
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
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
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
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
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
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
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";
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
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";
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
*/
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
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
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
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
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
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
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
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
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
*/
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
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
*/
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
*/
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
*/
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
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
*/
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
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
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
*/
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
*/
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
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
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
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
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
*/
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
*/
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
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
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
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
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
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
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
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
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
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
*/
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
*/
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
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
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 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
1437
void __weak __init acpi_arch_init(void) { }
1438
1439
static int __init acpi_init(void)
1440
{
1441
int result;
1442
1443
if (acpi_disabled) {
1444
pr_info("Interpreter disabled.\n");
1445
return -ENODEV;
1446
}
1447
1448
acpi_kobj = kobject_create_and_add("acpi", firmware_kobj);
1449
if (!acpi_kobj) {
1450
pr_err("Failed to register kobject\n");
1451
return -ENOMEM;
1452
}
1453
1454
init_prmt();
1455
acpi_init_pcc();
1456
result = acpi_bus_init();
1457
if (result) {
1458
kobject_put(acpi_kobj);
1459
disable_acpi();
1460
return result;
1461
}
1462
acpi_init_ffh();
1463
1464
pci_mmcfg_late_init();
1465
acpi_viot_early_init();
1466
acpi_hest_init();
1467
acpi_ghes_init();
1468
acpi_arch_init();
1469
acpi_scan_init();
1470
acpi_ec_init();
1471
acpi_debugfs_init();
1472
acpi_sleep_proc_init();
1473
acpi_wakeup_device_init();
1474
acpi_debugger_init();
1475
acpi_setup_sb_notify_handler();
1476
acpi_viot_init();
1477
return 0;
1478
}
1479
1480
subsys_initcall(acpi_init);
1481
1482