Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1029 serge 1
/*
2
 * Copyright 2007  Luc Verhaegen 
3
 * Copyright 2007  Matthias Hopf 
4
 * Copyright 2007  Egbert Eich   
5
 * Copyright 2007  Advanced Micro Devices, Inc.
6
 *
7
 * Permission is hereby granted, free of charge, to any person obtaining a
8
 * copy of this software and associated documentation files (the "Software"),
9
 * to deal in the Software without restriction, including without limitation
10
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11
 * and/or sell copies of the Software, and to permit persons to whom the
12
 * Software is furnished to do so, subject to the following conditions:
13
 *
14
 * The above copyright notice and this permission notice shall be included in
15
 * all copies or substantial portions of the Software.
16
 *
17
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
21
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
 * OTHER DEALINGS IN THE SOFTWARE.
24
 */
25
 
26
#ifdef HAVE_CONFIG_H
27
#include "config.h"
28
#endif
29
 
30
#include "xf86.h"
31
#include "rhd.h"
32
#ifdef ATOM_BIOS
33
#include "rhd_atombios.h"
34
#endif
35
#include "rhd_connector.h"
36
#include "rhd_output.h"
37
#include "rhd_card.h"
38
 
39
SymTabRec RHDChipsets[] = {
40
    /* R500 */
41
    { RHD_RV505, "RV505" },
42
    { RHD_RV515, "RV515" },
43
    { RHD_RV516, "RV516" },
44
    { RHD_R520,  "R520" },
45
    { RHD_RV530, "RV530" },
46
    { RHD_RV535, "RV535" },
47
    { RHD_RV550, "RV550" },
48
    { RHD_RV560, "RV560" },
49
    { RHD_RV570, "RV570" },
50
    { RHD_R580,  "R580" },
51
    /* R500 Mobility */
52
    { RHD_M52,   "M52" },
53
    { RHD_M54,   "M54" },
54
    { RHD_M56,   "M56" },
55
    { RHD_M58,   "M58" },
56
    { RHD_M62,   "M62" },
57
    { RHD_M64,   "M64" },
58
    { RHD_M66,   "M66" },
59
    { RHD_M68,   "M68" },
60
    { RHD_M71,   "M71" },
61
    /* R500 integrated */
62
    { RHD_RS600, "RS600" },
63
    { RHD_RS690, "RS690" },
64
    { RHD_RS740, "RS740" },
65
    /* R600 */
66
    { RHD_R600,  "R600" },
67
    { RHD_RV610, "RV610" },
68
    { RHD_RV630, "RV630" },
69
    /* R600 Mobility */
70
    { RHD_M72,   "M72" },
71
    { RHD_M74,   "M74" },
72
    { RHD_M76,   "M76" },
73
    /* RV670 came into existence after RV6x0 and M7x */
74
    { RHD_RV670, "RV670" },
75
    { RHD_M88,   "M88" },
76
    { RHD_R680,  "R680"  },
77
    { RHD_RV620, "RV620" },
78
    { RHD_M82,   "M82"   },
79
    { RHD_RV635, "RV635" },
80
    { RHD_M86,   "M86"   },
81
    { RHD_RS780, "RS780" },
82
    { RHD_RV770, "RV770" },
83
    { RHD_RV730, "RV730" },
84
    { RHD_RV710, "RV710" },
85
    { -1,      NULL }
86
};
87
 
88
# define RHD_DEVICE_MATCH(d, i) { (d),(i) }
89
# define PCI_ID_LIST PciChipset_t RHDPCIchipsets[]
90
# define LIST_END { 0,  0}
91
 
92
const PCI_ID_LIST = {
93
    RHD_DEVICE_MATCH(  0x7100, RHD_R520  ), /* Radeon X1800 */
94
    RHD_DEVICE_MATCH(  0x7101, RHD_M58   ), /* Mobility Radeon X1800 XT */
95
    RHD_DEVICE_MATCH(  0x7102, RHD_M58   ), /* Mobility Radeon X1800 */
96
    RHD_DEVICE_MATCH(  0x7103, RHD_M58   ), /* Mobility FireGL V7200 */
97
    RHD_DEVICE_MATCH(  0x7104, RHD_R520  ), /* FireGL V7200 */
98
    RHD_DEVICE_MATCH(  0x7105, RHD_R520  ), /* FireGL V5300 */
99
    RHD_DEVICE_MATCH(  0x7106, RHD_M58   ), /* Mobility FireGL V7100 */
100
    RHD_DEVICE_MATCH(  0x7108, RHD_R520  ), /* Radeon X1800 */
101
    RHD_DEVICE_MATCH(  0x7109, RHD_R520  ), /* Radeon X1800 */
102
    RHD_DEVICE_MATCH(  0x710A, RHD_R520  ), /* Radeon X1800 */
103
    RHD_DEVICE_MATCH(  0x710B, RHD_R520  ), /* Radeon X1800 */
104
    RHD_DEVICE_MATCH(  0x710C, RHD_R520  ), /* Radeon X1800 */
105
    RHD_DEVICE_MATCH(  0x710E, RHD_R520  ), /* FireGL V7300 */
106
    RHD_DEVICE_MATCH(  0x710F, RHD_R520  ), /* FireGL V7350 */
107
    RHD_DEVICE_MATCH(  0x7140, RHD_RV515 ), /* Radeon X1600/X1550 */
108
    RHD_DEVICE_MATCH(  0x7141, RHD_RV505 ), /* RV505 */
109
    RHD_DEVICE_MATCH(  0x7142, RHD_RV515 ), /* Radeon X1300/X1550 */
110
    RHD_DEVICE_MATCH(  0x7143, RHD_RV505 ), /* Radeon X1550 */
111
    RHD_DEVICE_MATCH(  0x7144, RHD_M54   ), /* M54-GL */
112
    RHD_DEVICE_MATCH(  0x7145, RHD_M54   ), /* Mobility Radeon X1400 */
113
    RHD_DEVICE_MATCH(  0x7146, RHD_RV515 ), /* Radeon X1300/X1550 */
114
    RHD_DEVICE_MATCH(  0x7147, RHD_RV505 ), /* Radeon X1550 64-bit */
115
    RHD_DEVICE_MATCH(  0x7149, RHD_M52   ), /* Mobility Radeon X1300 */
116
    RHD_DEVICE_MATCH(  0x714A, RHD_M52   ), /* Mobility Radeon X1300 */
117
    RHD_DEVICE_MATCH(  0x714B, RHD_M52   ), /* Mobility Radeon X1300 */
118
    RHD_DEVICE_MATCH(  0x714C, RHD_M52   ), /* Mobility Radeon X1300 */
119
    RHD_DEVICE_MATCH(  0x714D, RHD_RV515 ), /* Radeon X1300 */
120
    RHD_DEVICE_MATCH(  0x714E, RHD_RV515 ), /* Radeon X1300 */
121
    RHD_DEVICE_MATCH(  0x714F, RHD_RV505 ), /* RV505 */
122
    RHD_DEVICE_MATCH(  0x7151, RHD_RV505 ), /* RV505 */
123
    RHD_DEVICE_MATCH(  0x7152, RHD_RV515 ), /* FireGL V3300 */
124
    RHD_DEVICE_MATCH(  0x7153, RHD_RV515 ), /* FireGL V3350 */
125
    RHD_DEVICE_MATCH(  0x715E, RHD_RV515 ), /* Radeon X1300 */
126
    RHD_DEVICE_MATCH(  0x715F, RHD_RV505 ), /* Radeon X1550 64-bit */
127
    RHD_DEVICE_MATCH(  0x7180, RHD_RV516 ), /* Radeon X1300/X1550 */
128
    RHD_DEVICE_MATCH(  0x7181, RHD_RV516 ), /* Radeon X1600 */
129
    RHD_DEVICE_MATCH(  0x7183, RHD_RV516 ), /* Radeon X1300/X1550 */
130
    RHD_DEVICE_MATCH(  0x7186, RHD_M64   ), /* Mobility Radeon X1450 */
131
    RHD_DEVICE_MATCH(  0x7187, RHD_RV516 ), /* Radeon X1300/X1550 */
132
    RHD_DEVICE_MATCH(  0x7188, RHD_M64   ), /* Mobility Radeon X2300 */
133
    RHD_DEVICE_MATCH(  0x718A, RHD_M64   ), /* Mobility Radeon X2300 */
134
    RHD_DEVICE_MATCH(  0x718B, RHD_M62   ), /* Mobility Radeon X1350 */
135
    RHD_DEVICE_MATCH(  0x718C, RHD_M62   ), /* Mobility Radeon X1350 */
136
    RHD_DEVICE_MATCH(  0x718D, RHD_M64   ), /* Mobility Radeon X1450 */
137
    RHD_DEVICE_MATCH(  0x718F, RHD_RV516 ), /* Radeon X1300 */
138
    RHD_DEVICE_MATCH(  0x7193, RHD_RV516 ), /* Radeon X1550 */
139
    RHD_DEVICE_MATCH(  0x7196, RHD_M62   ), /* Mobility Radeon X1350 */
140
    RHD_DEVICE_MATCH(  0x719B, RHD_RV516 ), /* FireMV 2250 */
141
    RHD_DEVICE_MATCH(  0x719F, RHD_RV516 ), /* Radeon X1550 64-bit */
142
    RHD_DEVICE_MATCH(  0x71C0, RHD_RV530 ), /* Radeon X1600 */
143
    RHD_DEVICE_MATCH(  0x71C1, RHD_RV535 ), /* Radeon X1650 */
144
    RHD_DEVICE_MATCH(  0x71C2, RHD_RV530 ), /* Radeon X1600 */
145
    RHD_DEVICE_MATCH(  0x71C3, RHD_RV535 ), /* Radeon X1600 */
146
    RHD_DEVICE_MATCH(  0x71C4, RHD_M56   ), /* Mobility FireGL V5200 */
147
    RHD_DEVICE_MATCH(  0x71C5, RHD_M56   ), /* Mobility Radeon X1600 */
148
    RHD_DEVICE_MATCH(  0x71C6, RHD_RV530 ), /* Radeon X1650 */
149
    RHD_DEVICE_MATCH(  0x71C7, RHD_RV535 ), /* Radeon X1650 */
150
    RHD_DEVICE_MATCH(  0x71CD, RHD_RV530 ), /* Radeon X1600 */
151
    RHD_DEVICE_MATCH(  0x71CE, RHD_RV530 ), /* Radeon X1300 XT/X1600 Pro */
152
    RHD_DEVICE_MATCH(  0x71D2, RHD_RV530 ), /* FireGL V3400 */
153
    RHD_DEVICE_MATCH(  0x71D4, RHD_M66   ), /* Mobility FireGL V5250 */
154
    RHD_DEVICE_MATCH(  0x71D5, RHD_M66   ), /* Mobility Radeon X1700 */
155
    RHD_DEVICE_MATCH(  0x71D6, RHD_M66   ), /* Mobility Radeon X1700 XT */
156
    RHD_DEVICE_MATCH(  0x71DA, RHD_RV530 ), /* FireGL V5200 */
157
    RHD_DEVICE_MATCH(  0x71DE, RHD_M66   ), /* Mobility Radeon X1700 */
158
    RHD_DEVICE_MATCH(  0x7200, RHD_RV550 ), /*  Radeon X2300HD  */
159
    RHD_DEVICE_MATCH(  0x7210, RHD_M71   ), /* Mobility Radeon HD 2300 */
160
    RHD_DEVICE_MATCH(  0x7211, RHD_M71   ), /* Mobility Radeon HD 2300 */
161
    RHD_DEVICE_MATCH(  0x7240, RHD_R580  ), /* Radeon X1950 */
162
    RHD_DEVICE_MATCH(  0x7243, RHD_R580  ), /* Radeon X1900 */
163
    RHD_DEVICE_MATCH(  0x7244, RHD_R580  ), /* Radeon X1950 */
164
    RHD_DEVICE_MATCH(  0x7245, RHD_R580  ), /* Radeon X1900 */
165
    RHD_DEVICE_MATCH(  0x7246, RHD_R580  ), /* Radeon X1900 */
166
    RHD_DEVICE_MATCH(  0x7247, RHD_R580  ), /* Radeon X1900 */
167
    RHD_DEVICE_MATCH(  0x7248, RHD_R580  ), /* Radeon X1900 */
168
    RHD_DEVICE_MATCH(  0x7249, RHD_R580  ), /* Radeon X1900 */
169
    RHD_DEVICE_MATCH(  0x724A, RHD_R580  ), /* Radeon X1900 */
170
    RHD_DEVICE_MATCH(  0x724B, RHD_R580  ), /* Radeon X1900 */
171
    RHD_DEVICE_MATCH(  0x724C, RHD_R580  ), /* Radeon X1900 */
172
    RHD_DEVICE_MATCH(  0x724D, RHD_R580  ), /* Radeon X1900 */
173
    RHD_DEVICE_MATCH(  0x724E, RHD_R580  ), /* AMD Stream Processor */
174
    RHD_DEVICE_MATCH(  0x724F, RHD_R580  ), /* Radeon X1900 */
175
    RHD_DEVICE_MATCH(  0x7280, RHD_RV570 ), /* Radeon X1950 */
176
    RHD_DEVICE_MATCH(  0x7281, RHD_RV560 ), /* RV560 */
177
    RHD_DEVICE_MATCH(  0x7283, RHD_RV560 ), /* RV560 */
178
    RHD_DEVICE_MATCH(  0x7284, RHD_M68   ), /* Mobility Radeon X1900 */
179
    RHD_DEVICE_MATCH(  0x7287, RHD_RV560 ), /* RV560 */
180
    RHD_DEVICE_MATCH(  0x7288, RHD_RV570 ), /* Radeon X1950 GT */
181
    RHD_DEVICE_MATCH(  0x7289, RHD_RV570 ), /* RV570 */
182
    RHD_DEVICE_MATCH(  0x728B, RHD_RV570 ), /* RV570 */
183
    RHD_DEVICE_MATCH(  0x728C, RHD_RV570 ), /* ATI FireGL V7400  */
184
    RHD_DEVICE_MATCH(  0x7290, RHD_RV560 ), /* RV560 */
185
    RHD_DEVICE_MATCH(  0x7291, RHD_RV560 ), /* Radeon X1650 */
186
    RHD_DEVICE_MATCH(  0x7293, RHD_RV560 ), /* Radeon X1650 */
187
    RHD_DEVICE_MATCH(  0x7297, RHD_RV560 ), /* RV560 */
188
    RHD_DEVICE_MATCH(  0x791E, RHD_RS690 ), /* Radeon X1200 */
189
    RHD_DEVICE_MATCH(  0x791F, RHD_RS690 ), /* Radeon X1200 */
190
    RHD_DEVICE_MATCH(  0x793F, RHD_RS600 ), /* Radeon Xpress 1200 */
191
    RHD_DEVICE_MATCH(  0x7941, RHD_RS600 ), /* Radeon Xpress 1200 */
192
    RHD_DEVICE_MATCH(  0x7942, RHD_RS600 ), /* Radeon Xpress 1200 (M) */
193
    RHD_DEVICE_MATCH(  0x796C, RHD_RS740 ), /* RS740 */
194
    RHD_DEVICE_MATCH(  0x796D, RHD_RS740 ), /* RS740M */
195
    RHD_DEVICE_MATCH(  0x796E, RHD_RS740 ), /* ATI Radeon 2100 RS740 */
196
    RHD_DEVICE_MATCH(  0x796F, RHD_RS740 ), /* RS740M */
197
    RHD_DEVICE_MATCH(  0x9400, RHD_R600  ), /* Radeon HD 2900 XT */
198
    RHD_DEVICE_MATCH(  0x9401, RHD_R600  ), /* Radeon HD 2900 XT */
199
    RHD_DEVICE_MATCH(  0x9402, RHD_R600  ), /* Radeon HD 2900 XT */
200
    RHD_DEVICE_MATCH(  0x9403, RHD_R600  ), /* Radeon HD 2900 Pro */
201
    RHD_DEVICE_MATCH(  0x9405, RHD_R600  ), /* Radeon HD 2900 GT */
202
    RHD_DEVICE_MATCH(  0x940A, RHD_R600  ), /* FireGL V8650 */
203
    RHD_DEVICE_MATCH(  0x940B, RHD_R600  ), /* FireGL V8600 */
204
    RHD_DEVICE_MATCH(  0x940F, RHD_R600  ), /* FireGL V7600 */
205
    RHD_DEVICE_MATCH(  0x9440, RHD_RV770 ), /* ATI Radeon 4800 Series  */
206
    RHD_DEVICE_MATCH(  0x9441, RHD_RV770 ), /* ATI Radeon 4870 X2  */
207
    RHD_DEVICE_MATCH(  0x9442, RHD_RV770 ), /* ATI Radeon 4800 Series  */
208
//    RHD_DEVICE_MATCH(  0x9443, RHD_R700  ), /* ATI Radeon 4800 Series  */
209
    RHD_DEVICE_MATCH(  0x9444, RHD_RV770 ), /* Everest ATI FirePro Graphics Accelerator  */
210
    RHD_DEVICE_MATCH(  0x9446, RHD_RV770 ), /* K2 ATI FirePro Graphics Accelerator  */
211
//    RHD_DEVICE_MATCH(  0x9447, RHD_R700 ), /* K2 ATI FirePro Graphics Accelerator  */
212
    RHD_DEVICE_MATCH(  0x944A, RHD_M98 ), /* M98  */
213
    RHD_DEVICE_MATCH(  0x944B, RHD_M98 ), /* M98  */
214
    RHD_DEVICE_MATCH(  0x944C, RHD_RV770 ), /* RV770  */
215
    RHD_DEVICE_MATCH(  0x944E, RHD_RV770 ), /* RV770  */
216
//    RHD_DEVICE_MATCH(  0x944F, RHD_R700 ), /* R700  */
217
    RHD_DEVICE_MATCH(  0x9456, RHD_RV770 ), /* Denali ATI FirePro Graphics Accelerator  */
218
    RHD_DEVICE_MATCH(  0x945A, RHD_M98 ), /* M98 */
219
    RHD_DEVICE_MATCH(  0x945B, RHD_M98 ), /* M98 */
220
    RHD_DEVICE_MATCH(  0x946A, RHD_M98 ), /* M98 */
221
    RHD_DEVICE_MATCH(  0x946B, RHD_M98 ), /* M98 */
222
    RHD_DEVICE_MATCH(  0x947A, RHD_M98 ), /* M98 */
223
    RHD_DEVICE_MATCH(  0x947B, RHD_M98 ), /* M96 */
224
    RHD_DEVICE_MATCH(  0x9480, RHD_M96 ), /* M98 */
225
    RHD_DEVICE_MATCH(  0x9487, RHD_RV730 ), /* RV730 */
226
    RHD_DEVICE_MATCH(  0x9488, RHD_M96 ), /* M96 */
227
    RHD_DEVICE_MATCH(  0x9489, RHD_M96 ), /* M96M GL */
228
    RHD_DEVICE_MATCH(  0x948F, RHD_RV730 ), /* RV730 */
229
    RHD_DEVICE_MATCH(  0x9487, RHD_RV730 ), /* RV730 */
230
    RHD_DEVICE_MATCH(  0x9490, RHD_RV730 ), /* RV730 */
231
    RHD_DEVICE_MATCH(  0x9498, RHD_RV730 ), /* RV730 */
232
    RHD_DEVICE_MATCH(  0x949E, RHD_RV730 ), /* RV730 */
233
    RHD_DEVICE_MATCH(  0x949F, RHD_RV730 ), /* RV730 */
234
    RHD_DEVICE_MATCH(  0x94C0, RHD_RV610 ), /* RV610 */
235
    RHD_DEVICE_MATCH(  0x94C1, RHD_RV610 ), /* Radeon HD 2400 XT */
236
    RHD_DEVICE_MATCH(  0x94C3, RHD_RV610 ), /* Radeon HD 2400 Pro */
237
    RHD_DEVICE_MATCH(  0x94C4, RHD_RV610 ), /* ATI Radeon HD 2400 PRO AGP */
238
    RHD_DEVICE_MATCH(  0x94C5, RHD_RV610 ), /* FireGL V4000 */
239
    RHD_DEVICE_MATCH(  0x94C6, RHD_RV610 ), /* RV610 */
240
    RHD_DEVICE_MATCH(  0x94C7, RHD_RV610 ), /* ATI Radeon HD 2350 */
241
    RHD_DEVICE_MATCH(  0x94C8, RHD_M74   ), /* Mobility Radeon HD 2400 XT */
242
    RHD_DEVICE_MATCH(  0x94C9, RHD_M72   ), /* Mobility Radeon HD 2400 */
243
    RHD_DEVICE_MATCH(  0x94CB, RHD_M72   ), /* ATI RADEON E2400 */
244
    RHD_DEVICE_MATCH(  0x94CC, RHD_RV610 ), /* ATI Radeon HD 2400 */
245
    RHD_DEVICE_MATCH(  0x9500, RHD_RV670 ), /* RV670 */
246
    RHD_DEVICE_MATCH(  0x9501, RHD_RV670 ), /* ATI Radeon HD3870 */
247
    RHD_DEVICE_MATCH(  0x9504, RHD_M88   ), /*  ATI Mobility Radeon HD 3850 */
248
    RHD_DEVICE_MATCH(  0x9505, RHD_RV670 ), /* ATI Radeon HD3850 */
249
    RHD_DEVICE_MATCH(  0x9506, RHD_M88   ), /*  ATI Mobility Radeon HD 3850 X2 */
250
    RHD_DEVICE_MATCH(  0x9507, RHD_RV670 ), /* RV670 */
251
    RHD_DEVICE_MATCH(  0x9508, RHD_M88   ), /*  ATI Mobility Radeon HD 3870 */
252
    RHD_DEVICE_MATCH(  0x9509, RHD_M88   ), /*  ATI Mobility Radeon HD 3870 X2 */
253
    RHD_DEVICE_MATCH(  0x950F, RHD_R680  ), /* ATI Radeon HD3870 X2 */
254
    RHD_DEVICE_MATCH(  0x9511, RHD_RV670 ), /* ATI FireGL V7700 */
255
    RHD_DEVICE_MATCH(  0x9515, RHD_RV670 ), /* ATI Radeon HD 3850 AGP */
256
    RHD_DEVICE_MATCH(  0x9517, RHD_RV670 ), /* ATI Radeon HD 3960 */
257
    RHD_DEVICE_MATCH(  0x9519, RHD_RV670 ), /* FireStream 9170 */
258
    RHD_DEVICE_MATCH(  0x9540, RHD_RV710 ), /*   */
259
    RHD_DEVICE_MATCH(  0x9541, RHD_RV710 ), /*   */
260
    RHD_DEVICE_MATCH(  0x9542, RHD_RV710 ), /*   */
261
    RHD_DEVICE_MATCH(  0x954E, RHD_RV710 ), /*   */
262
    RHD_DEVICE_MATCH(  0x954f, RHD_RV710 ), /*   */
263
    RHD_DEVICE_MATCH(  0x9580, RHD_RV630 ), /* RV630 */
264
    RHD_DEVICE_MATCH(  0x9581, RHD_M76   ), /* Mobility Radeon HD 2600 */
265
    RHD_DEVICE_MATCH(  0x9583, RHD_M76   ), /* Mobility Radeon HD 2600 XT */
266
    RHD_DEVICE_MATCH(  0x9586, RHD_RV630 ), /* ATI Radeon HD 2600 XT AGP */
267
    RHD_DEVICE_MATCH(  0x9587, RHD_RV630 ), /* ATI Radeon HD 2600 Pro AGP */
268
    RHD_DEVICE_MATCH(  0x9588, RHD_RV630 ), /* Radeon HD 2600 XT */
269
    RHD_DEVICE_MATCH(  0x9589, RHD_RV630 ), /* Radeon HD 2600 Pro */
270
    RHD_DEVICE_MATCH(  0x958A, RHD_RV630 ), /* Gemini RV630 */
271
    RHD_DEVICE_MATCH(  0x958B, RHD_M76   ), /* Gemini ATI Mobility Radeon HD 2600 XT */
272
    RHD_DEVICE_MATCH(  0x958C, RHD_RV630 ), /* FireGL V5600 */
273
    RHD_DEVICE_MATCH(  0x958D, RHD_RV630 ), /* FireGL V3600 */
274
    RHD_DEVICE_MATCH(  0x958E, RHD_RV630 ), /* ATI Radeon HD 2600 LE */
275
    RHD_DEVICE_MATCH(  0x958F, RHD_M76   ), /* ATI Mobility FireGL Graphics Processor */
276
    RHD_DEVICE_MATCH(  0x9590, RHD_RV635 ), /* ATI Radeon HD 3600 Series */
277
    RHD_DEVICE_MATCH(  0x9591, RHD_M86   ), /* Mobility Radeon HD 3650 */
278
    RHD_DEVICE_MATCH(  0x9593, RHD_M86   ), /* Mobility Radeon HD 3670 */
279
    RHD_DEVICE_MATCH(  0x9595, RHD_M86   ), /* Mobility FireGL V5700 */
280
    RHD_DEVICE_MATCH(  0x9596, RHD_RV635 ), /* ATI Radeon HD 3650 AGP */
281
    RHD_DEVICE_MATCH(  0x9597, RHD_RV635 ), /* ATI Radeon HD 3600 Series */
282
    RHD_DEVICE_MATCH(  0x9598, RHD_RV635 ), /* ATI Radeon HD 3670 */
283
    RHD_DEVICE_MATCH(  0x9599, RHD_RV635 ), /* ATI Radeon HD 3600 Series */
284
    RHD_DEVICE_MATCH(  0x959B, RHD_M86   ), /* Mobility FireGL Graphics Processor */
285
    RHD_DEVICE_MATCH(  0x95C0, RHD_RV620 ), /* ATI Radeon HD 3470 */
286
    RHD_DEVICE_MATCH(  0x95C2, RHD_M82   ), /* ATI Mobility Radeon HD 3430 (M82) */
287
    RHD_DEVICE_MATCH(  0x95C4, RHD_M82   ), /* Mobility Radeon HD 3400 Series (M82)  */
288
    RHD_DEVICE_MATCH(  0x95C5, RHD_RV620 ), /* ATI Radeon HD 3450 */
289
    RHD_DEVICE_MATCH(  0x95C6, RHD_RV620 ), /* ATI Radeon HD 3450 */
290
    RHD_DEVICE_MATCH(  0x95C7, RHD_RV620 ), /* ATI Radeon HD 3430 */
291
    RHD_DEVICE_MATCH(  0x95CC, RHD_RV620 ), /* Fire PRO Professional Graphics ASIC  */
292
    RHD_DEVICE_MATCH(  0x95CD, RHD_RV620 ), /* ATI FireMV 2450  */
293
    RHD_DEVICE_MATCH(  0x95CE, RHD_RV620 ), /* ATI FireMV 2260  */
294
    RHD_DEVICE_MATCH(  0x95CF, RHD_RV620 ), /* ATI FireMV 2260  */
295
    RHD_DEVICE_MATCH(  0x9610, RHD_RS780 ), /* ATI Radeon HD 3200 Graphics */
296
    RHD_DEVICE_MATCH(  0x9611, RHD_RS780 ), /* ATI Radeon 3100 Graphics */
297
    RHD_DEVICE_MATCH(  0x9612, RHD_RS780 ), /*  ATI Radeon HD 3200 Graphics  */
298
    RHD_DEVICE_MATCH(  0x9613, RHD_RS780 ), /* ATI Radeon 3100 Graphics   */
299
    RHD_DEVICE_MATCH(  0x9614, RHD_RS780 ), /* ATI Radeon HD 3300 Graphics  */
300
    LIST_END
301
};
302
 
303
static enum RHD_CHIPSETS rhdIGPChipsetList[] = {
304
    RHD_RS690,
305
    RHD_RS690,
306
    RHD_RS690,
307
    RHD_RS780,
308
    RHD_UNKNOWN /* end marker */
309
};
310
 
311
/*
312
 *
313
 */
314
void
315
RHDIdentify(int flags)
316
{
317
 
318
}
319
 
320
/*
321
 *
322
 */
323
Bool
324
RHDIsIGP(enum RHD_CHIPSETS chipset)
325
{
326
    int i = 0;
327
    while (rhdIGPChipsetList[i] != RHD_UNKNOWN) {
328
	if (chipset == (rhdIGPChipsetList[i]))
329
	    return TRUE;
330
	i++;
331
    }
332
    return FALSE;
333
}
334
 
335
/*
336
 * Some macros to help us make connector tables less messy.
337
 * There are, after all, a limited number of possibilities at the moment.
338
 */
339
#define ID_CONNECTORINFO_EMPTY \
340
     { {RHD_CONNECTOR_NONE, "NULL", RHD_DDC_NONE, RHD_HPD_NONE, \
341
       { RHD_OUTPUT_NONE, RHD_OUTPUT_NONE}}}
342
 
343
#ifdef ATOM_BIOS
344
# define DEVINFO_EMPTY   { { atomNone, atomNone } }
345
#endif
346
 
347
/* Radeon RV610 0x94C3 0x0000 0x0000 */
348
#define VGA_B1_TV_B_DVI_AA00 \
349
{{ RHD_CONNECTOR_DVI_SINGLE, "VGA CRT2", RHD_DDC_1, RHD_HPD_NONE, \
350
	{ RHD_OUTPUT_NONE, RHD_OUTPUT_DACB }},			   \
351
    {RHD_CONNECTOR_TV, "7PIN_DIN TV1 CV", RHD_DDC_0, RHD_HPD_NONE, \
352
	{ RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }},			   \
353
    {RHD_CONNECTOR_DVI_SINGLE, "SINGLE_LINK_DVI CRT1 DFP2", RHD_DDC_0, RHD_HPD_0, \
354
	{RHD_OUTPUT_LVTMA, RHD_OUTPUT_DACA }}}
355
 
356
 
357
/* Radeon X1300 0x7187:0x1545:0x1930 */
358
#define VGA_A0_TV_B_DVI_B11 \
359
    {  { RHD_CONNECTOR_VGA, "VGA CRT1", RHD_DDC_0, RHD_HPD_NONE,    \
360
	{ RHD_OUTPUT_DACA, RHD_OUTPUT_NONE }}, 			    \
361
    { RHD_CONNECTOR_TV, "SVIDEO TV1", RHD_DDC_NONE, RHD_HPD_NONE,   \
362
	{ RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }},			    \
363
    { RHD_CONNECTOR_DVI, "DVI-D DFP3", RHD_DDC_1, RHD_HPD_1,	    \
364
	{ RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE }}}
365
 
366
/* Sapphire X1550 reports 2x DVI-I but has only 1 VGA and 1 DVI */
367
#define VGA_A0_DVI_BB11 \
368
  { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
369
       { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}, \
370
    {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_1, \
371
       { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA}}}
372
 
373
/* 0x7249:0x1043:0x0168 */
374
#define DVI_AB10_DVI_A01 \
375
  { { RHD_CONNECTOR_DVI, "DVI-I DFP1 CRT2", RHD_DDC_1, RHD_HPD_0,	\
376
         { RHD_OUTPUT_TMDSA, RHD_OUTPUT_DACB }}, \
377
      { RHD_CONNECTOR_DVI, "DVI-I DFP2", RHD_DDC_0, RHD_HPD_1, \
378
         { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE }}, \
379
      { RHD_CONNECTOR_TV, "SVIDEO TV1", RHD_DDC_NONE, RHD_HPD_NONE, \
380
         { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }}}
381
 
382
#define VISIONTEK_C1550 \
383
    { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE,  \
384
	    { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE } },	   \
385
      {RHD_CONNECTOR_TV, "SVIDEO", RHD_DDC_NONE, RHD_HPD_NONE, \
386
	  { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE } },	   \
387
      {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_0, \
388
	  { RHD_OUTPUT_LVTMA, RHD_OUTPUT_DACB } } }
389
 
390
/* MacBook Pro provides a weird atombios connector table. */
391
#define ID_CONNECTORINFO_MACBOOKPRO \
392
 { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_2, RHD_HPD_NONE, \
393
       { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
394
   {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_0, \
395
       { RHD_OUTPUT_DACB, RHD_OUTPUT_TMDSA}}}
396
 
397
#ifdef ATOM_BIOS
398
# define DEVINFO_MACBOOKPRO \
399
    { { atomLCD1, atomNone }, { atomCRT2, atomDFP1 } }
400
#endif
401
 
402
/* GeCube HD 2400PRO AGP (GC-RX24PGA2-D3) specifies 2 DVI again.*/
403
#define BROKEN_VGA_B1_DVI_AB00 \
404
 { {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_0, \
405
       { RHD_OUTPUT_DACA, RHD_OUTPUT_LVTMA}}, \
406
   {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_1, RHD_HPD_NONE, \
407
       { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE}}}
408
 
409
/* Fujitsu Siemens Amilo PI1536 has no HPD on its DVI connector. */
410
#define PANEL_B_DVI_AA1 \
411
 { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_NONE, RHD_HPD_NONE, \
412
       { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
413
   {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_NONE, \
414
       { RHD_OUTPUT_DACA, RHD_OUTPUT_TMDSA}}}
415
 
416
/* Sapphire Radeon HD 2600 PRO AGP reports VGA output as DVI */
417
#define DVI_BA10_TV_B0_VGA_A0 \
418
 { { RHD_CONNECTOR_DVI, "DUAL_LINK_DVI_I", RHD_DDC_1, RHD_HPD_0, \
419
	{ RHD_OUTPUT_TMDSA, RHD_OUTPUT_DACB }}, \
420
    { RHD_CONNECTOR_TV, "7PIN_DIN TV1 CV", RHD_DDC_0, RHD_HPD_NONE, \
421
	{ RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }}, \
422
    { RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
423
	{ RHD_OUTPUT_NONE, RHD_OUTPUT_DACA }}}
424
 
425
/* MSI RX2600PRO-T2D512Z/D2 */
426
#define DVI_BA12_TV_B0_DVI_AB01 \
427
 { { RHD_CONNECTOR_DVI, "DUAL_LINK_DVI_I DFP1 CRT2", RHD_DDC_1, RHD_HPD_2, \
428
	 { RHD_OUTPUT_TMDSA, RHD_OUTPUT_DACB }}, \
429
   { RHD_CONNECTOR_TV, "7PIN_DIN TV1 CV", RHD_DDC_NONE, RHD_HPD_NONE, \
430
	 { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }}, \
431
   { RHD_CONNECTOR_DVI, "DUAL_LINK_DVI_I CRT1 DFP2", RHD_DDC_0, RHD_HPD_1, \
432
	 { RHD_OUTPUT_LVTMA, RHD_OUTPUT_DACA }}}
433
 
434
#if defined(USE_ID_CONNECTORS) || !defined(ATOM_BIOS)
435
 
436
#define	VGA_A0_TVB_DVI_BB12				       \
437
  { { RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
438
        { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE }}, \
439
    { RHD_CONNECTOR_TV, "SVIDEO", RHD_DDC_NONE, RHD_HPD_NONE, \
440
        { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE }}, \
441
    { RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_2, \
442
        { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA }}}
443
 
444
#define VGA_A0_DVI_BA10 \
445
  { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
446
       { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}, \
447
    {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_0, \
448
       { RHD_OUTPUT_DACB, RHD_OUTPUT_TMDSA}}}
449
 
450
#define VGA_A0_DVI_BB10 \
451
  { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
452
       { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}, \
453
    {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_1, RHD_HPD_0, \
454
       { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA}}}
455
 
456
#define VGA_B1_DVI_AA00 \
457
  { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_1, RHD_HPD_NONE, \
458
       { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE}}, \
459
    {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_0, \
460
       { RHD_OUTPUT_DACA, RHD_OUTPUT_TMDSA}}}
461
 
462
#define VGA_B1_DVI_AB01 \
463
  { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_1, RHD_HPD_NONE, \
464
       { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE}}, \
465
    {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_1, \
466
       { RHD_OUTPUT_DACA, RHD_OUTPUT_LVTMA}}}
467
 
468
#define VGA_B1_DVI_AB00 \
469
  { {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_1, RHD_HPD_NONE, \
470
       { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE}}, \
471
    {RHD_CONNECTOR_DVI, "DVI-I", RHD_DDC_0, RHD_HPD_0, \
472
       { RHD_OUTPUT_DACA, RHD_OUTPUT_LVTMA}}}
473
 
474
#define DVI_AA00_DVI_BB11 \
475
  { {RHD_CONNECTOR_DVI, "DVI-I 1", RHD_DDC_0, RHD_HPD_0, \
476
       { RHD_OUTPUT_DACA, RHD_OUTPUT_TMDSA}}, \
477
    {RHD_CONNECTOR_DVI, "DVI-I 2", RHD_DDC_1, RHD_HPD_1, \
478
       { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA}}}
479
 
480
#define DVI_BA10_DVI_AB01 \
481
  { {RHD_CONNECTOR_DVI, "DVI-I 1", RHD_DDC_1, RHD_HPD_0, \
482
       { RHD_OUTPUT_DACB, RHD_OUTPUT_TMDSA}}, \
483
    {RHD_CONNECTOR_DVI, "DVI-I 2", RHD_DDC_0, RHD_HPD_1, \
484
       { RHD_OUTPUT_DACA, RHD_OUTPUT_LVTMA}}}
485
 
486
#define DVI_BB11_DVI_AA00 \
487
  { {RHD_CONNECTOR_DVI, "DVI-I 1", RHD_DDC_1, RHD_HPD_1, \
488
       { RHD_OUTPUT_DACB, RHD_OUTPUT_LVTMA}}, \
489
    {RHD_CONNECTOR_DVI, "DVI-I 2", RHD_DDC_0, RHD_HPD_0, \
490
       { RHD_OUTPUT_DACA, RHD_OUTPUT_TMDSA}}}
491
 
492
#define PANEL_B_VGA_A0 \
493
  { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_NONE, RHD_HPD_NONE, \
494
       { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
495
    {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
496
       { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}}
497
 
498
#define PANEL_B1_VGA_A0 \
499
  { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_1, RHD_HPD_NONE, \
500
       { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
501
    {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
502
       { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}}
503
 
504
#define PANEL_B1_VGA_A2 \
505
  { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_1, RHD_HPD_NONE, \
506
       { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
507
    {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_2, RHD_HPD_NONE, \
508
       { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}}
509
 
510
#define PANEL_B2_VGA_A0 \
511
  { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_2, RHD_HPD_NONE, \
512
       { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
513
    {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
514
       { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}}
515
 
516
#define PANEL_B2_VGA_A0_DVI_A10 \
517
  { {RHD_CONNECTOR_PANEL, "Panel", RHD_DDC_2, RHD_HPD_NONE, \
518
       { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE}}, \
519
    {RHD_CONNECTOR_VGA, "VGA", RHD_DDC_0, RHD_HPD_NONE, \
520
       { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE}}, \
521
    {RHD_CONNECTOR_DVI, "DVI-D", RHD_DDC_1, RHD_HPD_0, \
522
       { RHD_OUTPUT_TMDSA, RHD_OUTPUT_NONE}}}
523
 
524
#else /* if !defined(USE_ID_CONNECTORS) && defined(ATOM_BIOS) */
525
 
526
#define VGA_A0_TVB_DVI_BB12     ID_CONNECTORINFO_EMPTY
527
#define VGA_A0_DVI_BA10         ID_CONNECTORINFO_EMPTY
528
#define VGA_A0_DVI_BB10         ID_CONNECTORINFO_EMPTY
529
#define VGA_B1_DVI_AA00         ID_CONNECTORINFO_EMPTY
530
#define VGA_B1_DVI_AB01         ID_CONNECTORINFO_EMPTY
531
#define VGA_B1_DVI_AB00         ID_CONNECTORINFO_EMPTY
532
#define DVI_AA00_DVI_BB11       ID_CONNECTORINFO_EMPTY
533
#define DVI_BA10_DVI_AB01       ID_CONNECTORINFO_EMPTY
534
#define DVI_BB11_DVI_AA00       ID_CONNECTORINFO_EMPTY
535
#define PANEL_B_VGA_A0          ID_CONNECTORINFO_EMPTY
536
#define PANEL_B1_VGA_A0         ID_CONNECTORINFO_EMPTY
537
#define PANEL_B1_VGA_A2         ID_CONNECTORINFO_EMPTY
538
#define PANEL_B2_VGA_A0         ID_CONNECTORINFO_EMPTY
539
#define PANEL_B2_VGA_A0_DVI_A10 ID_CONNECTORINFO_EMPTY
540
 
541
#endif /* if defined(USE_ID_CONNECTORS) || !defined(ATOM_BIOS) */
542
 
543
/*
544
 * List of pci subsystem / card ids.
545
 *
546
 * Used for:
547
 * - printing card name.
548
 * - connector mapping.
549
 *
550
 */
551
static struct rhdCard
552
rhdCards[] =
553
{
554
    /* 0x7100 : R520 : Radeon X1800 */
555
    { 0x7100, 0x1002, 0x0B12, "Powercolor X1800XT", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
556
    /* 0x7101 : M58 : Mobility Radeon X1800 XT */
557
    /* 0x7102 : M58 : Mobility Radeon X1800 */
558
    /* 0x7103 : M58 : Mobility FireGL V7200 */
559
    /* 0x7104 : R520 : FireGL V7200 */
560
    { 0x7104, 0x1002, 0x0B32, "ATI FireGL V7200 RH", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
561
    /* 0x7105 : R520 : FireGL V5300 */
562
    /* 0x7106 : M58 : Mobility FireGL V7100 */
563
    /* 0x7108 : R520 : Radeon X1800 */
564
    /* 0x7109 : R520 : Radeon X1800 */
565
    /* 0x710A : R520 : Radeon X1800 */
566
    /* 0x710B : R520 : Radeon X1800 */
567
    /* 0x710C : R520 : Radeon X1800 */
568
    /* 0x710E : R520 : FireGL V7300 */
569
    /* 0x710F : R520 : FireGL V7350 */
570
    /* 0x7140 : RV515 : Radeon X1600 */
571
    { 0x7140, 0x1787, 0x3000, "PowerColor X1550", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
572
    /* 0x7141 : RV505 : RV505 */
573
    /* 0x7142 : RV515 : Radeon X1300/X1550 */
574
    /* 0x7143 : RV505 : Radeon X1550 */
575
    /* 0x7144 : M54 : M54-GL */
576
    /* 0x7145 : M54 : Mobility Radeon X1400 */
577
    { 0x7145, 0x1028, 0x2002, "Dell Inspiron 9400", RHD_CARD_FLAG_NONE, PANEL_B2_VGA_A0_DVI_A10, DEVINFO_EMPTY },
578
    { 0x7145, 0x1028, 0x2003, "Dell Inspiron 6400", RHD_CARD_FLAG_NONE, PANEL_B_VGA_A0, DEVINFO_EMPTY },
579
    { 0x7145, 0x1179, 0xFF10, "Toshiba Satellite A100-773", RHD_CARD_FLAG_NONE, PANEL_B1_VGA_A2, DEVINFO_EMPTY },
580
    { 0x7145, 0x1297, 0x3058, "M54P X1440", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
581
    { 0x7145, 0x1734, 0x10B0, "Fujitsu Siemens Amilo PI1536", RHD_CARD_FLAG_NONE, PANEL_B_DVI_AA1, DEVINFO_EMPTY },
582
    { 0x7145, 0x17AA, 0x2006, "Lenovo Thinkpad T60 (2007)", RHD_CARD_FLAG_NONE, PANEL_B2_VGA_A0_DVI_A10, DEVINFO_EMPTY },
583
    { 0x7145, 0x17AA, 0x202A, "Lenovo Thinkpad Z61m", RHD_CARD_FLAG_NONE, PANEL_B2_VGA_A0, DEVINFO_EMPTY },
584
    /* 0x7146 : RV515 : Radeon X1300/X1550 */
585
    { 0x7146, 0x174B, 0x0470, "Sapphire X1300", RHD_CARD_FLAG_NONE, VGA_B1_DVI_AB01, DEVINFO_EMPTY },
586
    { 0x7146, 0x174B, 0x0920, "Sapphire X1300", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
587
    { 0x7146, 0x1545, 0x2350, "Visiontek C1550", RHD_CARD_FLAG_NONE,  VISIONTEK_C1550, DEVINFO_EMPTY },
588
    /* 0x7147 : RV505 : Radeon X1550 64-bit */
589
    { 0x7147, 0x174B, 0x0840, "Sapphire X1550", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
590
    /* 0x7149 : M52 : Mobility Radeon X1300 */
591
    { 0x7149, 0x1028, 0x2003, "Dell Inspiron E1505", RHD_CARD_FLAG_NONE, PANEL_B_VGA_A0, DEVINFO_EMPTY },
592
    { 0x7149, 0x17AA, 0x2005, "Lenovo Thinkpad T60 (2008)", RHD_CARD_FLAG_NONE, PANEL_B2_VGA_A0_DVI_A10, DEVINFO_EMPTY },
593
    /* 0x714A : M52 : Mobility Radeon X1300 */
594
    /* 0x714B : M52 : Mobility Radeon X1300 */
595
    /* 0x714C : M52 : Mobility Radeon X1300 */
596
    /* 0x714D : RV515 : Radeon X1300 */
597
    /* 0x714E : RV515 : Radeon X1300 */
598
    /* 0x714F : RV505 : RV505 */
599
    /* 0x7151 : RV505 : RV505 */
600
    /* 0x7152 : RV515 : FireGL V3300 */
601
    { 0x7152, 0x1002, 0x0B02, "ATI FireGL V3300", RHD_CARD_FLAG_NONE, DVI_BB11_DVI_AA00, DEVINFO_EMPTY },
602
    /* 0x7153 : RV515 : FireGL V3350 */
603
    /* 0x715E : RV515 : Radeon X1300 */
604
    /* 0x715F : RV505 : Radeon X1550 64-bit */
605
    /* 0x7180 : RV516 : Radeon X1300/X1550 */
606
    /* 0x7181 : RV516 : Radeon X1600 */
607
    /* 0x7183 : RV516 : Radeon X1300/X1550 */
608
    { 0x7183, 0x1028, 0x0D02, "Dell ATI Radeon X1300", RHD_CARD_FLAG_DMS59, DVI_AA00_DVI_BB11, DEVINFO_EMPTY },
609
    { 0x7183, 0x1092, 0x3000, "RX155PCI", RHD_CARD_FLAG_NONE, VGA_A0_TVB_DVI_BB12, DEVINFO_EMPTY },
610
    /* 0x7186 : M64 : Mobility Radeon X1450 */
611
    /* 0x7187 : RV516 : Radeon X1300/X1550 */
612
    { 0x7187, 0x174B, 0x3000, "RV516 : Radeon X1300/X1550", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
613
    { 0x7187, 0x1458, 0x215C, "RV516 : Radeon X1300/X1550", RHD_CARD_FLAG_DMS59,  ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
614
    { 0x7187, 0x1545, 0x1930, "RV516 : Radeon X1300", RHD_CARD_FLAG_NONE, VGA_A0_TV_B_DVI_B11, DEVINFO_EMPTY },
615
    /* 0x7188 : M64 : Mobility Radeon X2300 */
616
    /* 0x718A : M64 : Mobility Radeon X2300 */
617
    /* 0x718B : M62 : Mobility Radeon X1350 */
618
    /* 0x718C : M62 : Mobility Radeon X1350 */
619
    /* 0x718D : M64 : Mobility Radeon X1450 */
620
    /* 0x718F : RV516 : Radeon X1300 */
621
    /* 0x7193 : RV516 : Radeon X1550 */
622
    /* 0x7196 : M62 : Mobility Radeon X1350 */
623
    /* 0x719B : RV516 : FireMV 2250 */
624
    /* 0x719F : RV516 : Radeon X1550 64-bit */
625
    /* 0x71C0 : RV530 : Radeon X1600 */
626
    /* 0x71C1 : RV535 : Radeon X1650 */
627
    { 0x71C1, 0x174B, 0x0840, "Sapphire X1650 Pro", RHD_CARD_FLAG_NONE, DVI_AA00_DVI_BB11, DEVINFO_EMPTY },
628
    /* 0x71C2 : RV530 : Radeon X1600 */
629
    { 0x71C2, 0x1458, 0x2146, "Gigabyte GV-RX16P256DE-RH", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
630
    { 0x71C2, 0x17EE, 0x71C0, "Connect3D Radeon X1600 Pro", RHD_CARD_FLAG_NONE, VGA_B1_DVI_AA00, DEVINFO_EMPTY },
631
    /* 0x71C3 : RV535 : Radeon X1600 */
632
    /* 0x71C4 : M56 : Mobility FireGL V5200 */
633
    { 0x71C4, 0x17AA, 0x2007, "Lenovo Thinkpad T60p V5200", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
634
    /* 0x71C5 : M56 : Mobility Radeon X1600 */
635
    { 0x71C5, 0x103C, 0x30A3, "HP/Compaq nc8430", RHD_CARD_FLAG_NONE, PANEL_B1_VGA_A0, DEVINFO_EMPTY },
636
    { 0x71C5, 0x103C, 0x30B4, "HP/Compaq nw8440", RHD_CARD_FLAG_NONE, PANEL_B1_VGA_A0, DEVINFO_EMPTY },
637
    { 0x71C5, 0x1043, 0x10B2, "Asus W3J/Z96", RHD_CARD_FLAG_NONE, PANEL_B_VGA_A0, DEVINFO_EMPTY },
638
    { 0x71C5, 0x106B, 0x0080, "Macbook Pro", RHD_CARD_FLAG_NONE, ID_CONNECTORINFO_MACBOOKPRO, DEVINFO_MACBOOKPRO },
639
    { 0x71C5, 0x1179, 0xFF10, "Toshiba Satellite A100-237", RHD_CARD_FLAG_NONE, PANEL_B1_VGA_A2, DEVINFO_EMPTY },
640
    /* 0x71C6 : RV530 : Radeon X1650 */
641
    { 0x71C6, 0x174B, 0x0850, "Sapphire X1650 Pro AGP", RHD_CARD_FLAG_NONE, VGA_A0_DVI_BA10, DEVINFO_EMPTY },
642
    { 0x71C6, 0x1462, 0x0400, "MSI RX1650 Pro", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
643
    /* 0x71C7 : RV535 : Radeon X1650 */
644
    { 0x71C7, 0x1043, 0x01B6, "Asus EAX1650 Silent", RHD_CARD_FLAG_NONE, VGA_A0_DVI_BB10, DEVINFO_EMPTY },
645
    { 0x71C7, 0x1787, 0x2227, "Diamond Viper X1650 Pro", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
646
    /* 0x71CD : RV530 : Radeon X1600 */
647
    { 0x71CD, 0x174B, 0x0840, "PCP X1600 400M/500E", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
648
    /* 0x71CE : RV530 : Radeon X1300 XT/X1600 Pro */
649
    { 0x71CE, 0x18BC, 0x2770, "Radeon X1300 XT/X1600 Pro", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
650
    /* 0x71D2 : RV530 : FireGL V3400 */
651
    { 0x71D2, 0x1002, 0x2B02, "ATI FireGL V3400", RHD_CARD_FLAG_NONE, DVI_BB11_DVI_AA00, DEVINFO_EMPTY },
652
    /* 0x71D4 : M66 : Mobility FireGL V5250 */
653
    { 0x71D4, 0x17AA, 0x20A4, "Lenovo Thinkpad T60p V5250", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
654
    /* 0x71D5 : M66 : Mobility Radeon X1700 */
655
    /* 0x71D6 : M66 : Mobility Radeon X1700 XT */
656
    /* 0x71DA : RV530 : FireGL V5200 */
657
    /* 0x71DE : M66 : Mobility Radeon X1700 */
658
    /* 0x7200 : RV550 : Radeon X2300HD */
659
    /* 0x7210 : M71 : Mobility Radeon HD 2300 */
660
    /* 0x7211 : M71 : Mobility Radeon HD 2300 */
661
    /* 0x7240 : R580 : Radeon X1950 */
662
    /* 0x7243 : R580 : Radeon X1900 */
663
    /* 0x7244 : R580 : Radeon X1950 */
664
    /* 0x7245 : R580 : Radeon X1900 */
665
    /* 0x7246 : R580 : Radeon X1900 */
666
    /* 0x7247 : R580 : Radeon X1900 */
667
    /* 0x7248 : R580 : Radeon X1900 */
668
    /* 0x7249 : R580 : Radeon X1900 */
669
    { 0x7249, 0x1002, 0x0B12, "ATI Radeon X1900 XTX", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
670
    /* { 0x7249, 0x1043, 0x016B, "ATI Radeon X1900 XTX", RHD_CARD_FLAG_NONE, DVI_AB10_DVI_A01, DEVINFO_EMPTY }, */
671
    /* 0x724A : R580 : Radeon X1900 */
672
    /* 0x724B : R580 : Radeon X1900 */
673
    { 0x724B, 0x1002, 0x0B12, "Sapphire Radeon X1900 GT", RHD_CARD_FLAG_NONE, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
674
    /* 0x724C : R580 : Radeon X1900 */
675
    /* 0x724D : R580 : Radeon X1900 */
676
    /* 0x724E : R580 : AMD Stream Processor */
677
    /* 0x724F : R580 : Radeon X1900 */
678
    /* 0x7280 : RV570 : Radeon X1950 */
679
    { 0x7280, 0x174B, 0xE190, "Sapphire X1950 Pro", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
680
    { 0x7280, 0x18BC, 0x2870, "GeCube X1950 Pro", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
681
    /* 0x7281 : RV560 : RV560 */
682
    /* 0x7283 : RV560 : RV560 */
683
    /* 0x7284 : M68 : Mobility Radeon X1900 */
684
    /* 0x7287 : RV560 : RV560 */
685
    /* 0x7288 : RV570 : Radeon X1950 GT */
686
    { 0x7288, 0x174B, 0xE190, "Sapphire X1950 GT", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
687
    /* 0x7289 : RV570 : RV570 */
688
    /* 0x728B : RV570 : RV570 */
689
    /* 0x728C : RV570 : ATI FireGL V7400 */
690
    /* 0x7290 : RV560 : RV560 */
691
    /* 0x7291 : RV560 : Radeon X1650 */
692
    /* 0x7293 : RV560 : Radeon X1650 */
693
    /* 0x7297 : RV560 : RV560 */
694
    /* 0x791E : RS690 : Radeon X1200 */
695
    { 0x791E, 0x1043, 0x826D, "Asus M2A-VM", RHD_CARD_FLAG_NONE, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
696
    /* 0x791F : RS690 : Radeon X1200 */
697
    { 0x791F, 0x103C, 0x30C2, "HP/Compaq 6715b", RHD_CARD_FLAG_NONE, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
698
    /* 0x793F : RS600 : Radeon Xpress 1200 */
699
    /* 0x7941 : RS600 : Radeon Xpress 1200 */
700
    /* 0x7942 : RS600 : Radeon Xpress 1200 (M) */
701
    /* 0x796C : RS740 : RS740 */
702
    /* 0x796D : RS740 : RS740M */
703
    /* 0x796E : RS740 : RS740 */
704
    /* 0x796F : RS740 : RS740M */
705
    /* 0x9400 : R600 : Radeon HD 2900 XT */
706
    { 0x9400, 0x1002, 0x3142, "Sapphire HD 2900 XT", RHD_CARD_FLAG_NONE, DVI_BB11_DVI_AA00, DEVINFO_EMPTY },
707
    /* 0x9401 : R600 : Radeon HD 2900 XT */
708
    /* 0x9402 : R600 : Radeon HD 2900 XT */
709
    /* 0x9403 : R600 : Radeon HD 2900 Pro */
710
    /* 0x9405 : R600 : ATI Radeon HD 2900 GT  */
711
    /* 0x940A : R600 : ATI FireGL V8650  */
712
    /* 0x940B : R600 : ATI FireGL V8600  */
713
    /* 0x940F : R600 : ATI FireGL V7600  */
714
    /* 0x94C0 : RV610 : RV610 */
715
    /* 0x94C1 : RV610 : Radeon HD 2400 XT */
716
    { 0x94C1, 0x1002, 0x0D02, "ATI Radeon HD 2400 XT", RHD_CARD_FLAG_DMS59, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
717
    { 0x94C1, 0x1028, 0x0D02, "Dell Radeon HD 2400 XT", RHD_CARD_FLAG_DMS59, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
718
    { 0x94C1, 0x174B, 0xE390, "Sapphire HD 2400 XT", RHD_CARD_FLAG_NONE, VGA_B1_DVI_AB00, DEVINFO_EMPTY },
719
    { 0x94C3, 0x0000, 0x0000, "ATI Radeon 2400 HD GENERIC", RHD_CARD_FLAG_NONE, VGA_B1_TV_B_DVI_AA00, DEVINFO_EMPTY },
720
    /* 0x94C3 : RV610 : Radeon HD 2400 Pro */
721
    { 0x94C3, 0x1545, 0x3210, "ATI Radeon 2400HD Pro", RHD_CARD_FLAG_HPDSWAP, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
722
    { 0x94C3, 0x174B, 0xE370, "Sapphire HD 2400 Pro", RHD_CARD_FLAG_NONE, VGA_A0_DVI_BB10, DEVINFO_EMPTY },
723
    { 0x94C3, 0x18BC, 0x3550, "GeCube Radeon HD 2400PRO", RHD_CARD_FLAG_NONE, BROKEN_VGA_B1_DVI_AB00, DEVINFO_EMPTY },
724
    /* 0x94C4 : RV610 : ATI Radeon HD 2400 PRO AGP  */
725
    { 0x94C4, 0x18BC, 0x0028, "GeCube Radeon HD 2400PRO AGP", RHD_CARD_FLAG_NONE, BROKEN_VGA_B1_DVI_AB00, DEVINFO_EMPTY },
726
    /* 0x94C5 : RV610 : ATI FireGL V4000  */
727
    /* 0x94C6 : RV610 : RV610  */
728
    /* 0x94C7 : RV610 : ATI Radeon HD 2350 */
729
    /* 0x94C8 : M74 : Mobility Radeon HD 2400 XT */
730
    /* 0x94C9 : M72 : Mobility Radeon HD 2400 */
731
    /* 0x94CB : M72 : ATI RADEON E2400 */
732
    /* 0x94CC : RV610 : RV610  */
733
    /* 0x9505 : RV670 : ATI Radeon HD 3850 */
734
    /* 0x9580 : RV630 : RV630 */
735
    /* 0x9581 : M76 : Mobility Radeon HD 2600 */
736
    /* 0x9583 : M76 : Mobility Radeon HD 2600 XT */
737
    /* 0x9586 : RV630 : ATI Radeon HD 2600 XT AGP */
738
    /* 0x9587 : RV630 : ATI Radeon HD 2600 Pro AGP */
739
    { 0x9587, 0x1002, 0x0028, "Sapphire Radeon HD 2600 PRO AGP", RHD_CARD_FLAG_NONE, DVI_BA10_TV_B0_VGA_A0, DEVINFO_EMPTY },
740
    { 0x9587, 0x1462, 0x0028, "MSI HD2600PRO AGP", RHD_CARD_FLAG_NONE, DVI_BA12_TV_B0_DVI_AB01, DEVINFO_EMPTY },
741
    /* 0x9588 : RV630 : Radeon HD 2600 XT */
742
    { 0x9588, 0x1002, 0x2542, "ATI Radeon HD 2600XT DDR4", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
743
    { 0x9588, 0x1448, 0x216C, "Gigabyte HD 2600 XT 256MB DDR3", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
744
    { 0x9588, 0x174B, 0x2E42, "Sapphire HD 2600 XT", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
745
    /* 0x9589 : RV630 : Radeon HD 2600 Pro */
746
    { 0x9589, 0x174B, 0xE410, "Sapphire HD 2600 Pro", RHD_CARD_FLAG_NONE, DVI_BA10_DVI_AB01, DEVINFO_EMPTY },
747
    /* 0x958A : RV630 : Gemini RV630 */
748
    /* 0x958B : M76 : Gemini ATI Mobility Radeon HD 2600 XT */
749
    /* 0x958C : RV630 : ATI FireGL V5600  */
750
    /* 0x958D : RV630 : ATI FireGL V3600  */
751
    /* 0x958E : RV630 : ATI Radeon HD 2600 LE  */
752
    { 0x9610, 0x105B, 0x0E0F, "Foxconn A7GM-S (RS780)", RHD_CARD_FLAG_HPDOFF, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY },
753
    { 0, 0, 0, NULL, 0, ID_CONNECTORINFO_EMPTY, DEVINFO_EMPTY } /* KEEP THIS: End marker. */
754
};
755
 
756
/*
757
 *
758
 */
759
 
760
struct rhdCard *RHDCardIdentify(RHDPtr rhdPtr)
761
{
762
    unsigned int deviceID, subVendorID, subDeviceID;
763
    int i;
764
 
765
    deviceID = (unsigned int) rhdPtr->PciDeviceID;
766
    subVendorID = (unsigned int)rhdPtr->subvendor_id;
767
    subDeviceID = (unsigned int)rhdPtr->subdevice_id;
768
 
769
    for (i = 0; rhdCards[i].name; i++)
770
      if ((rhdCards[i].device == deviceID) &&
771
          (rhdCards[i].card_vendor == subVendorID) &&
772
          (rhdCards[i].card_device == subDeviceID))
773
        return rhdCards + i;
774
 
775
    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
776
	       "Unknown card detected: 0x%04X:0x%04X:0x%04X.\n",
777
         deviceID, subVendorID, subDeviceID);
778
    return NULL;
779
}
780
 
781
#define USE_ATOMBIOS RHD_RV770
782
#define USE_ATOM_CRTC USE_ATOMBIOS
783
#define USE_ATOM_PLL USE_ATOMBIOS
784
#define USE_ATOM_OUTPUT USE_ATOMBIOS
785
 
786
/*
787
 *
788
 */
789
Bool
790
RHDUseAtom(RHDPtr rhdPtr, enum RHD_CHIPSETS *BlackList,
791
	   enum atomSubSystem subsys)
792
{
793
#ifdef ATOM_BIOS
794
    Bool FromSys = FALSE, ret = FALSE;
795
    CARD32 FromUser = 0;
796
    int i = 0;
797
    char *message = NULL;
798
    enum RHD_CHIPSETS AtomChip;
799
    int from = 0;
800
 
801
    switch (subsys) {
802
	case atomUsageCrtc:
803
	    AtomChip = USE_ATOM_CRTC;
804
	    message = "Crtcs";
805
	    FromUser = (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_CRTC) & 0x7;
806
	    break;
807
	case atomUsagePLL:
808
	    AtomChip = USE_ATOM_PLL;
809
	    message = "PLLs";
810
	    FromUser = (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_PLL) & 0x7;
811
	    break;
812
	case atomUsageOutput:
813
	    AtomChip = USE_ATOM_OUTPUT;
814
	    message = "Outputs";
815
	    FromUser = (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_OUTPUT) & 0x7;
816
	    break;
817
	case atomUsageAny:
818
	    AtomChip = min(USE_ATOM_OUTPUT,min(USE_ATOM_PLL, USE_ATOM_CRTC));
819
	    message = "All";
820
	    FromUser = ((rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_OUTPUT)
821
		| (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_PLL)
822
			| (rhdPtr->UseAtomFlags >> RHD_ATOMBIOS_CRTC)) & 0x7;
823
	    break;
824
    }
825
 
826
    if (rhdPtr->ChipSet >= AtomChip)
827
	FromSys = TRUE;
828
 
829
    if (!FromSys && BlackList) {
830
	while (BlackList[i] != RHD_CHIP_END) {
831
	    if (BlackList[i++] == rhdPtr->ChipSet) {
832
		FromSys = TRUE;
833
	    }
834
	}
835
    }
836
    if (!FromSys) {
837
	if (rhdPtr->UseAtomBIOS.set) {
838
//        from = X_CONFIG;
839
	    ret = rhdPtr->UseAtomBIOS.val.bool;
840
	}
841
	if (FromUser & RHD_ATOMBIOS_ON)
842
	    ret = TRUE;
843
	if (FromUser & RHD_ATOMBIOS_OFF)
844
	    ret = FALSE;
845
    } else {
846
	ret = TRUE;
847
	if ((FromUser & RHD_ATOMBIOS_FORCE) && (FromUser & RHD_ATOMBIOS_OFF)) {
848
 //       from = X_CONFIG;
849
	    ret = FALSE;
850
	}
851
    }
852
    if (ret)
853
    xf86DrvMsg(rhdPtr->scrnIndex, from, "Using AtomBIOS for %s\n",
854
           message);
855
 
856
    return ret;
857
#else
858
    return 0;
859
#endif /* ATOM_BIOS */
860
}