diff libdha/libdha.c @ 8503:9dbb9c710480

svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
author alex
date Fri, 20 Dec 2002 21:07:27 +0000
parents 567de708ab3a
children ae0507e107b7
line wrap: on
line diff
--- a/libdha/libdha.c	Fri Dec 20 20:39:11 2002 +0000
+++ b/libdha/libdha.c	Fri Dec 20 21:07:27 2002 +0000
@@ -66,21 +66,40 @@
 #endif
 
 #ifdef CONFIG_DHAHELPER
+#include "kernelhelper/dhahelper.h"
+#endif
 
-#include "kernelhelper/dhahelper.h"
+#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 @@
     
     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
+#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
-  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 @@
   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);
 }
-