* The PCI Library -- Access to i386 I/O ports on Windows
*
* Copyright (c) 2004 Alexander Stock <stock.alexander@gmx.de>
+ * Copyright (c) 2006 Martin Mares <mj@ucw.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#include <io.h>
-#include <conio.h>
#include <windows.h>
+#ifndef __GNUC__
+#include <conio.h>
+#else
+int _outp(unsigned short port, int databyte);
+unsigned short _outpw(unsigned short port, unsigned short dataword);
+unsigned long _outpd(unsigned short port, unsigned long dataword);
+int _inp(unsigned short port);
+unsigned short _inpw(unsigned short port);
+unsigned long _inpd(unsigned short port);
+#endif
+
#define outb(x,y) _outp(y,x)
#define outw(x,y) _outpw(y,x)
#define outl(x,y) _outpd(y,x)
#define inw(x) _inpw(x)
#define inl(x) _inpd(x)
-static int intel_iopl_set = -1;
-
static int
-intel_setup_io(void)
+intel_setup_io(struct pci_access *a)
{
- if (intel_iopl_set < 0)
+ typedef int (*MYPROC)(void);
+ MYPROC InitializeWinIo;
+ HMODULE lib;
+
+ lib = LoadLibrary("WinIo.dll");
+ if (!lib)
{
- typedef int (*MYPROC)(void);
- MYPROC InitializeWinIo;
- HMODULE lib;
+ a->warning("i386-io-windows: Couldn't load WinIo.dll.");
+ return 0;
+ }
+ /* XXX: Is this really needed? --mj */
+ GetProcAddress(lib, "InitializeWinIo");
- intel_iopl_set = 0;
+ InitializeWinIo = (MYPROC) GetProcAddress(lib, "InitializeWinIo");
+ if (!InitializeWinIo)
+ {
+ a->warning("i386-io-windows: Couldn't find InitializeWinIo function.");
+ return 0;
+ }
- lib = LoadLibrary("WinIo.dll");
- if (!lib)
- {
- fprintf(stderr, "libpci: Couldn't load WinIo.dll.\n");
- return 0;
- }
- /* XXX: Is this really needed? --mj */
- GetProcAddress(lib, "InitializeWinIo");
+ if (!InitializeWinIo())
+ {
+ a->warning("i386-io-windows: InitializeWinIo() failed.");
+ return 0;
+ }
- InitializeWinIo = (MYPROC) GetProcAddress(lib, "InitializeWinIo");
- if (!InitializeWinIo)
- {
- fprintf(stderr, "libpci: Couldn't find InitializeWinIo function.\n");
- return 0;
- }
+ return 1;
+}
- if (!InitializeWinIo())
- {
- fprintf(stderr, "libpci: InitializeWinIo() failed.\n");
- return 0;
- }
+static inline int
+intel_cleanup_io(struct pci_access *a UNUSED)
+{
+ //TODO: DeInitializeWinIo!
+ return 1;
+}
- intel_iopl_set = 1;
- }
- return intel_iopl_set;
+static inline void intel_io_lock(void)
+{
}
-static inline void
-intel_cleanup_io(void)
+static inline void intel_io_unlock(void)
{
- //TODO: DeInitializeWinIo!
- //intel_iopl_set = -1;
}