changeset 7837:6d544beb655e

libdha on linux powerpc support by Colin Leroy <colin@colino.net>
author alex
date Tue, 22 Oct 2002 12:22:40 +0000
parents 6bfe33dc531e
children 1a6da24ad34c
files libdha/sysdep/AsmMacros_powerpc.h libdha/sysdep/pci_linux.c libdha/sysdep/pci_powerpc.c
diffstat 3 files changed, 74 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libdha/sysdep/AsmMacros_powerpc.h	Tue Oct 22 11:52:21 2002 +0000
+++ b/libdha/sysdep/AsmMacros_powerpc.h	Tue Oct 22 12:22:40 2002 +0000
@@ -55,8 +55,6 @@
 #define intr_disable()
 #define intr_enable()
 
-#else
-#error This stuff is not ported on your system
 #endif
 
 #endif
--- a/libdha/sysdep/pci_linux.c	Tue Oct 22 11:52:21 2002 +0000
+++ b/libdha/sysdep/pci_linux.c	Tue Oct 22 12:22:40 2002 +0000
@@ -32,8 +32,12 @@
     dhahelper_initialized = -1;
 #endif
 
+#if defined(__powerpc__) && defined(__linux__)
+/* should be fixed? */
+#else    
     if (iopl(3) != 0)
 	return(errno);
+#endif    
     return(0);
 }
 
@@ -44,7 +48,11 @@
 	close(dhahelper_fd);
     else
 #endif
+#if defined(__powerpc__) && defined(__linux__)
+/* should be fixed? */
+#else    
     if (iopl(0) != 0)
 	return(errno);
+#endif    
     return(0);
 }
--- a/libdha/sysdep/pci_powerpc.c	Tue Oct 22 11:52:21 2002 +0000
+++ b/libdha/sysdep/pci_powerpc.c	Tue Oct 22 12:22:40 2002 +0000
@@ -6,6 +6,71 @@
 
 static int pci_config_type( void ) { return 1; }
 
+#if defined(__powerpc__) && defined(__linux__)
+/* pci operations for powerpc Linux 
+   questions, suggestions etc: 
+   mplayer-dev-eng@mplayerhq.hu, colin@colino.net*/
+#include <fcntl.h>
+#include <sys/io.h>
+#include <linux/pci.h>
+#include "../../bswap.h"
+
+static int pci_get_vendor(
+          unsigned char bus,
+          unsigned char dev,
+          int func)
+{
+    int retval;
+    char path[100];
+    int fd;
+    short vendor, device;
+    sprintf(path,"/proc/bus/pci/%02d/%02x.0", bus, dev);
+    fd = open(path,O_RDONLY|O_SYNC);
+    if (fd == -1) {
+	    retval=0xFFFF;
+    }
+    else if (pread(fd, &vendor, 2, PCI_VENDOR_ID) == 2 &&
+             pread(fd, &device, 2, PCI_DEVICE_ID) == 2) {
+	    vendor = bswap_16(vendor);
+	    device = bswap_16(device);
+	    retval = vendor + (device<<16); /*no worries about byte order, 
+	    				      all ppc are bigendian*/
+    } else {
+	    retval = 0xFFFF;
+    }   
+    if (fd > 0) {
+	    close(fd);
+    }
+    return retval;
+}
+
+static long pci_config_read_long(
+          unsigned char bus,
+          unsigned char dev,
+          int func, 
+          unsigned cmd)
+{
+    long retval;
+    char path[100];
+    int fd;
+    sprintf(path,"/proc/bus/pci/%02d/%02x.0", bus, dev);
+    fd = open(path,O_RDONLY|O_SYNC);
+    if (fd == -1) {
+	    retval=0;
+    }
+    else if (pread(fd, &retval, 4, cmd) == 4) {
+	    retval = bswap_32(retval);
+    } else {
+	    retval = 0;
+    }   
+    if (fd > 0) {
+	    close(fd);
+    }
+    return retval;
+}
+
+#else /*Lynx/OpenBSD*/
+
 static int pci_get_vendor(
           unsigned char bus,
           unsigned char dev,
@@ -26,3 +91,4 @@
     pciconfig_read(bus, dev<<3, cmd, 4, &retval);
     return retval;
 }
+#endif /*Lynx/OpenBSD*/