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 #include <linux/init.h>
43 #include <linux/module.h>
44 
45 #include <linux/kernel.h>
46 #include <linux/pci.h>
47 #include <linux/pci_hotplug.h>
48 #include <linux/pci-acpi.h>
49 #include <linux/mutex.h>
50 #include <linux/slab.h>
51 #include <linux/acpi.h>
52 
53 #include "../pci.h"
54 #include "acpiphp.h"
55 
56 static LIST_HEAD(bridge_list);
57 static DEFINE_MUTEX(bridge_mutex);
58 
59 #define MY_NAME "acpiphp_glue"
60 
61 static void handle_hotplug_event_bridge (acpi_handle, u32, void *);
62 static void acpiphp_sanitize_bus(struct pci_bus *bus);
63 static void acpiphp_set_hpp_values(struct pci_bus *bus);
64 static void handle_hotplug_event_func(acpi_handle handle, u32 type, void *context);
65 static void free_bridge(struct kref *kref);
66 
67 /* callback routine to check for the existence of a pci dock device */
68 static acpi_status
69 is_pci_dock_device(acpi_handle handle, u32 lvl, void *context, void **rv)
70 {
71 	int *count = (int *)context;
72 
73 	if (is_dock_device(handle)) {
74 		(*count)++;
75 		return AE_CTRL_TERMINATE;
76 	} else {
77 		return AE_OK;
78 	}
79 }
80 
81 static inline void get_bridge(struct acpiphp_bridge *bridge)
82 {
83 	kref_get(&bridge->ref);
84 }
85 
86 static inline void put_bridge(struct acpiphp_bridge *bridge)
87 {
88 	kref_put(&bridge->ref, free_bridge);
89 }
90 
91 static void free_bridge(struct kref *kref)
92 {
93 	struct acpiphp_bridge *bridge;
94 	struct acpiphp_slot *slot, *next;
95 	struct acpiphp_func *func, *tmp;
96 
97 	bridge = container_of(kref, struct acpiphp_bridge, ref);
98 
99 	list_for_each_entry_safe(slot, next, &bridge->slots, node) {
100 		list_for_each_entry_safe(func, tmp, &slot->funcs, sibling) {
101 			kfree(func);
102 		}
103 		kfree(slot);
104 	}
105 
106 	/* Release reference acquired by acpiphp_bridge_handle_to_function() */
107 	if ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func)
108 		put_bridge(bridge->func->slot->bridge);
109 	put_device(&bridge->pci_bus->dev);
110 	pci_dev_put(bridge->pci_dev);
111 	kfree(bridge);
112 }
113 
114 /*
115  * the _DCK method can do funny things... and sometimes not
116  * hah-hah funny.
117  *
118  * TBD - figure out a way to only call fixups for
119  * systems that require them.
120  */
121 static int post_dock_fixups(struct notifier_block *nb, unsigned long val,
122 	void *v)
123 {
124 	struct acpiphp_func *func = container_of(nb, struct acpiphp_func, nb);
125 	struct pci_bus *bus = func->slot->bridge->pci_bus;
126 	u32 buses;
127 
128 	if (!bus->self)
129 		return  NOTIFY_OK;
130 
131 	/* fixup bad _DCK function that rewrites
132 	 * secondary bridge on slot
133 	 */
134 	pci_read_config_dword(bus->self,
135 			PCI_PRIMARY_BUS,
136 			&buses);
137 
138 	if (((buses >> 8) & 0xff) != bus->busn_res.start) {
139 		buses = (buses & 0xff000000)
140 			| ((unsigned int)(bus->primary)     <<  0)
141 			| ((unsigned int)(bus->busn_res.start)   <<  8)
142 			| ((unsigned int)(bus->busn_res.end) << 16);
143 		pci_write_config_dword(bus->self, PCI_PRIMARY_BUS, buses);
144 	}
145 	return NOTIFY_OK;
146 }
147 
148 
149 static const struct acpi_dock_ops acpiphp_dock_ops = {
150 	.handler = handle_hotplug_event_func,
151 };
152 
153 /* Check whether the PCI device is managed by native PCIe hotplug driver */
154 static bool device_is_managed_by_native_pciehp(struct pci_dev *pdev)
155 {
156 	u32 reg32;
157 	acpi_handle tmp;
158 	struct acpi_pci_root *root;
159 
160 	/* Check whether the PCIe port supports native PCIe hotplug */
161 	if (pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32))
162 		return false;
163 	if (!(reg32 & PCI_EXP_SLTCAP_HPC))
164 		return false;
165 
166 	/*
167 	 * Check whether native PCIe hotplug has been enabled for
168 	 * this PCIe hierarchy.
169 	 */
170 	tmp = acpi_find_root_bridge_handle(pdev);
171 	if (!tmp)
172 		return false;
173 	root = acpi_pci_find_root(tmp);
174 	if (!root)
175 		return false;
176 	if (!(root->osc_control_set & OSC_PCI_EXPRESS_NATIVE_HP_CONTROL))
177 		return false;
178 
179 	return true;
180 }
181 
182 /* callback routine to register each ACPI PCI slot object */
183 static acpi_status
184 register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
185 {
186 	struct acpiphp_bridge *bridge = (struct acpiphp_bridge *)context;
187 	struct acpiphp_slot *slot;
188 	struct acpiphp_func *newfunc;
189 	acpi_handle tmp;
190 	acpi_status status = AE_OK;
191 	unsigned long long adr, sun;
192 	int device, function, retval, found = 0;
193 	struct pci_bus *pbus = bridge->pci_bus;
194 	struct pci_dev *pdev;
195 	u32 val;
196 
197 	if (!acpi_pci_check_ejectable(pbus, handle) && !is_dock_device(handle))
198 		return AE_OK;
199 
200 	status = acpi_evaluate_integer(handle, "_ADR", NULL, &adr);
201 	if (ACPI_FAILURE(status)) {
202 		warn("can't evaluate _ADR (%#x)\n", status);
203 		return AE_OK;
204 	}
205 
206 	device = (adr >> 16) & 0xffff;
207 	function = adr & 0xffff;
208 
209 	pdev = bridge->pci_dev;
210 	if (pdev && device_is_managed_by_native_pciehp(pdev))
211 		return AE_OK;
212 
213 	newfunc = kzalloc(sizeof(struct acpiphp_func), GFP_KERNEL);
214 	if (!newfunc)
215 		return AE_NO_MEMORY;
216 
217 	newfunc->handle = handle;
218 	newfunc->function = function;
219 
220 	if (ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0", &tmp)))
221 		newfunc->flags = FUNC_HAS_EJ0;
222 
223 	if (ACPI_SUCCESS(acpi_get_handle(handle, "_STA", &tmp)))
224 		newfunc->flags |= FUNC_HAS_STA;
225 
226 	if (ACPI_SUCCESS(acpi_get_handle(handle, "_PS0", &tmp)))
227 		newfunc->flags |= FUNC_HAS_PS0;
228 
229 	if (ACPI_SUCCESS(acpi_get_handle(handle, "_PS3", &tmp)))
230 		newfunc->flags |= FUNC_HAS_PS3;
231 
232 	if (ACPI_SUCCESS(acpi_get_handle(handle, "_DCK", &tmp)))
233 		newfunc->flags |= FUNC_HAS_DCK;
234 
235 	status = acpi_evaluate_integer(handle, "_SUN", NULL, &sun);
236 	if (ACPI_FAILURE(status)) {
237 		/*
238 		 * use the count of the number of slots we've found
239 		 * for the number of the slot
240 		 */
241 		sun = bridge->nr_slots+1;
242 	}
243 
244 	/* search for objects that share the same slot */
245 	list_for_each_entry(slot, &bridge->slots, node)
246 		if (slot->device == device) {
247 			if (slot->sun != sun)
248 				warn("sibling found, but _SUN doesn't match!\n");
249 			found = 1;
250 			break;
251 		}
252 
253 	if (!found) {
254 		slot = kzalloc(sizeof(struct acpiphp_slot), GFP_KERNEL);
255 		if (!slot) {
256 			kfree(newfunc);
257 			return AE_NO_MEMORY;
258 		}
259 
260 		slot->bridge = bridge;
261 		slot->device = device;
262 		slot->sun = sun;
263 		INIT_LIST_HEAD(&slot->funcs);
264 		mutex_init(&slot->crit_sect);
265 
266 		mutex_lock(&bridge_mutex);
267 		list_add_tail(&slot->node, &bridge->slots);
268 		mutex_unlock(&bridge_mutex);
269 		bridge->nr_slots++;
270 
271 		dbg("found ACPI PCI Hotplug slot %llu at PCI %04x:%02x:%02x\n",
272 		    slot->sun, pci_domain_nr(pbus), pbus->number, device);
273 		retval = acpiphp_register_hotplug_slot(slot);
274 		if (retval) {
275 			if (retval == -EBUSY)
276 				warn("Slot %llu already registered by another "
277 					"hotplug driver\n", slot->sun);
278 			else
279 				warn("acpiphp_register_hotplug_slot failed "
280 					"(err code = 0x%x)\n", retval);
281 			goto err_exit;
282 		}
283 	}
284 
285 	newfunc->slot = slot;
286 	mutex_lock(&bridge_mutex);
287 	list_add_tail(&newfunc->sibling, &slot->funcs);
288 	mutex_unlock(&bridge_mutex);
289 
290 	if (pci_bus_read_dev_vendor_id(pbus, PCI_DEVFN(device, function),
291 				       &val, 60*1000))
292 		slot->flags |= (SLOT_ENABLED | SLOT_POWEREDON);
293 
294 	if (is_dock_device(handle)) {
295 		/* we don't want to call this device's _EJ0
296 		 * because we want the dock notify handler
297 		 * to call it after it calls _DCK
298 		 */
299 		newfunc->flags &= ~FUNC_HAS_EJ0;
300 		if (register_hotplug_dock_device(handle,
301 			&acpiphp_dock_ops, newfunc))
302 			dbg("failed to register dock device\n");
303 
304 		/* we need to be notified when dock events happen
305 		 * outside of the hotplug operation, since we may
306 		 * need to do fixups before we can hotplug.
307 		 */
308 		newfunc->nb.notifier_call = post_dock_fixups;
309 		if (register_dock_notifier(&newfunc->nb))
310 			dbg("failed to register a dock notifier");
311 	}
312 
313 	/* install notify handler */
314 	if (!(newfunc->flags & FUNC_HAS_DCK)) {
315 		status = acpi_install_notify_handler(handle,
316 					     ACPI_SYSTEM_NOTIFY,
317 					     handle_hotplug_event_func,
318 					     newfunc);
319 
320 		if (ACPI_FAILURE(status))
321 			err("failed to register interrupt notify handler\n");
322 	} else
323 		status = AE_OK;
324 
325 	return status;
326 
327  err_exit:
328 	bridge->nr_slots--;
329 	mutex_lock(&bridge_mutex);
330 	list_del(&slot->node);
331 	mutex_unlock(&bridge_mutex);
332 	kfree(slot);
333 	kfree(newfunc);
334 
335 	return AE_OK;
336 }
337 
338 
339 /* see if it's worth looking at this bridge */
340 static int detect_ejectable_slots(acpi_handle handle)
341 {
342 	int found = acpi_pci_detect_ejectable(handle);
343 	if (!found) {
344 		acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
345 				    is_pci_dock_device, NULL, (void *)&found, NULL);
346 	}
347 	return found;
348 }
349 
350 /* initialize miscellaneous stuff for both root and PCI-to-PCI bridge */
351 static void init_bridge_misc(struct acpiphp_bridge *bridge)
352 {
353 	acpi_status status;
354 
355 	/* must be added to the list prior to calling register_slot */
356 	mutex_lock(&bridge_mutex);
357 	list_add(&bridge->list, &bridge_list);
358 	mutex_unlock(&bridge_mutex);
359 
360 	/* register all slot objects under this bridge */
361 	status = acpi_walk_namespace(ACPI_TYPE_DEVICE, bridge->handle, (u32)1,
362 				     register_slot, NULL, bridge, NULL);
363 	if (ACPI_FAILURE(status)) {
364 		mutex_lock(&bridge_mutex);
365 		list_del(&bridge->list);
366 		mutex_unlock(&bridge_mutex);
367 		return;
368 	}
369 
370 	/* install notify handler for P2P bridges */
371 	if (!pci_is_root_bus(bridge->pci_bus)) {
372 		if ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func) {
373 			status = acpi_remove_notify_handler(bridge->func->handle,
374 						ACPI_SYSTEM_NOTIFY,
375 						handle_hotplug_event_func);
376 			if (ACPI_FAILURE(status))
377 				err("failed to remove notify handler\n");
378 		}
379 		status = acpi_install_notify_handler(bridge->handle,
380 					     ACPI_SYSTEM_NOTIFY,
381 					     handle_hotplug_event_bridge,
382 					     bridge);
383 
384 		if (ACPI_FAILURE(status)) {
385 			err("failed to register interrupt notify handler\n");
386 		}
387 	}
388 }
389 
390 
391 /* find acpiphp_func from acpiphp_bridge */
392 static struct acpiphp_func *acpiphp_bridge_handle_to_function(acpi_handle handle)
393 {
394 	struct acpiphp_bridge *bridge;
395 	struct acpiphp_slot *slot;
396 	struct acpiphp_func *func = NULL;
397 
398 	mutex_lock(&bridge_mutex);
399 	list_for_each_entry(bridge, &bridge_list, list) {
400 		list_for_each_entry(slot, &bridge->slots, node) {
401 			list_for_each_entry(func, &slot->funcs, sibling) {
402 				if (func->handle == handle) {
403 					get_bridge(func->slot->bridge);
404 					mutex_unlock(&bridge_mutex);
405 					return func;
406 				}
407 			}
408 		}
409 	}
410 	mutex_unlock(&bridge_mutex);
411 
412 	return NULL;
413 }
414 
415 
416 static struct acpiphp_bridge *acpiphp_handle_to_bridge(acpi_handle handle)
417 {
418 	struct acpiphp_bridge *bridge;
419 
420 	mutex_lock(&bridge_mutex);
421 	list_for_each_entry(bridge, &bridge_list, list)
422 		if (bridge->handle == handle) {
423 			get_bridge(bridge);
424 			mutex_unlock(&bridge_mutex);
425 			return bridge;
426 		}
427 	mutex_unlock(&bridge_mutex);
428 
429 	return NULL;
430 }
431 
432 static void cleanup_bridge(struct acpiphp_bridge *bridge)
433 {
434 	struct acpiphp_slot *slot;
435 	struct acpiphp_func *func;
436 	acpi_status status;
437 	acpi_handle handle = bridge->handle;
438 
439 	if (!pci_is_root_bus(bridge->pci_bus)) {
440 		status = acpi_remove_notify_handler(handle,
441 					    ACPI_SYSTEM_NOTIFY,
442 					    handle_hotplug_event_bridge);
443 		if (ACPI_FAILURE(status))
444 			err("failed to remove notify handler\n");
445 	}
446 
447 	if ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func) {
448 		status = acpi_install_notify_handler(bridge->func->handle,
449 						ACPI_SYSTEM_NOTIFY,
450 						handle_hotplug_event_func,
451 						bridge->func);
452 		if (ACPI_FAILURE(status))
453 			err("failed to install interrupt notify handler\n");
454 	}
455 
456 	list_for_each_entry(slot, &bridge->slots, node) {
457 		list_for_each_entry(func, &slot->funcs, sibling) {
458 			if (is_dock_device(func->handle)) {
459 				unregister_hotplug_dock_device(func->handle);
460 				unregister_dock_notifier(&func->nb);
461 			}
462 			if (!(func->flags & FUNC_HAS_DCK)) {
463 				status = acpi_remove_notify_handler(func->handle,
464 						ACPI_SYSTEM_NOTIFY,
465 						handle_hotplug_event_func);
466 				if (ACPI_FAILURE(status))
467 					err("failed to remove notify handler\n");
468 			}
469 		}
470 		acpiphp_unregister_hotplug_slot(slot);
471 	}
472 
473 	mutex_lock(&bridge_mutex);
474 	list_del(&bridge->list);
475 	mutex_unlock(&bridge_mutex);
476 }
477 
478 static int power_on_slot(struct acpiphp_slot *slot)
479 {
480 	acpi_status status;
481 	struct acpiphp_func *func;
482 	int retval = 0;
483 
484 	/* if already enabled, just skip */
485 	if (slot->flags & SLOT_POWEREDON)
486 		goto err_exit;
487 
488 	list_for_each_entry(func, &slot->funcs, sibling) {
489 		if (func->flags & FUNC_HAS_PS0) {
490 			dbg("%s: executing _PS0\n", __func__);
491 			status = acpi_evaluate_object(func->handle, "_PS0", NULL, NULL);
492 			if (ACPI_FAILURE(status)) {
493 				warn("%s: _PS0 failed\n", __func__);
494 				retval = -1;
495 				goto err_exit;
496 			} else
497 				break;
498 		}
499 	}
500 
501 	/* TBD: evaluate _STA to check if the slot is enabled */
502 
503 	slot->flags |= SLOT_POWEREDON;
504 
505  err_exit:
506 	return retval;
507 }
508 
509 
510 static int power_off_slot(struct acpiphp_slot *slot)
511 {
512 	acpi_status status;
513 	struct acpiphp_func *func;
514 
515 	int retval = 0;
516 
517 	/* if already disabled, just skip */
518 	if ((slot->flags & SLOT_POWEREDON) == 0)
519 		goto err_exit;
520 
521 	list_for_each_entry(func, &slot->funcs, sibling) {
522 		if (func->flags & FUNC_HAS_PS3) {
523 			status = acpi_evaluate_object(func->handle, "_PS3", NULL, NULL);
524 			if (ACPI_FAILURE(status)) {
525 				warn("%s: _PS3 failed\n", __func__);
526 				retval = -1;
527 				goto err_exit;
528 			} else
529 				break;
530 		}
531 	}
532 
533 	/* TBD: evaluate _STA to check if the slot is disabled */
534 
535 	slot->flags &= (~SLOT_POWEREDON);
536 
537  err_exit:
538 	return retval;
539 }
540 
541 
542 
543 /**
544  * acpiphp_max_busnr - return the highest reserved bus number under the given bus.
545  * @bus: bus to start search with
546  */
547 static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
548 {
549 	struct list_head *tmp;
550 	unsigned char max, n;
551 
552 	/*
553 	 * pci_bus_max_busnr will return the highest
554 	 * reserved busnr for all these children.
555 	 * that is equivalent to the bus->subordinate
556 	 * value.  We don't want to use the parent's
557 	 * bus->subordinate value because it could have
558 	 * padding in it.
559 	 */
560 	max = bus->busn_res.start;
561 
562 	list_for_each(tmp, &bus->children) {
563 		n = pci_bus_max_busnr(pci_bus_b(tmp));
564 		if (n > max)
565 			max = n;
566 	}
567 	return max;
568 }
569 
570 
571 /**
572  * acpiphp_bus_add - add a new bus to acpi subsystem
573  * @func: acpiphp_func of the bridge
574  */
575 static int acpiphp_bus_add(struct acpiphp_func *func)
576 {
577 	struct acpi_device *device;
578 	int ret_val;
579 
580 	if (!acpi_bus_get_device(func->handle, &device)) {
581 		dbg("bus exists... trim\n");
582 		/* this shouldn't be in here, so remove
583 		 * the bus then re-add it...
584 		 */
585 		acpi_bus_trim(device);
586 	}
587 
588 	ret_val = acpi_bus_scan(func->handle);
589 	if (!ret_val)
590 		ret_val = acpi_bus_get_device(func->handle, &device);
591 
592 	if (ret_val)
593 		dbg("error adding bus, %x\n", -ret_val);
594 
595 	return ret_val;
596 }
597 
598 
599 /**
600  * acpiphp_bus_trim - trim a bus from acpi subsystem
601  * @handle: handle to acpi namespace
602  */
603 static int acpiphp_bus_trim(acpi_handle handle)
604 {
605 	struct acpi_device *device;
606 	int retval;
607 
608 	retval = acpi_bus_get_device(handle, &device);
609 	if (retval) {
610 		dbg("acpi_device not found\n");
611 		return retval;
612 	}
613 
614 	acpi_bus_trim(device);
615 	return 0;
616 }
617 
618 static void acpiphp_set_acpi_region(struct acpiphp_slot *slot)
619 {
620 	struct acpiphp_func *func;
621 	union acpi_object params[2];
622 	struct acpi_object_list arg_list;
623 
624 	list_for_each_entry(func, &slot->funcs, sibling) {
625 		arg_list.count = 2;
626 		arg_list.pointer = params;
627 		params[0].type = ACPI_TYPE_INTEGER;
628 		params[0].integer.value = ACPI_ADR_SPACE_PCI_CONFIG;
629 		params[1].type = ACPI_TYPE_INTEGER;
630 		params[1].integer.value = 1;
631 		/* _REG is optional, we don't care about if there is failure */
632 		acpi_evaluate_object(func->handle, "_REG", &arg_list, NULL);
633 	}
634 }
635 
636 static void check_hotplug_bridge(struct acpiphp_slot *slot, struct pci_dev *dev)
637 {
638 	struct acpiphp_func *func;
639 
640 	if (!dev->subordinate)
641 		return;
642 
643 	/* quirk, or pcie could set it already */
644 	if (dev->is_hotplug_bridge)
645 		return;
646 
647 	if (PCI_SLOT(dev->devfn) != slot->device)
648 		return;
649 
650 	list_for_each_entry(func, &slot->funcs, sibling) {
651 		if (PCI_FUNC(dev->devfn) == func->function) {
652 			/* check if this bridge has ejectable slots */
653 			if ((detect_ejectable_slots(func->handle) > 0))
654 				dev->is_hotplug_bridge = 1;
655 			break;
656 		}
657 	}
658 }
659 
660 /**
661  * enable_device - enable, configure a slot
662  * @slot: slot to be enabled
663  *
664  * This function should be called per *physical slot*,
665  * not per each slot object in ACPI namespace.
666  */
667 static int __ref enable_device(struct acpiphp_slot *slot)
668 {
669 	struct pci_dev *dev;
670 	struct pci_bus *bus = slot->bridge->pci_bus;
671 	struct acpiphp_func *func;
672 	int num, max, pass;
673 
674 	if (slot->flags & SLOT_ENABLED)
675 		goto err_exit;
676 
677 	list_for_each_entry(func, &slot->funcs, sibling)
678 		acpiphp_bus_add(func);
679 
680 	num = pci_scan_slot(bus, PCI_DEVFN(slot->device, 0));
681 	if (num == 0) {
682 		/* Maybe only part of funcs are added. */
683 		dbg("No new device found\n");
684 		goto err_exit;
685 	}
686 
687 	max = acpiphp_max_busnr(bus);
688 	for (pass = 0; pass < 2; pass++) {
689 		list_for_each_entry(dev, &bus->devices, bus_list) {
690 			if (PCI_SLOT(dev->devfn) != slot->device)
691 				continue;
692 			if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
693 			    dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
694 				max = pci_scan_bridge(bus, dev, max, pass);
695 				if (pass && dev->subordinate) {
696 					check_hotplug_bridge(slot, dev);
697 					pci_bus_size_bridges(dev->subordinate);
698 				}
699 			}
700 		}
701 	}
702 
703 	pci_bus_assign_resources(bus);
704 	acpiphp_sanitize_bus(bus);
705 	acpiphp_set_hpp_values(bus);
706 	acpiphp_set_acpi_region(slot);
707 	pci_enable_bridges(bus);
708 
709 	list_for_each_entry(dev, &bus->devices, bus_list) {
710 		/* Assume that newly added devices are powered on already. */
711 		if (!dev->is_added)
712 			dev->current_state = PCI_D0;
713 	}
714 
715 	pci_bus_add_devices(bus);
716 
717 	slot->flags |= SLOT_ENABLED;
718 	list_for_each_entry(func, &slot->funcs, sibling) {
719 		dev = pci_get_slot(bus, PCI_DEVFN(slot->device,
720 						  func->function));
721 		if (!dev) {
722 			/* Do not set SLOT_ENABLED flag if some funcs
723 			   are not added. */
724 			slot->flags &= (~SLOT_ENABLED);
725 			continue;
726 		}
727 	}
728 
729 
730  err_exit:
731 	return 0;
732 }
733 
734 /* return first device in slot, acquiring a reference on it */
735 static struct pci_dev *dev_in_slot(struct acpiphp_slot *slot)
736 {
737 	struct pci_bus *bus = slot->bridge->pci_bus;
738 	struct pci_dev *dev;
739 	struct pci_dev *ret = NULL;
740 
741 	down_read(&pci_bus_sem);
742 	list_for_each_entry(dev, &bus->devices, bus_list)
743 		if (PCI_SLOT(dev->devfn) == slot->device) {
744 			ret = pci_dev_get(dev);
745 			break;
746 		}
747 	up_read(&pci_bus_sem);
748 
749 	return ret;
750 }
751 
752 /**
753  * disable_device - disable a slot
754  * @slot: ACPI PHP slot
755  */
756 static int disable_device(struct acpiphp_slot *slot)
757 {
758 	struct acpiphp_func *func;
759 	struct pci_dev *pdev;
760 
761 	/*
762 	 * enable_device() enumerates all functions in this device via
763 	 * pci_scan_slot(), whether they have associated ACPI hotplug
764 	 * methods (_EJ0, etc.) or not.  Therefore, we remove all functions
765 	 * here.
766 	 */
767 	while ((pdev = dev_in_slot(slot))) {
768 		pci_stop_and_remove_bus_device(pdev);
769 		pci_dev_put(pdev);
770 	}
771 
772 	list_for_each_entry(func, &slot->funcs, sibling) {
773 		acpiphp_bus_trim(func->handle);
774 	}
775 
776 	slot->flags &= (~SLOT_ENABLED);
777 
778 	return 0;
779 }
780 
781 
782 /**
783  * get_slot_status - get ACPI slot status
784  * @slot: ACPI PHP slot
785  *
786  * If a slot has _STA for each function and if any one of them
787  * returned non-zero status, return it.
788  *
789  * If a slot doesn't have _STA and if any one of its functions'
790  * configuration space is configured, return 0x0f as a _STA.
791  *
792  * Otherwise return 0.
793  */
794 static unsigned int get_slot_status(struct acpiphp_slot *slot)
795 {
796 	acpi_status status;
797 	unsigned long long sta = 0;
798 	u32 dvid;
799 	struct acpiphp_func *func;
800 
801 	list_for_each_entry(func, &slot->funcs, sibling) {
802 		if (func->flags & FUNC_HAS_STA) {
803 			status = acpi_evaluate_integer(func->handle, "_STA", NULL, &sta);
804 			if (ACPI_SUCCESS(status) && sta)
805 				break;
806 		} else {
807 			pci_bus_read_config_dword(slot->bridge->pci_bus,
808 						  PCI_DEVFN(slot->device,
809 							    func->function),
810 						  PCI_VENDOR_ID, &dvid);
811 			if (dvid != 0xffffffff) {
812 				sta = ACPI_STA_ALL;
813 				break;
814 			}
815 		}
816 	}
817 
818 	return (unsigned int)sta;
819 }
820 
821 /**
822  * acpiphp_eject_slot - physically eject the slot
823  * @slot: ACPI PHP slot
824  */
825 int acpiphp_eject_slot(struct acpiphp_slot *slot)
826 {
827 	acpi_status status;
828 	struct acpiphp_func *func;
829 	struct acpi_object_list arg_list;
830 	union acpi_object arg;
831 
832 	list_for_each_entry(func, &slot->funcs, sibling) {
833 		/* We don't want to call _EJ0 on non-existing functions. */
834 		if ((func->flags & FUNC_HAS_EJ0)) {
835 			/* _EJ0 method take one argument */
836 			arg_list.count = 1;
837 			arg_list.pointer = &arg;
838 			arg.type = ACPI_TYPE_INTEGER;
839 			arg.integer.value = 1;
840 
841 			status = acpi_evaluate_object(func->handle, "_EJ0", &arg_list, NULL);
842 			if (ACPI_FAILURE(status)) {
843 				warn("%s: _EJ0 failed\n", __func__);
844 				return -1;
845 			} else
846 				break;
847 		}
848 	}
849 	return 0;
850 }
851 
852 /**
853  * acpiphp_check_bridge - re-enumerate devices
854  * @bridge: where to begin re-enumeration
855  *
856  * Iterate over all slots under this bridge and make sure that if a
857  * card is present they are enabled, and if not they are disabled.
858  */
859 static int acpiphp_check_bridge(struct acpiphp_bridge *bridge)
860 {
861 	struct acpiphp_slot *slot;
862 	int retval = 0;
863 	int enabled, disabled;
864 
865 	enabled = disabled = 0;
866 
867 	list_for_each_entry(slot, &bridge->slots, node) {
868 		unsigned int status = get_slot_status(slot);
869 		if (slot->flags & SLOT_ENABLED) {
870 			if (status == ACPI_STA_ALL)
871 				continue;
872 			retval = acpiphp_disable_slot(slot);
873 			if (retval) {
874 				err("Error occurred in disabling\n");
875 				goto err_exit;
876 			} else {
877 				acpiphp_eject_slot(slot);
878 			}
879 			disabled++;
880 		} else {
881 			if (status != ACPI_STA_ALL)
882 				continue;
883 			retval = acpiphp_enable_slot(slot);
884 			if (retval) {
885 				err("Error occurred in enabling\n");
886 				goto err_exit;
887 			}
888 			enabled++;
889 		}
890 	}
891 
892 	dbg("%s: %d enabled, %d disabled\n", __func__, enabled, disabled);
893 
894  err_exit:
895 	return retval;
896 }
897 
898 static void acpiphp_set_hpp_values(struct pci_bus *bus)
899 {
900 	struct pci_dev *dev;
901 
902 	list_for_each_entry(dev, &bus->devices, bus_list)
903 		pci_configure_slot(dev);
904 }
905 
906 /*
907  * Remove devices for which we could not assign resources, call
908  * arch specific code to fix-up the bus
909  */
910 static void acpiphp_sanitize_bus(struct pci_bus *bus)
911 {
912 	struct pci_dev *dev, *tmp;
913 	int i;
914 	unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM;
915 
916 	list_for_each_entry_safe(dev, tmp, &bus->devices, bus_list) {
917 		for (i=0; i<PCI_BRIDGE_RESOURCES; i++) {
918 			struct resource *res = &dev->resource[i];
919 			if ((res->flags & type_mask) && !res->start &&
920 					res->end) {
921 				/* Could not assign a required resources
922 				 * for this device, remove it */
923 				pci_stop_and_remove_bus_device(dev);
924 				break;
925 			}
926 		}
927 	}
928 }
929 
930 /*
931  * ACPI event handlers
932  */
933 
934 static acpi_status
935 check_sub_bridges(acpi_handle handle, u32 lvl, void *context, void **rv)
936 {
937 	struct acpiphp_bridge *bridge;
938 	char objname[64];
939 	struct acpi_buffer buffer = { .length = sizeof(objname),
940 				      .pointer = objname };
941 
942 	bridge = acpiphp_handle_to_bridge(handle);
943 	if (bridge) {
944 		acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
945 		dbg("%s: re-enumerating slots under %s\n",
946 			__func__, objname);
947 		acpiphp_check_bridge(bridge);
948 		put_bridge(bridge);
949 	}
950 	return AE_OK ;
951 }
952 
953 static void _handle_hotplug_event_bridge(struct work_struct *work)
954 {
955 	struct acpiphp_bridge *bridge;
956 	char objname[64];
957 	struct acpi_buffer buffer = { .length = sizeof(objname),
958 				      .pointer = objname };
959 	struct acpi_hp_work *hp_work;
960 	acpi_handle handle;
961 	u32 type;
962 
963 	hp_work = container_of(work, struct acpi_hp_work, work);
964 	handle = hp_work->handle;
965 	type = hp_work->type;
966 	bridge = (struct acpiphp_bridge *)hp_work->context;
967 
968 	acpi_scan_lock_acquire();
969 
970 	acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
971 
972 	switch (type) {
973 	case ACPI_NOTIFY_BUS_CHECK:
974 		/* bus re-enumerate */
975 		dbg("%s: Bus check notify on %s\n", __func__, objname);
976 		dbg("%s: re-enumerating slots under %s\n", __func__, objname);
977 		acpiphp_check_bridge(bridge);
978 		acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
979 			ACPI_UINT32_MAX, check_sub_bridges, NULL, NULL, NULL);
980 		break;
981 
982 	case ACPI_NOTIFY_DEVICE_CHECK:
983 		/* device check */
984 		dbg("%s: Device check notify on %s\n", __func__, objname);
985 		acpiphp_check_bridge(bridge);
986 		break;
987 
988 	case ACPI_NOTIFY_DEVICE_WAKE:
989 		/* wake event */
990 		dbg("%s: Device wake notify on %s\n", __func__, objname);
991 		break;
992 
993 	case ACPI_NOTIFY_EJECT_REQUEST:
994 		/* request device eject */
995 		dbg("%s: Device eject notify on %s\n", __func__, objname);
996 		if ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func) {
997 			struct acpiphp_slot *slot;
998 			slot = bridge->func->slot;
999 			if (!acpiphp_disable_slot(slot))
1000 				acpiphp_eject_slot(slot);
1001 		}
1002 		break;
1003 
1004 	case ACPI_NOTIFY_FREQUENCY_MISMATCH:
1005 		printk(KERN_ERR "Device %s cannot be configured due"
1006 				" to a frequency mismatch\n", objname);
1007 		break;
1008 
1009 	case ACPI_NOTIFY_BUS_MODE_MISMATCH:
1010 		printk(KERN_ERR "Device %s cannot be configured due"
1011 				" to a bus mode mismatch\n", objname);
1012 		break;
1013 
1014 	case ACPI_NOTIFY_POWER_FAULT:
1015 		printk(KERN_ERR "Device %s has suffered a power fault\n",
1016 				objname);
1017 		break;
1018 
1019 	default:
1020 		warn("notify_handler: unknown event type 0x%x for %s\n", type, objname);
1021 		break;
1022 	}
1023 
1024 	acpi_scan_lock_release();
1025 	kfree(hp_work); /* allocated in handle_hotplug_event_bridge */
1026 	put_bridge(bridge);
1027 }
1028 
1029 /**
1030  * handle_hotplug_event_bridge - handle ACPI event on bridges
1031  * @handle: Notify()'ed acpi_handle
1032  * @type: Notify code
1033  * @context: pointer to acpiphp_bridge structure
1034  *
1035  * Handles ACPI event notification on {host,p2p} bridges.
1036  */
1037 static void handle_hotplug_event_bridge(acpi_handle handle, u32 type,
1038 					void *context)
1039 {
1040 	struct acpiphp_bridge *bridge = context;
1041 
1042 	/*
1043 	 * Currently the code adds all hotplug events to the kacpid_wq
1044 	 * queue when it should add hotplug events to the kacpi_hotplug_wq.
1045 	 * The proper way to fix this is to reorganize the code so that
1046 	 * drivers (dock, etc.) do not call acpi_os_execute(), etc.
1047 	 * For now just re-add this work to the kacpi_hotplug_wq so we
1048 	 * don't deadlock on hotplug actions.
1049 	 */
1050 	get_bridge(bridge);
1051 	alloc_acpi_hp_work(handle, type, context, _handle_hotplug_event_bridge);
1052 }
1053 
1054 static void _handle_hotplug_event_func(struct work_struct *work)
1055 {
1056 	struct acpiphp_func *func;
1057 	char objname[64];
1058 	struct acpi_buffer buffer = { .length = sizeof(objname),
1059 				      .pointer = objname };
1060 	struct acpi_hp_work *hp_work;
1061 	acpi_handle handle;
1062 	u32 type;
1063 
1064 	hp_work = container_of(work, struct acpi_hp_work, work);
1065 	handle = hp_work->handle;
1066 	type = hp_work->type;
1067 	func = (struct acpiphp_func *)hp_work->context;
1068 
1069 	acpi_scan_lock_acquire();
1070 
1071 	acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
1072 
1073 	switch (type) {
1074 	case ACPI_NOTIFY_BUS_CHECK:
1075 		/* bus re-enumerate */
1076 		dbg("%s: Bus check notify on %s\n", __func__, objname);
1077 		acpiphp_enable_slot(func->slot);
1078 		break;
1079 
1080 	case ACPI_NOTIFY_DEVICE_CHECK:
1081 		/* device check : re-enumerate from parent bus */
1082 		dbg("%s: Device check notify on %s\n", __func__, objname);
1083 		acpiphp_check_bridge(func->slot->bridge);
1084 		break;
1085 
1086 	case ACPI_NOTIFY_DEVICE_WAKE:
1087 		/* wake event */
1088 		dbg("%s: Device wake notify on %s\n", __func__, objname);
1089 		break;
1090 
1091 	case ACPI_NOTIFY_EJECT_REQUEST:
1092 		/* request device eject */
1093 		dbg("%s: Device eject notify on %s\n", __func__, objname);
1094 		if (!(acpiphp_disable_slot(func->slot)))
1095 			acpiphp_eject_slot(func->slot);
1096 		break;
1097 
1098 	default:
1099 		warn("notify_handler: unknown event type 0x%x for %s\n", type, objname);
1100 		break;
1101 	}
1102 
1103 	acpi_scan_lock_release();
1104 	kfree(hp_work); /* allocated in handle_hotplug_event_func */
1105 	put_bridge(func->slot->bridge);
1106 }
1107 
1108 /**
1109  * handle_hotplug_event_func - handle ACPI event on functions (i.e. slots)
1110  * @handle: Notify()'ed acpi_handle
1111  * @type: Notify code
1112  * @context: pointer to acpiphp_func structure
1113  *
1114  * Handles ACPI event notification on slots.
1115  */
1116 static void handle_hotplug_event_func(acpi_handle handle, u32 type,
1117 				      void *context)
1118 {
1119 	struct acpiphp_func *func = context;
1120 
1121 	/*
1122 	 * Currently the code adds all hotplug events to the kacpid_wq
1123 	 * queue when it should add hotplug events to the kacpi_hotplug_wq.
1124 	 * The proper way to fix this is to reorganize the code so that
1125 	 * drivers (dock, etc.) do not call acpi_os_execute(), etc.
1126 	 * For now just re-add this work to the kacpi_hotplug_wq so we
1127 	 * don't deadlock on hotplug actions.
1128 	 */
1129 	get_bridge(func->slot->bridge);
1130 	alloc_acpi_hp_work(handle, type, context, _handle_hotplug_event_func);
1131 }
1132 
1133 /*
1134  * Create hotplug slots for the PCI bus.
1135  * It should always return 0 to avoid skipping following notifiers.
1136  */
1137 void acpiphp_enumerate_slots(struct pci_bus *bus, acpi_handle handle)
1138 {
1139 	acpi_handle dummy_handle;
1140 	struct acpiphp_bridge *bridge;
1141 
1142 	if (acpiphp_disabled)
1143 		return;
1144 
1145 	if (detect_ejectable_slots(handle) <= 0)
1146 		return;
1147 
1148 	bridge = kzalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL);
1149 	if (bridge == NULL) {
1150 		err("out of memory\n");
1151 		return;
1152 	}
1153 
1154 	INIT_LIST_HEAD(&bridge->slots);
1155 	kref_init(&bridge->ref);
1156 	bridge->handle = handle;
1157 	bridge->pci_dev = pci_dev_get(bus->self);
1158 	bridge->pci_bus = bus;
1159 
1160 	/*
1161 	 * Grab a ref to the subordinate PCI bus in case the bus is
1162 	 * removed via PCI core logical hotplug. The ref pins the bus
1163 	 * (which we access during module unload).
1164 	 */
1165 	get_device(&bus->dev);
1166 
1167 	if (!pci_is_root_bus(bridge->pci_bus) &&
1168 	    ACPI_SUCCESS(acpi_get_handle(bridge->handle,
1169 					"_EJ0", &dummy_handle))) {
1170 		dbg("found ejectable p2p bridge\n");
1171 		bridge->flags |= BRIDGE_HAS_EJ0;
1172 		bridge->func = acpiphp_bridge_handle_to_function(handle);
1173 	}
1174 
1175 	init_bridge_misc(bridge);
1176 }
1177 
1178 /* Destroy hotplug slots associated with the PCI bus */
1179 void acpiphp_remove_slots(struct pci_bus *bus)
1180 {
1181 	struct acpiphp_bridge *bridge, *tmp;
1182 
1183 	if (acpiphp_disabled)
1184 		return;
1185 
1186 	list_for_each_entry_safe(bridge, tmp, &bridge_list, list)
1187 		if (bridge->pci_bus == bus) {
1188 			cleanup_bridge(bridge);
1189 			put_bridge(bridge);
1190 			break;
1191 		}
1192 }
1193 
1194 /**
1195  * acpiphp_enable_slot - power on slot
1196  * @slot: ACPI PHP slot
1197  */
1198 int acpiphp_enable_slot(struct acpiphp_slot *slot)
1199 {
1200 	int retval;
1201 
1202 	mutex_lock(&slot->crit_sect);
1203 
1204 	/* wake up all functions */
1205 	retval = power_on_slot(slot);
1206 	if (retval)
1207 		goto err_exit;
1208 
1209 	if (get_slot_status(slot) == ACPI_STA_ALL) {
1210 		/* configure all functions */
1211 		retval = enable_device(slot);
1212 		if (retval)
1213 			power_off_slot(slot);
1214 	} else {
1215 		dbg("%s: Slot status is not ACPI_STA_ALL\n", __func__);
1216 		power_off_slot(slot);
1217 	}
1218 
1219  err_exit:
1220 	mutex_unlock(&slot->crit_sect);
1221 	return retval;
1222 }
1223 
1224 /**
1225  * acpiphp_disable_slot - power off slot
1226  * @slot: ACPI PHP slot
1227  */
1228 int acpiphp_disable_slot(struct acpiphp_slot *slot)
1229 {
1230 	int retval = 0;
1231 
1232 	mutex_lock(&slot->crit_sect);
1233 
1234 	/* unconfigure all functions */
1235 	retval = disable_device(slot);
1236 	if (retval)
1237 		goto err_exit;
1238 
1239 	/* power off all functions */
1240 	retval = power_off_slot(slot);
1241 	if (retval)
1242 		goto err_exit;
1243 
1244  err_exit:
1245 	mutex_unlock(&slot->crit_sect);
1246 	return retval;
1247 }
1248 
1249 
1250 /*
1251  * slot enabled:  1
1252  * slot disabled: 0
1253  */
1254 u8 acpiphp_get_power_status(struct acpiphp_slot *slot)
1255 {
1256 	return (slot->flags & SLOT_POWEREDON);
1257 }
1258 
1259 
1260 /*
1261  * latch   open:  1
1262  * latch closed:  0
1263  */
1264 u8 acpiphp_get_latch_status(struct acpiphp_slot *slot)
1265 {
1266 	unsigned int sta;
1267 
1268 	sta = get_slot_status(slot);
1269 
1270 	return (sta & ACPI_STA_DEVICE_UI) ? 0 : 1;
1271 }
1272 
1273 
1274 /*
1275  * adapter presence : 1
1276  *          absence : 0
1277  */
1278 u8 acpiphp_get_adapter_status(struct acpiphp_slot *slot)
1279 {
1280 	unsigned int sta;
1281 
1282 	sta = get_slot_status(slot);
1283 
1284 	return (sta == 0) ? 0 : 1;
1285 }
1286