/*
* The PCI Library -- Initialization and related things
*
- * Copyright (c) 1997--2018 Martin Mares <mj@ucw.cz>
+ * Copyright (c) 1997--2024 Martin Mares <mj@ucw.cz>
*
- * Can be freely distributed and used under the terms of the GNU GPL.
+ * Can be freely distributed and used under the terms of the GNU GPL v2+.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <stdio.h>
NULL,
NULL,
#endif
+#if defined(PCI_HAVE_PM_ECAM)
+ &pm_ecam,
+#else
+ NULL,
+#endif
+#if defined(PCI_HAVE_PM_AOS_EXPANSION)
+ &pm_aos_expansion,
+#else
+ NULL,
+#endif
};
// If PCI_ACCESS_AUTO is selected, we probe the access methods in this order
PCI_ACCESS_WIN32_CFGMGR32,
PCI_ACCESS_WIN32_KLDBG,
PCI_ACCESS_WIN32_SYSDBG,
+ PCI_ACCESS_AOS_EXPANSION,
// Low-level methods poking the hardware directly
+ PCI_ACCESS_ECAM,
PCI_ACCESS_I386_TYPE1,
PCI_ACCESS_I386_TYPE2,
PCI_ACCESS_MMIO_TYPE1_EXT,
pci_set_name_list_path(a, path, 1);
}
}
+
+#elif defined PCI_OS_AMIGAOS
+
+static void
+pci_init_name_list_path(struct pci_access *a)
+{
+ int len = strlen(PCI_PATH_IDS_DIR);
+
+ if (!len)
+ pci_set_name_list_path(a, PCI_IDS, 0);
+ else
+ {
+ char last_char = PCI_PATH_IDS_DIR[len - 1];
+ if (last_char == ':' || last_char == '/') // root or parent char
+ pci_set_name_list_path(a, PCI_PATH_IDS_DIR PCI_IDS, 0);
+ else
+ pci_set_name_list_path(a, PCI_PATH_IDS_DIR "/" PCI_IDS, 0);
+ }
}
#else
#endif
+#ifdef PCI_USE_DNS
+
+static void
+pci_init_dns(struct pci_access *a)
+{
+ pci_define_param(a, "net.domain", PCI_ID_DOMAIN, "DNS domain used for resolving of ID's");
+ a->id_lookup_mode = PCI_LOOKUP_CACHE;
+
+ char *cache_dir = getenv("XDG_CACHE_HOME");
+ if (!cache_dir)
+ cache_dir = "~/.cache";
+
+ int name_len = strlen(cache_dir) + 32;
+ char *cache_name = pci_malloc(NULL, name_len);
+ snprintf(cache_name, name_len, "%s/pci-ids", cache_dir);
+ struct pci_param *param = pci_define_param(a, "net.cache_name", cache_name, "Name of the ID cache file");
+ param->value_malloced = 1;
+}
+
+#endif
+
struct pci_access *
pci_alloc(void)
{
memset(a, 0, sizeof(*a));
pci_init_name_list_path(a);
#ifdef PCI_USE_DNS
- pci_define_param(a, "net.domain", PCI_ID_DOMAIN, "DNS domain used for resolving of ID's");
- pci_define_param(a, "net.cache_name", "~/.pciids-cache", "Name of the ID cache file");
- a->id_lookup_mode = PCI_LOOKUP_CACHE;
+ pci_init_dns(a);
#endif
#ifdef PCI_HAVE_HWDB
pci_define_param(a, "hwdb.disable", "0", "Do not look up names in UDEV's HWDB if non-zero");
void
pci_init_v35(struct pci_access *a)
{
- if (!pci_init_internal(a, 1, -1))
+ if (!pci_init_internal(a, -1))
a->error("Cannot find any working access method.");
}