From 7129693a264e033c78077b74392f1692f79b6514 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 2 Feb 2002 07:05:52 +0000 Subject: added support for dhahelper git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4475 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libdha/sysdep/AsmMacros_x86.h | 94 +++++++++++++++++++++++++++++++++++++++++++ libdha/sysdep/pci_linux.c | 23 +++++++++++ 2 files changed, 117 insertions(+) (limited to 'libdha/sysdep') 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 +#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 #endif +#include "config.h" + +#ifdef CONFIG_DHAHELPER +#include +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); -- cgit v1.2.3