annotate vidix/pci.c @ 34809:ea97bcb28df1

Allow direct rendering for non-reference frames in H.264. This might work for other codecs that currently have DR disabled, but H.264 is the only one tested so far.
author reimar
date Mon, 14 May 2012 18:11:24 +0000
parents 958431e2cde0
children 3c5c93a30fb7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
1 /*
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
2 (C) 2002 - library implementation by Nick Kyrshev
23734
acfe034e5386 ISO8859-1 --> UTF-8
diego
parents: 23048
diff changeset
3 XFree86 3.3.3 scanpci.c, modified for GATOS/win/gfxdump by Øyvind Aabling.
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
4 */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
5 /* $XConsortium: scanpci.c /main/25 1996/10/27 11:48:40 kaleb $ */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
6 /*
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
7 * name: scanpci.c
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
8 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
9 * purpose: This program will scan for and print details of
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
10 * devices on the PCI bus.
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
11
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
12 * author: Robin Cutshaw (robin@xfree86.org)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
13 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
14 * supported O/S's: SVR4, UnixWare, SCO, Solaris,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
15 * FreeBSD, NetBSD, 386BSD, BSDI BSD/386,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
16 * Linux, Mach/386, ISC
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
17 * DOS (WATCOM 9.5 compiler)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
18 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
19 * compiling: [g]cc scanpci.c -o scanpci
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
20 * for SVR4 (not Solaris), UnixWare use:
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
21 * [g]cc -DSVR4 scanpci.c -o scanpci
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
22 * for DOS, watcom 9.5:
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
23 * wcc386p -zq -omaxet -7 -4s -s -w3 -d2 name.c
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
24 * and link with PharLap or other dos extender for exe
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
25 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
26 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
27
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
28 /* $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.c,v 3.34.2.17 1998/11/10 11:55:40 dawes Exp $ */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
29
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
30 /*
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
31 * Copyright 1995 by Robin Cutshaw <robin@XFree86.Org>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
32 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
33 * Permission to use, copy, modify, distribute, and sell this software and its
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
34 * documentation for any purpose is hereby granted without fee, provided that
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
35 * the above copyright notice appear in all copies and that both that
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
36 * copyright notice and this permission notice appear in supporting
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
37 * documentation, and that the names of the above listed copyright holder(s)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
38 * not be used in advertising or publicity pertaining to distribution of
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
39 * the software without specific, written prior permission. The above listed
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
40 * copyright holder(s) make(s) no representations about the suitability of this
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
41 * software for any purpose. It is provided "as is" without express or
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
42 * implied warranty.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
43 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
44 * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
45 * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
46 * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
47 * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
48 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
49 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
50 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
51 *
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
52 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
53
22901
a7605669b114 renamed libdha.[hc] to dha.[hc]
ben
parents: 22900
diff changeset
54 #include "dha.h"
31522
0553c67e2f83 Add config.h include needed for other included files
reimar
parents: 29263
diff changeset
55 #include "config.h"
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
56 #include <errno.h>
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
57 #include <string.h>
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
58 #include <stdio.h>
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
59 #ifdef __unix__
24511
263c0b282d90 this flag needs to be defined for pread() on powerpc
ben
parents: 24510
diff changeset
60 #define __USE_UNIX98
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
61 #include <unistd.h>
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
62 #endif
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
63 #include "AsmMacros.h"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
64 /* OS depended stuff */
27250
dcf62171257b Remove -std=gnu99/gnu89/default dialect linux define, as it violates the
michael
parents: 27005
diff changeset
65 #if defined (__linux__)
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
66 #include "sysdep/pci_linux.c"
21848
3ff1eade91f9 GNU/kFreeBSD support, closes Bugzilla #704.
diego
parents: 17971
diff changeset
67 #elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__)
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
68 #include "sysdep/pci_freebsd.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
69 #elif defined (__386BSD__)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
70 #include "sysdep/pci_386bsd.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
71 #elif defined (__NetBSD__)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
72 #include "sysdep/pci_netbsd.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
73 #elif defined (__OpenBSD__)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
74 #include "sysdep/pci_openbsd.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
75 #elif defined (__bsdi__)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
76 #include "sysdep/pci_bsdi.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
77 #elif defined (Lynx)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
78 #include "sysdep/pci_lynx.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
79 #elif defined (MACH386)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
80 #include "sysdep/pci_mach386.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
81 #elif defined (__SVR4)
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
82 #if !defined(SVR4)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
83 #define SVR4
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
84 #endif
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
85 #include "sysdep/pci_svr4.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
86 #elif defined (SCO)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
87 #include "sysdep/pci_sco.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
88 #elif defined (ISC)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
89 #include "sysdep/pci_isc.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
90 #elif defined (__EMX__)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
91 #include "sysdep/pci_os2.c"
4173
250f39dedede cygwin compile fix
atmos4
parents: 4164
diff changeset
92 #elif defined (_WIN32) || defined(__CYGWIN__)
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
93 #include "sysdep/pci_win32.c"
10980
e687fa1d55c6 port libdha to mingw
faust3
parents: 9767
diff changeset
94 #ifdef __MINGW32__
e687fa1d55c6 port libdha to mingw
faust3
parents: 9767
diff changeset
95 #define ENOTSUP 134 /* Not supported */
e687fa1d55c6 port libdha to mingw
faust3
parents: 9767
diff changeset
96 #endif
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
97 #endif
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
98
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
99 #if defined(Lynx) && defined(__powerpc__)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
100 /* let's mimick the Linux Alpha stuff for LynxOS so we don't have
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
101 * to change too much code
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
102 */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
103 #include <smem.h>
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
104
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
105 static unsigned char *pciConfBase;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
106
34653
958431e2cde0 Make inline keyword handling consistent.
diego
parents: 31522
diff changeset
107 static inline unsigned long
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
108 static swapl(unsigned long val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
109 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
110 unsigned char *p = (unsigned char *)&val;
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 24511
diff changeset
111 return (p[3] << 24) | (p[2] << 16) | (p[1] << 8) | (p[0] << 0);
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
112 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
113
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
114
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
115 #define BUS(tag) (((tag)>>16)&0xff)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
116 #define DFN(tag) (((tag)>>8)&0xff)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
117
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
118 #define PCIBIOS_DEVICE_NOT_FOUND 0x86
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
119 #define PCIBIOS_SUCCESSFUL 0x00
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
120
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
121 int pciconfig_read(
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
122 unsigned char bus,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
123 unsigned char dev,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
124 unsigned char offset,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
125 int len, /* unused, alway 4 */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
126 unsigned long *val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
127 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
128 unsigned long _val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
129 unsigned long *ptr;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
130
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
131 dev >>= 3;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
132 if (bus || dev >= 16) {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
133 *val = 0xFFFFFFFF;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
134 return PCIBIOS_DEVICE_NOT_FOUND;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
135 } else {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
136 ptr = (unsigned long *)(pciConfBase + ((1<<dev) | offset));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
137 _val = swapl(*ptr);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
138 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
139 *val = _val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
140 return PCIBIOS_SUCCESSFUL;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
141 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
142
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
143 int pciconfig_write(
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
144 unsigned char bus,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
145 unsigned char dev,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
146 unsigned char offset,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
147 int len, /* unused, alway 4 */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
148 unsigned long val)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
149 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
150 unsigned long _val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
151 unsigned long *ptr;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
152
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
153 dev >>= 3;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
154 _val = swapl(val);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
155 if (bus || dev >= 16) {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
156 return PCIBIOS_DEVICE_NOT_FOUND;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
157 } else {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
158 ptr = (unsigned long *)(pciConfBase + ((1<<dev) | offset));
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
159 *ptr = _val;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
160 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
161 return PCIBIOS_SUCCESSFUL;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
162 }
27005
0a7f07b761e1 Add comments to a few #endif preprocessor directives.
diego
parents: 26753
diff changeset
163 #endif /* defined(Lynx) && defined(__powerpc__) */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
164
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
165 #if !defined(__powerpc__)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
166 struct pci_config_reg {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
167 /* start of official PCI config space header */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
168 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
169 unsigned long device_vendor;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
170 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
171 unsigned short vendor;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
172 unsigned short device;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
173 } dv;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
174 } dv_id;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
175 #define _device_vendor dv_id.device_vendor
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
176 #define _vendor dv_id.dv.vendor
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
177 #define _device dv_id.dv.device
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
178 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
179 unsigned long status_command;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
180 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
181 unsigned short command;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
182 unsigned short status;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
183 } sc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
184 } stat_cmd;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
185 #define _status_command stat_cmd.status_command
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
186 #define _command stat_cmd.sc.command
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
187 #define _status stat_cmd.sc.status
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
188 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
189 unsigned long class_revision;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
190 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
191 unsigned char rev_id;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
192 unsigned char prog_if;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
193 unsigned char sub_class;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
194 unsigned char base_class;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
195 } cr;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
196 } class_rev;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
197 #define _class_revision class_rev.class_revision
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
198 #define _rev_id class_rev.cr.rev_id
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
199 #define _prog_if class_rev.cr.prog_if
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
200 #define _sub_class class_rev.cr.sub_class
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
201 #define _base_class class_rev.cr.base_class
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
202 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
203 unsigned long bist_header_latency_cache;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
204 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
205 unsigned char cache_line_size;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
206 unsigned char latency_timer;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
207 unsigned char header_type;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
208 unsigned char bist;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
209 } bhlc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
210 } bhlc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
211 #define _bist_header_latency_cache bhlc.bist_header_latency_cache
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
212 #define _cache_line_size bhlc.bhlc.cache_line_size
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
213 #define _latency_timer bhlc.bhlc.latency_timer
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
214 #define _header_type bhlc.bhlc.header_type
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
215 #define _bist bhlc.bhlc.bist
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
216 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
217 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
218 unsigned long dv_base0;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
219 unsigned long dv_base1;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
220 unsigned long dv_base2;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
221 unsigned long dv_base3;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
222 unsigned long dv_base4;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
223 unsigned long dv_base5;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
224 } dv;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
225 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
226 unsigned long bg_rsrvd[2];
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
227 unsigned char primary_bus_number;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
228 unsigned char secondary_bus_number;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
229 unsigned char subordinate_bus_number;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
230 unsigned char secondary_latency_timer;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
231 unsigned char io_base;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
232 unsigned char io_limit;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
233 unsigned short secondary_status;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
234 unsigned short mem_base;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
235 unsigned short mem_limit;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
236 unsigned short prefetch_mem_base;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
237 unsigned short prefetch_mem_limit;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
238 } bg;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
239 } bc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
240 #define _base0 bc.dv.dv_base0
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
241 #define _base1 bc.dv.dv_base1
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
242 #define _base2 bc.dv.dv_base2
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
243 #define _base3 bc.dv.dv_base3
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
244 #define _base4 bc.dv.dv_base4
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
245 #define _base5 bc.dv.dv_base5
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
246 #define _primary_bus_number bc.bg.primary_bus_number
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
247 #define _secondary_bus_number bc.bg.secondary_bus_number
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
248 #define _subordinate_bus_number bc.bg.subordinate_bus_number
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
249 #define _secondary_latency_timer bc.bg.secondary_latency_timer
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
250 #define _io_base bc.bg.io_base
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
251 #define _io_limit bc.bg.io_limit
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
252 #define _secondary_status bc.bg.secondary_status
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
253 #define _mem_base bc.bg.mem_base
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
254 #define _mem_limit bc.bg.mem_limit
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
255 #define _prefetch_mem_base bc.bg.prefetch_mem_base
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
256 #define _prefetch_mem_limit bc.bg.prefetch_mem_limit
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
257 unsigned long rsvd1;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
258 unsigned long rsvd2;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
259 unsigned long _baserom;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
260 unsigned long rsvd3;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
261 unsigned long rsvd4;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
262 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
263 unsigned long max_min_ipin_iline;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
264 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
265 unsigned char int_line;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
266 unsigned char int_pin;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
267 unsigned char min_gnt;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
268 unsigned char max_lat;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
269 } mmii;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
270 } mmii;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
271 #define _max_min_ipin_iline mmii.max_min_ipin_iline
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
272 #define _int_line mmii.mmii.int_line
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
273 #define _int_pin mmii.mmii.int_pin
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
274 #define _min_gnt mmii.mmii.min_gnt
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
275 #define _max_lat mmii.mmii.max_lat
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
276 /* I don't know how accurate or standard this is (DHD) */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
277 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
278 unsigned long user_config;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
279 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
280 unsigned char user_config_0;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
281 unsigned char user_config_1;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
282 unsigned char user_config_2;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
283 unsigned char user_config_3;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
284 } uc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
285 } uc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
286 #define _user_config uc.user_config
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
287 #define _user_config_0 uc.uc.user_config_0
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
288 #define _user_config_1 uc.uc.user_config_1
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
289 #define _user_config_2 uc.uc.user_config_2
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
290 #define _user_config_3 uc.uc.user_config_3
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
291 /* end of official PCI config space header */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
292 unsigned long _pcibusidx;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
293 unsigned long _pcinumbus;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
294 unsigned long _pcibuses[16];
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
295 unsigned short _configtype; /* config type found */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
296 unsigned short _ioaddr; /* config type 1 - private I/O addr */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
297 unsigned long _cardnum; /* config type 2 - private card number */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
298 };
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
299 #else
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
300 /* ppc is big endian, swapping bytes is not quite enough
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
301 * to interpret the PCI config registers...
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
302 */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
303 struct pci_config_reg {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
304 /* start of official PCI config space header */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
305 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
306 unsigned long device_vendor;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
307 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
308 unsigned short device;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
309 unsigned short vendor;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
310 } dv;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
311 } dv_id;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
312 #define _device_vendor dv_id.device_vendor
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
313 #define _vendor dv_id.dv.vendor
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
314 #define _device dv_id.dv.device
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
315 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
316 unsigned long status_command;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
317 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
318 unsigned short status;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
319 unsigned short command;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
320 } sc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
321 } stat_cmd;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
322 #define _status_command stat_cmd.status_command
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
323 #define _command stat_cmd.sc.command
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
324 #define _status stat_cmd.sc.status
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
325 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
326 unsigned long class_revision;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
327 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
328 unsigned char base_class;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
329 unsigned char sub_class;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
330 unsigned char prog_if;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
331 unsigned char rev_id;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
332 } cr;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
333 } class_rev;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
334 #define _class_revision class_rev.class_revision
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
335 #define _rev_id class_rev.cr.rev_id
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
336 #define _prog_if class_rev.cr.prog_if
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
337 #define _sub_class class_rev.cr.sub_class
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
338 #define _base_class class_rev.cr.base_class
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
339 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
340 unsigned long bist_header_latency_cache;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
341 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
342 unsigned char bist;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
343 unsigned char header_type;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
344 unsigned char latency_timer;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
345 unsigned char cache_line_size;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
346 } bhlc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
347 } bhlc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
348 #define _bist_header_latency_cache bhlc.bist_header_latency_cache
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
349 #define _cache_line_size bhlc.bhlc.cache_line_size
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
350 #define _latency_timer bhlc.bhlc.latency_timer
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
351 #define _header_type bhlc.bhlc.header_type
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
352 #define _bist bhlc.bhlc.bist
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
353 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
354 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
355 unsigned long dv_base0;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
356 unsigned long dv_base1;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
357 unsigned long dv_base2;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
358 unsigned long dv_base3;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
359 unsigned long dv_base4;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
360 unsigned long dv_base5;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
361 } dv;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
362 /* ?? */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
363 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
364 unsigned long bg_rsrvd[2];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
365
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
366 unsigned char secondary_latency_timer;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
367 unsigned char subordinate_bus_number;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
368 unsigned char secondary_bus_number;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
369 unsigned char primary_bus_number;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
370
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
371 unsigned short secondary_status;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
372 unsigned char io_limit;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
373 unsigned char io_base;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
374
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
375 unsigned short mem_limit;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
376 unsigned short mem_base;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
377
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
378 unsigned short prefetch_mem_limit;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
379 unsigned short prefetch_mem_base;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
380 } bg;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
381 } bc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
382 #define _base0 bc.dv.dv_base0
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
383 #define _base1 bc.dv.dv_base1
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
384 #define _base2 bc.dv.dv_base2
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
385 #define _base3 bc.dv.dv_base3
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
386 #define _base4 bc.dv.dv_base4
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
387 #define _base5 bc.dv.dv_base5
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
388 #define _primary_bus_number bc.bg.primary_bus_number
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
389 #define _secondary_bus_number bc.bg.secondary_bus_number
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
390 #define _subordinate_bus_number bc.bg.subordinate_bus_number
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
391 #define _secondary_latency_timer bc.bg.secondary_latency_timer
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
392 #define _io_base bc.bg.io_base
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
393 #define _io_limit bc.bg.io_limit
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
394 #define _secondary_status bc.bg.secondary_status
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
395 #define _mem_base bc.bg.mem_base
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
396 #define _mem_limit bc.bg.mem_limit
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
397 #define _prefetch_mem_base bc.bg.prefetch_mem_base
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
398 #define _prefetch_mem_limit bc.bg.prefetch_mem_limit
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
399 unsigned long rsvd1;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
400 unsigned long rsvd2;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
401 unsigned long _baserom;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
402 unsigned long rsvd3;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
403 unsigned long rsvd4;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
404 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
405 unsigned long max_min_ipin_iline;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
406 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
407 unsigned char max_lat;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
408 unsigned char min_gnt;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
409 unsigned char int_pin;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
410 unsigned char int_line;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
411 } mmii;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
412 } mmii;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
413 #define _max_min_ipin_iline mmii.max_min_ipin_iline
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
414 #define _int_line mmii.mmii.int_line
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
415 #define _int_pin mmii.mmii.int_pin
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
416 #define _min_gnt mmii.mmii.min_gnt
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
417 #define _max_lat mmii.mmii.max_lat
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
418 /* I don't know how accurate or standard this is (DHD) */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
419 union {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
420 unsigned long user_config;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
421 struct {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
422 unsigned char user_config_3;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
423 unsigned char user_config_2;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
424 unsigned char user_config_1;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
425 unsigned char user_config_0;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
426 } uc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
427 } uc;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
428 #define _user_config uc.user_config
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
429 #define _user_config_0 uc.uc.user_config_0
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
430 #define _user_config_1 uc.uc.user_config_1
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
431 #define _user_config_2 uc.uc.user_config_2
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
432 #define _user_config_3 uc.uc.user_config_3
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
433 /* end of official PCI config space header */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
434 unsigned long _pcibusidx;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
435 unsigned long _pcinumbus;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
436 unsigned long _pcibuses[16];
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
437 unsigned short _ioaddr; /* config type 1 - private I/O addr */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
438 unsigned short _configtype; /* config type found */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
439 unsigned long _cardnum; /* config type 2 - private card number */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
440 };
27005
0a7f07b761e1 Add comments to a few #endif preprocessor directives.
diego
parents: 26753
diff changeset
441 #endif /* !defined(__powerpc__) */
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
442
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
443 #define NF ((void (*)())NULL), { 0.0, 0, 0, NULL }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
444 #define PCI_MULTIFUNC_DEV 0x80
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
445 #define PCI_ID_REG 0x00
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
446 #define PCI_CMD_STAT_REG 0x04
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
447 #define PCI_CLASS_REG 0x08
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
448 #define PCI_HEADER_MISC 0x0C
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
449 #define PCI_MAP_REG_START 0x10
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
450 #define PCI_MAP_ROM_REG 0x30
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
451 #define PCI_INTERRUPT_REG 0x3C
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
452 #define PCI_REG_USERCONFIG 0x40
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
453
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
454 static int pcibus=-1, pcicard=-1, pcifunc=-1 ;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
455 /*static struct pci_device *pcidev=NULL ;*/
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
456
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
457 #if defined(__alpha__)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
458 #define PCI_EN 0x00000000
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
459 #else
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
460 #define PCI_EN 0x80000000
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
461 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
462
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
463 #define PCI_MODE1_ADDRESS_REG 0xCF8
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
464 #define PCI_MODE1_DATA_REG 0xCFC
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
465
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
466 #define PCI_MODE2_ENABLE_REG 0xCF8
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
467 #ifdef PC98
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
468 #define PCI_MODE2_FORWARD_REG 0xCF9
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
469 #else
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
470 #define PCI_MODE2_FORWARD_REG 0xCFA
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
471 #endif
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
472
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
473 /* cpu depended stuff */
8503
9dbb9c710480 svgalib kernelhelper support (based on patch by Matan Ziv-Av <matan@svgalib.org>) and some reordering/cleanup (part #1 ;)
alex
parents: 5702
diff changeset
474 #ifndef CONFIG_SVGAHELPER
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
475 #if defined(__alpha__)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
476 #include "sysdep/pci_alpha.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
477 #elif defined(__ia64__)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
478 #include "sysdep/pci_ia64.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
479 #elif defined(__sparc__)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
480 #include "sysdep/pci_sparc.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
481 #elif defined( __arm32__ )
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
482 #include "sysdep/pci_arm32.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
483 #elif defined(__powerpc__)
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
484 #include "sysdep/pci_powerpc.c"
27419
3f6d802c6ea8 Add proper VIDIX support for SuperH architecture.
ben
parents: 27250
diff changeset
485 #elif defined(__x86_64__) || defined(__sh__)
12687
cb35163ef0a1 x86-64 (amd64) support by Kenny Root
alex
parents: 10980
diff changeset
486 /* Nothing here right now */
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
487 #else
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
488 #include "sysdep/pci_x86.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
489 #endif
27005
0a7f07b761e1 Add comments to a few #endif preprocessor directives.
diego
parents: 26753
diff changeset
490 #endif /*CONFIG_SVGAHELPER */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
491
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
492 static pciinfo_t *pci_lst;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
493
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
494 static void identify_card(struct pci_config_reg *pcr, int idx)
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
495 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
496 /* local overflow test */
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
497 if (idx>=MAX_PCI_DEVICES) return ;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
498
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
499 pci_lst[idx].bus = pcibus ;
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
500 pci_lst[idx].card = pcicard ;
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
501 pci_lst[idx].func = pcifunc ;
9767
f6d2772efca3 Ignore disabled cards. (Jon Burgess <jburgess@uklinux.net>)
ranma
parents: 8776
diff changeset
502 pci_lst[idx].command = pcr->_status_command & 0xFFFF;
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
503 pci_lst[idx].vendor = pcr->_vendor ;
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
504 pci_lst[idx].device = pcr->_device ;
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
505 pci_lst[idx].base0 = 0xFFFFFFFF ;
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
506 pci_lst[idx].base1 = 0xFFFFFFFF ;
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
507 pci_lst[idx].base2 = 0xFFFFFFFF ;
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
508 pci_lst[idx].baserom = 0x000C0000 ;
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
509 if (pcr->_base0) pci_lst[idx].base0 = pcr->_base0 &
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
510 ((pcr->_base0&0x1) ? 0xFFFFFFFC : 0xFFFFFFF0) ;
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
511 if (pcr->_base1) pci_lst[idx].base1 = pcr->_base1 &
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
512 ((pcr->_base1&0x1) ? 0xFFFFFFFC : 0xFFFFFFF0) ;
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
513 if (pcr->_base2) pci_lst[idx].base2 = pcr->_base2 &
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
514 ((pcr->_base2&0x1) ? 0xFFFFFFFC : 0xFFFFFFF0) ;
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
515 if (pcr->_baserom) pci_lst[idx].baserom = pcr->_baserom ;
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
516 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
517
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
518 /*main(int argc, char *argv[])*/
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
519 int pci_scan(pciinfo_t *pci_list,unsigned *num_pci)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
520 {
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
521 unsigned int idx = 0;
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
522 struct pci_config_reg pcr;
24510
e7f836a459ea ifdef one variable that is not used with alpha and powerpc architectures
ben
parents: 23734
diff changeset
523 int do_mode1_scan = 0;
e7f836a459ea ifdef one variable that is not used with alpha and powerpc architectures
ben
parents: 23734
diff changeset
524 #if !defined(__alpha__) && !defined(__powerpc__)
e7f836a459ea ifdef one variable that is not used with alpha and powerpc architectures
ben
parents: 23734
diff changeset
525 int do_mode2_scan = 0;
e7f836a459ea ifdef one variable that is not used with alpha and powerpc architectures
ben
parents: 23734
diff changeset
526 #endif
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
527 int func, hostbridges=0;
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
528 int ret = -1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
529
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
530 pci_lst = pci_list;
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
531 *num_pci = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
532
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
533 ret = enable_os_io();
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
534 if (ret != 0)
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 24511
diff changeset
535 return ret;
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
536
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
537 if((pcr._configtype = pci_config_type()) == 0xFFFF) return ENODEV;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
538
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
539 /* Try pci config 1 probe first */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
540
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
541 if ((pcr._configtype == 1) || do_mode1_scan) {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
542 /*printf("\nPCI probing configuration type 1\n");*/
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
543
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
544 pcr._ioaddr = 0xFFFF;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
545
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
546 pcr._pcibuses[0] = 0;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
547 pcr._pcinumbus = 1;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
548 pcr._pcibusidx = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
549
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
550 do {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
551 /*printf("Probing for devices on PCI bus %d:\n\n", pcr._pcibusidx);*/
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
552
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
553 for (pcr._cardnum = 0x0; pcr._cardnum < MAX_PCI_DEVICES_PER_BUS;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
554 pcr._cardnum += 0x1) {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
555 func = 0;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
556 do { /* loop over the different functions, if present */
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
557 pcr._device_vendor = pci_get_vendor(pcr._pcibuses[pcr._pcibusidx], pcr._cardnum,
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
558 func);
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
559 if ((pcr._vendor == 0xFFFF) || (pcr._device == 0xFFFF))
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
560 break; /* nothing there */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
561
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
562 /*printf("\npci bus 0x%x cardnum 0x%02x function 0x%04x: vendor 0x%04x device 0x%04x\n",
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
563 pcr._pcibuses[pcr._pcibusidx], pcr._cardnum, func,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
564 pcr._vendor, pcr._device);*/
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
565 pcibus = pcr._pcibuses[pcr._pcibusidx];
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
566 pcicard = pcr._cardnum;
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
567 pcifunc = func;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
568
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
569 pcr._status_command = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
570 pcr._cardnum,func,PCI_CMD_STAT_REG);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
571 pcr._class_revision = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
572 pcr._cardnum,func,PCI_CLASS_REG);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
573 pcr._bist_header_latency_cache = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
574 pcr._cardnum,func,PCI_HEADER_MISC);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
575 pcr._base0 = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
576 pcr._cardnum,func,PCI_MAP_REG_START);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
577 pcr._base1 = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
578 pcr._cardnum,func,PCI_MAP_REG_START+4);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
579 pcr._base2 = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
580 pcr._cardnum,func,PCI_MAP_REG_START+8);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
581 pcr._base3 = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
582 pcr._cardnum,func,PCI_MAP_REG_START+0x0C);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
583 pcr._base4 = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
584 pcr._cardnum,func,PCI_MAP_REG_START+0x10);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
585 pcr._base5 = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
586 pcr._cardnum,func,PCI_MAP_REG_START+0x14);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
587 pcr._baserom = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
588 pcr._cardnum,func,PCI_MAP_ROM_REG);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
589 pcr._max_min_ipin_iline = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
590 pcr._cardnum,func,PCI_INTERRUPT_REG);
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
591 pcr._user_config = pci_config_read_long(pcr._pcibuses[pcr._pcibusidx],
2e3262002acb Improved readability and new stuffs
nick
parents: 4112
diff changeset
592 pcr._cardnum,func,PCI_REG_USERCONFIG);
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
593 /* check for pci-pci bridges */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
594 #define PCI_CLASS_MASK 0xff000000
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
595 #define PCI_SUBCLASS_MASK 0x00ff0000
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
596 #define PCI_CLASS_BRIDGE 0x06000000
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
597 #define PCI_SUBCLASS_BRIDGE_PCI 0x00040000
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
598 switch(pcr._class_revision & (PCI_CLASS_MASK|PCI_SUBCLASS_MASK)) {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
599 case PCI_CLASS_BRIDGE|PCI_SUBCLASS_BRIDGE_PCI:
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
600 if (pcr._secondary_bus_number > 0) {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
601 pcr._pcibuses[pcr._pcinumbus++] = pcr._secondary_bus_number;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
602 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
603 break;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
604 case PCI_CLASS_BRIDGE:
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
605 if ( ++hostbridges > 1) {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
606 pcr._pcibuses[pcr._pcinumbus] = pcr._pcinumbus;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
607 pcr._pcinumbus++;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
608 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
609 break;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
610 default:
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
611 break;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
612 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
613 if((func==0) && ((pcr._header_type & PCI_MULTIFUNC_DEV) == 0)) {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
614 /* not a multi function device */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
615 func = 8;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
616 } else {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
617 func++;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
618 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
619
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
620 if (idx++ >= MAX_PCI_DEVICES)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
621 continue;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
622
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
623 identify_card(&pcr, (*num_pci)++);
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
624 } while( func < 8 );
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
625 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
626 } while (++pcr._pcibusidx < pcr._pcinumbus);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
627 }
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
628
27419
3f6d802c6ea8 Add proper VIDIX support for SuperH architecture.
ben
parents: 27250
diff changeset
629 #if !defined(__alpha__) && !defined(__powerpc__) && !defined(__sh__)
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
630 /* Now try pci config 2 probe (deprecated) */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
631
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
632 if ((pcr._configtype == 2) || do_mode2_scan) {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
633 outb(PCI_MODE2_ENABLE_REG, 0xF1);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
634 outb(PCI_MODE2_FORWARD_REG, 0x00); /* bus 0 for now */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
635
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
636 /*printf("\nPCI probing configuration type 2\n");*/
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
637
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
638 pcr._pcibuses[0] = 0;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
639 pcr._pcinumbus = 1;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
640 pcr._pcibusidx = 0;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
641 idx = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
642
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
643 do {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
644 for (pcr._ioaddr = 0xC000; pcr._ioaddr < 0xD000; pcr._ioaddr += 0x0100){
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
645 outb(PCI_MODE2_FORWARD_REG, pcr._pcibuses[pcr._pcibusidx]); /* bus 0 for now */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
646 pcr._device_vendor = inl(pcr._ioaddr);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
647 outb(PCI_MODE2_FORWARD_REG, 0x00); /* bus 0 for now */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
648
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
649 if ((pcr._vendor == 0xFFFF) || (pcr._device == 0xFFFF))
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
650 continue;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
651 if ((pcr._vendor == 0xF0F0) || (pcr._device == 0xF0F0))
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
652 continue; /* catch ASUS P55TP4XE motherboards */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
653
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
654 /*printf("\npci bus 0x%x slot at 0x%04x, vendor 0x%04x device 0x%04x\n",
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
655 pcr._pcibuses[pcr._pcibusidx], pcr._ioaddr, pcr._vendor,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
656 pcr._device);*/
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
657 pcibus = pcr._pcibuses[pcr._pcibusidx] ;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
658 pcicard = pcr._ioaddr ; pcifunc = 0 ;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
659
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
660 outb(PCI_MODE2_FORWARD_REG, pcr._pcibuses[pcr._pcibusidx]); /* bus 0 for now */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
661 pcr._status_command = inl(pcr._ioaddr + 0x04);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
662 pcr._class_revision = inl(pcr._ioaddr + 0x08);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
663 pcr._bist_header_latency_cache = inl(pcr._ioaddr + 0x0C);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
664 pcr._base0 = inl(pcr._ioaddr + 0x10);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
665 pcr._base1 = inl(pcr._ioaddr + 0x14);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
666 pcr._base2 = inl(pcr._ioaddr + 0x18);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
667 pcr._base3 = inl(pcr._ioaddr + 0x1C);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
668 pcr._base4 = inl(pcr._ioaddr + 0x20);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
669 pcr._base5 = inl(pcr._ioaddr + 0x24);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
670 pcr._baserom = inl(pcr._ioaddr + 0x30);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
671 pcr._max_min_ipin_iline = inl(pcr._ioaddr + 0x3C);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
672 pcr._user_config = inl(pcr._ioaddr + 0x40);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
673 outb(PCI_MODE2_FORWARD_REG, 0x00); /* bus 0 for now */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
674
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
675 /* check for pci-pci bridges (currently we only know Digital) */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
676 if ((pcr._vendor == 0x1011) && (pcr._device == 0x0001))
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
677 if (pcr._secondary_bus_number > 0)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
678 pcr._pcibuses[pcr._pcinumbus++] = pcr._secondary_bus_number;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
679
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
680 if (idx++ >= MAX_PCI_DEVICES)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
681 continue;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
682
8776
298208d7a703 pci_scan cleanup, idea and initial patch by Aurelien Jacobs <aurel@gnuage.org>
alex
parents: 8503
diff changeset
683 identify_card(&pcr, (*num_pci)++);
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
684 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
685 } while (++pcr._pcibusidx < pcr._pcinumbus);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
686
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
687 outb(PCI_MODE2_ENABLE_REG, 0x00);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
688 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
689
27419
3f6d802c6ea8 Add proper VIDIX support for SuperH architecture.
ben
parents: 27250
diff changeset
690 #endif /* !__alpha__ && !__powerpc__ && !__sh__ */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
691
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
692 disable_os_io();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
693
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
694 return 0 ;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
695
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
696 }
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
697
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
698 #if !defined(ENOTSUP)
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
699 #if defined(EOPNOTSUPP)
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
700 #define ENOTSUP EOPNOTSUPP
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
701 #else
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
702 #warning "ENOTSUP nor EOPNOTSUPP defined!"
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
703 #endif
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
704 #endif
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
705
4277
5f74792b6d5e pci_config_read working
alex
parents: 4192
diff changeset
706 int pci_config_read(unsigned char bus, unsigned char dev, unsigned char func,
5f74792b6d5e pci_config_read working
alex
parents: 4192
diff changeset
707 unsigned char cmd, int len, unsigned long *val)
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
708 {
4277
5f74792b6d5e pci_config_read working
alex
parents: 4192
diff changeset
709 int ret;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
710
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
711 if (len != 4)
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
712 {
17971
fd0d4b94b5ec Change some printf calls to fprintf.
diego
parents: 15566
diff changeset
713 fprintf(stderr,"pci_config_read: Reading non-dword not supported!\n");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 24511
diff changeset
714 return ENOTSUP;
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
715 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
716
4277
5f74792b6d5e pci_config_read working
alex
parents: 4192
diff changeset
717 ret = enable_os_io();
5f74792b6d5e pci_config_read working
alex
parents: 4192
diff changeset
718 if (ret != 0)
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 24511
diff changeset
719 return ret;
4277
5f74792b6d5e pci_config_read working
alex
parents: 4192
diff changeset
720 ret = pci_config_read_long(bus, dev, func, cmd);
5f74792b6d5e pci_config_read working
alex
parents: 4192
diff changeset
721 disable_os_io();
5f74792b6d5e pci_config_read working
alex
parents: 4192
diff changeset
722
5f74792b6d5e pci_config_read working
alex
parents: 4192
diff changeset
723 *val = ret;
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 24511
diff changeset
724 return 0;
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4173
diff changeset
725 }
4192
fb092b45c9cc en(dis)able app io should be exported too
nick
parents: 4174
diff changeset
726
fb092b45c9cc en(dis)able app io should be exported too
nick
parents: 4174
diff changeset
727 int enable_app_io( void )
fb092b45c9cc en(dis)able app io should be exported too
nick
parents: 4174
diff changeset
728 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27764
diff changeset
729 return enable_os_io();
4192
fb092b45c9cc en(dis)able app io should be exported too
nick
parents: 4174
diff changeset
730 }
fb092b45c9cc en(dis)able app io should be exported too
nick
parents: 4174
diff changeset
731
fb092b45c9cc en(dis)able app io should be exported too
nick
parents: 4174
diff changeset
732 int disable_app_io( void )
fb092b45c9cc en(dis)able app io should be exported too
nick
parents: 4174
diff changeset
733 {
fb092b45c9cc en(dis)able app io should be exported too
nick
parents: 4174
diff changeset
734 return disable_os_io();
5702
567de708ab3a sync with mplayerxp
nick
parents: 4278
diff changeset
735 }