From 4dd393463a0abd845044309b2495d5365ecde299 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Tue, 12 Feb 2008 08:48:11 +0100 Subject: [PATCH] Moved functions related to initialization and cleanup to init.c. --- lib/Makefile | 3 +- lib/access.c | 177 ----------------------------------------------- lib/init.c | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 194 insertions(+), 178 deletions(-) create mode 100644 lib/init.c diff --git a/lib/Makefile b/lib/Makefile index 87a87fd..6548376 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -3,7 +3,7 @@ include config.mk -OBJS=access.o generic.o dump.o names.o filter.o names-hash.o names-parse.o names-net.o names-cache.o +OBJS=init.o access.o generic.o dump.o names.o filter.o names-hash.o names-parse.o names-net.o names-cache.o INCL=internal.h pci.h config.h header.h sysdep.h types.h PCILIB=libpci.a @@ -61,6 +61,7 @@ $(PCILIBPC): $(PCILIBPC).in -e 's,@VERSION@,$(VERSION),' \ -e 's,@LIBZ@,$(LIBZ),' +init.o: init.c $(INCL) access.o: access.c $(INCL) i386-ports.o: i386-ports.c $(INCL) i386-io-hurd.h i386-io-linux.h i386-io-sunos.h i386-io-windows.h proc.o: proc.c $(INCL) pread.h diff --git a/lib/access.c b/lib/access.c index 01bdc24..d9032a7 100644 --- a/lib/access.c +++ b/lib/access.c @@ -13,183 +13,6 @@ #include "internal.h" -static struct pci_methods *pci_methods[PCI_ACCESS_MAX] = { - NULL, -#ifdef PCI_HAVE_PM_LINUX_SYSFS - &pm_linux_sysfs, -#else - NULL, -#endif -#ifdef PCI_HAVE_PM_LINUX_PROC - &pm_linux_proc, -#else - NULL, -#endif -#ifdef PCI_HAVE_PM_INTEL_CONF - &pm_intel_conf1, - &pm_intel_conf2, -#else - NULL, - NULL, -#endif -#ifdef PCI_HAVE_PM_FBSD_DEVICE - &pm_fbsd_device, -#else - NULL, -#endif -#ifdef PCI_HAVE_PM_AIX_DEVICE - &pm_aix_device, -#else - NULL, -#endif -#ifdef PCI_HAVE_PM_NBSD_LIBPCI - &pm_nbsd_libpci, -#else - NULL, -#endif -#ifdef PCI_HAVE_PM_OBSD_DEVICE - &pm_obsd_device, -#else - NULL, -#endif -#ifdef PCI_HAVE_PM_DUMP - &pm_dump, -#else - NULL, -#endif -}; - -struct pci_access * -pci_alloc(void) -{ - struct pci_access *a = malloc(sizeof(struct pci_access)); - int i; - - memset(a, 0, sizeof(*a)); - pci_set_name_list_path(a, PCI_PATH_IDS_DIR "/" PCI_IDS, 0); - pci_set_net_domain(a, PCI_ID_DOMAIN, 0); - a->id_lookup_mode = PCI_LOOKUP_CACHE; - for(i=0; iconfig) - pci_methods[i]->config(a); - return a; -} - -void * -pci_malloc(struct pci_access *a, int size) -{ - void *x = malloc(size); - - if (!x) - a->error("Out of memory (allocation of %d bytes failed)", size); - return x; -} - -void -pci_mfree(void *x) -{ - if (x) - free(x); -} - -static void -pci_generic_error(char *msg, ...) -{ - va_list args; - - va_start(args, msg); - fputs("pcilib: ", stderr); - vfprintf(stderr, msg, args); - fputc('\n', stderr); - exit(1); -} - -static void -pci_generic_warn(char *msg, ...) -{ - va_list args; - - va_start(args, msg); - fputs("pcilib: ", stderr); - vfprintf(stderr, msg, args); - fputc('\n', stderr); -} - -static void -pci_generic_debug(char *msg, ...) -{ - va_list args; - - va_start(args, msg); - vfprintf(stdout, msg, args); - va_end(args); -} - -static void -pci_null_debug(char *msg UNUSED, ...) -{ -} - -void -pci_init(struct pci_access *a) -{ - if (!a->error) - a->error = pci_generic_error; - if (!a->warning) - a->warning = pci_generic_warn; - if (!a->debug) - a->debug = pci_generic_debug; - if (!a->debugging) - a->debug = pci_null_debug; - - if (a->method) - { - if (a->method >= PCI_ACCESS_MAX || !pci_methods[a->method]) - a->error("This access method is not supported."); - a->methods = pci_methods[a->method]; - } - else - { - unsigned int i; - for(i=0; idebug("Trying method %d...", i); - if (pci_methods[i]->detect(a)) - { - a->debug("...OK\n"); - a->methods = pci_methods[i]; - a->method = i; - break; - } - a->debug("...No.\n"); - } - if (!a->methods) - a->error("Cannot find any working access method."); - } - a->debug("Decided to use %s\n", a->methods->name); - a->methods->init(a); -} - -void -pci_cleanup(struct pci_access *a) -{ - struct pci_dev *d, *e; - - for(d=a->devices; d; d=e) - { - e = d->next; - pci_free_dev(d); - } - if (a->methods) - a->methods->cleanup(a); - pci_free_name_list(a); - pci_set_name_list_path(a, NULL, 0); - pci_set_net_domain(a, NULL, 0); - pci_set_id_cache(a, NULL, 0); - pci_mfree(a); -} - void pci_scan_bus(struct pci_access *a) { diff --git a/lib/init.c b/lib/init.c new file mode 100644 index 0000000..6366762 --- /dev/null +++ b/lib/init.c @@ -0,0 +1,192 @@ +/* + * The PCI Library -- Initialization and related things + * + * Copyright (c) 1997--2008 Martin Mares + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#include +#include +#include +#include + +#include "internal.h" + +static struct pci_methods *pci_methods[PCI_ACCESS_MAX] = { + NULL, +#ifdef PCI_HAVE_PM_LINUX_SYSFS + &pm_linux_sysfs, +#else + NULL, +#endif +#ifdef PCI_HAVE_PM_LINUX_PROC + &pm_linux_proc, +#else + NULL, +#endif +#ifdef PCI_HAVE_PM_INTEL_CONF + &pm_intel_conf1, + &pm_intel_conf2, +#else + NULL, + NULL, +#endif +#ifdef PCI_HAVE_PM_FBSD_DEVICE + &pm_fbsd_device, +#else + NULL, +#endif +#ifdef PCI_HAVE_PM_AIX_DEVICE + &pm_aix_device, +#else + NULL, +#endif +#ifdef PCI_HAVE_PM_NBSD_LIBPCI + &pm_nbsd_libpci, +#else + NULL, +#endif +#ifdef PCI_HAVE_PM_OBSD_DEVICE + &pm_obsd_device, +#else + NULL, +#endif +#ifdef PCI_HAVE_PM_DUMP + &pm_dump, +#else + NULL, +#endif +}; + +struct pci_access * +pci_alloc(void) +{ + struct pci_access *a = malloc(sizeof(struct pci_access)); + int i; + + memset(a, 0, sizeof(*a)); + pci_set_name_list_path(a, PCI_PATH_IDS_DIR "/" PCI_IDS, 0); + pci_set_net_domain(a, PCI_ID_DOMAIN, 0); + a->id_lookup_mode = PCI_LOOKUP_CACHE; + for(i=0; iconfig) + pci_methods[i]->config(a); + return a; +} + +void * +pci_malloc(struct pci_access *a, int size) +{ + void *x = malloc(size); + + if (!x) + a->error("Out of memory (allocation of %d bytes failed)", size); + return x; +} + +void +pci_mfree(void *x) +{ + if (x) + free(x); +} + +static void +pci_generic_error(char *msg, ...) +{ + va_list args; + + va_start(args, msg); + fputs("pcilib: ", stderr); + vfprintf(stderr, msg, args); + fputc('\n', stderr); + exit(1); +} + +static void +pci_generic_warn(char *msg, ...) +{ + va_list args; + + va_start(args, msg); + fputs("pcilib: ", stderr); + vfprintf(stderr, msg, args); + fputc('\n', stderr); +} + +static void +pci_generic_debug(char *msg, ...) +{ + va_list args; + + va_start(args, msg); + vfprintf(stdout, msg, args); + va_end(args); +} + +static void +pci_null_debug(char *msg UNUSED, ...) +{ +} + +void +pci_init(struct pci_access *a) +{ + if (!a->error) + a->error = pci_generic_error; + if (!a->warning) + a->warning = pci_generic_warn; + if (!a->debug) + a->debug = pci_generic_debug; + if (!a->debugging) + a->debug = pci_null_debug; + + if (a->method) + { + if (a->method >= PCI_ACCESS_MAX || !pci_methods[a->method]) + a->error("This access method is not supported."); + a->methods = pci_methods[a->method]; + } + else + { + unsigned int i; + for(i=0; idebug("Trying method %d...", i); + if (pci_methods[i]->detect(a)) + { + a->debug("...OK\n"); + a->methods = pci_methods[i]; + a->method = i; + break; + } + a->debug("...No.\n"); + } + if (!a->methods) + a->error("Cannot find any working access method."); + } + a->debug("Decided to use %s\n", a->methods->name); + a->methods->init(a); +} + +void +pci_cleanup(struct pci_access *a) +{ + struct pci_dev *d, *e; + + for(d=a->devices; d; d=e) + { + e = d->next; + pci_free_dev(d); + } + if (a->methods) + a->methods->cleanup(a); + pci_free_name_list(a); + pci_set_name_list_path(a, NULL, 0); + pci_set_net_domain(a, NULL, 0); + pci_set_id_cache(a, NULL, 0); + pci_mfree(a); +} + -- 2.39.2