annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
1 /*
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
2 This file is based on:
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
3 $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.c,v 3.34.2.17 1998/11/10 11:55:40 dawes Exp $
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
4 Modified for readability by Nick Kurshev
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
5 */
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
6
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
7 static int pci_config_type( void ) { return 1; }
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
8
7837
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
9 #if defined(__powerpc__) && defined(__linux__)
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
10 /* pci operations for powerpc Linux
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
11 questions, suggestions etc:
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
12 mplayer-dev-eng@mplayerhq.hu, colin@colino.net*/
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
13 #include <fcntl.h>
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
14 #include <sys/io.h>
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
15 #include <linux/pci.h>
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
16 #include "../../bswap.h"
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
17
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
18 static int pci_get_vendor(
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
19 unsigned char bus,
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
20 unsigned char dev,
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
21 int func)
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
22 {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
23 int retval;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
24 char path[100];
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
25 int fd;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
26 short vendor, device;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
27 sprintf(path,"/proc/bus/pci/%02d/%02x.0", bus, dev);
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
28 fd = open(path,O_RDONLY|O_SYNC);
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
29 if (fd == -1) {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
30 retval=0xFFFF;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
31 }
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
32 else if (pread(fd, &vendor, 2, PCI_VENDOR_ID) == 2 &&
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
33 pread(fd, &device, 2, PCI_DEVICE_ID) == 2) {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
34 vendor = bswap_16(vendor);
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
35 device = bswap_16(device);
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
36 retval = vendor + (device<<16); /*no worries about byte order,
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
37 all ppc are bigendian*/
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
38 } else {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
39 retval = 0xFFFF;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
40 }
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
41 if (fd > 0) {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
42 close(fd);
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
43 }
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
44 return retval;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
45 }
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
46
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
47 static long pci_config_read_long(
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
48 unsigned char bus,
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
49 unsigned char dev,
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
50 int func,
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
51 unsigned cmd)
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
52 {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
53 long retval;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
54 char path[100];
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
55 int fd;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
56 sprintf(path,"/proc/bus/pci/%02d/%02x.0", bus, dev);
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
57 fd = open(path,O_RDONLY|O_SYNC);
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
58 if (fd == -1) {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
59 retval=0;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
60 }
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
61 else if (pread(fd, &retval, 4, cmd) == 4) {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
62 retval = bswap_32(retval);
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
63 } else {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
64 retval = 0;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
65 }
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
66 if (fd > 0) {
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
67 close(fd);
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
68 }
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
69 return retval;
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
70 }
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
71
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
72 #else /*Lynx/OpenBSD*/
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
73
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
74 static int pci_get_vendor(
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
75 unsigned char bus,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
76 unsigned char dev,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
77 int func)
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
78 {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
79 int retval;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
80 pciconfig_read(bus, dev<<3, PCI_ID_REG, 4, &retval);
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
81 return retval;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
82 }
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
83
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
84 static long pci_config_read_long(
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
85 unsigned char bus,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
86 unsigned char dev,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
87 int func,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
88 unsigned cmd)
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
89 {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
90 long retval;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
91 pciconfig_read(bus, dev<<3, cmd, 4, &retval);
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
92 return retval;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
93 }
7837
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 4164
diff changeset
94 #endif /*Lynx/OpenBSD*/