]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - drivers/acpi/scan.c
ACPI / hotplug: Do not execute "insert in progress" _OST
[mirror_ubuntu-jammy-kernel.git] / drivers / acpi / scan.c
CommitLineData
1da177e4
LT
1/*
2 * scan.c - support for transforming the ACPI namespace into individual objects
3 */
4
5#include <linux/module.h>
6#include <linux/init.h>
5a0e3ad6 7#include <linux/slab.h>
9b6d97b6 8#include <linux/kernel.h>
1da177e4 9#include <linux/acpi.h>
74523c90
AK
10#include <linux/signal.h>
11#include <linux/kthread.h>
222e82ac 12#include <linux/dmi.h>
d1efe3c3 13#include <linux/nls.h>
1da177e4
LT
14
15#include <acpi/acpi_drivers.h>
1da177e4 16
e60cc7a6
BH
17#include "internal.h"
18
1da177e4 19#define _COMPONENT ACPI_BUS_COMPONENT
f52fd66d 20ACPI_MODULE_NAME("scan");
1da177e4 21#define STRUCT_TO_INT(s) (*((int*)&s))
4be44fcd 22extern struct acpi_device *acpi_root;
1da177e4
LT
23
24#define ACPI_BUS_CLASS "system_bus"
29b71a1c 25#define ACPI_BUS_HID "LNXSYBUS"
1da177e4
LT
26#define ACPI_BUS_DEVICE_NAME "System Bus"
27
859ac9a4
BH
28#define ACPI_IS_ROOT_DEVICE(device) (!(device)->parent)
29
683058e3
RW
30/*
31 * If set, devices will be hot-removed even if they cannot be put offline
32 * gracefully (from the kernel's standpoint).
33 */
34bool acpi_force_hot_remove;
35
620e112c 36static const char *dummy_hid = "device";
2b2ae7c7 37
e49bd2dd 38static LIST_HEAD(acpi_bus_id_list);
c511cc19 39static DEFINE_MUTEX(acpi_scan_lock);
ca589f94 40static LIST_HEAD(acpi_scan_handlers_list);
9090589d 41DEFINE_MUTEX(acpi_device_lock);
1da177e4
LT
42LIST_HEAD(acpi_wakeup_device_list);
43
e49bd2dd 44struct acpi_device_bus_id{
bb095854 45 char bus_id[15];
e49bd2dd
ZR
46 unsigned int instance_no;
47 struct list_head node;
1da177e4 48};
29b71a1c 49
3757b948
RW
50void acpi_scan_lock_acquire(void)
51{
52 mutex_lock(&acpi_scan_lock);
53}
54EXPORT_SYMBOL_GPL(acpi_scan_lock_acquire);
55
56void acpi_scan_lock_release(void)
57{
58 mutex_unlock(&acpi_scan_lock);
59}
60EXPORT_SYMBOL_GPL(acpi_scan_lock_release);
61
ca589f94
RW
62int acpi_scan_add_handler(struct acpi_scan_handler *handler)
63{
64 if (!handler || !handler->attach)
65 return -EINVAL;
66
67 list_add_tail(&handler->list_node, &acpi_scan_handlers_list);
68 return 0;
69}
70
3f8055c3
RW
71int acpi_scan_add_handler_with_hotplug(struct acpi_scan_handler *handler,
72 const char *hotplug_profile_name)
73{
74 int error;
75
76 error = acpi_scan_add_handler(handler);
77 if (error)
78 return error;
79
80 acpi_sysfs_add_hotplug_profile(&handler->hotplug, hotplug_profile_name);
81 return 0;
82}
83
29b71a1c
TR
84/*
85 * Creates hid/cid(s) string needed for modalias and uevent
86 * e.g. on a device with hid:IBM0001 and cid:ACPI0001 you get:
87 * char *modalias: "acpi:IBM0001:ACPI0001"
88*/
b3e572d2
AB
89static int create_modalias(struct acpi_device *acpi_dev, char *modalias,
90 int size)
91{
29b71a1c 92 int len;
5c9fcb5d 93 int count;
7f47fa6c 94 struct acpi_hardware_id *id;
29b71a1c 95
2b2ae7c7
TR
96 if (list_empty(&acpi_dev->pnp.ids))
97 return 0;
98
5c9fcb5d 99 len = snprintf(modalias, size, "acpi:");
29b71a1c
TR
100 size -= len;
101
7f47fa6c
BH
102 list_for_each_entry(id, &acpi_dev->pnp.ids, list) {
103 count = snprintf(&modalias[len], size, "%s:", id->id);
5c9fcb5d
ZR
104 if (count < 0 || count >= size)
105 return -EINVAL;
106 len += count;
107 size -= count;
108 }
109
29b71a1c
TR
110 modalias[len] = '\0';
111 return len;
112}
113
114static ssize_t
115acpi_device_modalias_show(struct device *dev, struct device_attribute *attr, char *buf) {
116 struct acpi_device *acpi_dev = to_acpi_device(dev);
117 int len;
118
119 /* Device has no HID and no CID or string is >1024 */
120 len = create_modalias(acpi_dev, buf, 1024);
121 if (len <= 0)
122 return 0;
123 buf[len++] = '\n';
124 return len;
125}
126static DEVICE_ATTR(modalias, 0444, acpi_device_modalias_show, NULL);
127
7f28ddec
RW
128static acpi_status acpi_bus_offline(acpi_handle handle, u32 lvl, void *data,
129 void **ret_p)
683058e3
RW
130{
131 struct acpi_device *device = NULL;
132 struct acpi_device_physical_node *pn;
303bfdb1 133 bool second_pass = (bool)data;
683058e3
RW
134 acpi_status status = AE_OK;
135
136 if (acpi_bus_get_device(handle, &device))
137 return AE_OK;
138
7f28ddec
RW
139 if (device->handler && !device->handler->hotplug.enabled) {
140 *ret_p = &device->dev;
141 return AE_SUPPORT;
142 }
143
683058e3
RW
144 mutex_lock(&device->physical_node_lock);
145
146 list_for_each_entry(pn, &device->physical_node_list, node) {
147 int ret;
148
303bfdb1
RW
149 if (second_pass) {
150 /* Skip devices offlined by the first pass. */
151 if (pn->put_online)
152 continue;
153 } else {
154 pn->put_online = false;
155 }
683058e3
RW
156 ret = device_offline(pn->dev);
157 if (acpi_force_hot_remove)
158 continue;
159
303bfdb1
RW
160 if (ret >= 0) {
161 pn->put_online = !ret;
162 } else {
163 *ret_p = pn->dev;
164 if (second_pass) {
165 status = AE_ERROR;
166 break;
167 }
683058e3 168 }
683058e3
RW
169 }
170
171 mutex_unlock(&device->physical_node_lock);
172
173 return status;
174}
175
7f28ddec
RW
176static acpi_status acpi_bus_online(acpi_handle handle, u32 lvl, void *data,
177 void **ret_p)
683058e3
RW
178{
179 struct acpi_device *device = NULL;
180 struct acpi_device_physical_node *pn;
181
182 if (acpi_bus_get_device(handle, &device))
183 return AE_OK;
184
185 mutex_lock(&device->physical_node_lock);
186
187 list_for_each_entry(pn, &device->physical_node_list, node)
188 if (pn->put_online) {
189 device_online(pn->dev);
190 pn->put_online = false;
191 }
192
193 mutex_unlock(&device->physical_node_lock);
194
195 return AE_OK;
196}
197
a33ec399 198static int acpi_scan_hot_remove(struct acpi_device *device)
1da177e4 199{
5993c467 200 acpi_handle handle = device->handle;
303bfdb1 201 struct device *errdev;
a33ec399 202 acpi_status status;
882fd12e 203 unsigned long long sta;
f058cdf4 204
3757b948 205 /* If there is no handle, the device node has been unregistered. */
a33ec399 206 if (!handle) {
3757b948
RW
207 dev_dbg(&device->dev, "ACPI handle missing\n");
208 put_device(&device->dev);
a33ec399 209 return -EINVAL;
3757b948
RW
210 }
211
303bfdb1
RW
212 /*
213 * Carry out two passes here and ignore errors in the first pass,
214 * because if the devices in question are memory blocks and
215 * CONFIG_MEMCG is set, one of the blocks may hold data structures
216 * that the other blocks depend on, but it is not known in advance which
217 * block holds them.
218 *
219 * If the first pass is successful, the second one isn't needed, though.
220 */
221 errdev = NULL;
7f28ddec
RW
222 status = acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
223 NULL, acpi_bus_offline, (void *)false,
224 (void **)&errdev);
225 if (status == AE_SUPPORT) {
226 dev_warn(errdev, "Offline disabled.\n");
227 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
228 acpi_bus_online, NULL, NULL, NULL);
229 put_device(&device->dev);
230 return -EPERM;
231 }
232 acpi_bus_offline(handle, 0, (void *)false, (void **)&errdev);
303bfdb1
RW
233 if (errdev) {
234 errdev = NULL;
683058e3 235 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
7f28ddec
RW
236 NULL, acpi_bus_offline, (void *)true,
237 (void **)&errdev);
303bfdb1 238 if (!errdev || acpi_force_hot_remove)
7f28ddec
RW
239 acpi_bus_offline(handle, 0, (void *)true,
240 (void **)&errdev);
303bfdb1
RW
241
242 if (errdev && !acpi_force_hot_remove) {
243 dev_warn(errdev, "Offline failed.\n");
7f28ddec 244 acpi_bus_online(handle, 0, NULL, NULL);
303bfdb1 245 acpi_walk_namespace(ACPI_TYPE_ANY, handle,
7f28ddec
RW
246 ACPI_UINT32_MAX, acpi_bus_online,
247 NULL, NULL, NULL);
303bfdb1
RW
248 put_device(&device->dev);
249 return -EBUSY;
250 }
683058e3
RW
251 }
252
26d46867 253 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
0794469d 254 "Hot-removing device %s...\n", dev_name(&device->dev)));
26d46867 255
bfee26db 256 acpi_bus_trim(device);
683058e3 257
3757b948
RW
258 /* Device node has been unregistered. */
259 put_device(&device->dev);
b3c450c3
TK
260 device = NULL;
261
7d2421f8 262 acpi_evaluate_lck(handle, 0);
1da177e4
LT
263 /*
264 * TBD: _EJD support.
265 */
7d2421f8
JL
266 status = acpi_evaluate_ej0(handle);
267 if (status == AE_NOT_FOUND)
268 return -ENODEV;
269 else if (ACPI_FAILURE(status))
270 return -EIO;
1da177e4 271
882fd12e
TK
272 /*
273 * Verify if eject was indeed successful. If not, log an error
274 * message. No need to call _OST since _EJ0 call was made OK.
275 */
276 status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
277 if (ACPI_FAILURE(status)) {
278 acpi_handle_warn(handle,
279 "Status check after eject failed (0x%x)\n", status);
280 } else if (sta & ACPI_STA_DEVICE_ENABLED) {
281 acpi_handle_warn(handle,
282 "Eject incomplete - status 0x%llx\n", sta);
283 }
284
a33ec399
RW
285 return 0;
286}
1da177e4 287
43d38883 288void acpi_bus_device_eject(struct acpi_device *device, u32 ost_src)
a33ec399 289{
a3b1b1ef 290 acpi_handle handle = device->handle;
a33ec399
RW
291 struct acpi_scan_handler *handler;
292 u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
f943db40 293 int error;
a33ec399 294
e0ae8fee 295 lock_device_hotplug();
a33ec399
RW
296 mutex_lock(&acpi_scan_lock);
297
a33ec399 298 handler = device->handler;
a3b1b1ef
RW
299 if (!handler || !handler->hotplug.enabled) {
300 put_device(&device->dev);
7f28ddec 301 goto err_support;
a3b1b1ef
RW
302 }
303
304 if (ost_src == ACPI_NOTIFY_EJECT_REQUEST)
305 acpi_evaluate_hotplug_ost(handle, ACPI_NOTIFY_EJECT_REQUEST,
306 ACPI_OST_SC_EJECT_IN_PROGRESS, NULL);
7f28ddec 307
f943db40 308 if (handler->hotplug.mode == AHM_CONTAINER)
a33ec399 309 kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
a33ec399 310
f943db40 311 error = acpi_scan_hot_remove(device);
7f28ddec
RW
312 if (error == -EPERM) {
313 goto err_support;
314 } else if (error) {
f943db40 315 goto err_out;
7f28ddec 316 }
1da177e4 317
3757b948 318 out:
f058cdf4 319 mutex_unlock(&acpi_scan_lock);
e0ae8fee 320 unlock_device_hotplug();
c8d72a5e 321 return;
a33ec399 322
7f28ddec
RW
323 err_support:
324 ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED;
a33ec399 325 err_out:
a3b1b1ef 326 acpi_evaluate_hotplug_ost(handle, ost_src, ost_code, NULL);
a33ec399
RW
327 goto out;
328}
329
330static void acpi_scan_bus_device_check(acpi_handle handle, u32 ost_source)
331{
332 struct acpi_device *device = NULL;
333 u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
334 int error;
335
683058e3 336 lock_device_hotplug();
e0ae8fee 337 mutex_lock(&acpi_scan_lock);
a33ec399 338
8832f7e4
RW
339 if (ost_source != ACPI_NOTIFY_BUS_CHECK) {
340 acpi_bus_get_device(handle, &device);
341 if (device) {
342 dev_warn(&device->dev, "Attempt to re-insert\n");
343 goto out;
344 }
a33ec399 345 }
a33ec399
RW
346 error = acpi_bus_scan(handle);
347 if (error) {
348 acpi_handle_warn(handle, "Namespace scan failure\n");
349 goto out;
350 }
351 error = acpi_bus_get_device(handle, &device);
352 if (error) {
353 acpi_handle_warn(handle, "Missing device node object\n");
354 goto out;
355 }
356 ost_code = ACPI_OST_SC_SUCCESS;
357 if (device->handler && device->handler->hotplug.mode == AHM_CONTAINER)
358 kobject_uevent(&device->dev.kobj, KOBJ_ONLINE);
359
360 out:
361 acpi_evaluate_hotplug_ost(handle, ost_source, ost_code, NULL);
362 mutex_unlock(&acpi_scan_lock);
e0ae8fee 363 unlock_device_hotplug();
a33ec399
RW
364}
365
366static void acpi_scan_bus_check(void *context)
367{
368 acpi_scan_bus_device_check((acpi_handle)context,
369 ACPI_NOTIFY_BUS_CHECK);
370}
371
372static void acpi_scan_device_check(void *context)
373{
374 acpi_scan_bus_device_check((acpi_handle)context,
375 ACPI_NOTIFY_DEVICE_CHECK);
376}
377
2cbb14fb
TK
378static void acpi_hotplug_unsupported(acpi_handle handle, u32 type)
379{
380 u32 ost_status;
381
382 switch (type) {
383 case ACPI_NOTIFY_BUS_CHECK:
384 acpi_handle_debug(handle,
385 "ACPI_NOTIFY_BUS_CHECK event: unsupported\n");
386 ost_status = ACPI_OST_SC_INSERT_NOT_SUPPORTED;
387 break;
388 case ACPI_NOTIFY_DEVICE_CHECK:
389 acpi_handle_debug(handle,
390 "ACPI_NOTIFY_DEVICE_CHECK event: unsupported\n");
391 ost_status = ACPI_OST_SC_INSERT_NOT_SUPPORTED;
392 break;
393 case ACPI_NOTIFY_EJECT_REQUEST:
394 acpi_handle_debug(handle,
395 "ACPI_NOTIFY_EJECT_REQUEST event: unsupported\n");
396 ost_status = ACPI_OST_SC_EJECT_NOT_SUPPORTED;
397 break;
398 default:
399 /* non-hotplug event; possibly handled by other handler */
400 return;
401 }
402
403 acpi_evaluate_hotplug_ost(handle, type, ost_status, NULL);
404}
405
a3b1b1ef
RW
406/**
407 * acpi_bus_hot_remove_device: Hot-remove a device and its children.
408 * @context: Address of the ACPI device object to hot-remove.
409 */
43d38883 410static void acpi_bus_hot_remove_device(void *context)
a3b1b1ef
RW
411{
412 acpi_bus_device_eject(context, ACPI_NOTIFY_EJECT_REQUEST);
413}
414
2cbb14fb 415static void acpi_hotplug_notify_cb(acpi_handle handle, u32 type, void *data)
a33ec399
RW
416{
417 acpi_osd_exec_callback callback;
2cbb14fb 418 struct acpi_scan_handler *handler = data;
a3b1b1ef 419 struct acpi_device *adev;
a33ec399
RW
420 acpi_status status;
421
2cbb14fb
TK
422 if (!handler->hotplug.enabled)
423 return acpi_hotplug_unsupported(handle, type);
424
a33ec399
RW
425 switch (type) {
426 case ACPI_NOTIFY_BUS_CHECK:
427 acpi_handle_debug(handle, "ACPI_NOTIFY_BUS_CHECK event\n");
428 callback = acpi_scan_bus_check;
429 break;
430 case ACPI_NOTIFY_DEVICE_CHECK:
431 acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_CHECK event\n");
432 callback = acpi_scan_device_check;
433 break;
434 case ACPI_NOTIFY_EJECT_REQUEST:
435 acpi_handle_debug(handle, "ACPI_NOTIFY_EJECT_REQUEST event\n");
a3b1b1ef
RW
436 status = acpi_bus_get_device(handle, &adev);
437 if (ACPI_FAILURE(status))
438 goto err_out;
439
440 get_device(&adev->dev);
441 callback = acpi_bus_hot_remove_device;
442 status = acpi_os_hotplug_execute(callback, adev);
443 if (ACPI_SUCCESS(status))
444 return;
445
446 put_device(&adev->dev);
447 goto err_out;
a33ec399
RW
448 default:
449 /* non-hotplug event; possibly handled by other handler */
450 return;
451 }
452 status = acpi_os_hotplug_execute(callback, handle);
a3b1b1ef
RW
453 if (ACPI_SUCCESS(status))
454 return;
5add99cf 455
a3b1b1ef
RW
456 err_out:
457 acpi_evaluate_hotplug_ost(handle, type,
458 ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL);
1da177e4
LT
459}
460
836aedb1
RW
461static ssize_t real_power_state_show(struct device *dev,
462 struct device_attribute *attr, char *buf)
463{
464 struct acpi_device *adev = to_acpi_device(dev);
465 int state;
466 int ret;
467
468 ret = acpi_device_get_power(adev, &state);
469 if (ret)
470 return ret;
471
472 return sprintf(buf, "%s\n", acpi_power_state_string(state));
473}
474
475static DEVICE_ATTR(real_power_state, 0444, real_power_state_show, NULL);
476
477static ssize_t power_state_show(struct device *dev,
478 struct device_attribute *attr, char *buf)
479{
480 struct acpi_device *adev = to_acpi_device(dev);
481
482 return sprintf(buf, "%s\n", acpi_power_state_string(adev->power.state));
483}
484
485static DEVICE_ATTR(power_state, 0444, power_state_show, NULL);
486
5add99cf
RW
487static void acpi_eject_store_work(void *context)
488{
a3b1b1ef 489 acpi_bus_device_eject(context, ACPI_OST_EC_OSPM_EJECT);
5add99cf
RW
490}
491
1da177e4 492static ssize_t
f883d9db
PM
493acpi_eject_store(struct device *d, struct device_attribute *attr,
494 const char *buf, size_t count)
1da177e4 495{
f883d9db 496 struct acpi_device *acpi_device = to_acpi_device(d);
a33ec399
RW
497 acpi_object_type not_used;
498 acpi_status status;
1da177e4 499
a33ec399 500 if (!count || buf[0] != '1')
1da177e4 501 return -EINVAL;
1da177e4 502
a33ec399
RW
503 if ((!acpi_device->handler || !acpi_device->handler->hotplug.enabled)
504 && !acpi_device->driver)
505 return -ENODEV;
506
507 status = acpi_get_type(acpi_device->handle, &not_used);
508 if (ACPI_FAILURE(status) || !acpi_device->flags.ejectable)
509 return -ENODEV;
510
f943db40 511 acpi_evaluate_hotplug_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT,
a33ec399 512 ACPI_OST_SC_EJECT_IN_PROGRESS, NULL);
a33ec399 513 get_device(&acpi_device->dev);
5add99cf 514 status = acpi_os_hotplug_execute(acpi_eject_store_work, acpi_device);
f943db40
RW
515 if (ACPI_SUCCESS(status))
516 return count;
a33ec399 517
f943db40 518 put_device(&acpi_device->dev);
f943db40 519 acpi_evaluate_hotplug_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT,
a33ec399 520 ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL);
5add99cf 521 return status == AE_NO_MEMORY ? -ENOMEM : -EAGAIN;
1da177e4
LT
522}
523
f883d9db 524static DEVICE_ATTR(eject, 0200, NULL, acpi_eject_store);
1da177e4 525
e49bd2dd
ZR
526static ssize_t
527acpi_device_hid_show(struct device *dev, struct device_attribute *attr, char *buf) {
528 struct acpi_device *acpi_dev = to_acpi_device(dev);
1da177e4 529
ea8d82fd 530 return sprintf(buf, "%s\n", acpi_device_hid(acpi_dev));
1da177e4 531}
e49bd2dd 532static DEVICE_ATTR(hid, 0444, acpi_device_hid_show, NULL);
1da177e4 533
923d4a45
LZ
534static ssize_t acpi_device_uid_show(struct device *dev,
535 struct device_attribute *attr, char *buf)
536{
537 struct acpi_device *acpi_dev = to_acpi_device(dev);
538
539 return sprintf(buf, "%s\n", acpi_dev->pnp.unique_id);
540}
541static DEVICE_ATTR(uid, 0444, acpi_device_uid_show, NULL);
542
543static ssize_t acpi_device_adr_show(struct device *dev,
544 struct device_attribute *attr, char *buf)
545{
546 struct acpi_device *acpi_dev = to_acpi_device(dev);
547
548 return sprintf(buf, "0x%08x\n",
549 (unsigned int)(acpi_dev->pnp.bus_address));
550}
551static DEVICE_ATTR(adr, 0444, acpi_device_adr_show, NULL);
552
e49bd2dd
ZR
553static ssize_t
554acpi_device_path_show(struct device *dev, struct device_attribute *attr, char *buf) {
555 struct acpi_device *acpi_dev = to_acpi_device(dev);
556 struct acpi_buffer path = {ACPI_ALLOCATE_BUFFER, NULL};
557 int result;
1da177e4 558
e49bd2dd 559 result = acpi_get_name(acpi_dev->handle, ACPI_FULL_PATHNAME, &path);
0c526d96 560 if (result)
e49bd2dd 561 goto end;
1da177e4 562
e49bd2dd
ZR
563 result = sprintf(buf, "%s\n", (char*)path.pointer);
564 kfree(path.pointer);
0c526d96 565end:
e49bd2dd 566 return result;
1da177e4 567}
e49bd2dd 568static DEVICE_ATTR(path, 0444, acpi_device_path_show, NULL);
1da177e4 569
d1efe3c3
LO
570/* sysfs file that shows description text from the ACPI _STR method */
571static ssize_t description_show(struct device *dev,
572 struct device_attribute *attr,
573 char *buf) {
574 struct acpi_device *acpi_dev = to_acpi_device(dev);
575 int result;
576
577 if (acpi_dev->pnp.str_obj == NULL)
578 return 0;
579
580 /*
581 * The _STR object contains a Unicode identifier for a device.
582 * We need to convert to utf-8 so it can be displayed.
583 */
584 result = utf16s_to_utf8s(
585 (wchar_t *)acpi_dev->pnp.str_obj->buffer.pointer,
586 acpi_dev->pnp.str_obj->buffer.length,
587 UTF16_LITTLE_ENDIAN, buf,
588 PAGE_SIZE);
589
590 buf[result++] = '\n';
591
592 return result;
593}
594static DEVICE_ATTR(description, 0444, description_show, NULL);
595
bb74ac23
YI
596static ssize_t
597acpi_device_sun_show(struct device *dev, struct device_attribute *attr,
598 char *buf) {
599 struct acpi_device *acpi_dev = to_acpi_device(dev);
600
601 return sprintf(buf, "%lu\n", acpi_dev->pnp.sun);
602}
603static DEVICE_ATTR(sun, 0444, acpi_device_sun_show, NULL);
604
e49bd2dd 605static int acpi_device_setup_files(struct acpi_device *dev)
1da177e4 606{
d1efe3c3 607 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
f883d9db 608 acpi_status status;
bb74ac23 609 unsigned long long sun;
e49bd2dd 610 int result = 0;
1da177e4
LT
611
612 /*
e49bd2dd 613 * Devices gotten from FADT don't have a "path" attribute
1da177e4 614 */
0c526d96 615 if (dev->handle) {
e49bd2dd 616 result = device_create_file(&dev->dev, &dev_attr_path);
0c526d96 617 if (result)
e49bd2dd 618 goto end;
1da177e4
LT
619 }
620
2b2ae7c7
TR
621 if (!list_empty(&dev->pnp.ids)) {
622 result = device_create_file(&dev->dev, &dev_attr_hid);
623 if (result)
624 goto end;
1da177e4 625
2b2ae7c7
TR
626 result = device_create_file(&dev->dev, &dev_attr_modalias);
627 if (result)
628 goto end;
629 }
29b71a1c 630
d1efe3c3
LO
631 /*
632 * If device has _STR, 'description' file is created
633 */
952c63e9 634 if (acpi_has_method(dev->handle, "_STR")) {
d1efe3c3
LO
635 status = acpi_evaluate_object(dev->handle, "_STR",
636 NULL, &buffer);
637 if (ACPI_FAILURE(status))
638 buffer.pointer = NULL;
639 dev->pnp.str_obj = buffer.pointer;
640 result = device_create_file(&dev->dev, &dev_attr_description);
641 if (result)
642 goto end;
643 }
644
d4e1a692 645 if (dev->pnp.type.bus_address)
923d4a45
LZ
646 result = device_create_file(&dev->dev, &dev_attr_adr);
647 if (dev->pnp.unique_id)
648 result = device_create_file(&dev->dev, &dev_attr_uid);
649
bb74ac23
YI
650 status = acpi_evaluate_integer(dev->handle, "_SUN", NULL, &sun);
651 if (ACPI_SUCCESS(status)) {
652 dev->pnp.sun = (unsigned long)sun;
653 result = device_create_file(&dev->dev, &dev_attr_sun);
654 if (result)
655 goto end;
656 } else {
657 dev->pnp.sun = (unsigned long)-1;
658 }
659
e49bd2dd
ZR
660 /*
661 * If device has _EJ0, 'eject' file is created that is used to trigger
662 * hot-removal function from userland.
663 */
952c63e9 664 if (acpi_has_method(dev->handle, "_EJ0")) {
e49bd2dd 665 result = device_create_file(&dev->dev, &dev_attr_eject);
836aedb1
RW
666 if (result)
667 return result;
668 }
669
670 if (dev->flags.power_manageable) {
671 result = device_create_file(&dev->dev, &dev_attr_power_state);
672 if (result)
673 return result;
674
675 if (dev->power.flags.power_resources)
676 result = device_create_file(&dev->dev,
677 &dev_attr_real_power_state);
678 }
679
0c526d96 680end:
e49bd2dd 681 return result;
1da177e4
LT
682}
683
f883d9db 684static void acpi_device_remove_files(struct acpi_device *dev)
1da177e4 685{
836aedb1
RW
686 if (dev->flags.power_manageable) {
687 device_remove_file(&dev->dev, &dev_attr_power_state);
688 if (dev->power.flags.power_resources)
689 device_remove_file(&dev->dev,
690 &dev_attr_real_power_state);
691 }
692
f883d9db 693 /*
d1efe3c3
LO
694 * If device has _STR, remove 'description' file
695 */
952c63e9 696 if (acpi_has_method(dev->handle, "_STR")) {
d1efe3c3
LO
697 kfree(dev->pnp.str_obj);
698 device_remove_file(&dev->dev, &dev_attr_description);
699 }
700 /*
701 * If device has _EJ0, remove 'eject' file.
f883d9db 702 */
952c63e9 703 if (acpi_has_method(dev->handle, "_EJ0"))
f883d9db 704 device_remove_file(&dev->dev, &dev_attr_eject);
1da177e4 705
952c63e9 706 if (acpi_has_method(dev->handle, "_SUN"))
bb74ac23
YI
707 device_remove_file(&dev->dev, &dev_attr_sun);
708
923d4a45
LZ
709 if (dev->pnp.unique_id)
710 device_remove_file(&dev->dev, &dev_attr_uid);
d4e1a692 711 if (dev->pnp.type.bus_address)
923d4a45 712 device_remove_file(&dev->dev, &dev_attr_adr);
1131b938
BH
713 device_remove_file(&dev->dev, &dev_attr_modalias);
714 device_remove_file(&dev->dev, &dev_attr_hid);
0c526d96 715 if (dev->handle)
e49bd2dd 716 device_remove_file(&dev->dev, &dev_attr_path);
1da177e4 717}
1da177e4 718/* --------------------------------------------------------------------------
9e89dde2 719 ACPI Bus operations
1da177e4 720 -------------------------------------------------------------------------- */
29b71a1c 721
cf761af9
MW
722static const struct acpi_device_id *__acpi_match_device(
723 struct acpi_device *device, const struct acpi_device_id *ids)
29b71a1c
TR
724{
725 const struct acpi_device_id *id;
7f47fa6c 726 struct acpi_hardware_id *hwid;
29b71a1c 727
39a0ad87
ZY
728 /*
729 * If the device is not present, it is unnecessary to load device
730 * driver for it.
731 */
732 if (!device->status.present)
cf761af9 733 return NULL;
39a0ad87 734
7f47fa6c
BH
735 for (id = ids; id->id[0]; id++)
736 list_for_each_entry(hwid, &device->pnp.ids, list)
737 if (!strcmp((char *) id->id, hwid->id))
cf761af9
MW
738 return id;
739
740 return NULL;
741}
742
743/**
744 * acpi_match_device - Match a struct device against a given list of ACPI IDs
745 * @ids: Array of struct acpi_device_id object to match against.
746 * @dev: The device structure to match.
747 *
748 * Check if @dev has a valid ACPI handle and if there is a struct acpi_device
749 * object for that handle and use that object to match against a given list of
750 * device IDs.
751 *
752 * Return a pointer to the first matching ID on success or %NULL on failure.
753 */
754const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
755 const struct device *dev)
756{
757 struct acpi_device *adev;
0613e1f7 758 acpi_handle handle = ACPI_HANDLE(dev);
cf761af9 759
0613e1f7 760 if (!ids || !handle || acpi_bus_get_device(handle, &adev))
cf761af9
MW
761 return NULL;
762
763 return __acpi_match_device(adev, ids);
764}
765EXPORT_SYMBOL_GPL(acpi_match_device);
29b71a1c 766
cf761af9
MW
767int acpi_match_device_ids(struct acpi_device *device,
768 const struct acpi_device_id *ids)
769{
770 return __acpi_match_device(device, ids) ? 0 : -ENOENT;
29b71a1c
TR
771}
772EXPORT_SYMBOL(acpi_match_device_ids);
773
0b224527
RW
774static void acpi_free_power_resources_lists(struct acpi_device *device)
775{
776 int i;
777
993cbe59
RW
778 if (device->wakeup.flags.valid)
779 acpi_power_resources_list_free(&device->wakeup.resources);
780
0b224527
RW
781 if (!device->flags.power_manageable)
782 return;
783
784 for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) {
785 struct acpi_device_power_state *ps = &device->power.states[i];
786 acpi_power_resources_list_free(&ps->resources);
787 }
7f47fa6c
BH
788}
789
1890a97a 790static void acpi_device_release(struct device *dev)
1da177e4 791{
1890a97a 792 struct acpi_device *acpi_dev = to_acpi_device(dev);
1da177e4 793
c0af4175 794 acpi_free_pnp_ids(&acpi_dev->pnp);
0b224527 795 acpi_free_power_resources_lists(acpi_dev);
1890a97a 796 kfree(acpi_dev);
1da177e4
LT
797}
798
5d9464a4 799static int acpi_bus_match(struct device *dev, struct device_driver *drv)
9e89dde2 800{
5d9464a4
PM
801 struct acpi_device *acpi_dev = to_acpi_device(dev);
802 struct acpi_driver *acpi_drv = to_acpi_driver(drv);
1da177e4 803
209d3b17 804 return acpi_dev->flags.match_driver
805d410f 805 && !acpi_match_device_ids(acpi_dev, acpi_drv->ids);
5d9464a4 806}
1da177e4 807
7eff2e7a 808static int acpi_device_uevent(struct device *dev, struct kobj_uevent_env *env)
1da177e4 809{
5d9464a4 810 struct acpi_device *acpi_dev = to_acpi_device(dev);
7eff2e7a 811 int len;
5d9464a4 812
2b2ae7c7
TR
813 if (list_empty(&acpi_dev->pnp.ids))
814 return 0;
815
7eff2e7a
KS
816 if (add_uevent_var(env, "MODALIAS="))
817 return -ENOMEM;
818 len = create_modalias(acpi_dev, &env->buf[env->buflen - 1],
819 sizeof(env->buf) - env->buflen);
820 if (len >= (sizeof(env->buf) - env->buflen))
821 return -ENOMEM;
822 env->buflen += len;
9e89dde2 823 return 0;
1da177e4
LT
824}
825
46ec8598
BH
826static void acpi_device_notify(acpi_handle handle, u32 event, void *data)
827{
828 struct acpi_device *device = data;
829
830 device->driver->ops.notify(device, event);
831}
832
833static acpi_status acpi_device_notify_fixed(void *data)
834{
835 struct acpi_device *device = data;
836
53de5356
BH
837 /* Fixed hardware devices have no handles */
838 acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device);
46ec8598
BH
839 return AE_OK;
840}
841
842static int acpi_device_install_notify_handler(struct acpi_device *device)
843{
844 acpi_status status;
46ec8598 845
ccba2a36 846 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
46ec8598
BH
847 status =
848 acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
849 acpi_device_notify_fixed,
850 device);
ccba2a36 851 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
46ec8598
BH
852 status =
853 acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
854 acpi_device_notify_fixed,
855 device);
856 else
857 status = acpi_install_notify_handler(device->handle,
858 ACPI_DEVICE_NOTIFY,
859 acpi_device_notify,
860 device);
861
862 if (ACPI_FAILURE(status))
863 return -EINVAL;
864 return 0;
865}
866
867static void acpi_device_remove_notify_handler(struct acpi_device *device)
868{
ccba2a36 869 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
46ec8598
BH
870 acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
871 acpi_device_notify_fixed);
ccba2a36 872 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
46ec8598
BH
873 acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
874 acpi_device_notify_fixed);
875 else
876 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
877 acpi_device_notify);
878}
879
d9e455f5 880static int acpi_device_probe(struct device *dev)
1da177e4 881{
5d9464a4
PM
882 struct acpi_device *acpi_dev = to_acpi_device(dev);
883 struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver);
884 int ret;
885
24071f47
RW
886 if (acpi_dev->handler)
887 return -EINVAL;
888
d9e455f5
RW
889 if (!acpi_drv->ops.add)
890 return -ENOSYS;
46ec8598 891
d9e455f5
RW
892 ret = acpi_drv->ops.add(acpi_dev);
893 if (ret)
894 return ret;
46ec8598 895
d9e455f5
RW
896 acpi_dev->driver = acpi_drv;
897 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
898 "Driver [%s] successfully bound to device [%s]\n",
899 acpi_drv->name, acpi_dev->pnp.bus_id));
900
901 if (acpi_drv->ops.notify) {
902 ret = acpi_device_install_notify_handler(acpi_dev);
903 if (ret) {
904 if (acpi_drv->ops.remove)
905 acpi_drv->ops.remove(acpi_dev);
906
907 acpi_dev->driver = NULL;
908 acpi_dev->driver_data = NULL;
909 return ret;
910 }
5d9464a4 911 }
d9e455f5
RW
912
913 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found driver [%s] for device [%s]\n",
914 acpi_drv->name, acpi_dev->pnp.bus_id));
915 get_device(dev);
916 return 0;
5d9464a4 917}
1da177e4 918
5d9464a4
PM
919static int acpi_device_remove(struct device * dev)
920{
921 struct acpi_device *acpi_dev = to_acpi_device(dev);
922 struct acpi_driver *acpi_drv = acpi_dev->driver;
923
924 if (acpi_drv) {
46ec8598
BH
925 if (acpi_drv->ops.notify)
926 acpi_device_remove_notify_handler(acpi_dev);
5d9464a4 927 if (acpi_drv->ops.remove)
51fac838 928 acpi_drv->ops.remove(acpi_dev);
1da177e4 929 }
5d9464a4 930 acpi_dev->driver = NULL;
db89b4f0 931 acpi_dev->driver_data = NULL;
1da177e4 932
5d9464a4 933 put_device(dev);
9e89dde2
ZR
934 return 0;
935}
1da177e4 936
55955aad 937struct bus_type acpi_bus_type = {
9e89dde2 938 .name = "acpi",
5d9464a4
PM
939 .match = acpi_bus_match,
940 .probe = acpi_device_probe,
941 .remove = acpi_device_remove,
942 .uevent = acpi_device_uevent,
9e89dde2
ZR
943};
944
caf5c03f
RW
945static void acpi_bus_data_handler(acpi_handle handle, void *context)
946{
947 /* Intentionally empty. */
948}
949
950int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)
951{
952 acpi_status status;
953
954 if (!device)
955 return -EINVAL;
956
957 status = acpi_get_data(handle, acpi_bus_data_handler, (void **)device);
958 if (ACPI_FAILURE(status) || !*device) {
959 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No context for object [%p]\n",
960 handle));
961 return -ENODEV;
962 }
963 return 0;
964}
965EXPORT_SYMBOL_GPL(acpi_bus_get_device);
966
cf860be6
RW
967int acpi_device_add(struct acpi_device *device,
968 void (*release)(struct device *))
1da177e4 969{
4be44fcd 970 int result;
e49bd2dd
ZR
971 struct acpi_device_bus_id *acpi_device_bus_id, *new_bus_id;
972 int found = 0;
66b7ed40 973
d43e167d
RW
974 if (device->handle) {
975 acpi_status status;
976
977 status = acpi_attach_data(device->handle, acpi_bus_data_handler,
978 device);
979 if (ACPI_FAILURE(status)) {
980 acpi_handle_err(device->handle,
981 "Unable to attach device data\n");
982 return -ENODEV;
983 }
984 }
985
9e89dde2
ZR
986 /*
987 * Linkage
988 * -------
989 * Link this device to its parent and siblings.
990 */
991 INIT_LIST_HEAD(&device->children);
992 INIT_LIST_HEAD(&device->node);
9e89dde2 993 INIT_LIST_HEAD(&device->wakeup_list);
1033f904
LT
994 INIT_LIST_HEAD(&device->physical_node_list);
995 mutex_init(&device->physical_node_lock);
bc9b6407 996 INIT_LIST_HEAD(&device->power_dependent);
1da177e4 997
e49bd2dd
ZR
998 new_bus_id = kzalloc(sizeof(struct acpi_device_bus_id), GFP_KERNEL);
999 if (!new_bus_id) {
d43e167d
RW
1000 pr_err(PREFIX "Memory allocation error\n");
1001 result = -ENOMEM;
1002 goto err_detach;
1da177e4 1003 }
e49bd2dd 1004
9090589d 1005 mutex_lock(&acpi_device_lock);
e49bd2dd
ZR
1006 /*
1007 * Find suitable bus_id and instance number in acpi_bus_id_list
1008 * If failed, create one and link it into acpi_bus_id_list
1009 */
1010 list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) {
1131b938
BH
1011 if (!strcmp(acpi_device_bus_id->bus_id,
1012 acpi_device_hid(device))) {
1013 acpi_device_bus_id->instance_no++;
e49bd2dd
ZR
1014 found = 1;
1015 kfree(new_bus_id);
1016 break;
1017 }
1da177e4 1018 }
0c526d96 1019 if (!found) {
e49bd2dd 1020 acpi_device_bus_id = new_bus_id;
1131b938 1021 strcpy(acpi_device_bus_id->bus_id, acpi_device_hid(device));
e49bd2dd
ZR
1022 acpi_device_bus_id->instance_no = 0;
1023 list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list);
1da177e4 1024 }
0794469d 1025 dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, acpi_device_bus_id->instance_no);
1da177e4 1026
33b57150 1027 if (device->parent)
9e89dde2 1028 list_add_tail(&device->node, &device->parent->children);
33b57150 1029
9e89dde2
ZR
1030 if (device->wakeup.flags.valid)
1031 list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list);
9090589d 1032 mutex_unlock(&acpi_device_lock);
1da177e4 1033
1890a97a 1034 if (device->parent)
66b7ed40 1035 device->dev.parent = &device->parent->dev;
1890a97a 1036 device->dev.bus = &acpi_bus_type;
82c7d5ef 1037 device->dev.release = release;
cf860be6 1038 result = device_add(&device->dev);
0c526d96 1039 if (result) {
8b12b922 1040 dev_err(&device->dev, "Error registering device\n");
d43e167d 1041 goto err;
1da177e4 1042 }
1da177e4 1043
e49bd2dd 1044 result = acpi_device_setup_files(device);
0c526d96 1045 if (result)
0794469d
KS
1046 printk(KERN_ERR PREFIX "Error creating sysfs interface for device %s\n",
1047 dev_name(&device->dev));
1da177e4 1048
1da177e4 1049 return 0;
d43e167d
RW
1050
1051 err:
9090589d 1052 mutex_lock(&acpi_device_lock);
33b57150 1053 if (device->parent)
e49bd2dd 1054 list_del(&device->node);
e49bd2dd 1055 list_del(&device->wakeup_list);
9090589d 1056 mutex_unlock(&acpi_device_lock);
d43e167d
RW
1057
1058 err_detach:
1059 acpi_detach_data(device->handle, acpi_bus_data_handler);
e49bd2dd 1060 return result;
1da177e4
LT
1061}
1062
b17b537a 1063static void acpi_device_unregister(struct acpi_device *device)
9e89dde2 1064{
9090589d 1065 mutex_lock(&acpi_device_lock);
33b57150 1066 if (device->parent)
9e89dde2 1067 list_del(&device->node);
1da177e4 1068
9e89dde2 1069 list_del(&device->wakeup_list);
9090589d 1070 mutex_unlock(&acpi_device_lock);
1da177e4 1071
9e89dde2 1072 acpi_detach_data(device->handle, acpi_bus_data_handler);
1890a97a 1073
bc9b6407 1074 acpi_power_add_remove_device(device, false);
f883d9db 1075 acpi_device_remove_files(device);
b1c0f99b
RW
1076 if (device->remove)
1077 device->remove(device);
1078
cf860be6 1079 device_del(&device->dev);
bc9b6407 1080 /*
0aa120a0
RW
1081 * Transition the device to D3cold to drop the reference counts of all
1082 * power resources the device depends on and turn off the ones that have
1083 * no more references.
bc9b6407 1084 */
0aa120a0 1085 acpi_device_set_power(device, ACPI_STATE_D3_COLD);
3757b948 1086 device->handle = NULL;
cf860be6 1087 put_device(&device->dev);
1da177e4
LT
1088}
1089
9e89dde2
ZR
1090/* --------------------------------------------------------------------------
1091 Driver Management
1092 -------------------------------------------------------------------------- */
9e89dde2
ZR
1093/**
1094 * acpi_bus_register_driver - register a driver with the ACPI bus
1095 * @driver: driver being registered
1096 *
1097 * Registers a driver with the ACPI bus. Searches the namespace for all
1098 * devices that match the driver's criteria and binds. Returns zero for
1099 * success or a negative error status for failure.
1100 */
1101int acpi_bus_register_driver(struct acpi_driver *driver)
1da177e4 1102{
1890a97a 1103 int ret;
1da177e4 1104
9e89dde2
ZR
1105 if (acpi_disabled)
1106 return -ENODEV;
1890a97a
PM
1107 driver->drv.name = driver->name;
1108 driver->drv.bus = &acpi_bus_type;
1109 driver->drv.owner = driver->owner;
1da177e4 1110
1890a97a
PM
1111 ret = driver_register(&driver->drv);
1112 return ret;
9e89dde2 1113}
1da177e4 1114
9e89dde2
ZR
1115EXPORT_SYMBOL(acpi_bus_register_driver);
1116
1117/**
1118 * acpi_bus_unregister_driver - unregisters a driver with the APIC bus
1119 * @driver: driver to unregister
1120 *
1121 * Unregisters a driver with the ACPI bus. Searches the namespace for all
1122 * devices that match the driver's criteria and unbinds.
1123 */
1124void acpi_bus_unregister_driver(struct acpi_driver *driver)
1125{
1890a97a 1126 driver_unregister(&driver->drv);
9e89dde2
ZR
1127}
1128
1129EXPORT_SYMBOL(acpi_bus_unregister_driver);
1130
9e89dde2
ZR
1131/* --------------------------------------------------------------------------
1132 Device Enumeration
1133 -------------------------------------------------------------------------- */
5c478f49
BH
1134static struct acpi_device *acpi_bus_get_parent(acpi_handle handle)
1135{
456de893 1136 struct acpi_device *device = NULL;
5c478f49 1137 acpi_status status;
5c478f49
BH
1138
1139 /*
1140 * Fixed hardware devices do not appear in the namespace and do not
1141 * have handles, but we fabricate acpi_devices for them, so we have
1142 * to deal with them specially.
1143 */
456de893 1144 if (!handle)
5c478f49
BH
1145 return acpi_root;
1146
1147 do {
1148 status = acpi_get_parent(handle, &handle);
5c478f49 1149 if (ACPI_FAILURE(status))
456de893
RW
1150 return status == AE_NULL_ENTRY ? NULL : acpi_root;
1151 } while (acpi_bus_get_device(handle, &device));
1152 return device;
5c478f49
BH
1153}
1154
9e89dde2
ZR
1155acpi_status
1156acpi_bus_get_ejd(acpi_handle handle, acpi_handle *ejd)
1157{
1158 acpi_status status;
1159 acpi_handle tmp;
1160 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
1161 union acpi_object *obj;
1162
1163 status = acpi_get_handle(handle, "_EJD", &tmp);
1164 if (ACPI_FAILURE(status))
1165 return status;
1166
1167 status = acpi_evaluate_object(handle, "_EJD", NULL, &buffer);
1168 if (ACPI_SUCCESS(status)) {
1169 obj = buffer.pointer;
3b5fee59
HM
1170 status = acpi_get_handle(ACPI_ROOT_OBJECT, obj->string.pointer,
1171 ejd);
9e89dde2
ZR
1172 kfree(buffer.pointer);
1173 }
1174 return status;
1175}
1176EXPORT_SYMBOL_GPL(acpi_bus_get_ejd);
1177
e88c9c60
RW
1178static int acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
1179 struct acpi_device_wakeup *wakeup)
9e89dde2 1180{
b581a7f9
RW
1181 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
1182 union acpi_object *package = NULL;
9e89dde2 1183 union acpi_object *element = NULL;
b581a7f9 1184 acpi_status status;
e88c9c60 1185 int err = -ENODATA;
9e89dde2 1186
b581a7f9 1187 if (!wakeup)
e88c9c60 1188 return -EINVAL;
9e89dde2 1189
993cbe59 1190 INIT_LIST_HEAD(&wakeup->resources);
9e89dde2 1191
b581a7f9
RW
1192 /* _PRW */
1193 status = acpi_evaluate_object(handle, "_PRW", NULL, &buffer);
1194 if (ACPI_FAILURE(status)) {
1195 ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRW"));
e88c9c60 1196 return err;
b581a7f9
RW
1197 }
1198
1199 package = (union acpi_object *)buffer.pointer;
1200
e88c9c60 1201 if (!package || package->package.count < 2)
b581a7f9 1202 goto out;
b581a7f9 1203
9e89dde2 1204 element = &(package->package.elements[0]);
e88c9c60 1205 if (!element)
b581a7f9 1206 goto out;
e88c9c60 1207
9e89dde2
ZR
1208 if (element->type == ACPI_TYPE_PACKAGE) {
1209 if ((element->package.count < 2) ||
1210 (element->package.elements[0].type !=
1211 ACPI_TYPE_LOCAL_REFERENCE)
e88c9c60 1212 || (element->package.elements[1].type != ACPI_TYPE_INTEGER))
b581a7f9 1213 goto out;
e88c9c60 1214
b581a7f9 1215 wakeup->gpe_device =
9e89dde2 1216 element->package.elements[0].reference.handle;
b581a7f9 1217 wakeup->gpe_number =
9e89dde2
ZR
1218 (u32) element->package.elements[1].integer.value;
1219 } else if (element->type == ACPI_TYPE_INTEGER) {
b581a7f9
RW
1220 wakeup->gpe_device = NULL;
1221 wakeup->gpe_number = element->integer.value;
1222 } else {
b581a7f9
RW
1223 goto out;
1224 }
9e89dde2
ZR
1225
1226 element = &(package->package.elements[1]);
e88c9c60 1227 if (element->type != ACPI_TYPE_INTEGER)
b581a7f9 1228 goto out;
e88c9c60 1229
b581a7f9 1230 wakeup->sleep_state = element->integer.value;
9e89dde2 1231
e88c9c60
RW
1232 err = acpi_extract_power_resources(package, 2, &wakeup->resources);
1233 if (err)
b581a7f9 1234 goto out;
9e89dde2 1235
0596a52b
RW
1236 if (!list_empty(&wakeup->resources)) {
1237 int sleep_state;
9e89dde2 1238
b5d667eb
RW
1239 err = acpi_power_wakeup_list_init(&wakeup->resources,
1240 &sleep_state);
1241 if (err) {
1242 acpi_handle_warn(handle, "Retrieving current states "
1243 "of wakeup power resources failed\n");
1244 acpi_power_resources_list_free(&wakeup->resources);
1245 goto out;
1246 }
0596a52b
RW
1247 if (sleep_state < wakeup->sleep_state) {
1248 acpi_handle_warn(handle, "Overriding _PRW sleep state "
1249 "(S%d) by S%d from power resources\n",
1250 (int)wakeup->sleep_state, sleep_state);
1251 wakeup->sleep_state = sleep_state;
1252 }
1253 }
bba63a29 1254 acpi_setup_gpe_for_wake(handle, wakeup->gpe_device, wakeup->gpe_number);
9874647b 1255
b581a7f9
RW
1256 out:
1257 kfree(buffer.pointer);
e88c9c60 1258 return err;
1da177e4
LT
1259}
1260
f517709d 1261static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
1da177e4 1262{
29b71a1c 1263 struct acpi_device_id button_device_ids[] = {
29b71a1c 1264 {"PNP0C0C", 0},
b7e38304 1265 {"PNP0C0D", 0},
29b71a1c
TR
1266 {"PNP0C0E", 0},
1267 {"", 0},
1268 };
f517709d
RW
1269 acpi_status status;
1270 acpi_event_status event_status;
1271
b67ea761 1272 device->wakeup.flags.notifier_present = 0;
f517709d
RW
1273
1274 /* Power button, Lid switch always enable wakeup */
1275 if (!acpi_match_device_ids(device, button_device_ids)) {
1276 device->wakeup.flags.run_wake = 1;
b7e38304
ZR
1277 if (!acpi_match_device_ids(device, &button_device_ids[1])) {
1278 /* Do not use Lid/sleep button for S5 wakeup */
1279 if (device->wakeup.sleep_state == ACPI_STATE_S5)
1280 device->wakeup.sleep_state = ACPI_STATE_S4;
1281 }
f2b56bc8 1282 device_set_wakeup_capable(&device->dev, true);
f517709d
RW
1283 return;
1284 }
1285
e8e18c95
RW
1286 status = acpi_get_gpe_status(device->wakeup.gpe_device,
1287 device->wakeup.gpe_number,
1288 &event_status);
f517709d
RW
1289 if (status == AE_OK)
1290 device->wakeup.flags.run_wake =
1291 !!(event_status & ACPI_EVENT_FLAG_HANDLE);
1292}
1293
d57d09a4 1294static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
f517709d 1295{
e88c9c60 1296 int err;
29b71a1c 1297
d57d09a4 1298 /* Presence of _PRW indicates wake capable */
952c63e9 1299 if (!acpi_has_method(device->handle, "_PRW"))
d57d09a4
RW
1300 return;
1301
e88c9c60
RW
1302 err = acpi_bus_extract_wakeup_device_power_package(device->handle,
1303 &device->wakeup);
1304 if (err) {
1305 dev_err(&device->dev, "_PRW evaluation error: %d\n", err);
d57d09a4 1306 return;
9e89dde2 1307 }
1da177e4 1308
9e89dde2 1309 device->wakeup.flags.valid = 1;
9b83ccd2 1310 device->wakeup.prepare_count = 0;
f517709d 1311 acpi_bus_set_run_wake_flags(device);
729b2bdb
ZY
1312 /* Call _PSW/_DSW object to disable its ability to wake the sleeping
1313 * system for the ACPI device with the _PRW object.
1314 * The _PSW object is depreciated in ACPI 3.0 and is replaced by _DSW.
1315 * So it is necessary to call _DSW object first. Only when it is not
1316 * present will the _PSW object used.
1317 */
e88c9c60
RW
1318 err = acpi_device_sleep_wake(device, 0, 0, 0);
1319 if (err)
77e76609
RW
1320 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
1321 "error in _DSW or _PSW evaluation\n"));
1da177e4 1322}
1da177e4 1323
f33ce568
RW
1324static void acpi_bus_init_power_state(struct acpi_device *device, int state)
1325{
1326 struct acpi_device_power_state *ps = &device->power.states[state];
ef85bdbe
RW
1327 char pathname[5] = { '_', 'P', 'R', '0' + state, '\0' };
1328 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
f33ce568 1329 acpi_status status;
bf325f95 1330
f33ce568
RW
1331 INIT_LIST_HEAD(&ps->resources);
1332
ef85bdbe
RW
1333 /* Evaluate "_PRx" to get referenced power resources */
1334 status = acpi_evaluate_object(device->handle, pathname, NULL, &buffer);
1335 if (ACPI_SUCCESS(status)) {
1336 union acpi_object *package = buffer.pointer;
1337
1338 if (buffer.length && package
1339 && package->type == ACPI_TYPE_PACKAGE
1340 && package->package.count) {
e88c9c60
RW
1341 int err = acpi_extract_power_resources(package, 0,
1342 &ps->resources);
1343 if (!err)
ef85bdbe 1344 device->power.flags.power_resources = 1;
f33ce568 1345 }
ef85bdbe 1346 ACPI_FREE(buffer.pointer);
f33ce568
RW
1347 }
1348
1349 /* Evaluate "_PSx" to see if we can do explicit sets */
ef85bdbe 1350 pathname[2] = 'S';
952c63e9 1351 if (acpi_has_method(device->handle, pathname))
f33ce568
RW
1352 ps->flags.explicit_set = 1;
1353
1354 /*
1355 * State is valid if there are means to put the device into it.
1356 * D3hot is only valid if _PR3 present.
1357 */
ef85bdbe 1358 if (!list_empty(&ps->resources)
f33ce568
RW
1359 || (ps->flags.explicit_set && state < ACPI_STATE_D3_HOT)) {
1360 ps->flags.valid = 1;
1361 ps->flags.os_accessible = 1;
1362 }
1363
1364 ps->power = -1; /* Unknown - driver assigned */
1365 ps->latency = -1; /* Unknown - driver assigned */
1366}
1367
d43e167d 1368static void acpi_bus_get_power_flags(struct acpi_device *device)
1da177e4 1369{
8bc5053b 1370 u32 i;
1a365616 1371
d43e167d 1372 /* Presence of _PS0|_PR0 indicates 'power manageable' */
952c63e9
JL
1373 if (!acpi_has_method(device->handle, "_PS0") &&
1374 !acpi_has_method(device->handle, "_PR0"))
1375 return;
1a365616 1376
d43e167d 1377 device->flags.power_manageable = 1;
4be44fcd 1378
9e89dde2
ZR
1379 /*
1380 * Power Management Flags
1381 */
952c63e9 1382 if (acpi_has_method(device->handle, "_PSC"))
9e89dde2 1383 device->power.flags.explicit_get = 1;
952c63e9 1384 if (acpi_has_method(device->handle, "_IRC"))
9e89dde2 1385 device->power.flags.inrush_current = 1;
1da177e4 1386
9e89dde2
ZR
1387 /*
1388 * Enumerate supported power management states
1389 */
f33ce568
RW
1390 for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++)
1391 acpi_bus_init_power_state(device, i);
bf325f95 1392
0b224527 1393 INIT_LIST_HEAD(&device->power.states[ACPI_STATE_D3_COLD].resources);
1da177e4 1394
9e89dde2
ZR
1395 /* Set defaults for D0 and D3 states (always valid) */
1396 device->power.states[ACPI_STATE_D0].flags.valid = 1;
1397 device->power.states[ACPI_STATE_D0].power = 100;
8ad928d5
RW
1398 device->power.states[ACPI_STATE_D3_COLD].flags.valid = 1;
1399 device->power.states[ACPI_STATE_D3_COLD].power = 0;
c8f7a62c 1400
5c7dd710
RW
1401 /* Set D3cold's explicit_set flag if _PS3 exists. */
1402 if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set)
1403 device->power.states[ACPI_STATE_D3_COLD].flags.explicit_set = 1;
1404
1399dfcd
AL
1405 /* Presence of _PS3 or _PRx means we can put the device into D3 cold */
1406 if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set ||
1407 device->power.flags.power_resources)
1408 device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1;
1409
b3785492
RW
1410 if (acpi_bus_init_power(device)) {
1411 acpi_free_power_resources_lists(device);
1412 device->flags.power_manageable = 0;
1413 }
9e89dde2 1414}
c8f7a62c 1415
d43e167d 1416static void acpi_bus_get_flags(struct acpi_device *device)
1da177e4 1417{
1da177e4 1418 /* Presence of _STA indicates 'dynamic_status' */
952c63e9 1419 if (acpi_has_method(device->handle, "_STA"))
1da177e4
LT
1420 device->flags.dynamic_status = 1;
1421
1da177e4 1422 /* Presence of _RMV indicates 'removable' */
952c63e9 1423 if (acpi_has_method(device->handle, "_RMV"))
1da177e4
LT
1424 device->flags.removable = 1;
1425
1426 /* Presence of _EJD|_EJ0 indicates 'ejectable' */
952c63e9
JL
1427 if (acpi_has_method(device->handle, "_EJD") ||
1428 acpi_has_method(device->handle, "_EJ0"))
1da177e4 1429 device->flags.ejectable = 1;
1da177e4
LT
1430}
1431
c7bcb4e9 1432static void acpi_device_get_busid(struct acpi_device *device)
1da177e4 1433{
4be44fcd
LB
1434 char bus_id[5] = { '?', 0 };
1435 struct acpi_buffer buffer = { sizeof(bus_id), bus_id };
1436 int i = 0;
1da177e4
LT
1437
1438 /*
1439 * Bus ID
1440 * ------
1441 * The device's Bus ID is simply the object name.
1442 * TBD: Shouldn't this value be unique (within the ACPI namespace)?
1443 */
859ac9a4 1444 if (ACPI_IS_ROOT_DEVICE(device)) {
1da177e4 1445 strcpy(device->pnp.bus_id, "ACPI");
859ac9a4
BH
1446 return;
1447 }
1448
1449 switch (device->device_type) {
1da177e4
LT
1450 case ACPI_BUS_TYPE_POWER_BUTTON:
1451 strcpy(device->pnp.bus_id, "PWRF");
1452 break;
1453 case ACPI_BUS_TYPE_SLEEP_BUTTON:
1454 strcpy(device->pnp.bus_id, "SLPF");
1455 break;
1456 default:
66b7ed40 1457 acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer);
1da177e4
LT
1458 /* Clean up trailing underscores (if any) */
1459 for (i = 3; i > 1; i--) {
1460 if (bus_id[i] == '_')
1461 bus_id[i] = '\0';
1462 else
1463 break;
1464 }
1465 strcpy(device->pnp.bus_id, bus_id);
1466 break;
1467 }
1468}
1469
ebf4df8d
JL
1470/*
1471 * acpi_ata_match - see if an acpi object is an ATA device
1472 *
1473 * If an acpi object has one of the ACPI ATA methods defined,
1474 * then we can safely call it an ATA device.
1475 */
1476bool acpi_ata_match(acpi_handle handle)
1477{
1478 return acpi_has_method(handle, "_GTF") ||
1479 acpi_has_method(handle, "_GTM") ||
1480 acpi_has_method(handle, "_STM") ||
1481 acpi_has_method(handle, "_SDD");
1482}
1483
54735266 1484/*
d4e1a692 1485 * acpi_bay_match - see if an acpi object is an ejectable driver bay
54735266
ZR
1486 *
1487 * If an acpi object is ejectable and has one of the ACPI ATA methods defined,
1488 * then we can safely call it an ejectable drive bay
1489 */
ebf4df8d 1490bool acpi_bay_match(acpi_handle handle)
d4e1a692 1491{
54735266
ZR
1492 acpi_handle phandle;
1493
952c63e9 1494 if (!acpi_has_method(handle, "_EJ0"))
ebf4df8d
JL
1495 return false;
1496 if (acpi_ata_match(handle))
1497 return true;
1498 if (ACPI_FAILURE(acpi_get_parent(handle, &phandle)))
1499 return false;
54735266 1500
ebf4df8d 1501 return acpi_ata_match(phandle);
54735266
ZR
1502}
1503
3620f2f2 1504/*
d4e1a692 1505 * acpi_dock_match - see if an acpi object has a _DCK method
3620f2f2 1506 */
ebf4df8d 1507bool acpi_dock_match(acpi_handle handle)
3620f2f2 1508{
ebf4df8d 1509 return acpi_has_method(handle, "_DCK");
3620f2f2
FS
1510}
1511
620e112c 1512const char *acpi_device_hid(struct acpi_device *device)
15b8dd53 1513{
7f47fa6c 1514 struct acpi_hardware_id *hid;
15b8dd53 1515
2b2ae7c7
TR
1516 if (list_empty(&device->pnp.ids))
1517 return dummy_hid;
1518
7f47fa6c
BH
1519 hid = list_first_entry(&device->pnp.ids, struct acpi_hardware_id, list);
1520 return hid->id;
1521}
1522EXPORT_SYMBOL(acpi_device_hid);
15b8dd53 1523
d4e1a692 1524static void acpi_add_id(struct acpi_device_pnp *pnp, const char *dev_id)
7f47fa6c
BH
1525{
1526 struct acpi_hardware_id *id;
15b8dd53 1527
7f47fa6c
BH
1528 id = kmalloc(sizeof(*id), GFP_KERNEL);
1529 if (!id)
1530 return;
15b8dd53 1531
581de59e 1532 id->id = kstrdup(dev_id, GFP_KERNEL);
7f47fa6c
BH
1533 if (!id->id) {
1534 kfree(id);
1535 return;
15b8dd53
BM
1536 }
1537
d4e1a692
TK
1538 list_add_tail(&id->list, &pnp->ids);
1539 pnp->type.hardware_id = 1;
15b8dd53
BM
1540}
1541
222e82ac
DW
1542/*
1543 * Old IBM workstations have a DSDT bug wherein the SMBus object
1544 * lacks the SMBUS01 HID and the methods do not have the necessary "_"
1545 * prefix. Work around this.
1546 */
ebf4df8d 1547static bool acpi_ibm_smbus_match(acpi_handle handle)
222e82ac 1548{
ebf4df8d
JL
1549 char node_name[ACPI_PATH_SEGMENT_LENGTH];
1550 struct acpi_buffer path = { sizeof(node_name), node_name };
222e82ac
DW
1551
1552 if (!dmi_name_in_vendors("IBM"))
ebf4df8d 1553 return false;
222e82ac
DW
1554
1555 /* Look for SMBS object */
ebf4df8d
JL
1556 if (ACPI_FAILURE(acpi_get_name(handle, ACPI_SINGLE_NAME, &path)) ||
1557 strcmp("SMBS", path.pointer))
1558 return false;
222e82ac
DW
1559
1560 /* Does it have the necessary (but misnamed) methods? */
952c63e9
JL
1561 if (acpi_has_method(handle, "SBI") &&
1562 acpi_has_method(handle, "SBR") &&
1563 acpi_has_method(handle, "SBW"))
ebf4df8d
JL
1564 return true;
1565
1566 return false;
222e82ac
DW
1567}
1568
c0af4175
TK
1569static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
1570 int device_type)
1da177e4 1571{
4be44fcd 1572 acpi_status status;
57f3674f 1573 struct acpi_device_info *info;
78e25fef 1574 struct acpi_pnp_device_id_list *cid_list;
7f47fa6c 1575 int i;
1da177e4 1576
c0af4175 1577 switch (device_type) {
1da177e4 1578 case ACPI_BUS_TYPE_DEVICE:
c0af4175
TK
1579 if (handle == ACPI_ROOT_OBJECT) {
1580 acpi_add_id(pnp, ACPI_SYSTEM_HID);
859ac9a4
BH
1581 break;
1582 }
1583
c0af4175 1584 status = acpi_get_object_info(handle, &info);
1da177e4 1585 if (ACPI_FAILURE(status)) {
c0af4175
TK
1586 pr_err(PREFIX "%s: Error reading device info\n",
1587 __func__);
1da177e4
LT
1588 return;
1589 }
1590
1da177e4 1591 if (info->valid & ACPI_VALID_HID)
c0af4175 1592 acpi_add_id(pnp, info->hardware_id.string);
57f3674f 1593 if (info->valid & ACPI_VALID_CID) {
15b8dd53 1594 cid_list = &info->compatible_id_list;
57f3674f 1595 for (i = 0; i < cid_list->count; i++)
c0af4175 1596 acpi_add_id(pnp, cid_list->ids[i].string);
57f3674f 1597 }
1da177e4 1598 if (info->valid & ACPI_VALID_ADR) {
c0af4175
TK
1599 pnp->bus_address = info->address;
1600 pnp->type.bus_address = 1;
1da177e4 1601 }
ccf78040 1602 if (info->valid & ACPI_VALID_UID)
c0af4175 1603 pnp->unique_id = kstrdup(info->unique_id.string,
ccf78040 1604 GFP_KERNEL);
ae843332 1605
a83893ae
BH
1606 kfree(info);
1607
57f3674f
BH
1608 /*
1609 * Some devices don't reliably have _HIDs & _CIDs, so add
1610 * synthetic HIDs to make sure drivers can find them.
1611 */
c0af4175
TK
1612 if (acpi_is_video_device(handle))
1613 acpi_add_id(pnp, ACPI_VIDEO_HID);
ebf4df8d 1614 else if (acpi_bay_match(handle))
c0af4175 1615 acpi_add_id(pnp, ACPI_BAY_HID);
ebf4df8d 1616 else if (acpi_dock_match(handle))
c0af4175 1617 acpi_add_id(pnp, ACPI_DOCK_HID);
ebf4df8d 1618 else if (acpi_ibm_smbus_match(handle))
c0af4175
TK
1619 acpi_add_id(pnp, ACPI_SMBUS_IBM_HID);
1620 else if (list_empty(&pnp->ids) && handle == ACPI_ROOT_OBJECT) {
1621 acpi_add_id(pnp, ACPI_BUS_HID); /* \_SB, LNXSYBUS */
1622 strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);
1623 strcpy(pnp->device_class, ACPI_BUS_CLASS);
b7b30de5 1624 }
54735266 1625
1da177e4
LT
1626 break;
1627 case ACPI_BUS_TYPE_POWER:
c0af4175 1628 acpi_add_id(pnp, ACPI_POWER_HID);
1da177e4
LT
1629 break;
1630 case ACPI_BUS_TYPE_PROCESSOR:
c0af4175 1631 acpi_add_id(pnp, ACPI_PROCESSOR_OBJECT_HID);
1da177e4 1632 break;
1da177e4 1633 case ACPI_BUS_TYPE_THERMAL:
c0af4175 1634 acpi_add_id(pnp, ACPI_THERMAL_HID);
1da177e4
LT
1635 break;
1636 case ACPI_BUS_TYPE_POWER_BUTTON:
c0af4175 1637 acpi_add_id(pnp, ACPI_BUTTON_HID_POWERF);
1da177e4
LT
1638 break;
1639 case ACPI_BUS_TYPE_SLEEP_BUTTON:
c0af4175 1640 acpi_add_id(pnp, ACPI_BUTTON_HID_SLEEPF);
1da177e4
LT
1641 break;
1642 }
1da177e4
LT
1643}
1644
c0af4175
TK
1645void acpi_free_pnp_ids(struct acpi_device_pnp *pnp)
1646{
1647 struct acpi_hardware_id *id, *tmp;
1648
1649 list_for_each_entry_safe(id, tmp, &pnp->ids, list) {
1650 kfree(id->id);
1651 kfree(id);
1652 }
1653 kfree(pnp->unique_id);
1654}
1655
82c7d5ef
RW
1656void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
1657 int type, unsigned long long sta)
1da177e4 1658{
d43e167d
RW
1659 INIT_LIST_HEAD(&device->pnp.ids);
1660 device->device_type = type;
1661 device->handle = handle;
1662 device->parent = acpi_bus_get_parent(handle);
1663 STRUCT_TO_INT(device->status) = sta;
1664 acpi_device_get_busid(device);
c0af4175 1665 acpi_set_pnp_ids(handle, &device->pnp, type);
d43e167d 1666 acpi_bus_get_flags(device);
2c0d4fe0 1667 device->flags.match_driver = false;
cf860be6
RW
1668 device_initialize(&device->dev);
1669 dev_set_uevent_suppress(&device->dev, true);
1670}
bc3b0772 1671
cf860be6
RW
1672void acpi_device_add_finalize(struct acpi_device *device)
1673{
1674 dev_set_uevent_suppress(&device->dev, false);
1675 kobject_uevent(&device->dev.kobj, KOBJ_ADD);
1da177e4
LT
1676}
1677
5c478f49
BH
1678static int acpi_add_single_object(struct acpi_device **child,
1679 acpi_handle handle, int type,
2c0d4fe0 1680 unsigned long long sta)
1da177e4 1681{
77c24888
BH
1682 int result;
1683 struct acpi_device *device;
29aaefa6 1684 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
1da177e4 1685
36bcbec7 1686 device = kzalloc(sizeof(struct acpi_device), GFP_KERNEL);
1da177e4 1687 if (!device) {
6468463a 1688 printk(KERN_ERR PREFIX "Memory allocation error\n");
d550d98d 1689 return -ENOMEM;
1da177e4 1690 }
1da177e4 1691
d43e167d
RW
1692 acpi_init_device_object(device, handle, type, sta);
1693 acpi_bus_get_power_flags(device);
d57d09a4 1694 acpi_bus_get_wakeup_device_flags(device);
1da177e4 1695
cf860be6 1696 result = acpi_device_add(device, acpi_device_release);
d43e167d 1697 if (result) {
718fb0de 1698 acpi_device_release(&device->dev);
d43e167d
RW
1699 return result;
1700 }
1da177e4 1701
d43e167d 1702 acpi_power_add_remove_device(device, true);
cf860be6 1703 acpi_device_add_finalize(device);
d43e167d
RW
1704 acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
1705 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Added %s [%s] parent %s\n",
1706 dev_name(&device->dev), (char *) buffer.pointer,
1707 device->parent ? dev_name(&device->parent->dev) : "(null)"));
1708 kfree(buffer.pointer);
1709 *child = device;
1710 return 0;
bf325f95
RW
1711}
1712
778cbc1d
BH
1713static int acpi_bus_type_and_status(acpi_handle handle, int *type,
1714 unsigned long long *sta)
1da177e4 1715{
778cbc1d
BH
1716 acpi_status status;
1717 acpi_object_type acpi_type;
1da177e4 1718
778cbc1d 1719 status = acpi_get_type(handle, &acpi_type);
51a85faf 1720 if (ACPI_FAILURE(status))
778cbc1d 1721 return -ENODEV;
4be44fcd 1722
778cbc1d 1723 switch (acpi_type) {
51a85faf
BH
1724 case ACPI_TYPE_ANY: /* for ACPI_ROOT_OBJECT */
1725 case ACPI_TYPE_DEVICE:
778cbc1d
BH
1726 *type = ACPI_BUS_TYPE_DEVICE;
1727 status = acpi_bus_get_status_handle(handle, sta);
1728 if (ACPI_FAILURE(status))
1729 return -ENODEV;
51a85faf
BH
1730 break;
1731 case ACPI_TYPE_PROCESSOR:
778cbc1d
BH
1732 *type = ACPI_BUS_TYPE_PROCESSOR;
1733 status = acpi_bus_get_status_handle(handle, sta);
1734 if (ACPI_FAILURE(status))
1735 return -ENODEV;
51a85faf
BH
1736 break;
1737 case ACPI_TYPE_THERMAL:
778cbc1d
BH
1738 *type = ACPI_BUS_TYPE_THERMAL;
1739 *sta = ACPI_STA_DEFAULT;
51a85faf
BH
1740 break;
1741 case ACPI_TYPE_POWER:
778cbc1d
BH
1742 *type = ACPI_BUS_TYPE_POWER;
1743 *sta = ACPI_STA_DEFAULT;
51a85faf
BH
1744 break;
1745 default:
778cbc1d 1746 return -ENODEV;
51a85faf 1747 }
1da177e4 1748
778cbc1d
BH
1749 return 0;
1750}
1751
4b59cc1f
RW
1752static bool acpi_scan_handler_matching(struct acpi_scan_handler *handler,
1753 char *idstr,
1754 const struct acpi_device_id **matchid)
1755{
1756 const struct acpi_device_id *devid;
1757
1758 for (devid = handler->ids; devid->id[0]; devid++)
1759 if (!strcmp((char *)devid->id, idstr)) {
1760 if (matchid)
1761 *matchid = devid;
1762
1763 return true;
1764 }
1765
1766 return false;
1767}
1768
6b772e8f
TK
1769static struct acpi_scan_handler *acpi_scan_match_handler(char *idstr,
1770 const struct acpi_device_id **matchid)
1771{
1772 struct acpi_scan_handler *handler;
1773
1774 list_for_each_entry(handler, &acpi_scan_handlers_list, list_node)
1775 if (acpi_scan_handler_matching(handler, idstr, matchid))
1776 return handler;
1777
1778 return NULL;
1779}
1780
3f8055c3
RW
1781void acpi_scan_hotplug_enabled(struct acpi_hotplug_profile *hotplug, bool val)
1782{
3f8055c3
RW
1783 if (!!hotplug->enabled == !!val)
1784 return;
1785
1786 mutex_lock(&acpi_scan_lock);
1787
1788 hotplug->enabled = val;
3f8055c3
RW
1789
1790 mutex_unlock(&acpi_scan_lock);
1791}
1792
6b772e8f 1793static void acpi_scan_init_hotplug(acpi_handle handle, int type)
a33ec399 1794{
6b772e8f
TK
1795 struct acpi_device_pnp pnp = {};
1796 struct acpi_hardware_id *hwid;
a33ec399
RW
1797 struct acpi_scan_handler *handler;
1798
6b772e8f
TK
1799 INIT_LIST_HEAD(&pnp.ids);
1800 acpi_set_pnp_ids(handle, &pnp, type);
a33ec399 1801
6b772e8f 1802 if (!pnp.type.hardware_id)
7a26b530 1803 goto out;
a33ec399
RW
1804
1805 /*
1806 * This relies on the fact that acpi_install_notify_handler() will not
1807 * install the same notify handler routine twice for the same handle.
1808 */
6b772e8f
TK
1809 list_for_each_entry(hwid, &pnp.ids, list) {
1810 handler = acpi_scan_match_handler(hwid->id, NULL);
1811 if (handler) {
2cbb14fb
TK
1812 acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
1813 acpi_hotplug_notify_cb, handler);
6b772e8f
TK
1814 break;
1815 }
1816 }
1817
7a26b530 1818out:
6b772e8f 1819 acpi_free_pnp_ids(&pnp);
a33ec399
RW
1820}
1821
e3863094
RW
1822static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl_not_used,
1823 void *not_used, void **return_value)
778cbc1d 1824{
805d410f 1825 struct acpi_device *device = NULL;
778cbc1d
BH
1826 int type;
1827 unsigned long long sta;
1828 int result;
1829
4002bf38
RW
1830 acpi_bus_get_device(handle, &device);
1831 if (device)
1832 goto out;
1833
778cbc1d
BH
1834 result = acpi_bus_type_and_status(handle, &type, &sta);
1835 if (result)
1836 return AE_OK;
1837
82c7d5ef
RW
1838 if (type == ACPI_BUS_TYPE_POWER) {
1839 acpi_add_power_resource(handle);
1840 return AE_OK;
1841 }
1842
6b772e8f 1843 acpi_scan_init_hotplug(handle, type);
a33ec399 1844
778cbc1d 1845 if (!(sta & ACPI_STA_DEVICE_PRESENT) &&
b581a7f9 1846 !(sta & ACPI_STA_DEVICE_FUNCTIONING)) {
86e4e20e 1847 struct acpi_device_wakeup wakeup;
86e4e20e 1848
952c63e9 1849 if (acpi_has_method(handle, "_PRW")) {
86e4e20e
RW
1850 acpi_bus_extract_wakeup_device_power_package(handle,
1851 &wakeup);
993cbe59
RW
1852 acpi_power_resources_list_free(&wakeup.resources);
1853 }
778cbc1d 1854 return AE_CTRL_DEPTH;
b581a7f9 1855 }
778cbc1d 1856
2c0d4fe0 1857 acpi_add_single_object(&device, handle, type, sta);
e3b87f8a 1858 if (!device)
51a85faf 1859 return AE_CTRL_DEPTH;
1da177e4 1860
4002bf38 1861 out:
51a85faf
BH
1862 if (!*return_value)
1863 *return_value = device;
805d410f 1864
51a85faf
BH
1865 return AE_OK;
1866}
3fb02738 1867
c5698074 1868static int acpi_scan_attach_handler(struct acpi_device *device)
ca589f94 1869{
c5698074
RW
1870 struct acpi_hardware_id *hwid;
1871 int ret = 0;
ca589f94 1872
c5698074 1873 list_for_each_entry(hwid, &device->pnp.ids, list) {
87b85b3c 1874 const struct acpi_device_id *devid;
c5698074 1875 struct acpi_scan_handler *handler;
ca589f94 1876
c5698074
RW
1877 handler = acpi_scan_match_handler(hwid->id, &devid);
1878 if (handler) {
87b85b3c
RW
1879 ret = handler->attach(device, devid);
1880 if (ret > 0) {
1881 device->handler = handler;
c5698074 1882 break;
87b85b3c 1883 } else if (ret < 0) {
c5698074 1884 break;
87b85b3c 1885 }
ca589f94
RW
1886 }
1887 }
1888 return ret;
1889}
1890
0fc300b0
RW
1891static acpi_status acpi_bus_device_attach(acpi_handle handle, u32 lvl_not_used,
1892 void *not_used, void **ret_not_used)
51a85faf 1893{
805d410f
RW
1894 struct acpi_device *device;
1895 unsigned long long sta_not_used;
ca589f94 1896 int ret;
3fb02738 1897
805d410f
RW
1898 /*
1899 * Ignore errors ignored by acpi_bus_check_add() to avoid terminating
1900 * namespace walks prematurely.
1901 */
ca589f94 1902 if (acpi_bus_type_and_status(handle, &ret, &sta_not_used))
805d410f 1903 return AE_OK;
1da177e4 1904
805d410f
RW
1905 if (acpi_bus_get_device(handle, &device))
1906 return AE_CTRL_DEPTH;
7779688f 1907
3a391a39
RW
1908 if (device->handler)
1909 return AE_OK;
1910
ca589f94 1911 ret = acpi_scan_attach_handler(device);
6931007c
RW
1912 if (ret < 0)
1913 return AE_CTRL_DEPTH;
1914
1915 device->flags.match_driver = true;
1916 if (ret > 0)
1917 return AE_OK;
ca589f94
RW
1918
1919 ret = device_attach(&device->dev);
1920 return ret >= 0 ? AE_OK : AE_CTRL_DEPTH;
1da177e4 1921}
1da177e4 1922
636458de 1923/**
b8bd759a 1924 * acpi_bus_scan - Add ACPI device node objects in a given namespace scope.
636458de 1925 * @handle: Root of the namespace scope to scan.
7779688f 1926 *
636458de
RW
1927 * Scan a given ACPI tree (probably recently hot-plugged) and create and add
1928 * found devices.
7779688f 1929 *
636458de
RW
1930 * If no devices were found, -ENODEV is returned, but it does not mean that
1931 * there has been a real error. There just have been no suitable ACPI objects
1932 * in the table trunk from which the kernel could create a device and add an
1933 * appropriate driver.
3757b948
RW
1934 *
1935 * Must be called under acpi_scan_lock.
7779688f 1936 */
b8bd759a 1937int acpi_bus_scan(acpi_handle handle)
3fb02738 1938{
b8bd759a 1939 void *device = NULL;
c511cc19 1940 int error = 0;
3fb02738 1941
b8bd759a
RW
1942 if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
1943 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
1944 acpi_bus_check_add, NULL, NULL, &device);
3fb02738 1945
d2f6650a 1946 if (!device)
c511cc19
RW
1947 error = -ENODEV;
1948 else if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
b8bd759a
RW
1949 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
1950 acpi_bus_device_attach, NULL, NULL, NULL);
3fb02738 1951
c511cc19 1952 return error;
3fb02738 1953}
b8bd759a 1954EXPORT_SYMBOL(acpi_bus_scan);
a2100801 1955
05404d8f
RW
1956static acpi_status acpi_bus_device_detach(acpi_handle handle, u32 lvl_not_used,
1957 void *not_used, void **ret_not_used)
1958{
1959 struct acpi_device *device = NULL;
a2100801 1960
05404d8f 1961 if (!acpi_bus_get_device(handle, &device)) {
ca589f94
RW
1962 struct acpi_scan_handler *dev_handler = device->handler;
1963
ca589f94
RW
1964 if (dev_handler) {
1965 if (dev_handler->detach)
1966 dev_handler->detach(device);
1967
1968 device->handler = NULL;
1969 } else {
1970 device_release_driver(&device->dev);
1971 }
05404d8f
RW
1972 }
1973 return AE_OK;
3fb02738 1974}
1da177e4 1975
05404d8f
RW
1976static acpi_status acpi_bus_remove(acpi_handle handle, u32 lvl_not_used,
1977 void *not_used, void **ret_not_used)
1da177e4 1978{
05404d8f 1979 struct acpi_device *device = NULL;
4be44fcd 1980
05404d8f
RW
1981 if (!acpi_bus_get_device(handle, &device))
1982 acpi_device_unregister(device);
1da177e4 1983
05404d8f
RW
1984 return AE_OK;
1985}
1da177e4 1986
3757b948
RW
1987/**
1988 * acpi_bus_trim - Remove ACPI device node and all of its descendants
1989 * @start: Root of the ACPI device nodes subtree to remove.
1990 *
1991 * Must be called under acpi_scan_lock.
1992 */
bfee26db 1993void acpi_bus_trim(struct acpi_device *start)
1da177e4 1994{
05404d8f
RW
1995 /*
1996 * Execute acpi_bus_device_detach() as a post-order callback to detach
1997 * all ACPI drivers from the device nodes being removed.
1998 */
1999 acpi_walk_namespace(ACPI_TYPE_ANY, start->handle, ACPI_UINT32_MAX, NULL,
2000 acpi_bus_device_detach, NULL, NULL);
2001 acpi_bus_device_detach(start->handle, 0, NULL, NULL);
cecdb193
RW
2002 /*
2003 * Execute acpi_bus_remove() as a post-order callback to remove device
2004 * nodes in the given namespace scope.
2005 */
2006 acpi_walk_namespace(ACPI_TYPE_ANY, start->handle, ACPI_UINT32_MAX, NULL,
2007 acpi_bus_remove, NULL, NULL);
2008 acpi_bus_remove(start->handle, 0, NULL, NULL);
1da177e4 2009}
ceaba663
KA
2010EXPORT_SYMBOL_GPL(acpi_bus_trim);
2011
e8b945c9 2012static int acpi_bus_scan_fixed(void)
1da177e4 2013{
4be44fcd 2014 int result = 0;
c4168bff 2015
1da177e4
LT
2016 /*
2017 * Enumerate all fixed-feature devices.
2018 */
2c0d4fe0
RW
2019 if (!(acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON)) {
2020 struct acpi_device *device = NULL;
2021
5c478f49 2022 result = acpi_add_single_object(&device, NULL,
c4168bff 2023 ACPI_BUS_TYPE_POWER_BUTTON,
2c0d4fe0
RW
2024 ACPI_STA_DEFAULT);
2025 if (result)
2026 return result;
2027
2028 result = device_attach(&device->dev);
2029 if (result < 0)
2030 return result;
2031
c10d7a13 2032 device_init_wakeup(&device->dev, true);
3fb02738 2033 }
1da177e4 2034
2c0d4fe0
RW
2035 if (!(acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON)) {
2036 struct acpi_device *device = NULL;
2037
5c478f49 2038 result = acpi_add_single_object(&device, NULL,
c4168bff 2039 ACPI_BUS_TYPE_SLEEP_BUTTON,
2c0d4fe0
RW
2040 ACPI_STA_DEFAULT);
2041 if (result)
2042 return result;
2043
2044 result = device_attach(&device->dev);
3fb02738 2045 }
1da177e4 2046
2c0d4fe0 2047 return result < 0 ? result : 0;
1da177e4
LT
2048}
2049
e747f274 2050int __init acpi_scan_init(void)
1da177e4
LT
2051{
2052 int result;
1da177e4 2053
5b327265
PM
2054 result = bus_register(&acpi_bus_type);
2055 if (result) {
2056 /* We don't want to quit even if we failed to add suspend/resume */
2057 printk(KERN_ERR PREFIX "Could not register bus type\n");
2058 }
2059
92ef2a25 2060 acpi_pci_root_init();
4daeaf68 2061 acpi_pci_link_init();
ac212b69 2062 acpi_processor_init();
141a297b 2063 acpi_platform_init();
f58b082a 2064 acpi_lpss_init();
2fa97feb 2065 acpi_cmos_rtc_init();
737f1a9f 2066 acpi_container_init();
0a347644 2067 acpi_memory_hotplug_init();
94add0f8 2068 acpi_dock_init();
97d9a9e9 2069
3757b948 2070 mutex_lock(&acpi_scan_lock);
1da177e4
LT
2071 /*
2072 * Enumerate devices in the ACPI namespace.
2073 */
0cd6ac52
RW
2074 result = acpi_bus_scan(ACPI_ROOT_OBJECT);
2075 if (result)
3757b948 2076 goto out;
1da177e4 2077
0cd6ac52 2078 result = acpi_bus_get_device(ACPI_ROOT_OBJECT, &acpi_root);
1da177e4 2079 if (result)
3757b948 2080 goto out;
1da177e4 2081
b8bd759a
RW
2082 result = acpi_bus_scan_fixed();
2083 if (result) {
b17b537a 2084 acpi_device_unregister(acpi_root);
3757b948 2085 goto out;
b8bd759a 2086 }
1da177e4 2087
b8bd759a 2088 acpi_update_all_gpes();
3757b948 2089
668192b6
YL
2090 acpi_pci_root_hp_init();
2091
3757b948
RW
2092 out:
2093 mutex_unlock(&acpi_scan_lock);
2094 return result;
1da177e4 2095}