spi: mpc52xx: Convert to use bits_per_word_mask
[cascardo/linux.git] / drivers / pci / hotplug / acpiphp_glue.c
1 /*
2  * ACPI PCI HotPlug glue functions to ACPI CA subsystem
3  *
4  * Copyright (C) 2002,2003 Takayoshi Kochi (t-kochi@bq.jp.nec.com)
5  * Copyright (C) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com)
6  * Copyright (C) 2002,2003 NEC Corporation
7  * Copyright (C) 2003-2005 Matthew Wilcox (matthew.wilcox@hp.com)
8  * Copyright (C) 2003-2005 Hewlett Packard
9  * Copyright (C) 2005 Rajesh Shah (rajesh.shah@intel.com)
10  * Copyright (C) 2005 Intel Corporation
11  *
12  * All rights reserved.
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License as published by
16  * the Free Software Foundation; either version 2 of the License, or (at
17  * your option) any later version.
18  *
19  * This program is distributed in the hope that it will be useful, but
20  * WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
22  * NON INFRINGEMENT.  See the GNU General Public License for more
23  * details.
24  *
25  * You should have received a copy of the GNU General Public License
26  * along with this program; if not, write to the Free Software
27  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28  *
29  * Send feedback to <kristen.c.accardi@intel.com>
30  *
31  */
32
33 /*
34  * Lifetime rules for pci_dev:
35  *  - The one in acpiphp_bridge has its refcount elevated by pci_get_slot()
36  *    when the bridge is scanned and it loses a refcount when the bridge
37  *    is removed.
38  *  - When a P2P bridge is present, we elevate the refcount on the subordinate
39  *    bus. It loses the refcount when the the driver unloads.
40  */
41
42 #define pr_fmt(fmt) "acpiphp_glue: " fmt
43
44 #include <linux/init.h>
45 #include <linux/module.h>
46
47 #include <linux/kernel.h>
48 #include <linux/pci.h>
49 #include <linux/pci_hotplug.h>
50 #include <linux/pci-acpi.h>
51 #include <linux/pm_runtime.h>
52 #include <linux/mutex.h>
53 #include <linux/slab.h>
54 #include <linux/acpi.h>
55
56 #include "../pci.h"
57 #include "acpiphp.h"
58
59 static LIST_HEAD(bridge_list);
60 static DEFINE_MUTEX(bridge_mutex);
61 static DEFINE_MUTEX(acpiphp_context_lock);
62
63 static void handle_hotplug_event(acpi_handle handle, u32 type, void *data);
64 static void acpiphp_sanitize_bus(struct pci_bus *bus);
65 static void acpiphp_set_hpp_values(struct pci_bus *bus);
66 static void hotplug_event(acpi_handle handle, u32 type, void *data);
67 static void free_bridge(struct kref *kref);
68
69 static void acpiphp_context_handler(acpi_handle handle, void *context)
70 {
71         /* Intentionally empty. */
72 }
73
74 /**
75  * acpiphp_init_context - Create hotplug context and grab a reference to it.
76  * @handle: ACPI object handle to create the context for.
77  *
78  * Call under acpiphp_context_lock.
79  */
80 static struct acpiphp_context *acpiphp_init_context(acpi_handle handle)
81 {
82         struct acpiphp_context *context;
83         acpi_status status;
84
85         context = kzalloc(sizeof(*context), GFP_KERNEL);
86         if (!context)
87                 return NULL;
88
89         context->handle = handle;
90         context->refcount = 1;
91         status = acpi_attach_data(handle, acpiphp_context_handler, context);
92         if (ACPI_FAILURE(status)) {
93                 kfree(context);
94                 return NULL;
95         }
96         return context;
97 }
98
99 /**
100  * acpiphp_get_context - Get hotplug context and grab a reference to it.
101  * @handle: ACPI object handle to get the context for.
102  *
103  * Call under acpiphp_context_lock.
104  */
105 static struct acpiphp_context *acpiphp_get_context(acpi_handle handle)
106 {
107         struct acpiphp_context *context = NULL;
108         acpi_status status;
109         void *data;
110
111         status = acpi_get_data(handle, acpiphp_context_handler, &data);
112         if (ACPI_SUCCESS(status)) {
113                 context = data;
114                 context->refcount++;
115         }
116         return context;
117 }
118
119 /**
120  * acpiphp_put_context - Drop a reference to ACPI hotplug context.
121  * @handle: ACPI object handle to put the context for.
122  *
123  * The context object is removed if there are no more references to it.
124  *
125  * Call under acpiphp_context_lock.
126  */
127 static void acpiphp_put_context(struct acpiphp_context *context)
128 {
129         if (--context->refcount)
130                 return;
131
132         WARN_ON(context->bridge);
133         acpi_detach_data(context->handle, acpiphp_context_handler);
134         kfree(context);
135 }
136
137 static inline void get_bridge(struct acpiphp_bridge *bridge)
138 {
139         kref_get(&bridge->ref);
140 }
141
142 static inline void put_bridge(struct acpiphp_bridge *bridge)
143 {
144         kref_put(&bridge->ref, free_bridge);
145 }
146
147 static void free_bridge(struct kref *kref)
148 {
149         struct acpiphp_context *context;
150         struct acpiphp_bridge *bridge;
151         struct acpiphp_slot *slot, *next;
152         struct acpiphp_func *func, *tmp;
153
154         mutex_lock(&acpiphp_context_lock);
155
156         bridge = container_of(kref, struct acpiphp_bridge, ref);
157
158         list_for_each_entry_safe(slot, next, &bridge->slots, node) {
159                 list_for_each_entry_safe(func, tmp, &slot->funcs, sibling)
160                         acpiphp_put_context(func_to_context(func));
161
162                 kfree(slot);
163         }
164
165         context = bridge->context;
166         /* Root bridges will not have hotplug context. */
167         if (context) {
168                 /* Release the reference taken by acpiphp_enumerate_slots(). */
169                 put_bridge(context->func.parent);
170                 context->bridge = NULL;
171                 acpiphp_put_context(context);
172         }
173
174         put_device(&bridge->pci_bus->dev);
175         pci_dev_put(bridge->pci_dev);
176         kfree(bridge);
177
178         mutex_unlock(&acpiphp_context_lock);
179 }
180
181 /*
182  * the _DCK method can do funny things... and sometimes not
183  * hah-hah funny.
184  *
185  * TBD - figure out a way to only call fixups for
186  * systems that require them.
187  */
188 static void post_dock_fixups(acpi_handle not_used, u32 event, void *data)
189 {
190         struct acpiphp_context *context = data;
191         struct pci_bus *bus = context->func.slot->bus;
192         u32 buses;
193
194         if (!bus->self)
195                 return;
196
197         /* fixup bad _DCK function that rewrites
198          * secondary bridge on slot
199          */
200         pci_read_config_dword(bus->self,
201                         PCI_PRIMARY_BUS,
202                         &buses);
203
204         if (((buses >> 8) & 0xff) != bus->busn_res.start) {
205                 buses = (buses & 0xff000000)
206                         | ((unsigned int)(bus->primary)     <<  0)
207                         | ((unsigned int)(bus->busn_res.start)   <<  8)
208                         | ((unsigned int)(bus->busn_res.end) << 16);
209                 pci_write_config_dword(bus->self, PCI_PRIMARY_BUS, buses);
210         }
211 }
212
213
214 static const struct acpi_dock_ops acpiphp_dock_ops = {
215         .fixup = post_dock_fixups,
216         .handler = hotplug_event,
217 };
218
219 /* Check whether the PCI device is managed by native PCIe hotplug driver */
220 static bool device_is_managed_by_native_pciehp(struct pci_dev *pdev)
221 {
222         u32 reg32;
223         acpi_handle tmp;
224         struct acpi_pci_root *root;
225
226         /* Check whether the PCIe port supports native PCIe hotplug */
227         if (pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32))
228                 return false;
229         if (!(reg32 & PCI_EXP_SLTCAP_HPC))
230                 return false;
231
232         /*
233          * Check whether native PCIe hotplug has been enabled for
234          * this PCIe hierarchy.
235          */
236         tmp = acpi_find_root_bridge_handle(pdev);
237         if (!tmp)
238                 return false;
239         root = acpi_pci_find_root(tmp);
240         if (!root)
241                 return false;
242         if (!(root->osc_control_set & OSC_PCI_EXPRESS_NATIVE_HP_CONTROL))
243                 return false;
244
245         return true;
246 }
247
248 static void acpiphp_dock_init(void *data)
249 {
250         struct acpiphp_context *context = data;
251
252         get_bridge(context->func.parent);
253 }
254
255 static void acpiphp_dock_release(void *data)
256 {
257         struct acpiphp_context *context = data;
258
259         put_bridge(context->func.parent);
260 }
261
262 /* callback routine to register each ACPI PCI slot object */
263 static acpi_status register_slot(acpi_handle handle, u32 lvl, void *data,
264                                  void **rv)
265 {
266         struct acpiphp_bridge *bridge = data;
267         struct acpiphp_context *context;
268         struct acpiphp_slot *slot;
269         struct acpiphp_func *newfunc;
270         acpi_status status = AE_OK;
271         unsigned long long adr;
272         int device, function;
273         struct pci_bus *pbus = bridge->pci_bus;
274         struct pci_dev *pdev = bridge->pci_dev;
275         u32 val;
276
277         if (pdev && device_is_managed_by_native_pciehp(pdev))
278                 return AE_OK;
279
280         status = acpi_evaluate_integer(handle, "_ADR", NULL, &adr);
281         if (ACPI_FAILURE(status)) {
282                 if (status != AE_NOT_FOUND)
283                         acpi_handle_warn(handle,
284                                 "can't evaluate _ADR (%#x)\n", status);
285                 return AE_OK;
286         }
287
288         device = (adr >> 16) & 0xffff;
289         function = adr & 0xffff;
290
291         mutex_lock(&acpiphp_context_lock);
292         context = acpiphp_init_context(handle);
293         if (!context) {
294                 mutex_unlock(&acpiphp_context_lock);
295                 acpi_handle_err(handle, "No hotplug context\n");
296                 return AE_NOT_EXIST;
297         }
298         newfunc = &context->func;
299         newfunc->function = function;
300         newfunc->parent = bridge;
301         mutex_unlock(&acpiphp_context_lock);
302
303         if (acpi_has_method(handle, "_EJ0"))
304                 newfunc->flags = FUNC_HAS_EJ0;
305
306         if (acpi_has_method(handle, "_STA"))
307                 newfunc->flags |= FUNC_HAS_STA;
308
309         if (acpi_has_method(handle, "_DCK"))
310                 newfunc->flags |= FUNC_HAS_DCK;
311
312         /* search for objects that share the same slot */
313         list_for_each_entry(slot, &bridge->slots, node)
314                 if (slot->device == device)
315                         goto slot_found;
316
317         slot = kzalloc(sizeof(struct acpiphp_slot), GFP_KERNEL);
318         if (!slot) {
319                 status = AE_NO_MEMORY;
320                 goto err;
321         }
322
323         slot->bus = bridge->pci_bus;
324         slot->device = device;
325         INIT_LIST_HEAD(&slot->funcs);
326         mutex_init(&slot->crit_sect);
327
328         list_add_tail(&slot->node, &bridge->slots);
329
330         /* Register slots for ejectable functions only. */
331         if (acpi_pci_check_ejectable(pbus, handle)  || is_dock_device(handle)) {
332                 unsigned long long sun;
333                 int retval;
334
335                 bridge->nr_slots++;
336                 status = acpi_evaluate_integer(handle, "_SUN", NULL, &sun);
337                 if (ACPI_FAILURE(status))
338                         sun = bridge->nr_slots;
339
340                 pr_debug("found ACPI PCI Hotplug slot %llu at PCI %04x:%02x:%02x\n",
341                     sun, pci_domain_nr(pbus), pbus->number, device);
342
343                 retval = acpiphp_register_hotplug_slot(slot, sun);
344                 if (retval) {
345                         slot->slot = NULL;
346                         bridge->nr_slots--;
347                         if (retval == -EBUSY)
348                                 pr_warn("Slot %llu already registered by another "
349                                         "hotplug driver\n", sun);
350                         else
351                                 pr_warn("acpiphp_register_hotplug_slot failed "
352                                         "(err code = 0x%x)\n", retval);
353                 }
354                 /* Even if the slot registration fails, we can still use it. */
355         }
356
357  slot_found:
358         newfunc->slot = slot;
359         list_add_tail(&newfunc->sibling, &slot->funcs);
360
361         if (pci_bus_read_dev_vendor_id(pbus, PCI_DEVFN(device, function),
362                                        &val, 60*1000))
363                 slot->flags |= SLOT_ENABLED;
364
365         if (is_dock_device(handle)) {
366                 /* we don't want to call this device's _EJ0
367                  * because we want the dock notify handler
368                  * to call it after it calls _DCK
369                  */
370                 newfunc->flags &= ~FUNC_HAS_EJ0;
371                 if (register_hotplug_dock_device(handle,
372                         &acpiphp_dock_ops, context,
373                         acpiphp_dock_init, acpiphp_dock_release))
374                         pr_debug("failed to register dock device\n");
375         }
376
377         /* install notify handler */
378         if (!(newfunc->flags & FUNC_HAS_DCK)) {
379                 status = acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
380                                                      handle_hotplug_event,
381                                                      context);
382                 if (ACPI_FAILURE(status))
383                         acpi_handle_err(handle,
384                                         "failed to install notify handler\n");
385         }
386
387         return AE_OK;
388
389  err:
390         mutex_lock(&acpiphp_context_lock);
391         acpiphp_put_context(context);
392         mutex_unlock(&acpiphp_context_lock);
393         return status;
394 }
395
396 static struct acpiphp_bridge *acpiphp_handle_to_bridge(acpi_handle handle)
397 {
398         struct acpiphp_context *context;
399         struct acpiphp_bridge *bridge = NULL;
400
401         mutex_lock(&acpiphp_context_lock);
402         context = acpiphp_get_context(handle);
403         if (context) {
404                 bridge = context->bridge;
405                 if (bridge)
406                         get_bridge(bridge);
407
408                 acpiphp_put_context(context);
409         }
410         mutex_unlock(&acpiphp_context_lock);
411         return bridge;
412 }
413
414 static void cleanup_bridge(struct acpiphp_bridge *bridge)
415 {
416         struct acpiphp_slot *slot;
417         struct acpiphp_func *func;
418         acpi_status status;
419
420         list_for_each_entry(slot, &bridge->slots, node) {
421                 list_for_each_entry(func, &slot->funcs, sibling) {
422                         acpi_handle handle = func_to_handle(func);
423
424                         if (is_dock_device(handle))
425                                 unregister_hotplug_dock_device(handle);
426
427                         if (!(func->flags & FUNC_HAS_DCK)) {
428                                 status = acpi_remove_notify_handler(handle,
429                                                         ACPI_SYSTEM_NOTIFY,
430                                                         handle_hotplug_event);
431                                 if (ACPI_FAILURE(status))
432                                         pr_err("failed to remove notify handler\n");
433                         }
434                 }
435                 slot->flags |= SLOT_IS_GOING_AWAY;
436                 if (slot->slot)
437                         acpiphp_unregister_hotplug_slot(slot);
438         }
439
440         mutex_lock(&bridge_mutex);
441         list_del(&bridge->list);
442         mutex_unlock(&bridge_mutex);
443
444         bridge->is_going_away = true;
445 }
446
447 /**
448  * acpiphp_max_busnr - return the highest reserved bus number under the given bus.
449  * @bus: bus to start search with
450  */
451 static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
452 {
453         struct list_head *tmp;
454         unsigned char max, n;
455
456         /*
457          * pci_bus_max_busnr will return the highest
458          * reserved busnr for all these children.
459          * that is equivalent to the bus->subordinate
460          * value.  We don't want to use the parent's
461          * bus->subordinate value because it could have
462          * padding in it.
463          */
464         max = bus->busn_res.start;
465
466         list_for_each(tmp, &bus->children) {
467                 n = pci_bus_max_busnr(pci_bus_b(tmp));
468                 if (n > max)
469                         max = n;
470         }
471         return max;
472 }
473
474 /**
475  * acpiphp_bus_trim - Trim device objects in an ACPI namespace subtree.
476  * @handle: ACPI device object handle to start from.
477  */
478 static void acpiphp_bus_trim(acpi_handle handle)
479 {
480         struct acpi_device *adev = NULL;
481
482         acpi_bus_get_device(handle, &adev);
483         if (adev)
484                 acpi_bus_trim(adev);
485 }
486
487 /**
488  * acpiphp_bus_add - Scan ACPI namespace subtree.
489  * @handle: ACPI object handle to start the scan from.
490  */
491 static void acpiphp_bus_add(acpi_handle handle)
492 {
493         struct acpi_device *adev = NULL;
494
495         acpi_bus_scan(handle);
496         acpi_bus_get_device(handle, &adev);
497         if (acpi_device_enumerated(adev))
498                 acpi_device_set_power(adev, ACPI_STATE_D0);
499 }
500
501 static void acpiphp_set_acpi_region(struct acpiphp_slot *slot)
502 {
503         struct acpiphp_func *func;
504         union acpi_object params[2];
505         struct acpi_object_list arg_list;
506
507         list_for_each_entry(func, &slot->funcs, sibling) {
508                 arg_list.count = 2;
509                 arg_list.pointer = params;
510                 params[0].type = ACPI_TYPE_INTEGER;
511                 params[0].integer.value = ACPI_ADR_SPACE_PCI_CONFIG;
512                 params[1].type = ACPI_TYPE_INTEGER;
513                 params[1].integer.value = 1;
514                 /* _REG is optional, we don't care about if there is failure */
515                 acpi_evaluate_object(func_to_handle(func), "_REG", &arg_list,
516                                      NULL);
517         }
518 }
519
520 static void check_hotplug_bridge(struct acpiphp_slot *slot, struct pci_dev *dev)
521 {
522         struct acpiphp_func *func;
523
524         /* quirk, or pcie could set it already */
525         if (dev->is_hotplug_bridge)
526                 return;
527
528         list_for_each_entry(func, &slot->funcs, sibling) {
529                 if (PCI_FUNC(dev->devfn) == func->function) {
530                         dev->is_hotplug_bridge = 1;
531                         break;
532                 }
533         }
534 }
535
536 static int acpiphp_rescan_slot(struct acpiphp_slot *slot)
537 {
538         struct acpiphp_func *func;
539
540         list_for_each_entry(func, &slot->funcs, sibling)
541                 acpiphp_bus_add(func_to_handle(func));
542
543         return pci_scan_slot(slot->bus, PCI_DEVFN(slot->device, 0));
544 }
545
546 /**
547  * enable_slot - enable, configure a slot
548  * @slot: slot to be enabled
549  *
550  * This function should be called per *physical slot*,
551  * not per each slot object in ACPI namespace.
552  */
553 static void __ref enable_slot(struct acpiphp_slot *slot)
554 {
555         struct pci_dev *dev;
556         struct pci_bus *bus = slot->bus;
557         struct acpiphp_func *func;
558         int max, pass;
559         LIST_HEAD(add_list);
560
561         acpiphp_rescan_slot(slot);
562         max = acpiphp_max_busnr(bus);
563         for (pass = 0; pass < 2; pass++) {
564                 list_for_each_entry(dev, &bus->devices, bus_list) {
565                         if (PCI_SLOT(dev->devfn) != slot->device)
566                                 continue;
567
568                         if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
569                             dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
570                                 max = pci_scan_bridge(bus, dev, max, pass);
571                                 if (pass && dev->subordinate) {
572                                         check_hotplug_bridge(slot, dev);
573                                         pcibios_resource_survey_bus(dev->subordinate);
574                                         __pci_bus_size_bridges(dev->subordinate,
575                                                                &add_list);
576                                 }
577                         }
578                 }
579         }
580         __pci_bus_assign_resources(bus, &add_list, NULL);
581
582         acpiphp_sanitize_bus(bus);
583         acpiphp_set_hpp_values(bus);
584         acpiphp_set_acpi_region(slot);
585
586         list_for_each_entry(dev, &bus->devices, bus_list) {
587                 /* Assume that newly added devices are powered on already. */
588                 if (!dev->is_added)
589                         dev->current_state = PCI_D0;
590         }
591
592         pci_bus_add_devices(bus);
593
594         slot->flags |= SLOT_ENABLED;
595         list_for_each_entry(func, &slot->funcs, sibling) {
596                 dev = pci_get_slot(bus, PCI_DEVFN(slot->device,
597                                                   func->function));
598                 if (!dev) {
599                         /* Do not set SLOT_ENABLED flag if some funcs
600                            are not added. */
601                         slot->flags &= (~SLOT_ENABLED);
602                         continue;
603                 }
604         }
605 }
606
607 /* return first device in slot, acquiring a reference on it */
608 static struct pci_dev *dev_in_slot(struct acpiphp_slot *slot)
609 {
610         struct pci_bus *bus = slot->bus;
611         struct pci_dev *dev;
612         struct pci_dev *ret = NULL;
613
614         down_read(&pci_bus_sem);
615         list_for_each_entry(dev, &bus->devices, bus_list)
616                 if (PCI_SLOT(dev->devfn) == slot->device) {
617                         ret = pci_dev_get(dev);
618                         break;
619                 }
620         up_read(&pci_bus_sem);
621
622         return ret;
623 }
624
625 /**
626  * disable_slot - disable a slot
627  * @slot: ACPI PHP slot
628  */
629 static void disable_slot(struct acpiphp_slot *slot)
630 {
631         struct acpiphp_func *func;
632         struct pci_dev *pdev;
633
634         /*
635          * enable_slot() enumerates all functions in this device via
636          * pci_scan_slot(), whether they have associated ACPI hotplug
637          * methods (_EJ0, etc.) or not.  Therefore, we remove all functions
638          * here.
639          */
640         while ((pdev = dev_in_slot(slot))) {
641                 pci_stop_and_remove_bus_device(pdev);
642                 pci_dev_put(pdev);
643         }
644
645         list_for_each_entry(func, &slot->funcs, sibling)
646                 acpiphp_bus_trim(func_to_handle(func));
647
648         slot->flags &= (~SLOT_ENABLED);
649 }
650
651 static bool acpiphp_no_hotplug(acpi_handle handle)
652 {
653         struct acpi_device *adev = NULL;
654
655         acpi_bus_get_device(handle, &adev);
656         return adev && adev->flags.no_hotplug;
657 }
658
659 static bool slot_no_hotplug(struct acpiphp_slot *slot)
660 {
661         struct acpiphp_func *func;
662
663         list_for_each_entry(func, &slot->funcs, sibling)
664                 if (acpiphp_no_hotplug(func_to_handle(func)))
665                         return true;
666
667         return false;
668 }
669
670 /**
671  * get_slot_status - get ACPI slot status
672  * @slot: ACPI PHP slot
673  *
674  * If a slot has _STA for each function and if any one of them
675  * returned non-zero status, return it.
676  *
677  * If a slot doesn't have _STA and if any one of its functions'
678  * configuration space is configured, return 0x0f as a _STA.
679  *
680  * Otherwise return 0.
681  */
682 static unsigned int get_slot_status(struct acpiphp_slot *slot)
683 {
684         unsigned long long sta = 0;
685         struct acpiphp_func *func;
686
687         list_for_each_entry(func, &slot->funcs, sibling) {
688                 if (func->flags & FUNC_HAS_STA) {
689                         acpi_status status;
690
691                         status = acpi_evaluate_integer(func_to_handle(func),
692                                                        "_STA", NULL, &sta);
693                         if (ACPI_SUCCESS(status) && sta)
694                                 break;
695                 } else {
696                         u32 dvid;
697
698                         pci_bus_read_config_dword(slot->bus,
699                                                   PCI_DEVFN(slot->device,
700                                                             func->function),
701                                                   PCI_VENDOR_ID, &dvid);
702                         if (dvid != 0xffffffff) {
703                                 sta = ACPI_STA_ALL;
704                                 break;
705                         }
706                 }
707         }
708
709         return (unsigned int)sta;
710 }
711
712 /**
713  * trim_stale_devices - remove PCI devices that are not responding.
714  * @dev: PCI device to start walking the hierarchy from.
715  */
716 static void trim_stale_devices(struct pci_dev *dev)
717 {
718         acpi_handle handle = ACPI_HANDLE(&dev->dev);
719         struct pci_bus *bus = dev->subordinate;
720         bool alive = false;
721
722         if (handle) {
723                 acpi_status status;
724                 unsigned long long sta;
725
726                 status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
727                 alive = (ACPI_SUCCESS(status) && sta == ACPI_STA_ALL)
728                         || acpiphp_no_hotplug(handle);
729         }
730         if (!alive) {
731                 u32 v;
732
733                 /* Check if the device responds. */
734                 alive = pci_bus_read_dev_vendor_id(dev->bus, dev->devfn, &v, 0);
735         }
736         if (!alive) {
737                 pci_stop_and_remove_bus_device(dev);
738                 if (handle)
739                         acpiphp_bus_trim(handle);
740         } else if (bus) {
741                 struct pci_dev *child, *tmp;
742
743                 /* The device is a bridge. so check the bus below it. */
744                 pm_runtime_get_sync(&dev->dev);
745                 list_for_each_entry_safe(child, tmp, &bus->devices, bus_list)
746                         trim_stale_devices(child);
747
748                 pm_runtime_put(&dev->dev);
749         }
750 }
751
752 /**
753  * acpiphp_check_bridge - re-enumerate devices
754  * @bridge: where to begin re-enumeration
755  *
756  * Iterate over all slots under this bridge and make sure that if a
757  * card is present they are enabled, and if not they are disabled.
758  */
759 static void acpiphp_check_bridge(struct acpiphp_bridge *bridge)
760 {
761         struct acpiphp_slot *slot;
762
763         /* Bail out if the bridge is going away. */
764         if (bridge->is_going_away)
765                 return;
766
767         list_for_each_entry(slot, &bridge->slots, node) {
768                 struct pci_bus *bus = slot->bus;
769                 struct pci_dev *dev, *tmp;
770
771                 mutex_lock(&slot->crit_sect);
772                 if (slot_no_hotplug(slot)) {
773                         ; /* do nothing */
774                 } else if (get_slot_status(slot) == ACPI_STA_ALL) {
775                         /* remove stale devices if any */
776                         list_for_each_entry_safe(dev, tmp, &bus->devices,
777                                                  bus_list)
778                                 if (PCI_SLOT(dev->devfn) == slot->device)
779                                         trim_stale_devices(dev);
780
781                         /* configure all functions */
782                         enable_slot(slot);
783                 } else {
784                         disable_slot(slot);
785                 }
786                 mutex_unlock(&slot->crit_sect);
787         }
788 }
789
790 static void acpiphp_set_hpp_values(struct pci_bus *bus)
791 {
792         struct pci_dev *dev;
793
794         list_for_each_entry(dev, &bus->devices, bus_list)
795                 pci_configure_slot(dev);
796 }
797
798 /*
799  * Remove devices for which we could not assign resources, call
800  * arch specific code to fix-up the bus
801  */
802 static void acpiphp_sanitize_bus(struct pci_bus *bus)
803 {
804         struct pci_dev *dev, *tmp;
805         int i;
806         unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM;
807
808         list_for_each_entry_safe(dev, tmp, &bus->devices, bus_list) {
809                 for (i=0; i<PCI_BRIDGE_RESOURCES; i++) {
810                         struct resource *res = &dev->resource[i];
811                         if ((res->flags & type_mask) && !res->start &&
812                                         res->end) {
813                                 /* Could not assign a required resources
814                                  * for this device, remove it */
815                                 pci_stop_and_remove_bus_device(dev);
816                                 break;
817                         }
818                 }
819         }
820 }
821
822 /*
823  * ACPI event handlers
824  */
825
826 void acpiphp_check_host_bridge(acpi_handle handle)
827 {
828         struct acpiphp_bridge *bridge;
829
830         bridge = acpiphp_handle_to_bridge(handle);
831         if (bridge) {
832                 acpiphp_check_bridge(bridge);
833                 put_bridge(bridge);
834         }
835 }
836
837 static int acpiphp_disable_and_eject_slot(struct acpiphp_slot *slot);
838
839 static void hotplug_event(acpi_handle handle, u32 type, void *data)
840 {
841         struct acpiphp_context *context = data;
842         struct acpiphp_func *func = &context->func;
843         struct acpiphp_bridge *bridge;
844         char objname[64];
845         struct acpi_buffer buffer = { .length = sizeof(objname),
846                                       .pointer = objname };
847
848         mutex_lock(&acpiphp_context_lock);
849         bridge = context->bridge;
850         if (bridge)
851                 get_bridge(bridge);
852
853         mutex_unlock(&acpiphp_context_lock);
854
855         acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
856
857         switch (type) {
858         case ACPI_NOTIFY_BUS_CHECK:
859                 /* bus re-enumerate */
860                 pr_debug("%s: Bus check notify on %s\n", __func__, objname);
861                 pr_debug("%s: re-enumerating slots under %s\n",
862                          __func__, objname);
863                 if (bridge) {
864                         acpiphp_check_bridge(bridge);
865                 } else {
866                         struct acpiphp_slot *slot = func->slot;
867
868                         if (slot->flags & SLOT_IS_GOING_AWAY)
869                                 break;
870
871                         mutex_lock(&slot->crit_sect);
872                         enable_slot(slot);
873                         mutex_unlock(&slot->crit_sect);
874                 }
875                 break;
876
877         case ACPI_NOTIFY_DEVICE_CHECK:
878                 /* device check */
879                 pr_debug("%s: Device check notify on %s\n", __func__, objname);
880                 if (bridge) {
881                         acpiphp_check_bridge(bridge);
882                 } else {
883                         struct acpiphp_slot *slot = func->slot;
884                         int ret;
885
886                         if (slot->flags & SLOT_IS_GOING_AWAY)
887                                 break;
888
889                         /*
890                          * Check if anything has changed in the slot and rescan
891                          * from the parent if that's the case.
892                          */
893                         mutex_lock(&slot->crit_sect);
894                         ret = acpiphp_rescan_slot(slot);
895                         mutex_unlock(&slot->crit_sect);
896                         if (ret)
897                                 acpiphp_check_bridge(func->parent);
898                 }
899                 break;
900
901         case ACPI_NOTIFY_EJECT_REQUEST:
902                 /* request device eject */
903                 pr_debug("%s: Device eject notify on %s\n", __func__, objname);
904                 acpiphp_disable_and_eject_slot(func->slot);
905                 break;
906         }
907
908         if (bridge)
909                 put_bridge(bridge);
910 }
911
912 static void hotplug_event_work(void *data, u32 type)
913 {
914         struct acpiphp_context *context = data;
915         acpi_handle handle = context->handle;
916
917         acpi_scan_lock_acquire();
918         pci_lock_rescan_remove();
919
920         hotplug_event(handle, type, context);
921
922         pci_unlock_rescan_remove();
923         acpi_scan_lock_release();
924         acpi_evaluate_hotplug_ost(handle, type, ACPI_OST_SC_SUCCESS, NULL);
925         put_bridge(context->func.parent);
926 }
927
928 /**
929  * handle_hotplug_event - handle ACPI hotplug event
930  * @handle: Notify()'ed acpi_handle
931  * @type: Notify code
932  * @data: pointer to acpiphp_context structure
933  *
934  * Handles ACPI event notification on slots.
935  */
936 static void handle_hotplug_event(acpi_handle handle, u32 type, void *data)
937 {
938         struct acpiphp_context *context;
939         u32 ost_code = ACPI_OST_SC_SUCCESS;
940
941         switch (type) {
942         case ACPI_NOTIFY_BUS_CHECK:
943         case ACPI_NOTIFY_DEVICE_CHECK:
944                 break;
945         case ACPI_NOTIFY_EJECT_REQUEST:
946                 ost_code = ACPI_OST_SC_EJECT_IN_PROGRESS;
947                 acpi_evaluate_hotplug_ost(handle, type, ost_code, NULL);
948                 break;
949
950         case ACPI_NOTIFY_DEVICE_WAKE:
951                 return;
952
953         case ACPI_NOTIFY_FREQUENCY_MISMATCH:
954                 acpi_handle_err(handle, "Device cannot be configured due "
955                                 "to a frequency mismatch\n");
956                 goto out;
957
958         case ACPI_NOTIFY_BUS_MODE_MISMATCH:
959                 acpi_handle_err(handle, "Device cannot be configured due "
960                                 "to a bus mode mismatch\n");
961                 goto out;
962
963         case ACPI_NOTIFY_POWER_FAULT:
964                 acpi_handle_err(handle, "Device has suffered a power fault\n");
965                 goto out;
966
967         default:
968                 acpi_handle_warn(handle, "Unsupported event type 0x%x\n", type);
969                 ost_code = ACPI_OST_SC_UNRECOGNIZED_NOTIFY;
970                 goto out;
971         }
972
973         mutex_lock(&acpiphp_context_lock);
974         context = acpiphp_get_context(handle);
975         if (context && !WARN_ON(context->handle != handle)) {
976                 get_bridge(context->func.parent);
977                 acpiphp_put_context(context);
978                 acpi_hotplug_execute(hotplug_event_work, context, type);
979                 mutex_unlock(&acpiphp_context_lock);
980                 return;
981         }
982         mutex_unlock(&acpiphp_context_lock);
983         ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
984
985  out:
986         acpi_evaluate_hotplug_ost(handle, type, ost_code, NULL);
987 }
988
989 /*
990  * Create hotplug slots for the PCI bus.
991  * It should always return 0 to avoid skipping following notifiers.
992  */
993 void acpiphp_enumerate_slots(struct pci_bus *bus)
994 {
995         struct acpiphp_bridge *bridge;
996         acpi_handle handle;
997         acpi_status status;
998
999         if (acpiphp_disabled)
1000                 return;
1001
1002         handle = ACPI_HANDLE(bus->bridge);
1003         if (!handle)
1004                 return;
1005
1006         bridge = kzalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL);
1007         if (!bridge) {
1008                 acpi_handle_err(handle, "No memory for bridge object\n");
1009                 return;
1010         }
1011
1012         INIT_LIST_HEAD(&bridge->slots);
1013         kref_init(&bridge->ref);
1014         bridge->pci_dev = pci_dev_get(bus->self);
1015         bridge->pci_bus = bus;
1016
1017         /*
1018          * Grab a ref to the subordinate PCI bus in case the bus is
1019          * removed via PCI core logical hotplug. The ref pins the bus
1020          * (which we access during module unload).
1021          */
1022         get_device(&bus->dev);
1023
1024         if (!pci_is_root_bus(bridge->pci_bus)) {
1025                 struct acpiphp_context *context;
1026
1027                 /*
1028                  * This bridge should have been registered as a hotplug function
1029                  * under its parent, so the context should be there, unless the
1030                  * parent is going to be handled by pciehp, in which case this
1031                  * bridge is not interesting to us either.
1032                  */
1033                 mutex_lock(&acpiphp_context_lock);
1034                 context = acpiphp_get_context(handle);
1035                 if (!context) {
1036                         mutex_unlock(&acpiphp_context_lock);
1037                         put_device(&bus->dev);
1038                         pci_dev_put(bridge->pci_dev);
1039                         kfree(bridge);
1040                         return;
1041                 }
1042                 bridge->context = context;
1043                 context->bridge = bridge;
1044                 /* Get a reference to the parent bridge. */
1045                 get_bridge(context->func.parent);
1046                 mutex_unlock(&acpiphp_context_lock);
1047         }
1048
1049         /* must be added to the list prior to calling register_slot */
1050         mutex_lock(&bridge_mutex);
1051         list_add(&bridge->list, &bridge_list);
1052         mutex_unlock(&bridge_mutex);
1053
1054         /* register all slot objects under this bridge */
1055         status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1,
1056                                      register_slot, NULL, bridge, NULL);
1057         if (ACPI_FAILURE(status)) {
1058                 acpi_handle_err(handle, "failed to register slots\n");
1059                 cleanup_bridge(bridge);
1060                 put_bridge(bridge);
1061         }
1062 }
1063
1064 /* Destroy hotplug slots associated with the PCI bus */
1065 void acpiphp_remove_slots(struct pci_bus *bus)
1066 {
1067         struct acpiphp_bridge *bridge;
1068
1069         if (acpiphp_disabled)
1070                 return;
1071
1072         mutex_lock(&bridge_mutex);
1073         list_for_each_entry(bridge, &bridge_list, list)
1074                 if (bridge->pci_bus == bus) {
1075                         mutex_unlock(&bridge_mutex);
1076                         cleanup_bridge(bridge);
1077                         put_bridge(bridge);
1078                         return;
1079                 }
1080
1081         mutex_unlock(&bridge_mutex);
1082 }
1083
1084 /**
1085  * acpiphp_enable_slot - power on slot
1086  * @slot: ACPI PHP slot
1087  */
1088 int acpiphp_enable_slot(struct acpiphp_slot *slot)
1089 {
1090         pci_lock_rescan_remove();
1091
1092         if (slot->flags & SLOT_IS_GOING_AWAY)
1093                 return -ENODEV;
1094
1095         mutex_lock(&slot->crit_sect);
1096         /* configure all functions */
1097         if (!(slot->flags & SLOT_ENABLED))
1098                 enable_slot(slot);
1099
1100         mutex_unlock(&slot->crit_sect);
1101
1102         pci_unlock_rescan_remove();
1103         return 0;
1104 }
1105
1106 /**
1107  * acpiphp_disable_and_eject_slot - power off and eject slot
1108  * @slot: ACPI PHP slot
1109  */
1110 static int acpiphp_disable_and_eject_slot(struct acpiphp_slot *slot)
1111 {
1112         struct acpiphp_func *func;
1113
1114         if (slot->flags & SLOT_IS_GOING_AWAY)
1115                 return -ENODEV;
1116
1117         mutex_lock(&slot->crit_sect);
1118
1119         /* unconfigure all functions */
1120         disable_slot(slot);
1121
1122         list_for_each_entry(func, &slot->funcs, sibling)
1123                 if (func->flags & FUNC_HAS_EJ0) {
1124                         acpi_handle handle = func_to_handle(func);
1125
1126                         if (ACPI_FAILURE(acpi_evaluate_ej0(handle)))
1127                                 acpi_handle_err(handle, "_EJ0 failed\n");
1128
1129                         break;
1130                 }
1131
1132         mutex_unlock(&slot->crit_sect);
1133         return 0;
1134 }
1135
1136 int acpiphp_disable_slot(struct acpiphp_slot *slot)
1137 {
1138         int ret;
1139
1140         pci_lock_rescan_remove();
1141         ret = acpiphp_disable_and_eject_slot(slot);
1142         pci_unlock_rescan_remove();
1143         return ret;
1144 }
1145
1146 /*
1147  * slot enabled:  1
1148  * slot disabled: 0
1149  */
1150 u8 acpiphp_get_power_status(struct acpiphp_slot *slot)
1151 {
1152         return (slot->flags & SLOT_ENABLED);
1153 }
1154
1155 /*
1156  * latch   open:  1
1157  * latch closed:  0
1158  */
1159 u8 acpiphp_get_latch_status(struct acpiphp_slot *slot)
1160 {
1161         return !(get_slot_status(slot) & ACPI_STA_DEVICE_UI);
1162 }
1163
1164 /*
1165  * adapter presence : 1
1166  *          absence : 0
1167  */
1168 u8 acpiphp_get_adapter_status(struct acpiphp_slot *slot)
1169 {
1170         return !!get_slot_status(slot);
1171 }