Lines Matching full:root
3 * pci_root.c - ACPI PCI Root Bridge Driver ($Revision: 40 $)
26 #define ACPI_PCI_ROOT_DEVICE_NAME "PCI Root Bridge"
60 * acpi_is_root_bridge - determine whether an ACPI CA node is a PCI root bridge
144 static void decode_osc_bits(struct acpi_pci_root *root, char *msg, u32 word, in decode_osc_bits() argument
157 dev_info(&root->device->dev, "_OSC: %s [%s]\n", msg, buf); in decode_osc_bits()
160 static void decode_osc_support(struct acpi_pci_root *root, char *msg, u32 word) in decode_osc_support() argument
162 decode_osc_bits(root, msg, word, pci_osc_support_bit, in decode_osc_support()
166 static void decode_osc_control(struct acpi_pci_root *root, char *msg, u32 word) in decode_osc_control() argument
168 decode_osc_bits(root, msg, word, pci_osc_control_bit, in decode_osc_control()
193 static acpi_status acpi_pci_query_osc(struct acpi_pci_root *root, in acpi_pci_query_osc() argument
201 support |= root->osc_support_set; in acpi_pci_query_osc()
207 capbuf[OSC_CONTROL_DWORD] = *control | root->osc_control_set; in acpi_pci_query_osc()
210 capbuf[OSC_CONTROL_DWORD] = root->osc_control_set; in acpi_pci_query_osc()
213 status = acpi_pci_run_osc(root->device->handle, capbuf, &result); in acpi_pci_query_osc()
215 root->osc_support_set = support; in acpi_pci_query_osc()
222 static acpi_status acpi_pci_osc_support(struct acpi_pci_root *root, u32 flags) in acpi_pci_osc_support() argument
227 status = acpi_pci_query_osc(root, flags, NULL); in acpi_pci_osc_support()
234 struct acpi_pci_root *root; in acpi_pci_find_root() local
241 root = acpi_driver_data(device); in acpi_pci_find_root()
243 return root; in acpi_pci_find_root()
273 struct acpi_pci_root *root; in acpi_get_pci_dev() local
277 * Walk up the ACPI CA namespace until we reach a PCI root bridge. in acpi_get_pci_dev()
294 root = acpi_pci_find_root(phandle); in acpi_get_pci_dev()
295 if (!root) in acpi_get_pci_dev()
298 pbus = root->bus; in acpi_get_pci_dev()
302 * original handle. Assumes that everything between the PCI root in acpi_get_pci_dev()
340 * acpi_pci_osc_control_set - Request control of PCI root _OSC features.
341 * @handle: ACPI handle of a PCI root bridge (or PCIe Root Complex).
356 struct acpi_pci_root *root; in acpi_pci_osc_control_set() local
367 root = acpi_pci_find_root(handle); in acpi_pci_osc_control_set()
368 if (!root) in acpi_pci_osc_control_set()
373 *mask = ctrl | root->osc_control_set; in acpi_pci_osc_control_set()
375 if ((root->osc_control_set & ctrl) == ctrl) in acpi_pci_osc_control_set()
380 status = acpi_pci_query_osc(root, root->osc_support_set, mask); in acpi_pci_osc_control_set()
385 decode_osc_control(root, "platform does not support", in acpi_pci_osc_control_set()
391 decode_osc_control(root, "not requesting control; platform does not support", in acpi_pci_osc_control_set()
398 capbuf[OSC_SUPPORT_DWORD] = root->osc_support_set; in acpi_pci_osc_control_set()
402 root->osc_control_set = *mask; in acpi_pci_osc_control_set()
409 static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm, in negotiate_os_control() argument
414 struct acpi_device *device = root->device; in negotiate_os_control()
423 root->osc_control_set = ~OSC_PCI_EXPRESS_PME_CONTROL; in negotiate_os_control()
424 decode_osc_control(root, "OS assumes control of", in negotiate_os_control()
425 root->osc_control_set); in negotiate_os_control()
444 decode_osc_support(root, "OS supports", support); in negotiate_os_control()
445 status = acpi_pci_osc_support(root, support); in negotiate_os_control()
465 decode_osc_support(root, "not requesting OS control; OS requires", in negotiate_os_control()
498 decode_osc_control(root, "OS now controls", control); in negotiate_os_control()
509 decode_osc_control(root, "OS requested", requested); in negotiate_os_control()
510 decode_osc_control(root, "platform willing to grant", control); in negotiate_os_control()
519 * root scan. in negotiate_os_control()
531 struct acpi_pci_root *root; in acpi_pci_root_add() local
537 root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL); in acpi_pci_root_add()
538 if (!root) in acpi_pci_root_add()
551 root->secondary.flags = IORESOURCE_BUS; in acpi_pci_root_add()
552 status = try_get_root_bridge_busnr(handle, &root->secondary); in acpi_pci_root_add()
560 root->secondary.end = 0xFF; in acpi_pci_root_add()
566 root->secondary.start = bus; in acpi_pci_root_add()
568 root->secondary.start = 0; in acpi_pci_root_add()
576 root->device = device; in acpi_pci_root_add()
577 root->segment = segment & 0xFFFF; in acpi_pci_root_add()
580 device->driver_data = root; in acpi_pci_root_add()
589 root->segment, &root->secondary); in acpi_pci_root_add()
591 root->mcfg_addr = acpi_pci_root_get_mcfg_addr(handle); in acpi_pci_root_add()
594 negotiate_os_control(root, &no_aspm, is_pcie); in acpi_pci_root_add()
601 * Scan the Root Bridge in acpi_pci_root_add()
603 * Must do this prior to any attempt to bind the root device, as the in acpi_pci_root_add()
605 * thus the root bridge's pci_dev does not exist). in acpi_pci_root_add()
607 root->bus = pci_acpi_scan_root(root); in acpi_pci_root_add()
608 if (!root->bus) { in acpi_pci_root_add()
611 root->segment, (unsigned int)root->secondary.start); in acpi_pci_root_add()
621 device_set_wakeup_capable(root->bus->bridge, device->wakeup.flags.valid); in acpi_pci_root_add()
624 pcibios_resource_survey_bus(root->bus); in acpi_pci_root_add()
625 pci_assign_unassigned_root_bus_resources(root->bus); in acpi_pci_root_add()
636 acpi_ioapic_add(root->device->handle); in acpi_pci_root_add()
640 pci_bus_add_devices(root->bus); in acpi_pci_root_add()
648 kfree(root); in acpi_pci_root_add()
654 struct acpi_pci_root *root = acpi_driver_data(device); in acpi_pci_root_remove() local
658 pci_stop_root_bus(root->bus); in acpi_pci_root_remove()
660 pci_ioapic_remove(root); in acpi_pci_root_remove()
661 device_set_wakeup_capable(root->bus->bridge, false); in acpi_pci_root_remove()
664 pci_remove_root_bus(root->bus); in acpi_pci_root_remove()
665 WARN_ON(acpi_ioapic_remove(root)); in acpi_pci_root_remove()
671 kfree(root); in acpi_pci_root_remove()
684 struct resource *res1, *res2, *root = NULL; in acpi_pci_root_validate_resources() local
688 root = (type & IORESOURCE_MEM) ? &iomem_resource : &ioport_resource; in acpi_pci_root_validate_resources()
700 end = min(res1->end, root->end); in acpi_pci_root_validate_resources()
814 struct resource *res, *conflict, *root = NULL; in pci_acpi_root_add_resources() local
819 root = &iomem_resource; in pci_acpi_root_add_resources()
821 root = &ioport_resource; in pci_acpi_root_add_resources()
829 if (res == root) in pci_acpi_root_add_resources()
832 conflict = insert_resource_conflict(root, res); in pci_acpi_root_add_resources()
877 struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root, in acpi_pci_root_create() argument
882 int ret, busnum = root->secondary.start; in acpi_pci_root_create()
883 struct acpi_device *device = root->device; in acpi_pci_root_create()
889 info->root = root; in acpi_pci_root_create()
894 root->segment, busnum); in acpi_pci_root_create()
906 pci_add_resource(&info->resources, &root->secondary); in acpi_pci_root_create()
913 if (!(root->osc_control_set & OSC_PCI_EXPRESS_NATIVE_HP_CONTROL)) in acpi_pci_root_create()
915 if (!(root->osc_control_set & OSC_PCI_SHPC_NATIVE_HP_CONTROL)) in acpi_pci_root_create()
917 if (!(root->osc_control_set & OSC_PCI_EXPRESS_AER_CONTROL)) in acpi_pci_root_create()
919 if (!(root->osc_control_set & OSC_PCI_EXPRESS_PME_CONTROL)) in acpi_pci_root_create()
921 if (!(root->osc_control_set & OSC_PCI_EXPRESS_LTR_CONTROL)) in acpi_pci_root_create()
923 if (!(root->osc_control_set & OSC_PCI_EXPRESS_DPC_CONTROL)) in acpi_pci_root_create()