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 --- |