Mercurial > mplayer.hg
diff vidix/sysdep/AsmMacros_x86.h @ 22900:a9e111b88c4a
merged libdha and libvidix, moved all files from libdha to vidix directory
author | ben |
---|---|
date | Fri, 06 Apr 2007 15:20:49 +0000 |
parents | libdha/sysdep/AsmMacros_x86.h@62705b2298ff |
children | 88bed2131f19 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vidix/sysdep/AsmMacros_x86.h Fri Apr 06 15:20:49 2007 +0000 @@ -0,0 +1,293 @@ +/* + This file is based on: + $XFree86: xc/programs/Xserver/hw/xfree86/drivers/chips/util/AsmMacros.h,v 1.1 2001/11/16 21:13:34 tsi Exp $ + Modified for readability by Nick Kurshev +*/ + +#ifndef __ASM_MACROS_X86_H +#define __ASM_MACROS_X86_H + +//#if defined (WINNT) +//#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 + +#ifdef CONFIG_SVGAHELPER +#include <sys/ioctl.h> +#include <svgalib_helper.h> + +#ifndef SVGALIB_HELPER_IOC_MAGIC +/* svgalib 1.9.18+ compatibility ::atmos */ +#define SVGALIB_HELPER_IOCSOUTB SVGAHELPER_OUTB +#define SVGALIB_HELPER_IOCSOUTW SVGAHELPER_OUTW +#define SVGALIB_HELPER_IOCSOUTL SVGAHELPER_OUTL +#define SVGALIB_HELPER_IOCGINB SVGAHELPER_INB +#define SVGALIB_HELPER_IOCGINW SVGAHELPER_INW +#define SVGALIB_HELPER_IOCGINL SVGAHELPER_INL +#endif + +extern int svgahelper_fd; +extern int svgahelper_initialized; + +static __inline__ void svga_outb(short port, char value) +{ + io_t iov; + + iov.val = value; + iov.port = port; + ioctl(svgahelper_fd, SVGALIB_HELPER_IOCSOUTB, &iov); +} + +static __inline__ void svga_outw(short port, char value) +{ + io_t iov; + + iov.val = value; + iov.port = port; + ioctl(svgahelper_fd, SVGALIB_HELPER_IOCSOUTW, &iov); +} + +static __inline__ void svga_outl(short port, unsigned int value) +{ + io_t iov; + + iov.val = value; + iov.port = port; + ioctl(svgahelper_fd, SVGALIB_HELPER_IOCSOUTL, &iov); +} + +static __inline__ unsigned int svga_inb(short port) +{ + io_t iov; + + iov.port = port; + ioctl(svgahelper_fd, SVGALIB_HELPER_IOCGINB, &iov); + + return iov.val; +} + +static __inline__ unsigned int svga_inw(short port) +{ + io_t iov; + + iov.port = port; + ioctl(svgahelper_fd, SVGALIB_HELPER_IOCGINW, &iov); + + return iov.val; +} + +static __inline__ unsigned int svga_inl(short port) +{ + io_t iov; + + iov.port = port; + ioctl(svgahelper_fd, SVGALIB_HELPER_IOCGINL, &iov); + + return iov.val; +} +#endif /* CONIFG_SVGAHELPER */ + +static __inline__ void outb(short port,char val) +{ +#ifdef CONFIG_SVGAHELPER + if (svgahelper_initialized == 1) + { + svga_outb(port, val); + return; + } +#endif + +#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_SVGAHELPER + if (svgahelper_initialized == 1) + { + svga_outw(port, val); + return; + } +#endif + +#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_SVGAHELPER + if (svgahelper_initialized == 1) + { + svga_outl(port, val); + return; + } +#endif + +#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 = 0; + +#ifdef CONFIG_SVGAHELPER + if (svgahelper_initialized == 1) + { + return svga_inb(port); + } +#endif + +#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)); + return ret; +} + +static __inline__ unsigned int inw(short port) +{ + unsigned short ret = 0; + +#ifdef CONFIG_SVGAHELPER + if (svgahelper_initialized == 1) + { + return svga_inw(port); + } +#endif + +#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)); + return ret; +} + +static __inline__ unsigned int inl(short port) +{ + unsigned int ret = 0; + +#ifdef CONFIG_SVGAHELPER + if (svgahelper_initialized == 1) + { + return svga_inl(port); + } +#endif + +#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)); + return ret; +} + +static __inline__ void intr_disable() +{ +#ifdef CONFIG_SVGAHELPER + if (svgahelper_initialized == 1) + return; +#endif + __asm__ __volatile__("cli"); +} + +static __inline__ void intr_enable() +{ +#ifdef CONFIG_SVGAHELPER + if (svgahelper_initialized == 1) + return; +#endif + __asm__ __volatile__("sti"); +} + +#endif + +//#endif