From d305d70445ca10684c68c5f68474458742326ca7 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sun, 30 Jul 2006 13:23:01 +0200 Subject: [PATCH] i386-*: Cleaned up printing of initialization errors. --- ChangeLog | 4 ++++ lib/i386-io-hurd.h | 12 ++++++------ lib/i386-io-linux.h | 4 ++-- lib/i386-io-sunos.h | 4 ++-- lib/i386-io-windows.h | 11 ++++++----- lib/i386-ports.c | 12 ++++++------ 6 files changed, 26 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3cc1575..4259e28 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2006-07-30 Martin Mares + * lib/i386-ports.c, lib/i386-io-*: Report failures during port access + initialization by a->warn() instead of calling printf() or perror() + directly. + * lib/i386-ports.c, lib/i386-io-*: Moved the logic which keeps track of the port access state to generic code. diff --git a/lib/i386-io-hurd.h b/lib/i386-io-hurd.h index 2866b35..99db104 100644 --- a/lib/i386-io-hurd.h +++ b/lib/i386-io-hurd.h @@ -20,29 +20,29 @@ static mach_port_t io_port; static inline int -intel_setup_io(void) +intel_setup_io(struct pci_access *a) { mach_port_t device; if ((errno = get_privileged_ports(NULL, &device))) - perror("intel_setup_io() can't get_privileged_ports()"); + a->warn("i386-io-hurd: Can't get_privileged_ports(): %m"); if (!errno && (errno = device_open(device, D_READ | D_WRITE, "io", &io_port))) - perror("intel_setup_io() can't device_open()"); + a->warn("i386-io-hurd: Can't device_open(): %m"); mach_port_deallocate(mach_task_self(), device); if (!errno && (errno = i386_io_port_add(mach_thread_self(), io_port))) - perror("intel_setup_io() can't i386_io_port_add()"); + a->warn("i386-io-hurd: Can't i386_io_port_add(): %m"); return errno ? 0 : 1; } static inline int -intel_cleanup_io(void) +intel_cleanup_io(struct pci_access *a) { if ((errno = i386_io_port_remove(mach_thread_self(), io_port))) - perror("intel_cleanup_io() can't i386_io_port_remove()"); + a->warn("i386-io-hurd: Can't i386_io_port_remove(): %m"); mach_port_deallocate(mach_task_self(), io_port); diff --git a/lib/i386-io-linux.h b/lib/i386-io-linux.h index e697471..672897f 100644 --- a/lib/i386-io-linux.h +++ b/lib/i386-io-linux.h @@ -13,13 +13,13 @@ #endif static int -intel_setup_io(void) +intel_setup_io(struct pci_access *a UNUSED) { return (iopl(3) < 0) ? 0 : 1; } static inline int -intel_cleanup_io(void) +intel_cleanup_io(struct pci_access *a UNUSED) { iopl(3); return -1; diff --git a/lib/i386-io-sunos.h b/lib/i386-io-sunos.h index 753e2ea..3e08e73 100644 --- a/lib/i386-io-sunos.h +++ b/lib/i386-io-sunos.h @@ -11,13 +11,13 @@ #include static int -intel_setup_io(void) +intel_setup_io(struct pci_access *a UNUSED) { return (sysi86(SI86V86, V86SC_IOPL, PS_IOPL) < 0) ? 0 : 1; } static inline int -intel_cleanup_io(void) +intel_cleanup_io(struct pci_access *a UNUSED) { /* FIXME: How to switch off I/O port access? */ return 1; diff --git a/lib/i386-io-windows.h b/lib/i386-io-windows.h index f8b896d..0e28244 100644 --- a/lib/i386-io-windows.h +++ b/lib/i386-io-windows.h @@ -2,6 +2,7 @@ * The PCI Library -- Access to i386 I/O ports on Windows * * Copyright (c) 2004 Alexander Stock + * Copyright (c) 2006 Martin Mares * * Can be freely distributed and used under the terms of the GNU GPL. */ @@ -19,7 +20,7 @@ #define inl(x) _inpd(x) static int -intel_setup_io(void) +intel_setup_io(struct pci_access *a) { typedef int (*MYPROC)(void); MYPROC InitializeWinIo; @@ -30,7 +31,7 @@ intel_setup_io(void) lib = LoadLibrary("WinIo.dll"); if (!lib) { - fprintf(stderr, "libpci: Couldn't load WinIo.dll.\n"); + a->warning("i386-io-windows: Couldn't load WinIo.dll."); return 0; } /* XXX: Is this really needed? --mj */ @@ -39,13 +40,13 @@ intel_setup_io(void) InitializeWinIo = (MYPROC) GetProcAddress(lib, "InitializeWinIo"); if (!InitializeWinIo) { - fprintf(stderr, "libpci: Couldn't find InitializeWinIo function.\n"); + a->warning("i386-io-windows: Couldn't find InitializeWinIo function."); return 0; } if (!InitializeWinIo()) { - fprintf(stderr, "libpci: InitializeWinIo() failed.\n"); + a->warning("i386-io-windows: InitializeWinIo() failed."); return 0; } @@ -53,7 +54,7 @@ intel_setup_io(void) } static inline int -intel_cleanup_io(void) +intel_cleanup_io(struct pci_access *a UNUSED) { //TODO: DeInitializeWinIo! return 1; diff --git a/lib/i386-ports.c b/lib/i386-ports.c index d491ad6..4b51c88 100644 --- a/lib/i386-ports.c +++ b/lib/i386-ports.c @@ -27,17 +27,17 @@ static int conf12_io_enabled = -1; /* -1=haven't tried, 0=failed, 1=succeeded */ static int -conf12_setup_io(void) +conf12_setup_io(struct pci_access *a) { if (conf12_io_enabled < 0) - conf12_io_enabled = intel_setup_io(); + conf12_io_enabled = intel_setup_io(a); return conf12_io_enabled; } static void conf12_init(struct pci_access *a) { - if (!conf12_setup_io()) + if (!conf12_setup_io(a)) a->error("No permission to access I/O ports (you probably have to be root)."); } @@ -45,7 +45,7 @@ static void conf12_cleanup(struct pci_access *a UNUSED) { if (conf12_io_enabled > 0) - conf12_io_enabled = intel_cleanup_io(); + conf12_io_enabled = intel_cleanup_io(a); } /* @@ -95,7 +95,7 @@ conf1_detect(struct pci_access *a) unsigned int tmp; int res = 0; - if (!conf12_setup_io()) + if (!conf12_setup_io(a)) { a->debug("...no I/O permission"); return 0; @@ -172,7 +172,7 @@ conf1_write(struct pci_dev *d, int pos, byte *buf, int len) static int conf2_detect(struct pci_access *a) { - if (!conf12_setup_io()) + if (!conf12_setup_io(a)) { a->debug("...no I/O permission"); return 0; -- 2.39.2