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