OSDN Git Service

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