summaryrefslogtreecommitdiffstats
path: root/libdha/sysdep/pci_os2.c
diff options
context:
space:
mode:
authornick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-15 08:33:09 +0000
committernick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-15 08:33:09 +0000
commit5f3109cf1215c57e1dcada1fb27182240d01c79b (patch)
tree2a95aa1d83190202c9b3e0bf988080251bcb8645 /libdha/sysdep/pci_os2.c
parent798a238afabbd6238469028da2109bd5d739a618 (diff)
downloadmpv-5f3109cf1215c57e1dcada1fb27182240d01c79b.tar.bz2
mpv-5f3109cf1215c57e1dcada1fb27182240d01c79b.tar.xz
Improved readability and new stuffs
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4165 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libdha/sysdep/pci_os2.c')
-rw-r--r--libdha/sysdep/pci_os2.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/libdha/sysdep/pci_os2.c b/libdha/sysdep/pci_os2.c
new file mode 100644
index 0000000000..4f0df53b30
--- /dev/null
+++ b/libdha/sysdep/pci_os2.c
@@ -0,0 +1,53 @@
+/*
+ This file is based on:
+ $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.c,v 3.34.2.17 1998/11/10 11:55:40 dawes Exp $
+ Modified for readability by Nick Kurshev
+*/
+#define INCL_DOSFILEMGR
+#include <os2.h>
+
+static USHORT callgate[3] = {0,0,0};
+
+static __inline__ void enable_os_io(void)
+{
+ HFILE hfd;
+ ULONG dlen,action;
+ APIRET rc;
+ static char *ioDrvPath = "/dev/fastio$";
+
+ if (DosOpen((PSZ)ioDrvPath, (PHFILE)&hfd, (PULONG)&action,
+ (ULONG)0, FILE_SYSTEM, FILE_OPEN,
+ OPEN_SHARE_DENYNONE|OPEN_FLAGS_NOINHERIT|OPEN_ACCESS_READONLY,
+ (ULONG)0) != 0) {
+ fprintf(stderr,"Error opening fastio$ driver...\n");
+ fprintf(stderr,"Please install xf86sup.sys in config.sys!\n");
+ exit(42);
+ }
+ callgate[0] = callgate[1] = 0;
+
+/* Get callgate from driver for fast io to ports and other stuff */
+
+ rc = DosDevIOCtl(hfd, (ULONG)0x76, (ULONG)0x64,
+ NULL, 0, NULL,
+ (ULONG*)&callgate[2], sizeof(USHORT), &dlen);
+ if (rc) {
+ fprintf(stderr,"xf86-OS/2: EnableIOPorts failed, rc=%d, dlen=%d; emergency exit\n",
+ rc,dlen);
+ DosClose(hfd);
+ exit(42);
+ }
+
+/* Calling callgate with function 13 sets IOPL for the program */
+
+ asm volatile ("movl $13,%%ebx;.byte 0xff,0x1d;.long _callgate"
+ : /*no outputs */
+ : /*no inputs */
+ : "eax","ebx","ecx","edx","cc");
+
+ DosClose(hfd);
+}
+
+static __inline__ void disable_os_io(void)
+{
+/* Nothing to do */
+}