mmconfig-shared.c (09821ff1d50a1ecade182c2a68a90f835e257eef) mmconfig-shared.c (81b3e090fa1f237d49c8feb2fa4afe2aabd3a4ff)
1/*
2 * mmconfig-shared.c - Low-level direct PCI config space access via
3 * MMCONFIG - common code between i386 and x86-64.
4 *
5 * This code does:
6 * - known chipset handling
7 * - ACPI decoding and validation
8 *

--- 409 unchanged lines hidden (view full) ---

418 check_mcfg_resource, context);
419
420 if (mcfg_res->flags)
421 return AE_CTRL_TERMINATE;
422
423 return AE_OK;
424}
425
1/*
2 * mmconfig-shared.c - Low-level direct PCI config space access via
3 * MMCONFIG - common code between i386 and x86-64.
4 *
5 * This code does:
6 * - known chipset handling
7 * - ACPI decoding and validation
8 *

--- 409 unchanged lines hidden (view full) ---

418 check_mcfg_resource, context);
419
420 if (mcfg_res->flags)
421 return AE_CTRL_TERMINATE;
422
423 return AE_OK;
424}
425
426static int is_acpi_reserved(u64 start, u64 end, unsigned not_used)
426static bool is_acpi_reserved(u64 start, u64 end, unsigned not_used)
427{
428 struct resource mcfg_res;
429
430 mcfg_res.start = start;
431 mcfg_res.end = end - 1;
432 mcfg_res.flags = 0;
433
434 acpi_get_devices("PNP0C01", find_mboard_resource, &mcfg_res, NULL);
435
436 if (!mcfg_res.flags)
437 acpi_get_devices("PNP0C02", find_mboard_resource, &mcfg_res,
438 NULL);
439
440 return mcfg_res.flags;
441}
442
427{
428 struct resource mcfg_res;
429
430 mcfg_res.start = start;
431 mcfg_res.end = end - 1;
432 mcfg_res.flags = 0;
433
434 acpi_get_devices("PNP0C01", find_mboard_resource, &mcfg_res, NULL);
435
436 if (!mcfg_res.flags)
437 acpi_get_devices("PNP0C02", find_mboard_resource, &mcfg_res,
438 NULL);
439
440 return mcfg_res.flags;
441}
442
443typedef int (*check_reserved_t)(u64 start, u64 end, unsigned type);
443typedef bool (*check_reserved_t)(u64 start, u64 end, unsigned type);
444
444
445static int __ref is_mmconf_reserved(check_reserved_t is_reserved,
446 struct pci_mmcfg_region *cfg,
447 struct device *dev, int with_e820)
445static bool __ref is_mmconf_reserved(check_reserved_t is_reserved,
446 struct pci_mmcfg_region *cfg,
447 struct device *dev, int with_e820)
448{
449 u64 addr = cfg->res.start;
450 u64 size = resource_size(&cfg->res);
451 u64 old_size = size;
452 int num_buses;
453 char *method = with_e820 ? "E820" : "ACPI motherboard resources";
454
455 while (!is_reserved(addr, addr + size, E820_TYPE_RESERVED)) {

--- 33 unchanged lines hidden (view full) ---

489 "at %pR (base %#lx) (size reduced!)\n",
490 cfg->segment, cfg->start_bus, cfg->end_bus,
491 &cfg->res, (unsigned long) cfg->address);
492 }
493
494 return 1;
495}
496
448{
449 u64 addr = cfg->res.start;
450 u64 size = resource_size(&cfg->res);
451 u64 old_size = size;
452 int num_buses;
453 char *method = with_e820 ? "E820" : "ACPI motherboard resources";
454
455 while (!is_reserved(addr, addr + size, E820_TYPE_RESERVED)) {

--- 33 unchanged lines hidden (view full) ---

489 "at %pR (base %#lx) (size reduced!)\n",
490 cfg->segment, cfg->start_bus, cfg->end_bus,
491 &cfg->res, (unsigned long) cfg->address);
492 }
493
494 return 1;
495}
496
497static int __ref pci_mmcfg_check_reserved(struct device *dev,
498 struct pci_mmcfg_region *cfg, int early)
497static bool __ref
498pci_mmcfg_check_reserved(struct device *dev, struct pci_mmcfg_region *cfg, int early)
499{
500 if (!early && !acpi_disabled) {
501 if (is_mmconf_reserved(is_acpi_reserved, cfg, dev, 0))
502 return 1;
503
504 if (dev)
505 dev_info(dev, FW_INFO
506 "MMCONFIG at %pR not reserved in "

--- 312 unchanged lines hidden ---
499{
500 if (!early && !acpi_disabled) {
501 if (is_mmconf_reserved(is_acpi_reserved, cfg, dev, 0))
502 return 1;
503
504 if (dev)
505 dev_info(dev, FW_INFO
506 "MMCONFIG at %pR not reserved in "

--- 312 unchanged lines hidden ---