Lines Matching +full:pci +full:- +full:dev

1 /*-
43 #include <contrib/dev/acpica/include/acpi.h>
44 #include <contrib/dev/acpica/include/accommon.h>
46 #include <dev/acpica/acpivar.h>
47 #include <dev/acpica/acpi_pcivar.h>
50 #include <dev/pci/pcireg.h>
51 #include <dev/pci/pcivar.h>
52 #include <dev/pci/pci_private.h>
54 #include <dev/iommu/iommu.h>
58 ACPI_MODULE_NAME("PCI")
66 ACPI_SERIAL_DECL(pci_powerstate, "ACPI PCI power methods");
68 /* Be sure that ACPI and PCI power states are equivalent. */
74 static struct pci_devinfo *acpi_pci_alloc_devinfo(device_t dev);
75 static int acpi_pci_attach(device_t dev);
76 static void acpi_pci_child_deleted(device_t dev, device_t child);
81 static int acpi_pci_detach(device_t dev);
82 static int acpi_pci_probe(device_t dev);
83 static int acpi_pci_read_ivar(device_t dev, device_t child, int which,
85 static int acpi_pci_write_ivar(device_t dev, device_t child, int which,
89 static int acpi_pci_set_powerstate_method(device_t dev, device_t child,
93 static int acpi_pci_get_domain(device_t dev, device_t child, int *domain);
111 /* PCI interface */
119 DEFINE_CLASS_1(pci, acpi_pci_driver, acpi_pci_methods, sizeof(struct pci_softc),
123 MODULE_DEPEND(acpi_pci, pci, 1, 1, 1);
127 acpi_pci_alloc_devinfo(device_t dev) in acpi_pci_alloc_devinfo() argument
132 return (&dinfo->ap_dinfo); in acpi_pci_alloc_devinfo()
136 acpi_pci_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) in acpi_pci_read_ivar() argument
143 *result = (uintptr_t)dinfo->ap_handle; in acpi_pci_read_ivar()
146 *result = (uintptr_t)dinfo->ap_flags; in acpi_pci_read_ivar()
149 return (pci_read_ivar(dev, child, which, result)); in acpi_pci_read_ivar()
153 acpi_pci_write_ivar(device_t dev, device_t child, int which, uintptr_t value) in acpi_pci_write_ivar() argument
160 dinfo->ap_handle = (ACPI_HANDLE)value; in acpi_pci_write_ivar()
163 dinfo->ap_flags = (int)value; in acpi_pci_write_ivar()
166 return (pci_write_ivar(dev, child, which, value)); in acpi_pci_write_ivar()
170 acpi_pci_child_deleted(device_t dev, device_t child) in acpi_pci_child_deleted() argument
174 if (acpi_get_device(dinfo->ap_handle) == child) in acpi_pci_child_deleted()
175 AcpiDetachData(dinfo->ap_handle, acpi_fake_objhandler); in acpi_pci_child_deleted()
176 pci_child_deleted(dev, child); in acpi_pci_child_deleted()
187 if (dinfo->ap_handle) { in acpi_pci_child_location_method()
188 sbuf_printf(sb, " handle=%s", acpi_name(dinfo->ap_handle)); in acpi_pci_child_location_method()
189 if (ACPI_SUCCESS(acpi_GetInteger(dinfo->ap_handle, "_PXM", &pxm))) { in acpi_pci_child_location_method()
208 * Fetch the NUMA domain for the given device 'dev'.
216 acpi_pci_get_domain(device_t dev, device_t child, int *domain) in acpi_pci_get_domain() argument
225 if (d == -1) in acpi_pci_get_domain()
229 return (bus_generic_get_domain(dev, child, domain)); in acpi_pci_get_domain()
233 * PCI power manangement
236 acpi_pci_set_powerstate_method(device_t dev, device_t child, int state) in acpi_pci_set_powerstate_method() argument
247 * We set the state using PCI Power Management outside of setting in acpi_pci_set_powerstate_method()
249 * first shut it down using PCI, and then using ACPI, which lets ACPI in acpi_pci_set_powerstate_method()
252 * it can enable any needed Power Resources before changing the PCI in acpi_pci_set_powerstate_method()
258 error = pci_set_powerstate_method(dev, child, state); in acpi_pci_set_powerstate_method()
266 device_printf(dev, "set ACPI power state %s on %s\n", in acpi_pci_set_powerstate_method()
269 device_printf(dev, in acpi_pci_set_powerstate_method()
274 error = pci_set_powerstate_method(dev, child, state); in acpi_pci_set_powerstate_method()
288 * Occasionally a PCI device may show up as an ACPI device in acpi_pci_update_device()
290 * second PCI-ISA bridge that has a _HID for an in acpi_pci_update_device()
291 * acpi_sysresource device.) In that case, leave ACPI-CA's in acpi_pci_update_device()
292 * device data pointing at the ACPI-enumerated device. in acpi_pci_update_device()
304 * Update ACPI-CA to use the PCI enumerated device_t for this handle. in acpi_pci_update_device()
308 printf("WARNING: Unable to attach object data to %s - %s\n", in acpi_pci_update_device()
329 if (dinfo->ap_dinfo.cfg.func == func && in acpi_pci_save_handle()
330 dinfo->ap_dinfo.cfg.slot == slot) { in acpi_pci_save_handle()
331 dinfo->ap_handle = handle; in acpi_pci_save_handle()
339 acpi_pci_child_added(device_t dev, device_t child) in acpi_pci_child_added() argument
343 * PCI devices are added via the bus scan in the normal PCI in acpi_pci_child_added()
350 * XXX: Sometimes PCI devices show up in the ACPI namespace that in acpi_pci_child_added()
354 AcpiWalkNamespace(ACPI_TYPE_DEVICE, acpi_get_handle(dev), 1, in acpi_pci_child_added()
359 acpi_pci_probe(device_t dev) in acpi_pci_probe() argument
362 if (acpi_get_handle(dev) == NULL) in acpi_pci_probe()
364 device_set_desc(dev, "ACPI PCI bus"); in acpi_pci_probe()
371 device_t dev; in acpi_pci_bus_notify_handler() local
373 dev = context; in acpi_pci_bus_notify_handler()
378 BUS_RESCAN(dev); in acpi_pci_bus_notify_handler()
382 device_printf(dev, "unknown notify %#x\n", notify); in acpi_pci_bus_notify_handler()
390 device_t child, dev; in acpi_pci_device_notify_handler() local
394 dev = context; in acpi_pci_device_notify_handler()
399 BUS_RESCAN(dev); in acpi_pci_device_notify_handler()
405 device_printf(dev, "no device to eject for %s\n", in acpi_pci_device_notify_handler()
413 device_printf(dev, "failed to detach %s: %d\n", in acpi_pci_device_notify_handler()
423 device_printf(dev, "failed to eject %s: %s\n", in acpi_pci_device_notify_handler()
429 BUS_RESCAN(dev); in acpi_pci_device_notify_handler()
433 device_printf(dev, "unknown notify %#x for %s\n", notify, in acpi_pci_device_notify_handler()
456 acpi_pci_attach(device_t dev) in acpi_pci_attach() argument
460 error = pci_attach(dev); in acpi_pci_attach()
463 AcpiInstallNotifyHandler(acpi_get_handle(dev), ACPI_SYSTEM_NOTIFY, in acpi_pci_attach()
464 acpi_pci_bus_notify_handler, dev); in acpi_pci_attach()
465 AcpiWalkNamespace(ACPI_TYPE_DEVICE, acpi_get_handle(dev), 1, in acpi_pci_attach()
466 acpi_pci_install_device_notify_handler, NULL, dev, NULL); in acpi_pci_attach()
488 acpi_pci_detach(device_t dev) in acpi_pci_detach() argument
491 AcpiWalkNamespace(ACPI_TYPE_DEVICE, acpi_get_handle(dev), 1, in acpi_pci_detach()
492 acpi_pci_remove_notify_handler, NULL, dev, NULL); in acpi_pci_detach()
493 AcpiRemoveNotifyHandler(acpi_get_handle(dev), ACPI_SYSTEM_NOTIFY, in acpi_pci_detach()
495 return (pci_detach(dev)); in acpi_pci_detach()