summaryrefslogtreecommitdiffstats
path: root/libdha/libdha.c
diff options
context:
space:
mode:
authoralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-12-20 21:07:27 +0000
committeralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-12-20 21:07:27 +0000
commit6429f7e4fd55a230f471a4f1c12387db793a71dd (patch)
tree16ba159231ad1bae6e9c8583f94d8436354d65b2 /libdha/libdha.c
parenta75ffd19d6f674d0f05f8fc5e1763a47343c929f (diff)
downloadmpv-6429f7e4fd55a230f471a4f1c12387db793a71dd.tar.bz2
mpv-6429f7e4fd55a230f471a4f1c12387db793a71dd.tar.xz
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8504 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libdha/libdha.c')
-rw-r--r--libdha/libdha.c80
1 files changed, 51 insertions, 29 deletions
diff --git a/libdha/libdha.c b/libdha/libdha.c
index 800b68bcf2..e0739e1a03 100644
--- a/libdha/libdha.c
+++ b/libdha/libdha.c
@@ -66,21 +66,40 @@ void libdha_exit(const char *message, int level)
#endif
#ifdef CONFIG_DHAHELPER
-
#include "kernelhelper/dhahelper.h"
+#endif
+
+#ifdef CONFIG_SVGAHELPER
+#include <svgalib_helper.h>
+#endif
static int mem=-1;
void *map_phys_mem(unsigned long base, unsigned long size)
-{
+{
#ifdef ARCH_ALPHA
/* TODO: move it into sysdep */
base += bus_base();
#endif
+
+#ifdef CONFIG_SVGAHELPER
+ if ( (mem = open(DEV_SVGA,O_RDWR)) == -1) {
+ perror("libdha: SVGAlib kernelhelper failed");
+#ifdef CONFIG_DHAHELPER
+ goto dha_helper_way;
+#else
+ goto dev_mem_way;
+#endif
+ }
+ else
+ goto mmap;
+#endif
+
+#ifdef CONFIG_DHAHELPER
+dha_helper_way:
if ( (mem = open("/dev/dhahelper",O_RDWR)) < 0)
{
- if ( (mem = open(DEV_MEM,O_RDWR)) == -1) {
- perror("libdha: open(/dev/mem) failed") ; exit(1) ;
- }
+ perror("libdha: DHA kernelhelper failed");
+ goto dev_mem_way;
}
else
{
@@ -93,37 +112,41 @@ void *map_phys_mem(unsigned long base, unsigned long size)
if (ioctl(mem, DHAHELPER_MEMORY, &mem_req) < 0)
{
- perror("libdha: failed mapping throught kernel helper");
- return NULL;
+ perror("libdha: DHA kernelhelper failed");
+ close(mem);
+ goto dev_mem_way;
}
+ else
+ goto mmap;
}
- return mmap(0,size,PROT_READ|PROT_WRITE,MAP_SHARED,mem,base) ;
-}
-#else
-
-static int mem=-1;
-void *map_phys_mem(unsigned long base, unsigned long size)
-{
-#ifdef ARCH_ALPHA
-/* TODO: move it into sysdep */
- base += bus_base();
#endif
- if ( (mem = open(DEV_MEM,O_RDWR)) == -1) {
- perror("libdha: open(/dev/mem) failed") ; exit(1) ;
+
+dev_mem_way:
+ if ( (mem = open(DEV_MEM,O_RDWR)) == -1)
+ {
+ perror("libdha: opening /dev/mem failed");
+ exit(1);
}
- return mmap(0,size,PROT_READ|PROT_WRITE,MAP_SHARED,mem,base) ;
+
+mmap:
+ return mmap(0,size,PROT_READ|PROT_WRITE,MAP_SHARED,mem,base);
}
#endif /* CONFIG_DHAHELPER */
void unmap_phys_mem(void *ptr, unsigned long size)
{
- int res=munmap(ptr,size) ;
- if (res == -1) { perror("libdha: munmap() failed") ; exit(1) ; }
+ int res = munmap(ptr,size);
+
+ if (res == -1)
+ {
+ perror("libdha: unmapping memory failed");
+ exit(1);
+ }
close(mem);
+ mem = -1;
}
-#endif
-unsigned char INPORT8(unsigned idx)
+unsigned char INPORT8(unsigned idx)
{
return inb(idx);
}
@@ -133,23 +156,22 @@ unsigned short INPORT16(unsigned idx)
return inw(idx);
}
-unsigned INPORT32(unsigned idx)
+unsigned INPORT32(unsigned idx)
{
return inl(idx);
}
-void OUTPORT8(unsigned idx,unsigned char val)
+void OUTPORT8(unsigned idx,unsigned char val)
{
outb(idx,val);
}
-void OUTPORT16(unsigned idx,unsigned short val)
+void OUTPORT16(unsigned idx,unsigned short val)
{
outw(idx,val);
}
-void OUTPORT32(unsigned idx,unsigned val)
+void OUTPORT32(unsigned idx,unsigned val)
{
outl(idx,val);
}
-