Module Name: src Committed By: jmcneill Date: Sun Feb 2 16:31:25 UTC 2020
Modified Files: src/sys/dev/acpi: acpi_mcfg.c acpi_mcfg.h Log Message: Add acpimcfg_conf_valid helper for pcie controllers with nonstandard config space layouts. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/dev/acpi/acpi_mcfg.c cvs rdiff -u -r1.2 -r1.3 src/sys/dev/acpi/acpi_mcfg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/acpi/acpi_mcfg.c diff -u src/sys/dev/acpi/acpi_mcfg.c:1.17 src/sys/dev/acpi/acpi_mcfg.c:1.18 --- src/sys/dev/acpi/acpi_mcfg.c:1.17 Mon Oct 14 00:15:13 2019 +++ src/sys/dev/acpi/acpi_mcfg.c Sun Feb 2 16:31:25 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_mcfg.c,v 1.17 2019/10/14 00:15:13 jmcneill Exp $ */ +/* $NetBSD: acpi_mcfg.c,v 1.18 2020/02/02 16:31:25 jmcneill Exp $ */ /*- * Copyright (C) 2015 NONAKA Kimihiro <non...@netbsd.org> @@ -28,7 +28,7 @@ #include "opt_pci.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_mcfg.c,v 1.17 2019/10/14 00:15:13 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_mcfg.c,v 1.18 2020/02/02 16:31:25 jmcneill Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -962,3 +962,28 @@ acpimcfg_conf_write(pci_chipset_tag_t pc mcfg_ops->ao_write(seg->ms_bst, mb->bsh[dev][func], reg, data); return 0; } + +bool +acpimcfg_conf_valid(pci_chipset_tag_t pc, pcitag_t tag, int reg) +{ + struct mcfg_segment *seg = NULL; + struct mcfg_bus *mb; + int bus, dev, func; + + if (!mcfg_inited) + return false; + + pci_decompose_tag(pc, tag, &bus, &dev, &func); + + seg = acpimcfg_get_segment(pc, bus); + if (seg == NULL) + return false; + + mb = &seg->ms_bus[bus - seg->ms_bus_start]; + if (!PCIDEV_IS_VALID(mb, dev, func)) + return false; + if (!EXTCONF_IS_VALID(mb, dev, func) && reg >= PCI_CONF_SIZE) + return false; + + return true; +} Index: src/sys/dev/acpi/acpi_mcfg.h diff -u src/sys/dev/acpi/acpi_mcfg.h:1.2 src/sys/dev/acpi/acpi_mcfg.h:1.3 --- src/sys/dev/acpi/acpi_mcfg.h:1.2 Mon Oct 15 10:01:32 2018 +++ src/sys/dev/acpi/acpi_mcfg.h Sun Feb 2 16:31:25 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_mcfg.h,v 1.2 2018/10/15 10:01:32 jmcneill Exp $ */ +/* $NetBSD: acpi_mcfg.h,v 1.3 2020/02/02 16:31:25 jmcneill Exp $ */ /*- * Copyright (C) 2015 NONAKA Kimihiro <non...@netbsd.org> @@ -36,6 +36,7 @@ int acpimcfg_configure_bus(device_t, pci int acpimcfg_conf_read(pci_chipset_tag_t, pcitag_t, int, pcireg_t *); int acpimcfg_conf_write(pci_chipset_tag_t, pcitag_t, int, pcireg_t); +bool acpimcfg_conf_valid(pci_chipset_tag_t, pcitag_t, int); struct acpimcfg_ops { /* validate MCFG memory region */