Mercurial > mplayer.hg
annotate vidix/sysdep/pci_linux.c @ 36855:5cee3aefde4f
Fix previous sync error
author | jrash |
---|---|
date | Wed, 26 Feb 2014 21:57:48 +0000 |
parents | 03021b062140 |
children |
rev | line source |
---|---|
4164 | 1 /* |
2 This file is based on: | |
3 $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.c,v 3.34.2.17 1998/11/10 11:55:40 dawes Exp $ | |
4 Modified for readability by Nick Kurshev | |
5 */ | |
25132
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
6 /* |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
7 * Copyright 1995 by Robin Cutshaw <robin@XFree86.Org> |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
8 * |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
9 * Permission to use, copy, modify, distribute, and sell this software and its |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
10 * documentation for any purpose is hereby granted without fee, provided that |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
11 * the above copyright notice appear in all copies and that both that |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
12 * copyright notice and this permission notice appear in supporting |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
13 * documentation, and that the names of the above listed copyright holder(s) |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
14 * not be used in advertising or publicity pertaining to distribution of |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
15 * the software without specific, written prior permission. The above listed |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
16 * copyright holder(s) make(s) no representations about the suitability of this |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
17 * software for any purpose. It is provided "as is" without express or |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
18 * implied warranty. |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
19 * |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
20 * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
21 * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
22 * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
23 * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
24 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
25 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
26 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
27 */ |
9c4ad35fabc5
Restore copyright/license notices that were stripped off.
diego
parents:
22900
diff
changeset
|
28 |
4174
4cfb6b9a6da3
api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents:
4164
diff
changeset
|
29 #include <errno.h> |
31495 | 30 #if ARCH_X86 |
17099 | 31 //#include <sys/perm.h> doesn't exist on libc5 systems |
31467
98e1af7a4077
Fix iopl() function declaration, fixes the warning:
diego
parents:
31466
diff
changeset
|
32 int iopl(int level); |
31014 | 33 #elif defined(__sh__) |
34 #define iopl(x) 1 | |
4164 | 35 #else |
31014 | 36 #if !defined(__sparc__) && !defined(__powerpc__) && !defined(__x86_64__) |
4164 | 37 #include <sys/io.h> |
38 #endif | |
6613
5cf616a755ac
Linux for Sparc fix by Adam Di Carlo <adam at onshore-devel.com>
alex
parents:
4474
diff
changeset
|
39 #endif |
4164 | 40 |
4474 | 41 #include "config.h" |
42 | |
43 #ifdef CONFIG_DHAHELPER | |
44 #include <fcntl.h> | |
45 int dhahelper_initialized = 0; | |
35218 | 46 int dhahelper_fd = -1; |
4474 | 47 #endif |
48 | |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
49 #ifdef CONFIG_SVGAHELPER |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
50 #include <svgalib_helper.h> |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
51 #include <linux/ioctl.h> |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
52 #include <fcntl.h> |
12078
62705b2298ff
svgalib 1.9.18 compile fix, still wont work for me though...
atmos4
parents:
11455
diff
changeset
|
53 #ifndef SVGALIB_HELPER_IOC_MAGIC |
62705b2298ff
svgalib 1.9.18 compile fix, still wont work for me though...
atmos4
parents:
11455
diff
changeset
|
54 /* svgalib 1.9.18+ compatibility ::atmos */ |
62705b2298ff
svgalib 1.9.18 compile fix, still wont work for me though...
atmos4
parents:
11455
diff
changeset
|
55 #define SVGALIB_HELPER_IOCGPCIINL SVGAHELPER_PCIINL |
62705b2298ff
svgalib 1.9.18 compile fix, still wont work for me though...
atmos4
parents:
11455
diff
changeset
|
56 #endif |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
57 int svgahelper_initialized = 0; |
35218 | 58 int svgahelper_fd = -1; |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
59 |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
60 static int pci_config_type(void) |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
61 { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
62 return 1; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
63 } |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
64 |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
65 static long pci_config_read_long( |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
66 unsigned char bus, |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
67 unsigned char dev, |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
68 int func, |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
69 unsigned cmd) |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
70 { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
71 pcic_t p; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
72 |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
73 p.address = cmd; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
74 p.pcipos = (bus << 8) | dev | (func << 5); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
75 |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
76 if (ioctl(svgahelper_fd, SVGALIB_HELPER_IOCGPCIINL, &p)) |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
77 return -1; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
78 |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
79 return p.val; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
80 } |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
81 |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
82 static int pci_get_vendor( |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
83 unsigned char bus, |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
84 unsigned char dev, |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
85 int func) |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
86 { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
87 return pci_config_read_long(bus, dev, func, 0); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
88 } |
27005
0a7f07b761e1
Add comments to a few #endif preprocessor directives.
diego
parents:
26971
diff
changeset
|
89 #endif /* CONFIG_SVGAHELPER */ |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
90 |
34653 | 91 static inline int enable_os_io(void) |
4164 | 92 { |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
93 #ifdef CONFIG_SVGAHELPER |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
94 svgahelper_fd = open(DEV_SVGA, O_RDWR); |
35218 | 95 if (svgahelper_fd != -1) |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
96 { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
97 svgahelper_initialized = 1; |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
25132
diff
changeset
|
98 return 0; |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
99 } |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
100 svgahelper_initialized = -1; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
101 #endif |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
102 |
4474 | 103 #ifdef CONFIG_DHAHELPER |
104 dhahelper_fd = open("/dev/dhahelper", O_RDWR); | |
35218 | 105 if (dhahelper_fd != -1) |
4474 | 106 { |
107 dhahelper_initialized = 1; | |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
25132
diff
changeset
|
108 return 0; |
4474 | 109 } |
110 dhahelper_initialized = -1; | |
111 #endif | |
112 | |
31466 | 113 #ifdef __powerpc__ |
7837
6d544beb655e
libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents:
6613
diff
changeset
|
114 /* should be fixed? */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
115 #else |
4174
4cfb6b9a6da3
api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents:
4164
diff
changeset
|
116 if (iopl(3) != 0) |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
25132
diff
changeset
|
117 return errno; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
118 #endif |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
25132
diff
changeset
|
119 return 0; |
4164 | 120 } |
121 | |
34653 | 122 static inline int disable_os_io(void) |
4164 | 123 { |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
124 #ifdef CONFIG_SVGAHELPER |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
125 if (svgahelper_initialized == 1) |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
126 close(svgahelper_fd); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
127 else |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
128 #endif |
4474 | 129 #ifdef CONFIG_DHAHELPER |
130 if (dhahelper_initialized == 1) | |
131 close(dhahelper_fd); | |
132 else | |
133 #endif | |
31466 | 134 #ifdef __powerpc__ |
7837
6d544beb655e
libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents:
6613
diff
changeset
|
135 /* should be fixed? */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
136 #else |
4174
4cfb6b9a6da3
api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents:
4164
diff
changeset
|
137 if (iopl(0) != 0) |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
25132
diff
changeset
|
138 return errno; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
139 #endif |
26753
502f04b67653
cosmetics: Remove useless parentheses from return statements.
diego
parents:
25132
diff
changeset
|
140 return 0; |
4164 | 141 } |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
142 |
12687 | 143 #if (defined(__powerpc__) || defined(__sparc__) || defined(__sparc64__) \ |
31466 | 144 || defined(__x86_64__) || defined(__sh__)) && !defined(CONFIG_SVGAHELPER) |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
145 #define CONFIG_PCI_LINUX_PROC |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
146 #endif |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
147 |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
148 #if defined(CONFIG_PCI_LINUX_PROC) |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
149 static int pci_config_type( void ) { return 1; } |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
150 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
151 /* pci operations for (powerpc) Linux |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
152 questions, suggestions etc: |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
153 mplayer-dev-eng@mplayerhq.hu, colin@colino.net*/ |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
154 #include <fcntl.h> |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
155 //#include <sys/io.h> |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
156 #include <linux/pci.h> |
21372 | 157 #include "libavutil/common.h" |
21507
fa99b3d31d13
Hack around libavutil/bswap.h compilation problems due to always_inline undefined.
reimar
parents:
21372
diff
changeset
|
158 #include "mpbswap.h" |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
159 |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
160 static int pci_get_vendor( |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
161 unsigned char bus, |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
162 unsigned char dev, |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
163 int func) |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
164 { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
165 int retval; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
166 char path[100]; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
167 int fd; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
168 short vendor, device; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
169 sprintf(path,"/proc/bus/pci/%02d/%02x.0", bus, dev); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
170 fd = open(path,O_RDONLY|O_SYNC); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
171 if (fd == -1) { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
172 retval=0xFFFF; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
173 } |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
174 else if (pread(fd, &vendor, 2, PCI_VENDOR_ID) == 2 && |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
175 pread(fd, &device, 2, PCI_DEVICE_ID) == 2) { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
176 vendor = le2me_16(vendor); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
177 device = le2me_16(device); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
178 retval = vendor + (device<<16); /*no worries about byte order, |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
179 all ppc are bigendian*/ |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
180 } else { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
181 retval = 0xFFFF; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
182 } |
35217
c45cbe0d8ce1
Only -1 is certain to never be a valid file descriptor.
reimar
parents:
34653
diff
changeset
|
183 if (fd != -1) { |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
184 close(fd); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
185 } |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
186 return retval; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
187 } |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
188 |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
189 static long pci_config_read_long( |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
190 unsigned char bus, |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
191 unsigned char dev, |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
192 int func, |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
193 unsigned cmd) |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
194 { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
195 long retval; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
196 char path[100]; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
197 int fd; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
198 sprintf(path,"/proc/bus/pci/%02d/%02x.0", bus, dev); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
199 fd = open(path,O_RDONLY|O_SYNC); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
200 if (fd == -1) { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
201 retval=0; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
202 } |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
203 else if (pread(fd, &retval, 4, cmd) == 4) { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
204 retval = le2me_32(retval); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
205 } else { |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
206 retval = 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27419
diff
changeset
|
207 } |
35218 | 208 if (fd != -1) { |
8503
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
209 close(fd); |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
210 } |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
211 return retval; |
9dbb9c710480
svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents:
8460
diff
changeset
|
212 } |
27005
0a7f07b761e1
Add comments to a few #endif preprocessor directives.
diego
parents:
26971
diff
changeset
|
213 #endif /* defined(CONFIG_PCI_LINUX_PROC) */ |