]> mj.ucw.cz Git - pciutils.git/blobdiff - lib/i386-io-windows.h
libpci: i386-io-windows.h: Skip I/O setup on 16/32-bit non-NT systems
[pciutils.git] / lib / i386-io-windows.h
index 0e282442a792cd0a41a1e0f405f326e28f63ed68..e2492df71a73e6c4f1c1b53f3332065aca928ee9 100644 (file)
@@ -8,9 +8,19 @@
  */
 
 #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)
@@ -26,7 +36,16 @@ intel_setup_io(struct pci_access *a)
   MYPROC InitializeWinIo;
   HMODULE lib;
 
-  intel_iopl_set = 0;
+#ifndef _WIN64
+  /* 16/32-bit non-NT systems allow applications to access PCI I/O ports without any special setup. */
+  OSVERSIONINFOA version;
+  version.dwOSVersionInfoSize = sizeof(version);
+  if (GetVersionExA(&version) && version.dwPlatformId < VER_PLATFORM_WIN32_NT)
+    {
+      a->debug("Detected 16/32-bit non-NT system, skipping NT setup...");
+      return 1;
+    }
+#endif
 
   lib = LoadLibrary("WinIo.dll");
   if (!lib)
@@ -59,3 +78,11 @@ intel_cleanup_io(struct pci_access *a UNUSED)
   //TODO: DeInitializeWinIo!
   return 1;
 }
+
+static inline void intel_io_lock(void)
+{
+}
+
+static inline void intel_io_unlock(void)
+{
+}