diff libdha/sysdep/pci_powerpc.c @ 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 2e3262002acb
children d09c74452323
line wrap: on
line diff
--- 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*/