diff options
author | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-02-02 07:05:52 +0000 |
---|---|---|
committer | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-02-02 07:05:52 +0000 |
commit | 7129693a264e033c78077b74392f1692f79b6514 (patch) | |
tree | c544b8a574459f5f107928aba58a56eec9af2b65 /libdha/sysdep | |
parent | 127e0ba19184e5746fa4941dc6987dba98c2af94 (diff) |
added support for dhahelper
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4475 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libdha/sysdep')
-rw-r--r-- | libdha/sysdep/AsmMacros_x86.h | 94 | ||||
-rw-r--r-- | libdha/sysdep/pci_linux.c | 23 |
2 files changed, 117 insertions, 0 deletions
diff --git a/libdha/sysdep/AsmMacros_x86.h b/libdha/sysdep/AsmMacros_x86.h index 9b9719c17a..c10f24f2dd 100644 --- a/libdha/sysdep/AsmMacros_x86.h +++ b/libdha/sysdep/AsmMacros_x86.h @@ -11,24 +11,92 @@ #error This stuff is not ported on your system #else +#include "config.h" + +#ifdef CONFIG_DHAHELPER +#include <sys/ioctl.h> +#include "../kernelhelper/dhahelper.h" + +extern int dhahelper_fd; +extern int dhahelper_initialized; +#endif + static __inline__ void outb(short port,char val) { +#ifdef CONFIG_DHAHELPER + if (dhahelper_initialized == 1) + { + dhahelper_port_t _port; + + _port.operation = PORT_OP_WRITE; + _port.addr = port; + _port.size = 1; + _port.value = val; + if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) + return; + } + else +#endif __asm__ __volatile__("outb %0,%1" : :"a" (val), "d" (port)); + return; } static __inline__ void outw(short port,short val) { +#ifdef CONFIG_DHAHELPER + if (dhahelper_initialized == 1) + { + dhahelper_port_t _port; + + _port.operation = PORT_OP_WRITE; + _port.addr = port; + _port.size = 2; + _port.value = val; + if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) + return; + } + else +#endif __asm__ __volatile__("outw %0,%1" : :"a" (val), "d" (port)); + return; } static __inline__ void outl(short port,unsigned int val) { +#ifdef CONFIG_DHAHELPER + if (dhahelper_initialized == 1) + { + dhahelper_port_t _port; + + _port.operation = PORT_OP_WRITE; + _port.addr = port; + _port.size = 4; + _port.value = val; + if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) + return; + } + else +#endif __asm__ __volatile__("outl %0,%1" : :"a" (val), "d" (port)); + return; } static __inline__ unsigned int inb(short port) { unsigned char ret; +#ifdef CONFIG_DHAHELPER + if (dhahelper_initialized == 1) + { + dhahelper_port_t _port; + + _port.operation = PORT_OP_READ; + _port.addr = port; + _port.size = 1; + if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) + return _port.value; + } + else +#endif __asm__ __volatile__("inb %1,%0" : "=a" (ret) : "d" (port)); @@ -38,6 +106,19 @@ static __inline__ unsigned int inb(short port) static __inline__ unsigned int inw(short port) { unsigned short ret; +#ifdef CONFIG_DHAHELPER + if (dhahelper_initialized == 1) + { + dhahelper_port_t _port; + + _port.operation = PORT_OP_READ; + _port.addr = port; + _port.size = 2; + if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) + return _port.value; + } + else +#endif __asm__ __volatile__("inw %1,%0" : "=a" (ret) : "d" (port)); @@ -47,6 +128,19 @@ static __inline__ unsigned int inw(short port) static __inline__ unsigned int inl(short port) { unsigned int ret; +#ifdef CONFIG_DHAHELPER + if (dhahelper_initialized == 1) + { + dhahelper_port_t _port; + + _port.operation = PORT_OP_READ; + _port.addr = port; + _port.size = 4; + if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) + return _port.value; + } + else +#endif __asm__ __volatile__("inl %1,%0" : "=a" (ret) : "d" (port)); diff --git a/libdha/sysdep/pci_linux.c b/libdha/sysdep/pci_linux.c index f4b46990a4..9382ebf2dc 100644 --- a/libdha/sysdep/pci_linux.c +++ b/libdha/sysdep/pci_linux.c @@ -10,8 +10,26 @@ #include <sys/io.h> #endif +#include "config.h" + +#ifdef CONFIG_DHAHELPER +#include <fcntl.h> +int dhahelper_initialized = 0; +int dhahelper_fd = 0; +#endif + static __inline__ int enable_os_io(void) { +#ifdef CONFIG_DHAHELPER + dhahelper_fd = open("/dev/dhahelper", O_RDWR); + if (dhahelper_fd > 0) + { + dhahelper_initialized = 1; + return(0); + } + dhahelper_initialized = -1; +#endif + if (iopl(3) != 0) return(errno); return(0); @@ -19,6 +37,11 @@ static __inline__ int enable_os_io(void) static __inline__ int disable_os_io(void) { +#ifdef CONFIG_DHAHELPER + if (dhahelper_initialized == 1) + close(dhahelper_fd); + else +#endif if (iopl(0) != 0) return(errno); return(0); |