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/module.h>
45 
46 #include <linux/kernel.h>
47 #include <linux/pci.h>
48 #include <linux/pci_hotplug.h>
49 #include <linux/pci-acpi.h>
50 #include <linux/pm_runtime.h>
51 #include <linux/mutex.h>
52 #include <linux/slab.h>
53 #include <linux/acpi.h>
54 
55 #include "../pci.h"
56 #include "acpiphp.h"
57 
58 static LIST_HEAD(bridge_list);
59 static DEFINE_MUTEX(bridge_mutex);
60 
61 static int acpiphp_hotplug_notify(struct acpi_device *adev, u32 type);
62 static void acpiphp_post_dock_fixup(struct acpi_device *adev);
63 static void acpiphp_sanitize_bus(struct pci_bus *bus);
64 static void acpiphp_set_hpp_values(struct pci_bus *bus);
65 static void hotplug_event(u32 type, struct acpiphp_context *context);
66 static void free_bridge(struct kref *kref);
67 
68 /**
69  * acpiphp_init_context - Create hotplug context and grab a reference to it.
70  * @adev: ACPI device object to create the context for.
71  *
72  * Call under acpi_hp_context_lock.
73  */
74 static struct acpiphp_context *acpiphp_init_context(struct acpi_device *adev)
75 {
76 	struct acpiphp_context *context;
77 
78 	context = kzalloc(sizeof(*context), GFP_KERNEL);
79 	if (!context)
80 		return NULL;
81 
82 	context->refcount = 1;
83 	acpi_set_hp_context(adev, &context->hp, acpiphp_hotplug_notify, NULL,
84 			    acpiphp_post_dock_fixup);
85 	return context;
86 }
87 
88 /**
89  * acpiphp_get_context - Get hotplug context and grab a reference to it.
90  * @adev: ACPI device object to get the context for.
91  *
92  * Call under acpi_hp_context_lock.
93  */
94 static struct acpiphp_context *acpiphp_get_context(struct acpi_device *adev)
95 {
96 	struct acpiphp_context *context;
97 
98 	if (!adev->hp)
99 		return NULL;
100 
101 	context = to_acpiphp_context(adev->hp);
102 	context->refcount++;
103 	return context;
104 }
105 
106 /**
107  * acpiphp_put_context - Drop a reference to ACPI hotplug context.
108  * @context: ACPI hotplug context to drop a reference to.
109  *
110  * The context object is removed if there are no more references to it.
111  *
112  * Call under acpi_hp_context_lock.
113  */
114 static void acpiphp_put_context(struct acpiphp_context *context)
115 {
116 	if (--context->refcount)
117 		return;
118 
119 	WARN_ON(context->bridge);
120 	context->hp.self->hp = NULL;
121 	kfree(context);
122 }
123 
124 static inline void get_bridge(struct acpiphp_bridge *bridge)
125 {
126 	kref_get(&bridge->ref);
127 }
128 
129 static inline void put_bridge(struct acpiphp_bridge *bridge)
130 {
131 	kref_put(&bridge->ref, free_bridge);
132 }
133 
134 static struct acpiphp_context *acpiphp_grab_context(struct acpi_device *adev)
135 {
136 	struct acpiphp_context *context;
137 
138 	acpi_lock_hp_context();
139 	context = acpiphp_get_context(adev);
140 	if (!context || context->func.parent->is_going_away) {
141 		acpi_unlock_hp_context();
142 		return NULL;
143 	}
144 	get_bridge(context->func.parent);
145 	acpiphp_put_context(context);
146 	acpi_unlock_hp_context();
147 	return context;
148 }
149 
150 static void acpiphp_let_context_go(struct acpiphp_context *context)
151 {
152 	put_bridge(context->func.parent);
153 }
154 
155 static void free_bridge(struct kref *kref)
156 {
157 	struct acpiphp_context *context;
158 	struct acpiphp_bridge *bridge;
159 	struct acpiphp_slot *slot, *next;
160 	struct acpiphp_func *func, *tmp;
161 
162 	acpi_lock_hp_context();
163 
164 	bridge = container_of(kref, struct acpiphp_bridge, ref);
165 
166 	list_for_each_entry_safe(slot, next, &bridge->slots, node) {
167 		list_for_each_entry_safe(func, tmp, &slot->funcs, sibling)
168 			acpiphp_put_context(func_to_context(func));
169 
170 		kfree(slot);
171 	}
172 
173 	context = bridge->context;
174 	/* Root bridges will not have hotplug context. */
175 	if (context) {
176 		/* Release the reference taken by acpiphp_enumerate_slots(). */
177 		put_bridge(context->func.parent);
178 		context->bridge = NULL;
179 		acpiphp_put_context(context);
180 	}
181 
182 	put_device(&bridge->pci_bus->dev);
183 	pci_dev_put(bridge->pci_dev);
184 	kfree(bridge);
185 
186 	acpi_unlock_hp_context();
187 }
188 
189 /**
190  * acpiphp_post_dock_fixup - Post-dock fixups for PCI devices.
191  * @adev: ACPI device object corresponding to a PCI device.
192  *
193  * TBD - figure out a way to only call fixups for systems that require them.
194  */
195 static void acpiphp_post_dock_fixup(struct acpi_device *adev)
196 {
197 	struct acpiphp_context *context = acpiphp_grab_context(adev);
198 	struct pci_bus *bus;
199 	u32 buses;
200 
201 	if (!context)
202 		return;
203 
204 	bus = context->func.slot->bus;
205 	if (!bus->self)
206 		goto out;
207 
208 	/* fixup bad _DCK function that rewrites
209 	 * secondary bridge on slot
210 	 */
211 	pci_read_config_dword(bus->self, PCI_PRIMARY_BUS, &buses);
212 
213 	if (((buses >> 8) & 0xff) != bus->busn_res.start) {
214 		buses = (buses & 0xff000000)
215 			| ((unsigned int)(bus->primary)     <<  0)
216 			| ((unsigned int)(bus->busn_res.start)   <<  8)
217 			| ((unsigned int)(bus->busn_res.end) << 16);
218 		pci_write_config_dword(bus->self, PCI_PRIMARY_BUS, buses);
219 	}
220 
221  out:
222 	acpiphp_let_context_go(context);
223 }
224 
225 /* Check whether the PCI device is managed by native PCIe hotplug driver */
226 static bool device_is_managed_by_native_pciehp(struct pci_dev *pdev)
227 {
228 	u32 reg32;
229 	acpi_handle tmp;
230 	struct acpi_pci_root *root;
231 
232 	/* Check whether the PCIe port supports native PCIe hotplug */
233 	if (pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32))
234 		return false;
235 	if (!(reg32 & PCI_EXP_SLTCAP_HPC))
236 		return false;
237 
238 	/*
239 	 * Check whether native PCIe hotplug has been enabled for
240 	 * this PCIe hierarchy.
241 	 */
242 	tmp = acpi_find_root_bridge_handle(pdev);
243 	if (!tmp)
244 		return false;
245 	root = acpi_pci_find_root(tmp);
246 	if (!root)
247 		return false;
248 	if (!(root->osc_control_set & OSC_PCI_EXPRESS_NATIVE_HP_CONTROL))
249 		return false;
250 
251 	return true;
252 }
253 
254 /**
255  * acpiphp_add_context - Add ACPIPHP context to an ACPI device object.
256  * @handle: ACPI handle of the object to add a context to.
257  * @lvl: Not used.
258  * @data: The object's parent ACPIPHP bridge.
259  * @rv: Not used.
260  */
261 static acpi_status acpiphp_add_context(acpi_handle handle, u32 lvl, void *data,
262 				       void **rv)
263 {
264 	struct acpiphp_bridge *bridge = data;
265 	struct acpiphp_context *context;
266 	struct acpi_device *adev;
267 	struct acpiphp_slot *slot;
268 	struct acpiphp_func *newfunc;
269 	acpi_status status = AE_OK;
270 	unsigned long long adr;
271 	int device, function;
272 	struct pci_bus *pbus = bridge->pci_bus;
273 	struct pci_dev *pdev = bridge->pci_dev;
274 	u32 val;
275 
276 	status = acpi_evaluate_integer(handle, "_ADR", NULL, &adr);
277 	if (ACPI_FAILURE(status)) {
278 		if (status != AE_NOT_FOUND)
279 			acpi_handle_warn(handle,
280 				"can't evaluate _ADR (%#x)\n", status);
281 		return AE_OK;
282 	}
283 	if (acpi_bus_get_device(handle, &adev))
284 		return AE_OK;
285 
286 	device = (adr >> 16) & 0xffff;
287 	function = adr & 0xffff;
288 
289 	acpi_lock_hp_context();
290 	context = acpiphp_init_context(adev);
291 	if (!context) {
292 		acpi_unlock_hp_context();
293 		acpi_handle_err(handle, "No hotplug context\n");
294 		return AE_NOT_EXIST;
295 	}
296 	newfunc = &context->func;
297 	newfunc->function = function;
298 	newfunc->parent = bridge;
299 	acpi_unlock_hp_context();
300 
301 	/*
302 	 * If this is a dock device, its _EJ0 should be executed by the dock
303 	 * notify handler after calling _DCK.
304 	 */
305 	if (!is_dock_device(adev) && acpi_has_method(handle, "_EJ0"))
306 		newfunc->flags = FUNC_HAS_EJ0;
307 
308 	if (acpi_has_method(handle, "_STA"))
309 		newfunc->flags |= FUNC_HAS_STA;
310 
311 	/* search for objects that share the same slot */
312 	list_for_each_entry(slot, &bridge->slots, node)
313 		if (slot->device == device)
314 			goto slot_found;
315 
316 	slot = kzalloc(sizeof(struct acpiphp_slot), GFP_KERNEL);
317 	if (!slot) {
318 		acpi_lock_hp_context();
319 		acpiphp_put_context(context);
320 		acpi_unlock_hp_context();
321 		return AE_NO_MEMORY;
322 	}
323 
324 	slot->bus = bridge->pci_bus;
325 	slot->device = device;
326 	INIT_LIST_HEAD(&slot->funcs);
327 
328 	list_add_tail(&slot->node, &bridge->slots);
329 
330 	/*
331 	 * Expose slots to user space for functions that have _EJ0 or _RMV or
332 	 * are located in dock stations.  Do not expose them for devices handled
333 	 * by the native PCIe hotplug (PCIeHP), becuase that code is supposed to
334 	 * expose slots to user space in those cases.
335 	 */
336 	if ((acpi_pci_check_ejectable(pbus, handle) || is_dock_device(adev))
337 	    && !(pdev && device_is_managed_by_native_pciehp(pdev))) {
338 		unsigned long long sun;
339 		int retval;
340 
341 		bridge->nr_slots++;
342 		status = acpi_evaluate_integer(handle, "_SUN", NULL, &sun);
343 		if (ACPI_FAILURE(status))
344 			sun = bridge->nr_slots;
345 
346 		pr_debug("found ACPI PCI Hotplug slot %llu at PCI %04x:%02x:%02x\n",
347 		    sun, pci_domain_nr(pbus), pbus->number, device);
348 
349 		retval = acpiphp_register_hotplug_slot(slot, sun);
350 		if (retval) {
351 			slot->slot = NULL;
352 			bridge->nr_slots--;
353 			if (retval == -EBUSY)
354 				pr_warn("Slot %llu already registered by another "
355 					"hotplug driver\n", sun);
356 			else
357 				pr_warn("acpiphp_register_hotplug_slot failed "
358 					"(err code = 0x%x)\n", retval);
359 		}
360 		/* Even if the slot registration fails, we can still use it. */
361 	}
362 
363  slot_found:
364 	newfunc->slot = slot;
365 	list_add_tail(&newfunc->sibling, &slot->funcs);
366 
367 	if (pci_bus_read_dev_vendor_id(pbus, PCI_DEVFN(device, function),
368 				       &val, 60*1000))
369 		slot->flags |= SLOT_ENABLED;
370 
371 	return AE_OK;
372 }
373 
374 static struct acpiphp_bridge *acpiphp_dev_to_bridge(struct acpi_device *adev)
375 {
376 	struct acpiphp_context *context;
377 	struct acpiphp_bridge *bridge = NULL;
378 
379 	acpi_lock_hp_context();
380 	context = acpiphp_get_context(adev);
381 	if (context) {
382 		bridge = context->bridge;
383 		if (bridge)
384 			get_bridge(bridge);
385 
386 		acpiphp_put_context(context);
387 	}
388 	acpi_unlock_hp_context();
389 	return bridge;
390 }
391 
392 static void cleanup_bridge(struct acpiphp_bridge *bridge)
393 {
394 	struct acpiphp_slot *slot;
395 	struct acpiphp_func *func;
396 
397 	list_for_each_entry(slot, &bridge->slots, node) {
398 		list_for_each_entry(func, &slot->funcs, sibling) {
399 			struct acpi_device *adev = func_to_acpi_device(func);
400 
401 			acpi_lock_hp_context();
402 			adev->hp->notify = NULL;
403 			adev->hp->fixup = NULL;
404 			acpi_unlock_hp_context();
405 		}
406 		slot->flags |= SLOT_IS_GOING_AWAY;
407 		if (slot->slot)
408 			acpiphp_unregister_hotplug_slot(slot);
409 	}
410 
411 	mutex_lock(&bridge_mutex);
412 	list_del(&bridge->list);
413 	mutex_unlock(&bridge_mutex);
414 
415 	acpi_lock_hp_context();
416 	bridge->is_going_away = true;
417 	acpi_unlock_hp_context();
418 }
419 
420 /**
421  * acpiphp_max_busnr - return the highest reserved bus number under the given bus.
422  * @bus: bus to start search with
423  */
424 static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
425 {
426 	struct pci_bus *tmp;
427 	unsigned char max, n;
428 
429 	/*
430 	 * pci_bus_max_busnr will return the highest
431 	 * reserved busnr for all these children.
432 	 * that is equivalent to the bus->subordinate
433 	 * value.  We don't want to use the parent's
434 	 * bus->subordinate value because it could have
435 	 * padding in it.
436 	 */
437 	max = bus->busn_res.start;
438 
439 	list_for_each_entry(tmp, &bus->children, node) {
440 		n = pci_bus_max_busnr(tmp);
441 		if (n > max)
442 			max = n;
443 	}
444 	return max;
445 }
446 
447 static void acpiphp_set_acpi_region(struct acpiphp_slot *slot)
448 {
449 	struct acpiphp_func *func;
450 	union acpi_object params[2];
451 	struct acpi_object_list arg_list;
452 
453 	list_for_each_entry(func, &slot->funcs, sibling) {
454 		arg_list.count = 2;
455 		arg_list.pointer = params;
456 		params[0].type = ACPI_TYPE_INTEGER;
457 		params[0].integer.value = ACPI_ADR_SPACE_PCI_CONFIG;
458 		params[1].type = ACPI_TYPE_INTEGER;
459 		params[1].integer.value = 1;
460 		/* _REG is optional, we don't care about if there is failure */
461 		acpi_evaluate_object(func_to_handle(func), "_REG", &arg_list,
462 				     NULL);
463 	}
464 }
465 
466 static void check_hotplug_bridge(struct acpiphp_slot *slot, struct pci_dev *dev)
467 {
468 	struct acpiphp_func *func;
469 
470 	/* quirk, or pcie could set it already */
471 	if (dev->is_hotplug_bridge)
472 		return;
473 
474 	list_for_each_entry(func, &slot->funcs, sibling) {
475 		if (PCI_FUNC(dev->devfn) == func->function) {
476 			dev->is_hotplug_bridge = 1;
477 			break;
478 		}
479 	}
480 }
481 
482 static int acpiphp_rescan_slot(struct acpiphp_slot *slot)
483 {
484 	struct acpiphp_func *func;
485 
486 	list_for_each_entry(func, &slot->funcs, sibling) {
487 		struct acpi_device *adev = func_to_acpi_device(func);
488 
489 		acpi_bus_scan(adev->handle);
490 		if (acpi_device_enumerated(adev))
491 			acpi_device_set_power(adev, ACPI_STATE_D0);
492 	}
493 	return pci_scan_slot(slot->bus, PCI_DEVFN(slot->device, 0));
494 }
495 
496 /**
497  * enable_slot - enable, configure a slot
498  * @slot: slot to be enabled
499  *
500  * This function should be called per *physical slot*,
501  * not per each slot object in ACPI namespace.
502  */
503 static void enable_slot(struct acpiphp_slot *slot)
504 {
505 	struct pci_dev *dev;
506 	struct pci_bus *bus = slot->bus;
507 	struct acpiphp_func *func;
508 	int max, pass;
509 	LIST_HEAD(add_list);
510 
511 	acpiphp_rescan_slot(slot);
512 	max = acpiphp_max_busnr(bus);
513 	for (pass = 0; pass < 2; pass++) {
514 		list_for_each_entry(dev, &bus->devices, bus_list) {
515 			if (PCI_SLOT(dev->devfn) != slot->device)
516 				continue;
517 
518 			if (pci_is_bridge(dev)) {
519 				max = pci_scan_bridge(bus, dev, max, pass);
520 				if (pass && dev->subordinate) {
521 					check_hotplug_bridge(slot, dev);
522 					pcibios_resource_survey_bus(dev->subordinate);
523 					__pci_bus_size_bridges(dev->subordinate,
524 							       &add_list);
525 				}
526 			}
527 		}
528 	}
529 	__pci_bus_assign_resources(bus, &add_list, NULL);
530 
531 	acpiphp_sanitize_bus(bus);
532 	acpiphp_set_hpp_values(bus);
533 	acpiphp_set_acpi_region(slot);
534 
535 	list_for_each_entry(dev, &bus->devices, bus_list) {
536 		/* Assume that newly added devices are powered on already. */
537 		if (!dev->is_added)
538 			dev->current_state = PCI_D0;
539 	}
540 
541 	pci_bus_add_devices(bus);
542 
543 	slot->flags |= SLOT_ENABLED;
544 	list_for_each_entry(func, &slot->funcs, sibling) {
545 		dev = pci_get_slot(bus, PCI_DEVFN(slot->device,
546 						  func->function));
547 		if (!dev) {
548 			/* Do not set SLOT_ENABLED flag if some funcs
549 			   are not added. */
550 			slot->flags &= (~SLOT_ENABLED);
551 			continue;
552 		}
553 	}
554 }
555 
556 /**
557  * disable_slot - disable a slot
558  * @slot: ACPI PHP slot
559  */
560 static void disable_slot(struct acpiphp_slot *slot)
561 {
562 	struct pci_bus *bus = slot->bus;
563 	struct pci_dev *dev, *prev;
564 	struct acpiphp_func *func;
565 
566 	/*
567 	 * enable_slot() enumerates all functions in this device via
568 	 * pci_scan_slot(), whether they have associated ACPI hotplug
569 	 * methods (_EJ0, etc.) or not.  Therefore, we remove all functions
570 	 * here.
571 	 */
572 	list_for_each_entry_safe_reverse(dev, prev, &bus->devices, bus_list)
573 		if (PCI_SLOT(dev->devfn) == slot->device)
574 			pci_stop_and_remove_bus_device(dev);
575 
576 	list_for_each_entry(func, &slot->funcs, sibling)
577 		acpi_bus_trim(func_to_acpi_device(func));
578 
579 	slot->flags &= (~SLOT_ENABLED);
580 }
581 
582 static bool acpiphp_no_hotplug(struct acpi_device *adev)
583 {
584 	return adev && adev->flags.no_hotplug;
585 }
586 
587 static bool slot_no_hotplug(struct acpiphp_slot *slot)
588 {
589 	struct acpiphp_func *func;
590 
591 	list_for_each_entry(func, &slot->funcs, sibling)
592 		if (acpiphp_no_hotplug(func_to_acpi_device(func)))
593 			return true;
594 
595 	return false;
596 }
597 
598 /**
599  * get_slot_status - get ACPI slot status
600  * @slot: ACPI PHP slot
601  *
602  * If a slot has _STA for each function and if any one of them
603  * returned non-zero status, return it.
604  *
605  * If a slot doesn't have _STA and if any one of its functions'
606  * configuration space is configured, return 0x0f as a _STA.
607  *
608  * Otherwise return 0.
609  */
610 static unsigned int get_slot_status(struct acpiphp_slot *slot)
611 {
612 	unsigned long long sta = 0;
613 	struct acpiphp_func *func;
614 
615 	list_for_each_entry(func, &slot->funcs, sibling) {
616 		if (func->flags & FUNC_HAS_STA) {
617 			acpi_status status;
618 
619 			status = acpi_evaluate_integer(func_to_handle(func),
620 						       "_STA", NULL, &sta);
621 			if (ACPI_SUCCESS(status) && sta)
622 				break;
623 		} else {
624 			u32 dvid;
625 
626 			pci_bus_read_config_dword(slot->bus,
627 						  PCI_DEVFN(slot->device,
628 							    func->function),
629 						  PCI_VENDOR_ID, &dvid);
630 			if (dvid != 0xffffffff) {
631 				sta = ACPI_STA_ALL;
632 				break;
633 			}
634 		}
635 	}
636 
637 	return (unsigned int)sta;
638 }
639 
640 static inline bool device_status_valid(unsigned int sta)
641 {
642 	/*
643 	 * ACPI spec says that _STA may return bit 0 clear with bit 3 set
644 	 * if the device is valid but does not require a device driver to be
645 	 * loaded (Section 6.3.7 of ACPI 5.0A).
646 	 */
647 	unsigned int mask = ACPI_STA_DEVICE_ENABLED | ACPI_STA_DEVICE_FUNCTIONING;
648 	return (sta & mask) == mask;
649 }
650 
651 /**
652  * trim_stale_devices - remove PCI devices that are not responding.
653  * @dev: PCI device to start walking the hierarchy from.
654  */
655 static void trim_stale_devices(struct pci_dev *dev)
656 {
657 	struct acpi_device *adev = ACPI_COMPANION(&dev->dev);
658 	struct pci_bus *bus = dev->subordinate;
659 	bool alive = false;
660 
661 	if (adev) {
662 		acpi_status status;
663 		unsigned long long sta;
664 
665 		status = acpi_evaluate_integer(adev->handle, "_STA", NULL, &sta);
666 		alive = (ACPI_SUCCESS(status) && device_status_valid(sta))
667 			|| acpiphp_no_hotplug(adev);
668 	}
669 	if (!alive)
670 		alive = pci_device_is_present(dev);
671 
672 	if (!alive) {
673 		pci_stop_and_remove_bus_device(dev);
674 		if (adev)
675 			acpi_bus_trim(adev);
676 	} else if (bus) {
677 		struct pci_dev *child, *tmp;
678 
679 		/* The device is a bridge. so check the bus below it. */
680 		pm_runtime_get_sync(&dev->dev);
681 		list_for_each_entry_safe_reverse(child, tmp, &bus->devices, bus_list)
682 			trim_stale_devices(child);
683 
684 		pm_runtime_put(&dev->dev);
685 	}
686 }
687 
688 /**
689  * acpiphp_check_bridge - re-enumerate devices
690  * @bridge: where to begin re-enumeration
691  *
692  * Iterate over all slots under this bridge and make sure that if a
693  * card is present they are enabled, and if not they are disabled.
694  */
695 static void acpiphp_check_bridge(struct acpiphp_bridge *bridge)
696 {
697 	struct acpiphp_slot *slot;
698 
699 	/* Bail out if the bridge is going away. */
700 	if (bridge->is_going_away)
701 		return;
702 
703 	list_for_each_entry(slot, &bridge->slots, node) {
704 		struct pci_bus *bus = slot->bus;
705 		struct pci_dev *dev, *tmp;
706 
707 		if (slot_no_hotplug(slot)) {
708 			; /* do nothing */
709 		} else if (device_status_valid(get_slot_status(slot))) {
710 			/* remove stale devices if any */
711 			list_for_each_entry_safe_reverse(dev, tmp,
712 							 &bus->devices, bus_list)
713 				if (PCI_SLOT(dev->devfn) == slot->device)
714 					trim_stale_devices(dev);
715 
716 			/* configure all functions */
717 			enable_slot(slot);
718 		} else {
719 			disable_slot(slot);
720 		}
721 	}
722 }
723 
724 static void acpiphp_set_hpp_values(struct pci_bus *bus)
725 {
726 	struct pci_dev *dev;
727 
728 	list_for_each_entry(dev, &bus->devices, bus_list)
729 		pci_configure_slot(dev);
730 }
731 
732 /*
733  * Remove devices for which we could not assign resources, call
734  * arch specific code to fix-up the bus
735  */
736 static void acpiphp_sanitize_bus(struct pci_bus *bus)
737 {
738 	struct pci_dev *dev, *tmp;
739 	int i;
740 	unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM;
741 
742 	list_for_each_entry_safe_reverse(dev, tmp, &bus->devices, bus_list) {
743 		for (i=0; i<PCI_BRIDGE_RESOURCES; i++) {
744 			struct resource *res = &dev->resource[i];
745 			if ((res->flags & type_mask) && !res->start &&
746 					res->end) {
747 				/* Could not assign a required resources
748 				 * for this device, remove it */
749 				pci_stop_and_remove_bus_device(dev);
750 				break;
751 			}
752 		}
753 	}
754 }
755 
756 /*
757  * ACPI event handlers
758  */
759 
760 void acpiphp_check_host_bridge(struct acpi_device *adev)
761 {
762 	struct acpiphp_bridge *bridge;
763 
764 	bridge = acpiphp_dev_to_bridge(adev);
765 	if (bridge) {
766 		pci_lock_rescan_remove();
767 
768 		acpiphp_check_bridge(bridge);
769 
770 		pci_unlock_rescan_remove();
771 		put_bridge(bridge);
772 	}
773 }
774 
775 static int acpiphp_disable_and_eject_slot(struct acpiphp_slot *slot);
776 
777 static void hotplug_event(u32 type, struct acpiphp_context *context)
778 {
779 	acpi_handle handle = context->hp.self->handle;
780 	struct acpiphp_func *func = &context->func;
781 	struct acpiphp_slot *slot = func->slot;
782 	struct acpiphp_bridge *bridge;
783 
784 	acpi_lock_hp_context();
785 	bridge = context->bridge;
786 	if (bridge)
787 		get_bridge(bridge);
788 
789 	acpi_unlock_hp_context();
790 
791 	pci_lock_rescan_remove();
792 
793 	switch (type) {
794 	case ACPI_NOTIFY_BUS_CHECK:
795 		/* bus re-enumerate */
796 		acpi_handle_debug(handle, "Bus check in %s()\n", __func__);
797 		if (bridge)
798 			acpiphp_check_bridge(bridge);
799 		else if (!(slot->flags & SLOT_IS_GOING_AWAY))
800 			enable_slot(slot);
801 
802 		break;
803 
804 	case ACPI_NOTIFY_DEVICE_CHECK:
805 		/* device check */
806 		acpi_handle_debug(handle, "Device check in %s()\n", __func__);
807 		if (bridge) {
808 			acpiphp_check_bridge(bridge);
809 		} else if (!(slot->flags & SLOT_IS_GOING_AWAY)) {
810 			/*
811 			 * Check if anything has changed in the slot and rescan
812 			 * from the parent if that's the case.
813 			 */
814 			if (acpiphp_rescan_slot(slot))
815 				acpiphp_check_bridge(func->parent);
816 		}
817 		break;
818 
819 	case ACPI_NOTIFY_EJECT_REQUEST:
820 		/* request device eject */
821 		acpi_handle_debug(handle, "Eject request in %s()\n", __func__);
822 		acpiphp_disable_and_eject_slot(slot);
823 		break;
824 	}
825 
826 	pci_unlock_rescan_remove();
827 	if (bridge)
828 		put_bridge(bridge);
829 }
830 
831 static int acpiphp_hotplug_notify(struct acpi_device *adev, u32 type)
832 {
833 	struct acpiphp_context *context;
834 
835 	context = acpiphp_grab_context(adev);
836 	if (!context)
837 		return -ENODATA;
838 
839 	hotplug_event(type, context);
840 	acpiphp_let_context_go(context);
841 	return 0;
842 }
843 
844 /**
845  * acpiphp_enumerate_slots - Enumerate PCI slots for a given bus.
846  * @bus: PCI bus to enumerate the slots for.
847  *
848  * A "slot" is an object associated with a PCI device number.  All functions
849  * (PCI devices) with the same bus and device number belong to the same slot.
850  */
851 void acpiphp_enumerate_slots(struct pci_bus *bus)
852 {
853 	struct acpiphp_bridge *bridge;
854 	struct acpi_device *adev;
855 	acpi_handle handle;
856 	acpi_status status;
857 
858 	if (acpiphp_disabled)
859 		return;
860 
861 	adev = ACPI_COMPANION(bus->bridge);
862 	if (!adev)
863 		return;
864 
865 	handle = adev->handle;
866 	bridge = kzalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL);
867 	if (!bridge) {
868 		acpi_handle_err(handle, "No memory for bridge object\n");
869 		return;
870 	}
871 
872 	INIT_LIST_HEAD(&bridge->slots);
873 	kref_init(&bridge->ref);
874 	bridge->pci_dev = pci_dev_get(bus->self);
875 	bridge->pci_bus = bus;
876 
877 	/*
878 	 * Grab a ref to the subordinate PCI bus in case the bus is
879 	 * removed via PCI core logical hotplug. The ref pins the bus
880 	 * (which we access during module unload).
881 	 */
882 	get_device(&bus->dev);
883 
884 	if (!pci_is_root_bus(bridge->pci_bus)) {
885 		struct acpiphp_context *context;
886 
887 		/*
888 		 * This bridge should have been registered as a hotplug function
889 		 * under its parent, so the context should be there, unless the
890 		 * parent is going to be handled by pciehp, in which case this
891 		 * bridge is not interesting to us either.
892 		 */
893 		acpi_lock_hp_context();
894 		context = acpiphp_get_context(adev);
895 		if (!context) {
896 			acpi_unlock_hp_context();
897 			put_device(&bus->dev);
898 			pci_dev_put(bridge->pci_dev);
899 			kfree(bridge);
900 			return;
901 		}
902 		bridge->context = context;
903 		context->bridge = bridge;
904 		/* Get a reference to the parent bridge. */
905 		get_bridge(context->func.parent);
906 		acpi_unlock_hp_context();
907 	}
908 
909 	/* Must be added to the list prior to calling acpiphp_add_context(). */
910 	mutex_lock(&bridge_mutex);
911 	list_add(&bridge->list, &bridge_list);
912 	mutex_unlock(&bridge_mutex);
913 
914 	/* register all slot objects under this bridge */
915 	status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1,
916 				     acpiphp_add_context, NULL, bridge, NULL);
917 	if (ACPI_FAILURE(status)) {
918 		acpi_handle_err(handle, "failed to register slots\n");
919 		cleanup_bridge(bridge);
920 		put_bridge(bridge);
921 	}
922 }
923 
924 /**
925  * acpiphp_remove_slots - Remove slot objects associated with a given bus.
926  * @bus: PCI bus to remove the slot objects for.
927  */
928 void acpiphp_remove_slots(struct pci_bus *bus)
929 {
930 	struct acpiphp_bridge *bridge;
931 
932 	if (acpiphp_disabled)
933 		return;
934 
935 	mutex_lock(&bridge_mutex);
936 	list_for_each_entry(bridge, &bridge_list, list)
937 		if (bridge->pci_bus == bus) {
938 			mutex_unlock(&bridge_mutex);
939 			cleanup_bridge(bridge);
940 			put_bridge(bridge);
941 			return;
942 		}
943 
944 	mutex_unlock(&bridge_mutex);
945 }
946 
947 /**
948  * acpiphp_enable_slot - power on slot
949  * @slot: ACPI PHP slot
950  */
951 int acpiphp_enable_slot(struct acpiphp_slot *slot)
952 {
953 	pci_lock_rescan_remove();
954 
955 	if (slot->flags & SLOT_IS_GOING_AWAY)
956 		return -ENODEV;
957 
958 	/* configure all functions */
959 	if (!(slot->flags & SLOT_ENABLED))
960 		enable_slot(slot);
961 
962 	pci_unlock_rescan_remove();
963 	return 0;
964 }
965 
966 /**
967  * acpiphp_disable_and_eject_slot - power off and eject slot
968  * @slot: ACPI PHP slot
969  */
970 static int acpiphp_disable_and_eject_slot(struct acpiphp_slot *slot)
971 {
972 	struct acpiphp_func *func;
973 
974 	if (slot->flags & SLOT_IS_GOING_AWAY)
975 		return -ENODEV;
976 
977 	/* unconfigure all functions */
978 	disable_slot(slot);
979 
980 	list_for_each_entry(func, &slot->funcs, sibling)
981 		if (func->flags & FUNC_HAS_EJ0) {
982 			acpi_handle handle = func_to_handle(func);
983 
984 			if (ACPI_FAILURE(acpi_evaluate_ej0(handle)))
985 				acpi_handle_err(handle, "_EJ0 failed\n");
986 
987 			break;
988 		}
989 
990 	return 0;
991 }
992 
993 int acpiphp_disable_slot(struct acpiphp_slot *slot)
994 {
995 	int ret;
996 
997 	/*
998 	 * Acquire acpi_scan_lock to ensure that the execution of _EJ0 in
999 	 * acpiphp_disable_and_eject_slot() will be synchronized properly.
1000 	 */
1001 	acpi_scan_lock_acquire();
1002 	pci_lock_rescan_remove();
1003 	ret = acpiphp_disable_and_eject_slot(slot);
1004 	pci_unlock_rescan_remove();
1005 	acpi_scan_lock_release();
1006 	return ret;
1007 }
1008 
1009 /*
1010  * slot enabled:  1
1011  * slot disabled: 0
1012  */
1013 u8 acpiphp_get_power_status(struct acpiphp_slot *slot)
1014 {
1015 	return (slot->flags & SLOT_ENABLED);
1016 }
1017 
1018 /*
1019  * latch   open:  1
1020  * latch closed:  0
1021  */
1022 u8 acpiphp_get_latch_status(struct acpiphp_slot *slot)
1023 {
1024 	return !(get_slot_status(slot) & ACPI_STA_DEVICE_UI);
1025 }
1026 
1027 /*
1028  * adapter presence : 1
1029  *          absence : 0
1030  */
1031 u8 acpiphp_get_adapter_status(struct acpiphp_slot *slot)
1032 {
1033 	return !!get_slot_status(slot);
1034 }
1035