ACPI / scan: Make it clear that acpi_bus_trim() cannot fail
[linux-2.6-microblaze.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
15 #include <acpi/acpi_drivers.h>
16
17 #include "internal.h"
18
19 #define _COMPONENT              ACPI_BUS_COMPONENT
20 ACPI_MODULE_NAME("scan");
21 #define STRUCT_TO_INT(s)        (*((int*)&s))
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 static const char *dummy_hid = "device";
31
32 /*
33  * The following ACPI IDs are known to be suitable for representing as
34  * platform devices.
35  */
36 static const struct acpi_device_id acpi_platform_device_ids[] = {
37
38         { "PNP0D40" },
39
40         /* Haswell LPSS devices */
41         { "INT33C0", 0 },
42         { "INT33C1", 0 },
43         { "INT33C2", 0 },
44         { "INT33C3", 0 },
45         { "INT33C4", 0 },
46         { "INT33C5", 0 },
47         { "INT33C6", 0 },
48         { "INT33C7", 0 },
49
50         { }
51 };
52
53 static LIST_HEAD(acpi_device_list);
54 static LIST_HEAD(acpi_bus_id_list);
55 DEFINE_MUTEX(acpi_device_lock);
56 LIST_HEAD(acpi_wakeup_device_list);
57
58 struct acpi_device_bus_id{
59         char bus_id[15];
60         unsigned int instance_no;
61         struct list_head node;
62 };
63
64 /*
65  * Creates hid/cid(s) string needed for modalias and uevent
66  * e.g. on a device with hid:IBM0001 and cid:ACPI0001 you get:
67  * char *modalias: "acpi:IBM0001:ACPI0001"
68 */
69 static int create_modalias(struct acpi_device *acpi_dev, char *modalias,
70                            int size)
71 {
72         int len;
73         int count;
74         struct acpi_hardware_id *id;
75
76         if (list_empty(&acpi_dev->pnp.ids))
77                 return 0;
78
79         len = snprintf(modalias, size, "acpi:");
80         size -= len;
81
82         list_for_each_entry(id, &acpi_dev->pnp.ids, list) {
83                 count = snprintf(&modalias[len], size, "%s:", id->id);
84                 if (count < 0 || count >= size)
85                         return -EINVAL;
86                 len += count;
87                 size -= count;
88         }
89
90         modalias[len] = '\0';
91         return len;
92 }
93
94 static ssize_t
95 acpi_device_modalias_show(struct device *dev, struct device_attribute *attr, char *buf) {
96         struct acpi_device *acpi_dev = to_acpi_device(dev);
97         int len;
98
99         /* Device has no HID and no CID or string is >1024 */
100         len = create_modalias(acpi_dev, buf, 1024);
101         if (len <= 0)
102                 return 0;
103         buf[len++] = '\n';
104         return len;
105 }
106 static DEVICE_ATTR(modalias, 0444, acpi_device_modalias_show, NULL);
107
108 /**
109  * acpi_bus_hot_remove_device: hot-remove a device and its children
110  * @context: struct acpi_eject_event pointer (freed in this func)
111  *
112  * Hot-remove a device and its children. This function frees up the
113  * memory space passed by arg context, so that the caller may call
114  * this function asynchronously through acpi_os_hotplug_execute().
115  */
116 void acpi_bus_hot_remove_device(void *context)
117 {
118         struct acpi_eject_event *ej_event = (struct acpi_eject_event *) context;
119         struct acpi_device *device = ej_event->device;
120         acpi_handle handle = device->handle;
121         acpi_handle temp;
122         struct acpi_object_list arg_list;
123         union acpi_object arg;
124         acpi_status status = AE_OK;
125         u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; /* default */
126
127         ACPI_DEBUG_PRINT((ACPI_DB_INFO,
128                 "Hot-removing device %s...\n", dev_name(&device->dev)));
129
130         acpi_bus_trim(device);
131         /* Device node has been released. */
132         device = NULL;
133
134         /* power off device */
135         status = acpi_evaluate_object(handle, "_PS3", NULL, NULL);
136         if (ACPI_FAILURE(status) && status != AE_NOT_FOUND)
137                 printk(KERN_WARNING PREFIX
138                                 "Power-off device failed\n");
139
140         if (ACPI_SUCCESS(acpi_get_handle(handle, "_LCK", &temp))) {
141                 arg_list.count = 1;
142                 arg_list.pointer = &arg;
143                 arg.type = ACPI_TYPE_INTEGER;
144                 arg.integer.value = 0;
145                 acpi_evaluate_object(handle, "_LCK", &arg_list, NULL);
146         }
147
148         arg_list.count = 1;
149         arg_list.pointer = &arg;
150         arg.type = ACPI_TYPE_INTEGER;
151         arg.integer.value = 1;
152
153         /*
154          * TBD: _EJD support.
155          */
156         status = acpi_evaluate_object(handle, "_EJ0", &arg_list, NULL);
157         if (ACPI_FAILURE(status)) {
158                 if (status != AE_NOT_FOUND)
159                         printk(KERN_WARNING PREFIX
160                                         "Eject device failed\n");
161                 goto err_out;
162         }
163
164         kfree(context);
165         return;
166
167 err_out:
168         /* Inform firmware the hot-remove operation has completed w/ error */
169         (void) acpi_evaluate_hotplug_ost(handle,
170                                 ej_event->event, ost_code, NULL);
171         kfree(context);
172         return;
173 }
174 EXPORT_SYMBOL(acpi_bus_hot_remove_device);
175
176 static ssize_t
177 acpi_eject_store(struct device *d, struct device_attribute *attr,
178                 const char *buf, size_t count)
179 {
180         int ret = count;
181         acpi_status status;
182         acpi_object_type type = 0;
183         struct acpi_device *acpi_device = to_acpi_device(d);
184         struct acpi_eject_event *ej_event;
185
186         if ((!count) || (buf[0] != '1')) {
187                 return -EINVAL;
188         }
189 #ifndef FORCE_EJECT
190         if (acpi_device->driver == NULL) {
191                 ret = -ENODEV;
192                 goto err;
193         }
194 #endif
195         status = acpi_get_type(acpi_device->handle, &type);
196         if (ACPI_FAILURE(status) || (!acpi_device->flags.ejectable)) {
197                 ret = -ENODEV;
198                 goto err;
199         }
200
201         ej_event = kmalloc(sizeof(*ej_event), GFP_KERNEL);
202         if (!ej_event) {
203                 ret = -ENOMEM;
204                 goto err;
205         }
206
207         ej_event->device = acpi_device;
208         if (acpi_device->flags.eject_pending) {
209                 /* event originated from ACPI eject notification */
210                 ej_event->event = ACPI_NOTIFY_EJECT_REQUEST;
211                 acpi_device->flags.eject_pending = 0;
212         } else {
213                 /* event originated from user */
214                 ej_event->event = ACPI_OST_EC_OSPM_EJECT;
215                 (void) acpi_evaluate_hotplug_ost(acpi_device->handle,
216                         ej_event->event, ACPI_OST_SC_EJECT_IN_PROGRESS, NULL);
217         }
218
219         acpi_os_hotplug_execute(acpi_bus_hot_remove_device, (void *)ej_event);
220 err:
221         return ret;
222 }
223
224 static DEVICE_ATTR(eject, 0200, NULL, acpi_eject_store);
225
226 static ssize_t
227 acpi_device_hid_show(struct device *dev, struct device_attribute *attr, char *buf) {
228         struct acpi_device *acpi_dev = to_acpi_device(dev);
229
230         return sprintf(buf, "%s\n", acpi_device_hid(acpi_dev));
231 }
232 static DEVICE_ATTR(hid, 0444, acpi_device_hid_show, NULL);
233
234 static ssize_t acpi_device_uid_show(struct device *dev,
235                                     struct device_attribute *attr, char *buf)
236 {
237         struct acpi_device *acpi_dev = to_acpi_device(dev);
238
239         return sprintf(buf, "%s\n", acpi_dev->pnp.unique_id);
240 }
241 static DEVICE_ATTR(uid, 0444, acpi_device_uid_show, NULL);
242
243 static ssize_t acpi_device_adr_show(struct device *dev,
244                                     struct device_attribute *attr, char *buf)
245 {
246         struct acpi_device *acpi_dev = to_acpi_device(dev);
247
248         return sprintf(buf, "0x%08x\n",
249                        (unsigned int)(acpi_dev->pnp.bus_address));
250 }
251 static DEVICE_ATTR(adr, 0444, acpi_device_adr_show, NULL);
252
253 static ssize_t
254 acpi_device_path_show(struct device *dev, struct device_attribute *attr, char *buf) {
255         struct acpi_device *acpi_dev = to_acpi_device(dev);
256         struct acpi_buffer path = {ACPI_ALLOCATE_BUFFER, NULL};
257         int result;
258
259         result = acpi_get_name(acpi_dev->handle, ACPI_FULL_PATHNAME, &path);
260         if (result)
261                 goto end;
262
263         result = sprintf(buf, "%s\n", (char*)path.pointer);
264         kfree(path.pointer);
265 end:
266         return result;
267 }
268 static DEVICE_ATTR(path, 0444, acpi_device_path_show, NULL);
269
270 /* sysfs file that shows description text from the ACPI _STR method */
271 static ssize_t description_show(struct device *dev,
272                                 struct device_attribute *attr,
273                                 char *buf) {
274         struct acpi_device *acpi_dev = to_acpi_device(dev);
275         int result;
276
277         if (acpi_dev->pnp.str_obj == NULL)
278                 return 0;
279
280         /*
281          * The _STR object contains a Unicode identifier for a device.
282          * We need to convert to utf-8 so it can be displayed.
283          */
284         result = utf16s_to_utf8s(
285                 (wchar_t *)acpi_dev->pnp.str_obj->buffer.pointer,
286                 acpi_dev->pnp.str_obj->buffer.length,
287                 UTF16_LITTLE_ENDIAN, buf,
288                 PAGE_SIZE);
289
290         buf[result++] = '\n';
291
292         return result;
293 }
294 static DEVICE_ATTR(description, 0444, description_show, NULL);
295
296 static ssize_t
297 acpi_device_sun_show(struct device *dev, struct device_attribute *attr,
298                      char *buf) {
299         struct acpi_device *acpi_dev = to_acpi_device(dev);
300
301         return sprintf(buf, "%lu\n", acpi_dev->pnp.sun);
302 }
303 static DEVICE_ATTR(sun, 0444, acpi_device_sun_show, NULL);
304
305 static int acpi_device_setup_files(struct acpi_device *dev)
306 {
307         struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
308         acpi_status status;
309         acpi_handle temp;
310         unsigned long long sun;
311         int result = 0;
312
313         /*
314          * Devices gotten from FADT don't have a "path" attribute
315          */
316         if (dev->handle) {
317                 result = device_create_file(&dev->dev, &dev_attr_path);
318                 if (result)
319                         goto end;
320         }
321
322         if (!list_empty(&dev->pnp.ids)) {
323                 result = device_create_file(&dev->dev, &dev_attr_hid);
324                 if (result)
325                         goto end;
326
327                 result = device_create_file(&dev->dev, &dev_attr_modalias);
328                 if (result)
329                         goto end;
330         }
331
332         /*
333          * If device has _STR, 'description' file is created
334          */
335         status = acpi_get_handle(dev->handle, "_STR", &temp);
336         if (ACPI_SUCCESS(status)) {
337                 status = acpi_evaluate_object(dev->handle, "_STR",
338                                         NULL, &buffer);
339                 if (ACPI_FAILURE(status))
340                         buffer.pointer = NULL;
341                 dev->pnp.str_obj = buffer.pointer;
342                 result = device_create_file(&dev->dev, &dev_attr_description);
343                 if (result)
344                         goto end;
345         }
346
347         if (dev->flags.bus_address)
348                 result = device_create_file(&dev->dev, &dev_attr_adr);
349         if (dev->pnp.unique_id)
350                 result = device_create_file(&dev->dev, &dev_attr_uid);
351
352         status = acpi_evaluate_integer(dev->handle, "_SUN", NULL, &sun);
353         if (ACPI_SUCCESS(status)) {
354                 dev->pnp.sun = (unsigned long)sun;
355                 result = device_create_file(&dev->dev, &dev_attr_sun);
356                 if (result)
357                         goto end;
358         } else {
359                 dev->pnp.sun = (unsigned long)-1;
360         }
361
362         /*
363          * If device has _EJ0, 'eject' file is created that is used to trigger
364          * hot-removal function from userland.
365          */
366         status = acpi_get_handle(dev->handle, "_EJ0", &temp);
367         if (ACPI_SUCCESS(status))
368                 result = device_create_file(&dev->dev, &dev_attr_eject);
369 end:
370         return result;
371 }
372
373 static void acpi_device_remove_files(struct acpi_device *dev)
374 {
375         acpi_status status;
376         acpi_handle temp;
377
378         /*
379          * If device has _STR, remove 'description' file
380          */
381         status = acpi_get_handle(dev->handle, "_STR", &temp);
382         if (ACPI_SUCCESS(status)) {
383                 kfree(dev->pnp.str_obj);
384                 device_remove_file(&dev->dev, &dev_attr_description);
385         }
386         /*
387          * If device has _EJ0, remove 'eject' file.
388          */
389         status = acpi_get_handle(dev->handle, "_EJ0", &temp);
390         if (ACPI_SUCCESS(status))
391                 device_remove_file(&dev->dev, &dev_attr_eject);
392
393         status = acpi_get_handle(dev->handle, "_SUN", &temp);
394         if (ACPI_SUCCESS(status))
395                 device_remove_file(&dev->dev, &dev_attr_sun);
396
397         if (dev->pnp.unique_id)
398                 device_remove_file(&dev->dev, &dev_attr_uid);
399         if (dev->flags.bus_address)
400                 device_remove_file(&dev->dev, &dev_attr_adr);
401         device_remove_file(&dev->dev, &dev_attr_modalias);
402         device_remove_file(&dev->dev, &dev_attr_hid);
403         if (dev->handle)
404                 device_remove_file(&dev->dev, &dev_attr_path);
405 }
406 /* --------------------------------------------------------------------------
407                         ACPI Bus operations
408    -------------------------------------------------------------------------- */
409
410 static const struct acpi_device_id *__acpi_match_device(
411         struct acpi_device *device, const struct acpi_device_id *ids)
412 {
413         const struct acpi_device_id *id;
414         struct acpi_hardware_id *hwid;
415
416         /*
417          * If the device is not present, it is unnecessary to load device
418          * driver for it.
419          */
420         if (!device->status.present)
421                 return NULL;
422
423         for (id = ids; id->id[0]; id++)
424                 list_for_each_entry(hwid, &device->pnp.ids, list)
425                         if (!strcmp((char *) id->id, hwid->id))
426                                 return id;
427
428         return NULL;
429 }
430
431 /**
432  * acpi_match_device - Match a struct device against a given list of ACPI IDs
433  * @ids: Array of struct acpi_device_id object to match against.
434  * @dev: The device structure to match.
435  *
436  * Check if @dev has a valid ACPI handle and if there is a struct acpi_device
437  * object for that handle and use that object to match against a given list of
438  * device IDs.
439  *
440  * Return a pointer to the first matching ID on success or %NULL on failure.
441  */
442 const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
443                                                const struct device *dev)
444 {
445         struct acpi_device *adev;
446
447         if (!ids || !ACPI_HANDLE(dev)
448             || ACPI_FAILURE(acpi_bus_get_device(ACPI_HANDLE(dev), &adev)))
449                 return NULL;
450
451         return __acpi_match_device(adev, ids);
452 }
453 EXPORT_SYMBOL_GPL(acpi_match_device);
454
455 int acpi_match_device_ids(struct acpi_device *device,
456                           const struct acpi_device_id *ids)
457 {
458         return __acpi_match_device(device, ids) ? 0 : -ENOENT;
459 }
460 EXPORT_SYMBOL(acpi_match_device_ids);
461
462 static void acpi_free_ids(struct acpi_device *device)
463 {
464         struct acpi_hardware_id *id, *tmp;
465
466         list_for_each_entry_safe(id, tmp, &device->pnp.ids, list) {
467                 kfree(id->id);
468                 kfree(id);
469         }
470 }
471
472 static void acpi_device_release(struct device *dev)
473 {
474         struct acpi_device *acpi_dev = to_acpi_device(dev);
475
476         acpi_free_ids(acpi_dev);
477         kfree(acpi_dev->pnp.unique_id);
478         kfree(acpi_dev);
479 }
480
481 static int acpi_bus_match(struct device *dev, struct device_driver *drv)
482 {
483         struct acpi_device *acpi_dev = to_acpi_device(dev);
484         struct acpi_driver *acpi_drv = to_acpi_driver(drv);
485
486         return acpi_dev->flags.match_driver
487                 && !acpi_match_device_ids(acpi_dev, acpi_drv->ids);
488 }
489
490 static int acpi_device_uevent(struct device *dev, struct kobj_uevent_env *env)
491 {
492         struct acpi_device *acpi_dev = to_acpi_device(dev);
493         int len;
494
495         if (list_empty(&acpi_dev->pnp.ids))
496                 return 0;
497
498         if (add_uevent_var(env, "MODALIAS="))
499                 return -ENOMEM;
500         len = create_modalias(acpi_dev, &env->buf[env->buflen - 1],
501                               sizeof(env->buf) - env->buflen);
502         if (len >= (sizeof(env->buf) - env->buflen))
503                 return -ENOMEM;
504         env->buflen += len;
505         return 0;
506 }
507
508 static void acpi_device_notify(acpi_handle handle, u32 event, void *data)
509 {
510         struct acpi_device *device = data;
511
512         device->driver->ops.notify(device, event);
513 }
514
515 static acpi_status acpi_device_notify_fixed(void *data)
516 {
517         struct acpi_device *device = data;
518
519         /* Fixed hardware devices have no handles */
520         acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device);
521         return AE_OK;
522 }
523
524 static int acpi_device_install_notify_handler(struct acpi_device *device)
525 {
526         acpi_status status;
527
528         if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
529                 status =
530                     acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
531                                                      acpi_device_notify_fixed,
532                                                      device);
533         else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
534                 status =
535                     acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
536                                                      acpi_device_notify_fixed,
537                                                      device);
538         else
539                 status = acpi_install_notify_handler(device->handle,
540                                                      ACPI_DEVICE_NOTIFY,
541                                                      acpi_device_notify,
542                                                      device);
543
544         if (ACPI_FAILURE(status))
545                 return -EINVAL;
546         return 0;
547 }
548
549 static void acpi_device_remove_notify_handler(struct acpi_device *device)
550 {
551         if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
552                 acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
553                                                 acpi_device_notify_fixed);
554         else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
555                 acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
556                                                 acpi_device_notify_fixed);
557         else
558                 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
559                                            acpi_device_notify);
560 }
561
562 static int acpi_bus_driver_init(struct acpi_device *, struct acpi_driver *);
563 static int acpi_device_probe(struct device * dev)
564 {
565         struct acpi_device *acpi_dev = to_acpi_device(dev);
566         struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver);
567         int ret;
568
569         ret = acpi_bus_driver_init(acpi_dev, acpi_drv);
570         if (!ret) {
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                                                      acpi_dev->removal_type);
577                                 return ret;
578                         }
579                 }
580
581                 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
582                         "Found driver [%s] for device [%s]\n",
583                         acpi_drv->name, acpi_dev->pnp.bus_id));
584                 get_device(dev);
585         }
586         return ret;
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, acpi_dev->removal_type);
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 int acpi_device_register(struct acpi_device *device)
616 {
617         int result;
618         struct acpi_device_bus_id *acpi_device_bus_id, *new_bus_id;
619         int found = 0;
620
621         /*
622          * Linkage
623          * -------
624          * Link this device to its parent and siblings.
625          */
626         INIT_LIST_HEAD(&device->children);
627         INIT_LIST_HEAD(&device->node);
628         INIT_LIST_HEAD(&device->wakeup_list);
629         INIT_LIST_HEAD(&device->physical_node_list);
630         mutex_init(&device->physical_node_lock);
631
632         new_bus_id = kzalloc(sizeof(struct acpi_device_bus_id), GFP_KERNEL);
633         if (!new_bus_id) {
634                 printk(KERN_ERR PREFIX "Memory allocation error\n");
635                 return -ENOMEM;
636         }
637
638         mutex_lock(&acpi_device_lock);
639         /*
640          * Find suitable bus_id and instance number in acpi_bus_id_list
641          * If failed, create one and link it into acpi_bus_id_list
642          */
643         list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) {
644                 if (!strcmp(acpi_device_bus_id->bus_id,
645                             acpi_device_hid(device))) {
646                         acpi_device_bus_id->instance_no++;
647                         found = 1;
648                         kfree(new_bus_id);
649                         break;
650                 }
651         }
652         if (!found) {
653                 acpi_device_bus_id = new_bus_id;
654                 strcpy(acpi_device_bus_id->bus_id, acpi_device_hid(device));
655                 acpi_device_bus_id->instance_no = 0;
656                 list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list);
657         }
658         dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, acpi_device_bus_id->instance_no);
659
660         if (device->parent)
661                 list_add_tail(&device->node, &device->parent->children);
662
663         if (device->wakeup.flags.valid)
664                 list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list);
665         mutex_unlock(&acpi_device_lock);
666
667         if (device->parent)
668                 device->dev.parent = &device->parent->dev;
669         device->dev.bus = &acpi_bus_type;
670         device->dev.release = &acpi_device_release;
671         result = device_register(&device->dev);
672         if (result) {
673                 dev_err(&device->dev, "Error registering device\n");
674                 goto end;
675         }
676
677         result = acpi_device_setup_files(device);
678         if (result)
679                 printk(KERN_ERR PREFIX "Error creating sysfs interface for device %s\n",
680                        dev_name(&device->dev));
681
682         device->removal_type = ACPI_BUS_REMOVAL_NORMAL;
683         return 0;
684 end:
685         mutex_lock(&acpi_device_lock);
686         if (device->parent)
687                 list_del(&device->node);
688         list_del(&device->wakeup_list);
689         mutex_unlock(&acpi_device_lock);
690         return result;
691 }
692
693 static void acpi_device_unregister(struct acpi_device *device)
694 {
695         mutex_lock(&acpi_device_lock);
696         if (device->parent)
697                 list_del(&device->node);
698
699         list_del(&device->wakeup_list);
700         mutex_unlock(&acpi_device_lock);
701
702         acpi_detach_data(device->handle, acpi_bus_data_handler);
703
704         acpi_device_remove_files(device);
705         device_unregister(&device->dev);
706 }
707
708 /* --------------------------------------------------------------------------
709                                  Driver Management
710    -------------------------------------------------------------------------- */
711 /**
712  * acpi_bus_driver_init - add a device to a driver
713  * @device: the device to add and initialize
714  * @driver: driver for the device
715  *
716  * Used to initialize a device via its device driver.  Called whenever a
717  * driver is bound to a device.  Invokes the driver's add() ops.
718  */
719 static int
720 acpi_bus_driver_init(struct acpi_device *device, struct acpi_driver *driver)
721 {
722         int result = 0;
723
724         if (!device || !driver)
725                 return -EINVAL;
726
727         if (!driver->ops.add)
728                 return -ENOSYS;
729
730         result = driver->ops.add(device);
731         if (result) {
732                 device->driver = NULL;
733                 device->driver_data = NULL;
734                 return result;
735         }
736
737         device->driver = driver;
738
739         /*
740          * TBD - Configuration Management: Assign resources to device based
741          * upon possible configuration and currently allocated resources.
742          */
743
744         ACPI_DEBUG_PRINT((ACPI_DB_INFO,
745                           "Driver successfully bound to device\n"));
746         return 0;
747 }
748
749 /**
750  * acpi_bus_register_driver - register a driver with the ACPI bus
751  * @driver: driver being registered
752  *
753  * Registers a driver with the ACPI bus.  Searches the namespace for all
754  * devices that match the driver's criteria and binds.  Returns zero for
755  * success or a negative error status for failure.
756  */
757 int acpi_bus_register_driver(struct acpi_driver *driver)
758 {
759         int ret;
760
761         if (acpi_disabled)
762                 return -ENODEV;
763         driver->drv.name = driver->name;
764         driver->drv.bus = &acpi_bus_type;
765         driver->drv.owner = driver->owner;
766
767         ret = driver_register(&driver->drv);
768         return ret;
769 }
770
771 EXPORT_SYMBOL(acpi_bus_register_driver);
772
773 /**
774  * acpi_bus_unregister_driver - unregisters a driver with the APIC bus
775  * @driver: driver to unregister
776  *
777  * Unregisters a driver with the ACPI bus.  Searches the namespace for all
778  * devices that match the driver's criteria and unbinds.
779  */
780 void acpi_bus_unregister_driver(struct acpi_driver *driver)
781 {
782         driver_unregister(&driver->drv);
783 }
784
785 EXPORT_SYMBOL(acpi_bus_unregister_driver);
786
787 /* --------------------------------------------------------------------------
788                                  Device Enumeration
789    -------------------------------------------------------------------------- */
790 static struct acpi_device *acpi_bus_get_parent(acpi_handle handle)
791 {
792         acpi_status status;
793         int ret;
794         struct acpi_device *device;
795
796         /*
797          * Fixed hardware devices do not appear in the namespace and do not
798          * have handles, but we fabricate acpi_devices for them, so we have
799          * to deal with them specially.
800          */
801         if (handle == NULL)
802                 return acpi_root;
803
804         do {
805                 status = acpi_get_parent(handle, &handle);
806                 if (status == AE_NULL_ENTRY)
807                         return NULL;
808                 if (ACPI_FAILURE(status))
809                         return acpi_root;
810
811                 ret = acpi_bus_get_device(handle, &device);
812                 if (ret == 0)
813                         return device;
814         } while (1);
815 }
816
817 acpi_status
818 acpi_bus_get_ejd(acpi_handle handle, acpi_handle *ejd)
819 {
820         acpi_status status;
821         acpi_handle tmp;
822         struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
823         union acpi_object *obj;
824
825         status = acpi_get_handle(handle, "_EJD", &tmp);
826         if (ACPI_FAILURE(status))
827                 return status;
828
829         status = acpi_evaluate_object(handle, "_EJD", NULL, &buffer);
830         if (ACPI_SUCCESS(status)) {
831                 obj = buffer.pointer;
832                 status = acpi_get_handle(ACPI_ROOT_OBJECT, obj->string.pointer,
833                                          ejd);
834                 kfree(buffer.pointer);
835         }
836         return status;
837 }
838 EXPORT_SYMBOL_GPL(acpi_bus_get_ejd);
839
840 void acpi_bus_data_handler(acpi_handle handle, void *context)
841 {
842
843         /* TBD */
844
845         return;
846 }
847
848 static int acpi_bus_get_perf_flags(struct acpi_device *device)
849 {
850         device->performance.state = ACPI_STATE_UNKNOWN;
851         return 0;
852 }
853
854 static acpi_status
855 acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
856                                              struct acpi_device_wakeup *wakeup)
857 {
858         struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
859         union acpi_object *package = NULL;
860         union acpi_object *element = NULL;
861         acpi_status status;
862         int i = 0;
863
864         if (!wakeup)
865                 return AE_BAD_PARAMETER;
866
867         /* _PRW */
868         status = acpi_evaluate_object(handle, "_PRW", NULL, &buffer);
869         if (ACPI_FAILURE(status)) {
870                 ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRW"));
871                 return status;
872         }
873
874         package = (union acpi_object *)buffer.pointer;
875
876         if (!package || (package->package.count < 2)) {
877                 status = AE_BAD_DATA;
878                 goto out;
879         }
880
881         element = &(package->package.elements[0]);
882         if (!element) {
883                 status = AE_BAD_DATA;
884                 goto out;
885         }
886         if (element->type == ACPI_TYPE_PACKAGE) {
887                 if ((element->package.count < 2) ||
888                     (element->package.elements[0].type !=
889                      ACPI_TYPE_LOCAL_REFERENCE)
890                     || (element->package.elements[1].type != ACPI_TYPE_INTEGER)) {
891                         status = AE_BAD_DATA;
892                         goto out;
893                 }
894                 wakeup->gpe_device =
895                     element->package.elements[0].reference.handle;
896                 wakeup->gpe_number =
897                     (u32) element->package.elements[1].integer.value;
898         } else if (element->type == ACPI_TYPE_INTEGER) {
899                 wakeup->gpe_device = NULL;
900                 wakeup->gpe_number = element->integer.value;
901         } else {
902                 status = AE_BAD_DATA;
903                 goto out;
904         }
905
906         element = &(package->package.elements[1]);
907         if (element->type != ACPI_TYPE_INTEGER) {
908                 status = AE_BAD_DATA;
909                 goto out;
910         }
911         wakeup->sleep_state = element->integer.value;
912
913         if ((package->package.count - 2) > ACPI_MAX_HANDLES) {
914                 status = AE_NO_MEMORY;
915                 goto out;
916         }
917         wakeup->resources.count = package->package.count - 2;
918         for (i = 0; i < wakeup->resources.count; i++) {
919                 element = &(package->package.elements[i + 2]);
920                 if (element->type != ACPI_TYPE_LOCAL_REFERENCE) {
921                         status = AE_BAD_DATA;
922                         goto out;
923                 }
924
925                 wakeup->resources.handles[i] = element->reference.handle;
926         }
927
928         acpi_setup_gpe_for_wake(handle, wakeup->gpe_device, wakeup->gpe_number);
929
930  out:
931         kfree(buffer.pointer);
932
933         return status;
934 }
935
936 static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
937 {
938         struct acpi_device_id button_device_ids[] = {
939                 {"PNP0C0C", 0},
940                 {"PNP0C0D", 0},
941                 {"PNP0C0E", 0},
942                 {"", 0},
943         };
944         acpi_status status;
945         acpi_event_status event_status;
946
947         device->wakeup.flags.notifier_present = 0;
948
949         /* Power button, Lid switch always enable wakeup */
950         if (!acpi_match_device_ids(device, button_device_ids)) {
951                 device->wakeup.flags.run_wake = 1;
952                 if (!acpi_match_device_ids(device, &button_device_ids[1])) {
953                         /* Do not use Lid/sleep button for S5 wakeup */
954                         if (device->wakeup.sleep_state == ACPI_STATE_S5)
955                                 device->wakeup.sleep_state = ACPI_STATE_S4;
956                 }
957                 device_set_wakeup_capable(&device->dev, true);
958                 return;
959         }
960
961         status = acpi_get_gpe_status(device->wakeup.gpe_device,
962                                         device->wakeup.gpe_number,
963                                                 &event_status);
964         if (status == AE_OK)
965                 device->wakeup.flags.run_wake =
966                                 !!(event_status & ACPI_EVENT_FLAG_HANDLE);
967 }
968
969 static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
970 {
971         acpi_handle temp;
972         acpi_status status = 0;
973         int psw_error;
974
975         /* Presence of _PRW indicates wake capable */
976         status = acpi_get_handle(device->handle, "_PRW", &temp);
977         if (ACPI_FAILURE(status))
978                 return;
979
980         status = acpi_bus_extract_wakeup_device_power_package(device->handle,
981                                                               &device->wakeup);
982         if (ACPI_FAILURE(status)) {
983                 ACPI_EXCEPTION((AE_INFO, status, "Extracting _PRW package"));
984                 return;
985         }
986
987         device->wakeup.flags.valid = 1;
988         device->wakeup.prepare_count = 0;
989         acpi_bus_set_run_wake_flags(device);
990         /* Call _PSW/_DSW object to disable its ability to wake the sleeping
991          * system for the ACPI device with the _PRW object.
992          * The _PSW object is depreciated in ACPI 3.0 and is replaced by _DSW.
993          * So it is necessary to call _DSW object first. Only when it is not
994          * present will the _PSW object used.
995          */
996         psw_error = acpi_device_sleep_wake(device, 0, 0, 0);
997         if (psw_error)
998                 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
999                                 "error in _DSW or _PSW evaluation\n"));
1000 }
1001
1002 static void acpi_bus_add_power_resource(acpi_handle handle);
1003
1004 static int acpi_bus_get_power_flags(struct acpi_device *device)
1005 {
1006         acpi_status status = 0;
1007         acpi_handle handle = NULL;
1008         u32 i = 0;
1009
1010
1011         /*
1012          * Power Management Flags
1013          */
1014         status = acpi_get_handle(device->handle, "_PSC", &handle);
1015         if (ACPI_SUCCESS(status))
1016                 device->power.flags.explicit_get = 1;
1017         status = acpi_get_handle(device->handle, "_IRC", &handle);
1018         if (ACPI_SUCCESS(status))
1019                 device->power.flags.inrush_current = 1;
1020
1021         /*
1022          * Enumerate supported power management states
1023          */
1024         for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) {
1025                 struct acpi_device_power_state *ps = &device->power.states[i];
1026                 char object_name[5] = { '_', 'P', 'R', '0' + i, '\0' };
1027
1028                 /* Evaluate "_PRx" to se if power resources are referenced */
1029                 acpi_evaluate_reference(device->handle, object_name, NULL,
1030                                         &ps->resources);
1031                 if (ps->resources.count) {
1032                         int j;
1033
1034                         device->power.flags.power_resources = 1;
1035                         for (j = 0; j < ps->resources.count; j++)
1036                                 acpi_bus_add_power_resource(ps->resources.handles[j]);
1037                 }
1038
1039                 /* Evaluate "_PSx" to see if we can do explicit sets */
1040                 object_name[2] = 'S';
1041                 status = acpi_get_handle(device->handle, object_name, &handle);
1042                 if (ACPI_SUCCESS(status))
1043                         ps->flags.explicit_set = 1;
1044
1045                 /*
1046                  * State is valid if there are means to put the device into it.
1047                  * D3hot is only valid if _PR3 present.
1048                  */
1049                 if (ps->resources.count ||
1050                     (ps->flags.explicit_set && i < ACPI_STATE_D3_HOT)) {
1051                         ps->flags.valid = 1;
1052                         ps->flags.os_accessible = 1;
1053                 }
1054
1055                 ps->power = -1; /* Unknown - driver assigned */
1056                 ps->latency = -1;       /* Unknown - driver assigned */
1057         }
1058
1059         /* Set defaults for D0 and D3 states (always valid) */
1060         device->power.states[ACPI_STATE_D0].flags.valid = 1;
1061         device->power.states[ACPI_STATE_D0].power = 100;
1062         device->power.states[ACPI_STATE_D3].flags.valid = 1;
1063         device->power.states[ACPI_STATE_D3].power = 0;
1064
1065         /* Set D3cold's explicit_set flag if _PS3 exists. */
1066         if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set)
1067                 device->power.states[ACPI_STATE_D3_COLD].flags.explicit_set = 1;
1068
1069         /* Presence of _PS3 or _PRx means we can put the device into D3 cold */
1070         if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set ||
1071                         device->power.flags.power_resources)
1072                 device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1;
1073
1074         acpi_bus_init_power(device);
1075
1076         return 0;
1077 }
1078
1079 static int acpi_bus_get_flags(struct acpi_device *device)
1080 {
1081         acpi_status status = AE_OK;
1082         acpi_handle temp = NULL;
1083
1084
1085         /* Presence of _STA indicates 'dynamic_status' */
1086         status = acpi_get_handle(device->handle, "_STA", &temp);
1087         if (ACPI_SUCCESS(status))
1088                 device->flags.dynamic_status = 1;
1089
1090         /* Presence of _RMV indicates 'removable' */
1091         status = acpi_get_handle(device->handle, "_RMV", &temp);
1092         if (ACPI_SUCCESS(status))
1093                 device->flags.removable = 1;
1094
1095         /* Presence of _EJD|_EJ0 indicates 'ejectable' */
1096         status = acpi_get_handle(device->handle, "_EJD", &temp);
1097         if (ACPI_SUCCESS(status))
1098                 device->flags.ejectable = 1;
1099         else {
1100                 status = acpi_get_handle(device->handle, "_EJ0", &temp);
1101                 if (ACPI_SUCCESS(status))
1102                         device->flags.ejectable = 1;
1103         }
1104
1105         /* Power resources cannot be power manageable. */
1106         if (device->device_type == ACPI_BUS_TYPE_POWER)
1107                 return 0;
1108
1109         /* Presence of _PS0|_PR0 indicates 'power manageable' */
1110         status = acpi_get_handle(device->handle, "_PS0", &temp);
1111         if (ACPI_FAILURE(status))
1112                 status = acpi_get_handle(device->handle, "_PR0", &temp);
1113         if (ACPI_SUCCESS(status))
1114                 device->flags.power_manageable = 1;
1115
1116         /* TBD: Performance management */
1117
1118         return 0;
1119 }
1120
1121 static void acpi_device_get_busid(struct acpi_device *device)
1122 {
1123         char bus_id[5] = { '?', 0 };
1124         struct acpi_buffer buffer = { sizeof(bus_id), bus_id };
1125         int i = 0;
1126
1127         /*
1128          * Bus ID
1129          * ------
1130          * The device's Bus ID is simply the object name.
1131          * TBD: Shouldn't this value be unique (within the ACPI namespace)?
1132          */
1133         if (ACPI_IS_ROOT_DEVICE(device)) {
1134                 strcpy(device->pnp.bus_id, "ACPI");
1135                 return;
1136         }
1137
1138         switch (device->device_type) {
1139         case ACPI_BUS_TYPE_POWER_BUTTON:
1140                 strcpy(device->pnp.bus_id, "PWRF");
1141                 break;
1142         case ACPI_BUS_TYPE_SLEEP_BUTTON:
1143                 strcpy(device->pnp.bus_id, "SLPF");
1144                 break;
1145         default:
1146                 acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer);
1147                 /* Clean up trailing underscores (if any) */
1148                 for (i = 3; i > 1; i--) {
1149                         if (bus_id[i] == '_')
1150                                 bus_id[i] = '\0';
1151                         else
1152                                 break;
1153                 }
1154                 strcpy(device->pnp.bus_id, bus_id);
1155                 break;
1156         }
1157 }
1158
1159 /*
1160  * acpi_bay_match - see if a device is an ejectable driver bay
1161  *
1162  * If an acpi object is ejectable and has one of the ACPI ATA methods defined,
1163  * then we can safely call it an ejectable drive bay
1164  */
1165 static int acpi_bay_match(struct acpi_device *device){
1166         acpi_status status;
1167         acpi_handle handle;
1168         acpi_handle tmp;
1169         acpi_handle phandle;
1170
1171         handle = device->handle;
1172
1173         status = acpi_get_handle(handle, "_EJ0", &tmp);
1174         if (ACPI_FAILURE(status))
1175                 return -ENODEV;
1176
1177         if ((ACPI_SUCCESS(acpi_get_handle(handle, "_GTF", &tmp))) ||
1178                 (ACPI_SUCCESS(acpi_get_handle(handle, "_GTM", &tmp))) ||
1179                 (ACPI_SUCCESS(acpi_get_handle(handle, "_STM", &tmp))) ||
1180                 (ACPI_SUCCESS(acpi_get_handle(handle, "_SDD", &tmp))))
1181                 return 0;
1182
1183         if (acpi_get_parent(handle, &phandle))
1184                 return -ENODEV;
1185
1186         if ((ACPI_SUCCESS(acpi_get_handle(phandle, "_GTF", &tmp))) ||
1187                 (ACPI_SUCCESS(acpi_get_handle(phandle, "_GTM", &tmp))) ||
1188                 (ACPI_SUCCESS(acpi_get_handle(phandle, "_STM", &tmp))) ||
1189                 (ACPI_SUCCESS(acpi_get_handle(phandle, "_SDD", &tmp))))
1190                 return 0;
1191
1192         return -ENODEV;
1193 }
1194
1195 /*
1196  * acpi_dock_match - see if a device has a _DCK method
1197  */
1198 static int acpi_dock_match(struct acpi_device *device)
1199 {
1200         acpi_handle tmp;
1201         return acpi_get_handle(device->handle, "_DCK", &tmp);
1202 }
1203
1204 const char *acpi_device_hid(struct acpi_device *device)
1205 {
1206         struct acpi_hardware_id *hid;
1207
1208         if (list_empty(&device->pnp.ids))
1209                 return dummy_hid;
1210
1211         hid = list_first_entry(&device->pnp.ids, struct acpi_hardware_id, list);
1212         return hid->id;
1213 }
1214 EXPORT_SYMBOL(acpi_device_hid);
1215
1216 static void acpi_add_id(struct acpi_device *device, const char *dev_id)
1217 {
1218         struct acpi_hardware_id *id;
1219
1220         id = kmalloc(sizeof(*id), GFP_KERNEL);
1221         if (!id)
1222                 return;
1223
1224         id->id = kstrdup(dev_id, GFP_KERNEL);
1225         if (!id->id) {
1226                 kfree(id);
1227                 return;
1228         }
1229
1230         list_add_tail(&id->list, &device->pnp.ids);
1231 }
1232
1233 /*
1234  * Old IBM workstations have a DSDT bug wherein the SMBus object
1235  * lacks the SMBUS01 HID and the methods do not have the necessary "_"
1236  * prefix.  Work around this.
1237  */
1238 static int acpi_ibm_smbus_match(struct acpi_device *device)
1239 {
1240         acpi_handle h_dummy;
1241         struct acpi_buffer path = {ACPI_ALLOCATE_BUFFER, NULL};
1242         int result;
1243
1244         if (!dmi_name_in_vendors("IBM"))
1245                 return -ENODEV;
1246
1247         /* Look for SMBS object */
1248         result = acpi_get_name(device->handle, ACPI_SINGLE_NAME, &path);
1249         if (result)
1250                 return result;
1251
1252         if (strcmp("SMBS", path.pointer)) {
1253                 result = -ENODEV;
1254                 goto out;
1255         }
1256
1257         /* Does it have the necessary (but misnamed) methods? */
1258         result = -ENODEV;
1259         if (ACPI_SUCCESS(acpi_get_handle(device->handle, "SBI", &h_dummy)) &&
1260             ACPI_SUCCESS(acpi_get_handle(device->handle, "SBR", &h_dummy)) &&
1261             ACPI_SUCCESS(acpi_get_handle(device->handle, "SBW", &h_dummy)))
1262                 result = 0;
1263 out:
1264         kfree(path.pointer);
1265         return result;
1266 }
1267
1268 static void acpi_device_set_id(struct acpi_device *device)
1269 {
1270         acpi_status status;
1271         struct acpi_device_info *info;
1272         struct acpi_pnp_device_id_list *cid_list;
1273         int i;
1274
1275         switch (device->device_type) {
1276         case ACPI_BUS_TYPE_DEVICE:
1277                 if (ACPI_IS_ROOT_DEVICE(device)) {
1278                         acpi_add_id(device, ACPI_SYSTEM_HID);
1279                         break;
1280                 }
1281
1282                 status = acpi_get_object_info(device->handle, &info);
1283                 if (ACPI_FAILURE(status)) {
1284                         printk(KERN_ERR PREFIX "%s: Error reading device info\n", __func__);
1285                         return;
1286                 }
1287
1288                 if (info->valid & ACPI_VALID_HID)
1289                         acpi_add_id(device, info->hardware_id.string);
1290                 if (info->valid & ACPI_VALID_CID) {
1291                         cid_list = &info->compatible_id_list;
1292                         for (i = 0; i < cid_list->count; i++)
1293                                 acpi_add_id(device, cid_list->ids[i].string);
1294                 }
1295                 if (info->valid & ACPI_VALID_ADR) {
1296                         device->pnp.bus_address = info->address;
1297                         device->flags.bus_address = 1;
1298                 }
1299                 if (info->valid & ACPI_VALID_UID)
1300                         device->pnp.unique_id = kstrdup(info->unique_id.string,
1301                                                         GFP_KERNEL);
1302
1303                 kfree(info);
1304
1305                 /*
1306                  * Some devices don't reliably have _HIDs & _CIDs, so add
1307                  * synthetic HIDs to make sure drivers can find them.
1308                  */
1309                 if (acpi_is_video_device(device))
1310                         acpi_add_id(device, ACPI_VIDEO_HID);
1311                 else if (ACPI_SUCCESS(acpi_bay_match(device)))
1312                         acpi_add_id(device, ACPI_BAY_HID);
1313                 else if (ACPI_SUCCESS(acpi_dock_match(device)))
1314                         acpi_add_id(device, ACPI_DOCK_HID);
1315                 else if (!acpi_ibm_smbus_match(device))
1316                         acpi_add_id(device, ACPI_SMBUS_IBM_HID);
1317                 else if (!acpi_device_hid(device) &&
1318                          ACPI_IS_ROOT_DEVICE(device->parent)) {
1319                         acpi_add_id(device, ACPI_BUS_HID); /* \_SB, LNXSYBUS */
1320                         strcpy(device->pnp.device_name, ACPI_BUS_DEVICE_NAME);
1321                         strcpy(device->pnp.device_class, ACPI_BUS_CLASS);
1322                 }
1323
1324                 break;
1325         case ACPI_BUS_TYPE_POWER:
1326                 acpi_add_id(device, ACPI_POWER_HID);
1327                 break;
1328         case ACPI_BUS_TYPE_PROCESSOR:
1329                 acpi_add_id(device, ACPI_PROCESSOR_OBJECT_HID);
1330                 break;
1331         case ACPI_BUS_TYPE_THERMAL:
1332                 acpi_add_id(device, ACPI_THERMAL_HID);
1333                 break;
1334         case ACPI_BUS_TYPE_POWER_BUTTON:
1335                 acpi_add_id(device, ACPI_BUTTON_HID_POWERF);
1336                 break;
1337         case ACPI_BUS_TYPE_SLEEP_BUTTON:
1338                 acpi_add_id(device, ACPI_BUTTON_HID_SLEEPF);
1339                 break;
1340         }
1341 }
1342
1343 static int acpi_device_set_context(struct acpi_device *device)
1344 {
1345         acpi_status status;
1346
1347         /*
1348          * Context
1349          * -------
1350          * Attach this 'struct acpi_device' to the ACPI object.  This makes
1351          * resolutions from handle->device very efficient.  Fixed hardware
1352          * devices have no handles, so we skip them.
1353          */
1354         if (!device->handle)
1355                 return 0;
1356
1357         status = acpi_attach_data(device->handle,
1358                                   acpi_bus_data_handler, device);
1359         if (ACPI_SUCCESS(status))
1360                 return 0;
1361
1362         printk(KERN_ERR PREFIX "Error attaching device data\n");
1363         return -ENODEV;
1364 }
1365
1366 static int acpi_add_single_object(struct acpi_device **child,
1367                                   acpi_handle handle, int type,
1368                                   unsigned long long sta, bool match_driver)
1369 {
1370         int result;
1371         struct acpi_device *device;
1372         struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
1373
1374         device = kzalloc(sizeof(struct acpi_device), GFP_KERNEL);
1375         if (!device) {
1376                 printk(KERN_ERR PREFIX "Memory allocation error\n");
1377                 return -ENOMEM;
1378         }
1379
1380         INIT_LIST_HEAD(&device->pnp.ids);
1381         device->device_type = type;
1382         device->handle = handle;
1383         device->parent = acpi_bus_get_parent(handle);
1384         STRUCT_TO_INT(device->status) = sta;
1385
1386         acpi_device_get_busid(device);
1387
1388         /*
1389          * Flags
1390          * -----
1391          * Note that we only look for object handles -- cannot evaluate objects
1392          * until we know the device is present and properly initialized.
1393          */
1394         result = acpi_bus_get_flags(device);
1395         if (result)
1396                 goto end;
1397
1398         /*
1399          * Initialize Device
1400          * -----------------
1401          * TBD: Synch with Core's enumeration/initialization process.
1402          */
1403         acpi_device_set_id(device);
1404
1405         /*
1406          * Power Management
1407          * ----------------
1408          */
1409         if (device->flags.power_manageable) {
1410                 result = acpi_bus_get_power_flags(device);
1411                 if (result)
1412                         goto end;
1413         }
1414
1415         /*
1416          * Wakeup device management
1417          *-----------------------
1418          */
1419         acpi_bus_get_wakeup_device_flags(device);
1420
1421         /*
1422          * Performance Management
1423          * ----------------------
1424          */
1425         if (device->flags.performance_manageable) {
1426                 result = acpi_bus_get_perf_flags(device);
1427                 if (result)
1428                         goto end;
1429         }
1430
1431         if ((result = acpi_device_set_context(device)))
1432                 goto end;
1433
1434         device->flags.match_driver = match_driver;
1435         result = acpi_device_register(device);
1436
1437 end:
1438         if (!result) {
1439                 acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
1440                 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
1441                         "Adding %s [%s] parent %s\n", dev_name(&device->dev),
1442                          (char *) buffer.pointer,
1443                          device->parent ? dev_name(&device->parent->dev) :
1444                                           "(null)"));
1445                 kfree(buffer.pointer);
1446                 *child = device;
1447         } else
1448                 acpi_device_release(&device->dev);
1449
1450         return result;
1451 }
1452
1453 #define ACPI_STA_DEFAULT (ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED | \
1454                           ACPI_STA_DEVICE_UI      | ACPI_STA_DEVICE_FUNCTIONING)
1455
1456 static void acpi_bus_add_power_resource(acpi_handle handle)
1457 {
1458         struct acpi_device *device = NULL;
1459
1460         acpi_bus_get_device(handle, &device);
1461         if (!device)
1462                 acpi_add_single_object(&device, handle, ACPI_BUS_TYPE_POWER,
1463                                         ACPI_STA_DEFAULT, true);
1464 }
1465
1466 static int acpi_bus_type_and_status(acpi_handle handle, int *type,
1467                                     unsigned long long *sta)
1468 {
1469         acpi_status status;
1470         acpi_object_type acpi_type;
1471
1472         status = acpi_get_type(handle, &acpi_type);
1473         if (ACPI_FAILURE(status))
1474                 return -ENODEV;
1475
1476         switch (acpi_type) {
1477         case ACPI_TYPE_ANY:             /* for ACPI_ROOT_OBJECT */
1478         case ACPI_TYPE_DEVICE:
1479                 *type = ACPI_BUS_TYPE_DEVICE;
1480                 status = acpi_bus_get_status_handle(handle, sta);
1481                 if (ACPI_FAILURE(status))
1482                         return -ENODEV;
1483                 break;
1484         case ACPI_TYPE_PROCESSOR:
1485                 *type = ACPI_BUS_TYPE_PROCESSOR;
1486                 status = acpi_bus_get_status_handle(handle, sta);
1487                 if (ACPI_FAILURE(status))
1488                         return -ENODEV;
1489                 break;
1490         case ACPI_TYPE_THERMAL:
1491                 *type = ACPI_BUS_TYPE_THERMAL;
1492                 *sta = ACPI_STA_DEFAULT;
1493                 break;
1494         case ACPI_TYPE_POWER:
1495                 *type = ACPI_BUS_TYPE_POWER;
1496                 *sta = ACPI_STA_DEFAULT;
1497                 break;
1498         default:
1499                 return -ENODEV;
1500         }
1501
1502         return 0;
1503 }
1504
1505 static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl_not_used,
1506                                       void *not_used, void **return_value)
1507 {
1508         struct acpi_device *device = NULL;
1509         int type;
1510         unsigned long long sta;
1511         acpi_status status;
1512         int result;
1513
1514         acpi_bus_get_device(handle, &device);
1515         if (device)
1516                 goto out;
1517
1518         result = acpi_bus_type_and_status(handle, &type, &sta);
1519         if (result)
1520                 return AE_OK;
1521
1522         if (!(sta & ACPI_STA_DEVICE_PRESENT) &&
1523             !(sta & ACPI_STA_DEVICE_FUNCTIONING)) {
1524                 struct acpi_device_wakeup wakeup;
1525                 acpi_handle temp;
1526
1527                 status = acpi_get_handle(handle, "_PRW", &temp);
1528                 if (ACPI_SUCCESS(status))
1529                         acpi_bus_extract_wakeup_device_power_package(handle,
1530                                                                      &wakeup);
1531                 return AE_CTRL_DEPTH;
1532         }
1533
1534         acpi_add_single_object(&device, handle, type, sta,
1535                                type == ACPI_BUS_TYPE_POWER);
1536         if (!device)
1537                 return AE_CTRL_DEPTH;
1538
1539         device->flags.match_driver = true;
1540
1541  out:
1542         if (!*return_value)
1543                 *return_value = device;
1544
1545         return AE_OK;
1546 }
1547
1548 static acpi_status acpi_bus_device_attach(acpi_handle handle, u32 lvl_not_used,
1549                                           void *not_used, void **ret_not_used)
1550 {
1551         acpi_status status = AE_OK;
1552         struct acpi_device *device;
1553         unsigned long long sta_not_used;
1554         int type_not_used;
1555
1556         /*
1557          * Ignore errors ignored by acpi_bus_check_add() to avoid terminating
1558          * namespace walks prematurely.
1559          */
1560         if (acpi_bus_type_and_status(handle, &type_not_used, &sta_not_used))
1561                 return AE_OK;
1562
1563         if (acpi_bus_get_device(handle, &device))
1564                 return AE_CTRL_DEPTH;
1565
1566         if (!acpi_match_device_ids(device, acpi_platform_device_ids)) {
1567                 /* This is a known good platform device. */
1568                 acpi_create_platform_device(device);
1569         } else if (device_attach(&device->dev) < 0) {
1570                 status = AE_CTRL_DEPTH;
1571         }
1572         return status;
1573 }
1574
1575 /**
1576  * acpi_bus_scan - Add ACPI device node objects in a given namespace scope.
1577  * @handle: Root of the namespace scope to scan.
1578  *
1579  * Scan a given ACPI tree (probably recently hot-plugged) and create and add
1580  * found devices.
1581  *
1582  * If no devices were found, -ENODEV is returned, but it does not mean that
1583  * there has been a real error.  There just have been no suitable ACPI objects
1584  * in the table trunk from which the kernel could create a device and add an
1585  * appropriate driver.
1586  */
1587 int acpi_bus_scan(acpi_handle handle)
1588 {
1589         void *device = NULL;
1590
1591         if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
1592                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
1593                                     acpi_bus_check_add, NULL, NULL, &device);
1594
1595         if (!device)
1596                 return -ENODEV;
1597
1598         if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
1599                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
1600                                     acpi_bus_device_attach, NULL, NULL, NULL);
1601
1602         return 0;
1603 }
1604 EXPORT_SYMBOL(acpi_bus_scan);
1605
1606 static acpi_status acpi_bus_device_detach(acpi_handle handle, u32 lvl_not_used,
1607                                           void *not_used, void **ret_not_used)
1608 {
1609         struct acpi_device *device = NULL;
1610
1611         if (!acpi_bus_get_device(handle, &device)) {
1612                 device->removal_type = ACPI_BUS_REMOVAL_EJECT;
1613                 device_release_driver(&device->dev);
1614         }
1615         return AE_OK;
1616 }
1617
1618 static acpi_status acpi_bus_remove(acpi_handle handle, u32 lvl_not_used,
1619                                    void *not_used, void **ret_not_used)
1620 {
1621         struct acpi_device *device = NULL;
1622
1623         if (!acpi_bus_get_device(handle, &device))
1624                 acpi_device_unregister(device);
1625
1626         return AE_OK;
1627 }
1628
1629 void acpi_bus_trim(struct acpi_device *start)
1630 {
1631         /*
1632          * Execute acpi_bus_device_detach() as a post-order callback to detach
1633          * all ACPI drivers from the device nodes being removed.
1634          */
1635         acpi_walk_namespace(ACPI_TYPE_ANY, start->handle, ACPI_UINT32_MAX, NULL,
1636                             acpi_bus_device_detach, NULL, NULL);
1637         acpi_bus_device_detach(start->handle, 0, NULL, NULL);
1638         /*
1639          * Execute acpi_bus_remove() as a post-order callback to remove device
1640          * nodes in the given namespace scope.
1641          */
1642         acpi_walk_namespace(ACPI_TYPE_ANY, start->handle, ACPI_UINT32_MAX, NULL,
1643                             acpi_bus_remove, NULL, NULL);
1644         acpi_bus_remove(start->handle, 0, NULL, NULL);
1645 }
1646 EXPORT_SYMBOL_GPL(acpi_bus_trim);
1647
1648 static int acpi_bus_scan_fixed(void)
1649 {
1650         int result = 0;
1651         struct acpi_device *device = NULL;
1652
1653         /*
1654          * Enumerate all fixed-feature devices.
1655          */
1656         if ((acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON) == 0) {
1657                 result = acpi_add_single_object(&device, NULL,
1658                                                 ACPI_BUS_TYPE_POWER_BUTTON,
1659                                                 ACPI_STA_DEFAULT, true);
1660                 device_init_wakeup(&device->dev, true);
1661         }
1662
1663         if ((acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON) == 0) {
1664                 result = acpi_add_single_object(&device, NULL,
1665                                                 ACPI_BUS_TYPE_SLEEP_BUTTON,
1666                                                 ACPI_STA_DEFAULT, true);
1667         }
1668
1669         return result;
1670 }
1671
1672 int __init acpi_scan_init(void)
1673 {
1674         int result;
1675
1676         result = bus_register(&acpi_bus_type);
1677         if (result) {
1678                 /* We don't want to quit even if we failed to add suspend/resume */
1679                 printk(KERN_ERR PREFIX "Could not register bus type\n");
1680         }
1681
1682         acpi_power_init();
1683         acpi_pci_root_init();
1684
1685         /*
1686          * Enumerate devices in the ACPI namespace.
1687          */
1688         result = acpi_bus_scan(ACPI_ROOT_OBJECT);
1689         if (result)
1690                 return result;
1691
1692         result = acpi_bus_get_device(ACPI_ROOT_OBJECT, &acpi_root);
1693         if (result)
1694                 return result;
1695
1696         result = acpi_bus_scan_fixed();
1697         if (result) {
1698                 acpi_device_unregister(acpi_root);
1699                 return result;
1700         }
1701
1702         acpi_update_all_gpes();
1703         return 0;
1704 }