diff options
author | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-10-22 12:22:40 +0000 |
---|---|---|
committer | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-10-22 12:22:40 +0000 |
commit | 6c8416503d036be2d5eae08c50cd1a9ab7fd0a18 (patch) | |
tree | 35296e0c5de9bfb63b8c78e3226fe3faa58df928 /libdha/sysdep/pci_powerpc.c | |
parent | 8c28841ed170adade5b4cab1069b98e16ab0e7dd (diff) | |
download | mpv-6c8416503d036be2d5eae08c50cd1a9ab7fd0a18.tar.bz2 mpv-6c8416503d036be2d5eae08c50cd1a9ab7fd0a18.tar.xz |
libdha on linux powerpc support by Colin Leroy <colin@colino.net>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7838 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libdha/sysdep/pci_powerpc.c')
-rw-r--r-- | libdha/sysdep/pci_powerpc.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/libdha/sysdep/pci_powerpc.c b/libdha/sysdep/pci_powerpc.c index 9239521ec3..52a62401de 100644 --- a/libdha/sysdep/pci_powerpc.c +++ b/libdha/sysdep/pci_powerpc.c @@ -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 @@ static long pci_config_read_long( pciconfig_read(bus, dev<<3, cmd, 4, &retval); return retval; } +#endif /*Lynx/OpenBSD*/ |