annotate vidix/sysdep/pci_linux.c @ 28615:15e7abed4291

Use the same code to convert fps in float to fraction as used in mencoder, it ensures all the common frame rates work right. If this causes issues, it should be changed in the same way in mencoder.c
author reimar
date Wed, 18 Feb 2009 16:49:12 +0000
parents 3f6d802c6ea8
children 0f1b5b68af32
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 */
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>
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
30 #ifdef __i386__
17099
rathann
parents: 12687
diff changeset
31 //#include <sys/perm.h> doesn't exist on libc5 systems
rathann
parents: 12687
diff changeset
32 int iopl();
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
33 #else
12687
cb35163ef0a1 x86-64 (amd64) support by Kenny Root
alex
parents: 12078
diff changeset
34 #if !defined(__sparc__) && !defined(__powerpc__) && !defined(__x86_64__)
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
35 #include <sys/io.h>
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
36 #endif
6613
5cf616a755ac Linux for Sparc fix by Adam Di Carlo <adam at onshore-devel.com>
alex
parents: 4474
diff changeset
37 #endif
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
38
27419
3f6d802c6ea8 Add proper VIDIX support for SuperH architecture.
ben
parents: 27005
diff changeset
39 #ifdef __sh__
3f6d802c6ea8 Add proper VIDIX support for SuperH architecture.
ben
parents: 27005
diff changeset
40 #define iopl(x) 1
3f6d802c6ea8 Add proper VIDIX support for SuperH architecture.
ben
parents: 27005
diff changeset
41 #endif
3f6d802c6ea8 Add proper VIDIX support for SuperH architecture.
ben
parents: 27005
diff changeset
42
4474
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
43 #include "config.h"
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
44
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
45 #ifdef CONFIG_DHAHELPER
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
46 #include <fcntl.h>
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
47 int dhahelper_initialized = 0;
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
48 int dhahelper_fd = 0;
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
49 #endif
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
50
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
51 #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
52 #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
53 #ifdef __linux__
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
54 #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
55 #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
56 #include <fcntl.h>
12078
62705b2298ff svgalib 1.9.18 compile fix, still wont work for me though...
atmos4
parents: 11455
diff changeset
57 #ifndef SVGALIB_HELPER_IOC_MAGIC
62705b2298ff svgalib 1.9.18 compile fix, still wont work for me though...
atmos4
parents: 11455
diff changeset
58 /* svgalib 1.9.18+ compatibility ::atmos */
62705b2298ff svgalib 1.9.18 compile fix, still wont work for me though...
atmos4
parents: 11455
diff changeset
59 #define SVGALIB_HELPER_IOCGPCIINL SVGAHELPER_PCIINL
62705b2298ff svgalib 1.9.18 compile fix, still wont work for me though...
atmos4
parents: 11455
diff changeset
60 #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
61 int svgahelper_initialized = 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
62 int svgahelper_fd = 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
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 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
65 {
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 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
67 }
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
68
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 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
70 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
71 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
72 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
73 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
74 {
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
75 pcic_t 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
76
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 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
78 p.pcipos = (bus << 8) | dev | (func << 5);
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
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 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
81 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
82
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 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
84 }
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
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 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
87 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
88 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
89 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
90 {
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
91 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
92 }
27005
0a7f07b761e1 Add comments to a few #endif preprocessor directives.
diego
parents: 26971
diff changeset
93 #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
94
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
95 static __inline__ int enable_os_io(void)
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
96 {
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
97 #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
98 svgahelper_fd = open(DEV_SVGA, O_RDWR);
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 if (svgahelper_fd > 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
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
101 svgahelper_initialized = 1;
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 25132
diff changeset
102 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
103 }
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
104 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
105 #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
106
4474
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
107 #ifdef CONFIG_DHAHELPER
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
108 dhahelper_fd = open("/dev/dhahelper", O_RDWR);
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
109 if (dhahelper_fd > 0)
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
110 {
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
111 dhahelper_initialized = 1;
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 25132
diff changeset
112 return 0;
4474
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
113 }
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
114 dhahelper_initialized = -1;
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
115 #endif
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
116
7837
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 6613
diff changeset
117 #if defined(__powerpc__) && defined(__linux__)
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 6613
diff changeset
118 /* should be fixed? */
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 6613
diff changeset
119 #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
120 if (iopl(3) != 0)
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 25132
diff changeset
121 return errno;
7837
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 6613
diff changeset
122 #endif
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 25132
diff changeset
123 return 0;
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
124 }
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
125
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
126 static __inline__ int disable_os_io(void)
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
127 {
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
128 #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
129 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
130 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
131 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
132 #endif
4474
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
133 #ifdef CONFIG_DHAHELPER
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
134 if (dhahelper_initialized == 1)
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
135 close(dhahelper_fd);
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
136 else
05ac3586db02 added support for dhahelper
alex
parents: 4174
diff changeset
137 #endif
7837
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 6613
diff changeset
138 #if defined(__powerpc__) && defined(__linux__)
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 6613
diff changeset
139 /* should be fixed? */
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 6613
diff changeset
140 #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
141 if (iopl(0) != 0)
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 25132
diff changeset
142 return errno;
7837
6d544beb655e libdha on linux powerpc support by Colin Leroy <colin@colino.net>
alex
parents: 6613
diff changeset
143 #endif
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 25132
diff changeset
144 return 0;
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
145 }
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
146
12687
cb35163ef0a1 x86-64 (amd64) support by Kenny Root
alex
parents: 12078
diff changeset
147 #if (defined(__powerpc__) || defined(__sparc__) || defined(__sparc64__) \
27419
3f6d802c6ea8 Add proper VIDIX support for SuperH architecture.
ben
parents: 27005
diff changeset
148 || defined(__x86_64__) || defined(__sh__)) && defined(__linux__) && !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
149 #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
150 #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
151
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
152 #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
153 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
154
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 /* pci operations for (powerpc) Linux
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 questions, suggestions etc:
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
157 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
158 #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
159 //#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
160 #include <linux/pci.h>
21372
1767c271d710 Remove bswap.h, use libavutil/bswap.h instead.
diego
parents: 17099
diff changeset
161 #include "libavutil/common.h"
21507
fa99b3d31d13 Hack around libavutil/bswap.h compilation problems due to always_inline undefined.
reimar
parents: 21372
diff changeset
162 #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
163
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 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
165 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
166 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
167 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
168 {
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 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
170 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
171 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
172 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
173 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
174 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
175 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
176 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
177 }
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
178 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
179 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
180 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
181 device = le2me_16(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
182 retval = vendor + (device<<16); /*no worries about byte order,
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
183 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
184 } 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
185 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
186 }
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 if (fd > 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
188 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
189 }
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 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
191 }
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
192
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 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
194 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
195 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
196 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
197 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
198 {
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 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
200 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
201 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
202 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
203 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
204 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
205 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
206 }
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
207 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
208 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
209 } 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
210 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
211 }
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 if (fd > 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
213 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
214 }
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
215 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
216 }
27005
0a7f07b761e1 Add comments to a few #endif preprocessor directives.
diego
parents: 26971
diff changeset
217 #endif /* defined(CONFIG_PCI_LINUX_PROC) */