Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
808 | serge | 1 | |
2 | /* R500 */ |
||
3 | { RHD_RV505, "RV505" }, |
||
4 | { RHD_RV515, "RV515" }, |
||
5 | { RHD_RV516, "RV516" }, |
||
6 | { RHD_R520, "R520" }, |
||
7 | { RHD_RV530, "RV530" }, |
||
8 | { RHD_RV535, "RV535" }, |
||
9 | { RHD_RV550, "RV550" }, |
||
10 | { RHD_RV560, "RV560" }, |
||
11 | { RHD_RV570, "RV570" }, |
||
12 | { RHD_R580, "R580" }, |
||
13 | /* R500 Mobility */ |
||
14 | { RHD_M52, "M52" }, |
||
15 | { RHD_M54, "M54" }, |
||
16 | { RHD_M56, "M56" }, |
||
17 | { RHD_M58, "M58" }, |
||
18 | { RHD_M62, "M62" }, |
||
19 | { RHD_M64, "M64" }, |
||
20 | { RHD_M66, "M66" }, |
||
21 | { RHD_M68, "M68" }, |
||
22 | { RHD_M71, "M71" }, |
||
23 | /* R500 integrated */ |
||
24 | { RHD_RS600, "RS600" }, |
||
25 | { RHD_RS690, "RS690" }, |
||
26 | { RHD_RS740, "RS740" }, |
||
27 | /* R600 */ |
||
28 | { RHD_R600, "R600" }, |
||
29 | { RHD_RV610, "RV610" }, |
||
30 | { RHD_RV630, "RV630" }, |
||
31 | /* R600 Mobility */ |
||
32 | { RHD_M72, "M72" }, |
||
33 | { RHD_M74, "M74" }, |
||
34 | { RHD_M76, "M76" }, |
||
35 | /* RV670 came into existence after RV6x0 and M7x */ |
||
36 | { RHD_RV670, "RV670" }, |
||
37 | { RHD_R680, "R680" }, |
||
38 | { RHD_RV620, "RV620" }, |
||
39 | { RHD_RV635, "RV635" }, |
||
40 | { -1, NULL } |
||
41 | }; |
||
42 | |||
43 | |||
44 | # define PCI_ID_LIST PciChipset_t RHDPCIchipsets[] |
||
45 | # define LIST_END { 0, 0} |
||
46 | |||
47 | |||
48 | RHD_DEVICE_MATCH( 0x7100, RHD_R520 ), /* Radeon X1800 */ |
||
49 | RHD_DEVICE_MATCH( 0x7101, RHD_M58 ), /* Mobility Radeon X1800 XT */ |
||
50 | RHD_DEVICE_MATCH( 0x7102, RHD_M58 ), /* Mobility Radeon X1800 */ |
||
51 | RHD_DEVICE_MATCH( 0x7103, RHD_M58 ), /* Mobility FireGL V7200 */ |
||
52 | RHD_DEVICE_MATCH( 0x7104, RHD_R520 ), /* FireGL V7200 */ |
||
53 | RHD_DEVICE_MATCH( 0x7105, RHD_R520 ), /* FireGL V5300 */ |
||
54 | RHD_DEVICE_MATCH( 0x7106, RHD_M58 ), /* Mobility FireGL V7100 */ |
||
55 | RHD_DEVICE_MATCH( 0x7108, RHD_R520 ), /* Radeon X1800 */ |
||
56 | RHD_DEVICE_MATCH( 0x7109, RHD_R520 ), /* Radeon X1800 */ |
||
57 | RHD_DEVICE_MATCH( 0x710A, RHD_R520 ), /* Radeon X1800 */ |
||
58 | RHD_DEVICE_MATCH( 0x710B, RHD_R520 ), /* Radeon X1800 */ |
||
59 | RHD_DEVICE_MATCH( 0x710C, RHD_R520 ), /* Radeon X1800 */ |
||
60 | RHD_DEVICE_MATCH( 0x710E, RHD_R520 ), /* FireGL V7300 */ |
||
61 | RHD_DEVICE_MATCH( 0x710F, RHD_R520 ), /* FireGL V7350 */ |
||
62 | RHD_DEVICE_MATCH( 0x7140, RHD_RV515 ), /* Radeon X1600/X1550 */ |
||
63 | RHD_DEVICE_MATCH( 0x7141, RHD_RV505 ), /* RV505 */ |
||
64 | RHD_DEVICE_MATCH( 0x7142, RHD_RV515 ), /* Radeon X1300/X1550 */ |
||
65 | RHD_DEVICE_MATCH( 0x7143, RHD_RV505 ), /* Radeon X1550 */ |
||
66 | RHD_DEVICE_MATCH( 0x7144, RHD_M54 ), /* M54-GL */ |
||
67 | RHD_DEVICE_MATCH( 0x7145, RHD_M54 ), /* Mobility Radeon X1400 */ |
||
68 | RHD_DEVICE_MATCH( 0x7146, RHD_RV515 ), /* Radeon X1300/X1550 */ |
||
69 | RHD_DEVICE_MATCH( 0x7147, RHD_RV505 ), /* Radeon X1550 64-bit */ |
||
70 | RHD_DEVICE_MATCH( 0x7149, RHD_M52 ), /* Mobility Radeon X1300 */ |
||
71 | RHD_DEVICE_MATCH( 0x714A, RHD_M52 ), /* Mobility Radeon X1300 */ |
||
72 | RHD_DEVICE_MATCH( 0x714B, RHD_M52 ), /* Mobility Radeon X1300 */ |
||
73 | RHD_DEVICE_MATCH( 0x714C, RHD_M52 ), /* Mobility Radeon X1300 */ |
||
74 | RHD_DEVICE_MATCH( 0x714D, RHD_RV515 ), /* Radeon X1300 */ |
||
75 | RHD_DEVICE_MATCH( 0x714E, RHD_RV515 ), /* Radeon X1300 */ |
||
76 | RHD_DEVICE_MATCH( 0x714F, RHD_RV505 ), /* RV505 */ |
||
77 | RHD_DEVICE_MATCH( 0x7151, RHD_RV505 ), /* RV505 */ |
||
78 | RHD_DEVICE_MATCH( 0x7152, RHD_RV515 ), /* FireGL V3300 */ |
||
79 | RHD_DEVICE_MATCH( 0x7153, RHD_RV515 ), /* FireGL V3350 */ |
||
80 | RHD_DEVICE_MATCH( 0x715E, RHD_RV515 ), /* Radeon X1300 */ |
||
81 | RHD_DEVICE_MATCH( 0x715F, RHD_RV505 ), /* Radeon X1550 64-bit */ |
||
82 | RHD_DEVICE_MATCH( 0x7180, RHD_RV516 ), /* Radeon X1300/X1550 */ |
||
83 | RHD_DEVICE_MATCH( 0x7181, RHD_RV516 ), /* Radeon X1600 */ |
||
84 | RHD_DEVICE_MATCH( 0x7183, RHD_RV516 ), /* Radeon X1300/X1550 */ |
||
85 | RHD_DEVICE_MATCH( 0x7186, RHD_M64 ), /* Mobility Radeon X1450 */ |
||
86 | RHD_DEVICE_MATCH( 0x7187, RHD_RV516 ), /* Radeon X1300/X1550 */ |
||
87 | RHD_DEVICE_MATCH( 0x7188, RHD_M64 ), /* Mobility Radeon X2300 */ |
||
88 | RHD_DEVICE_MATCH( 0x718A, RHD_M64 ), /* Mobility Radeon X2300 */ |
||
89 | RHD_DEVICE_MATCH( 0x718B, RHD_M62 ), /* Mobility Radeon X1350 */ |
||
90 | RHD_DEVICE_MATCH( 0x718C, RHD_M62 ), /* Mobility Radeon X1350 */ |
||
91 | RHD_DEVICE_MATCH( 0x718D, RHD_M64 ), /* Mobility Radeon X1450 */ |
||
92 | RHD_DEVICE_MATCH( 0x718F, RHD_RV516 ), /* Radeon X1300 */ |
||
93 | RHD_DEVICE_MATCH( 0x7193, RHD_RV516 ), /* Radeon X1550 */ |
||
94 | RHD_DEVICE_MATCH( 0x7196, RHD_M62 ), /* Mobility Radeon X1350 */ |
||
95 | RHD_DEVICE_MATCH( 0x719B, RHD_RV516 ), /* FireMV 2250 */ |
||
96 | RHD_DEVICE_MATCH( 0x719F, RHD_RV516 ), /* Radeon X1550 64-bit */ |
||
97 | RHD_DEVICE_MATCH( 0x71C0, RHD_RV530 ), /* Radeon X1600 */ |
||
98 | RHD_DEVICE_MATCH( 0x71C1, RHD_RV535 ), /* Radeon X1650 */ |
||
99 | RHD_DEVICE_MATCH( 0x71C2, RHD_RV530 ), /* Radeon X1600 */ |
||
100 | RHD_DEVICE_MATCH( 0x71C3, RHD_RV535 ), /* Radeon X1600 */ |
||
101 | RHD_DEVICE_MATCH( 0x71C4, RHD_M56 ), /* Mobility FireGL V5200 */ |
||
102 | RHD_DEVICE_MATCH( 0x71C5, RHD_M56 ), /* Mobility Radeon X1600 */ |
||
103 | RHD_DEVICE_MATCH( 0x71C6, RHD_RV530 ), /* Radeon X1650 */ |
||
104 | RHD_DEVICE_MATCH( 0x71C7, RHD_RV535 ), /* Radeon X1650 */ |
||
105 | RHD_DEVICE_MATCH( 0x71CD, RHD_RV530 ), /* Radeon X1600 */ |
||
106 | RHD_DEVICE_MATCH( 0x71CE, RHD_RV530 ), /* Radeon X1300 XT/X1600 Pro */ |
||
107 | RHD_DEVICE_MATCH( 0x71D2, RHD_RV530 ), /* FireGL V3400 */ |
||
108 | RHD_DEVICE_MATCH( 0x71D4, RHD_M66 ), /* Mobility FireGL V5250 */ |
||
109 | RHD_DEVICE_MATCH( 0x71D5, RHD_M66 ), /* Mobility Radeon X1700 */ |
||
110 | RHD_DEVICE_MATCH( 0x71D6, RHD_M66 ), /* Mobility Radeon X1700 XT */ |
||
111 | RHD_DEVICE_MATCH( 0x71DA, RHD_RV530 ), /* FireGL V5200 */ |
||
112 | RHD_DEVICE_MATCH( 0x71DE, RHD_M66 ), /* Mobility Radeon X1700 */ |
||
113 | RHD_DEVICE_MATCH( 0x7200, RHD_RV550 ), /* Radeon X2300HD */ |
||
114 | RHD_DEVICE_MATCH( 0x7210, RHD_M71 ), /* Mobility Radeon HD 2300 */ |
||
115 | RHD_DEVICE_MATCH( 0x7211, RHD_M71 ), /* Mobility Radeon HD 2300 */ |
||
116 | RHD_DEVICE_MATCH( 0x7240, RHD_R580 ), /* Radeon X1950 */ |
||
117 | RHD_DEVICE_MATCH( 0x7243, RHD_R580 ), /* Radeon X1900 */ |
||
118 | RHD_DEVICE_MATCH( 0x7244, RHD_R580 ), /* Radeon X1950 */ |
||
119 | RHD_DEVICE_MATCH( 0x7245, RHD_R580 ), /* Radeon X1900 */ |
||
120 | RHD_DEVICE_MATCH( 0x7246, RHD_R580 ), /* Radeon X1900 */ |
||
121 | RHD_DEVICE_MATCH( 0x7247, RHD_R580 ), /* Radeon X1900 */ |
||
122 | RHD_DEVICE_MATCH( 0x7248, RHD_R580 ), /* Radeon X1900 */ |
||
123 | RHD_DEVICE_MATCH( 0x7249, RHD_R580 ), /* Radeon X1900 */ |
||
124 | RHD_DEVICE_MATCH( 0x724A, RHD_R580 ), /* Radeon X1900 */ |
||
125 | RHD_DEVICE_MATCH( 0x724B, RHD_R580 ), /* Radeon X1900 */ |
||
126 | RHD_DEVICE_MATCH( 0x724C, RHD_R580 ), /* Radeon X1900 */ |
||
127 | RHD_DEVICE_MATCH( 0x724D, RHD_R580 ), /* Radeon X1900 */ |
||
128 | RHD_DEVICE_MATCH( 0x724E, RHD_R580 ), /* AMD Stream Processor */ |
||
129 | RHD_DEVICE_MATCH( 0x724F, RHD_R580 ), /* Radeon X1900 */ |
||
130 | RHD_DEVICE_MATCH( 0x7280, RHD_RV570 ), /* Radeon X1950 */ |
||
131 | RHD_DEVICE_MATCH( 0x7281, RHD_RV560 ), /* RV560 */ |
||
132 | RHD_DEVICE_MATCH( 0x7283, RHD_RV560 ), /* RV560 */ |
||
133 | RHD_DEVICE_MATCH( 0x7284, RHD_M68 ), /* Mobility Radeon X1900 */ |
||
134 | RHD_DEVICE_MATCH( 0x7287, RHD_RV560 ), /* RV560 */ |
||
135 | RHD_DEVICE_MATCH( 0x7288, RHD_RV570 ), /* Radeon X1950 GT */ |
||
136 | RHD_DEVICE_MATCH( 0x7289, RHD_RV570 ), /* RV570 */ |
||
137 | RHD_DEVICE_MATCH( 0x728B, RHD_RV570 ), /* RV570 */ |
||
138 | RHD_DEVICE_MATCH( 0x728C, RHD_RV570 ), /* ATI FireGL V7400 */ |
||
139 | RHD_DEVICE_MATCH( 0x7290, RHD_RV560 ), /* RV560 */ |
||
140 | RHD_DEVICE_MATCH( 0x7291, RHD_RV560 ), /* Radeon X1650 */ |
||
141 | RHD_DEVICE_MATCH( 0x7293, RHD_RV560 ), /* Radeon X1650 */ |
||
142 | RHD_DEVICE_MATCH( 0x7297, RHD_RV560 ), /* RV560 */ |
||
143 | RHD_DEVICE_MATCH( 0x791E, RHD_RS690 ), /* Radeon X1200 */ |
||
144 | RHD_DEVICE_MATCH( 0x791F, RHD_RS690 ), /* Radeon X1200 */ |
||
145 | RHD_DEVICE_MATCH( 0x793F, RHD_RS600 ), /* Radeon Xpress 1200 */ |
||
146 | RHD_DEVICE_MATCH( 0x7941, RHD_RS600 ), /* Radeon Xpress 1200 */ |
||
147 | RHD_DEVICE_MATCH( 0x7942, RHD_RS600 ), /* Radeon Xpress 1200 (M) */ |
||
148 | RHD_DEVICE_MATCH( 0x796C, RHD_RS740 ), /* RS740 */ |
||
149 | RHD_DEVICE_MATCH( 0x796D, RHD_RS740 ), /* RS740M */ |
||
150 | RHD_DEVICE_MATCH( 0x796E, RHD_RS740 ), /* ATI Radeon 2100 RS740 */ |
||
151 | RHD_DEVICE_MATCH( 0x796F, RHD_RS740 ), /* RS740M */ |
||
152 | RHD_DEVICE_MATCH( 0x9400, RHD_R600 ), /* Radeon HD 2900 XT */ |
||
153 | RHD_DEVICE_MATCH( 0x9401, RHD_R600 ), /* Radeon HD 2900 XT */ |
||
154 | RHD_DEVICE_MATCH( 0x9402, RHD_R600 ), /* Radeon HD 2900 XT */ |
||
155 | RHD_DEVICE_MATCH( 0x9403, RHD_R600 ), /* Radeon HD 2900 Pro */ |
||
156 | RHD_DEVICE_MATCH( 0x9405, RHD_R600 ), /* Radeon HD 2900 GT */ |
||
157 | RHD_DEVICE_MATCH( 0x940A, RHD_R600 ), /* FireGL V8650 */ |
||
158 | RHD_DEVICE_MATCH( 0x940B, RHD_R600 ), /* FireGL V8600 */ |
||
159 | RHD_DEVICE_MATCH( 0x940F, RHD_R600 ), /* FireGL V7600 */ |
||
160 | RHD_DEVICE_MATCH( 0x94C0, RHD_RV610 ), /* RV610 */ |
||
161 | RHD_DEVICE_MATCH( 0x94C1, RHD_RV610 ), /* Radeon HD 2400 XT */ |
||
162 | RHD_DEVICE_MATCH( 0x94C3, RHD_RV610 ), /* Radeon HD 2400 Pro */ |
||
163 | RHD_DEVICE_MATCH( 0x94C4, RHD_RV610 ), /* ATI Radeon HD 2400 PRO AGP */ |
||
164 | RHD_DEVICE_MATCH( 0x94C5, RHD_RV610 ), /* FireGL V4000 */ |
||
165 | RHD_DEVICE_MATCH( 0x94C6, RHD_RV610 ), /* RV610 */ |
||
166 | RHD_DEVICE_MATCH( 0x94C7, RHD_RV610 ), /* ATI Radeon HD 2350 */ |
||
167 | RHD_DEVICE_MATCH( 0x94C8, RHD_M74 ), /* Mobility Radeon HD 2400 XT */ |
||
168 | RHD_DEVICE_MATCH( 0x94C9, RHD_M72 ), /* Mobility Radeon HD 2400 */ |
||
169 | RHD_DEVICE_MATCH( 0x94CB, RHD_M72 ), /* ATI RADEON E2400 */ |
||
170 | RHD_DEVICE_MATCH( 0x94CC, RHD_RV610 ), /* ATI Radeon HD 2400 */ |
||
171 | RHD_DEVICE_MATCH( 0x9500, RHD_RV670 ), /* RV670 */ |
||
172 | RHD_DEVICE_MATCH( 0x9501, RHD_RV670 ), /* ATI Radeon HD3870 */ |
||
173 | RHD_DEVICE_MATCH( 0x9505, RHD_RV670 ), /* ATI Radeon HD3850 */ |
||
174 | RHD_DEVICE_MATCH( 0x9507, RHD_RV670 ), /* RV670 */ |
||
175 | RHD_DEVICE_MATCH( 0x950F, RHD_R680 ), /* ATI Radeon HD3870 X2 */ |
||
176 | RHD_DEVICE_MATCH( 0x9511, RHD_RV670 ), /* ATI FireGL V7700 */ |
||
177 | RHD_DEVICE_MATCH( 0x9515, RHD_RV670 ), /* ATI Radeon HD 3850 AGP */ |
||
178 | RHD_DEVICE_MATCH( 0x9580, RHD_RV630 ), /* RV630 */ |
||
179 | RHD_DEVICE_MATCH( 0x9581, RHD_M76 ), /* Mobility Radeon HD 2600 */ |
||
180 | RHD_DEVICE_MATCH( 0x9583, RHD_M76 ), /* Mobility Radeon HD 2600 XT */ |
||
181 | RHD_DEVICE_MATCH( 0x9586, RHD_RV630 ), /* ATI Radeon HD 2600 XT AGP */ |
||
182 | RHD_DEVICE_MATCH( 0x9587, RHD_RV630 ), /* ATI Radeon HD 2600 Pro AGP */ |
||
183 | RHD_DEVICE_MATCH( 0x9588, RHD_RV630 ), /* Radeon HD 2600 XT */ |
||
184 | RHD_DEVICE_MATCH( 0x9589, RHD_RV630 ), /* Radeon HD 2600 Pro */ |
||
185 | RHD_DEVICE_MATCH( 0x958A, RHD_RV630 ), /* Gemini RV630 */ |
||
186 | RHD_DEVICE_MATCH( 0x958B, RHD_M76 ), /* Gemini ATI Mobility Radeon HD 2600 XT */ |
||
187 | RHD_DEVICE_MATCH( 0x958C, RHD_RV630 ), /* FireGL V5600 */ |
||
188 | RHD_DEVICE_MATCH( 0x958D, RHD_RV630 ), /* FireGL V3600 */ |
||
189 | RHD_DEVICE_MATCH( 0x958E, RHD_RV630 ), /* ATI Radeon HD 2600 LE */ |
||
190 | RHD_DEVICE_MATCH( 0x9590, RHD_RV635 ), /* ATI Radeon HD 3600 Series */ |
||
191 | RHD_DEVICE_MATCH( 0x9591, RHD_RV635 ), /* ATI Mobility Radeon HD 3650 */ |
||
192 | RHD_DEVICE_MATCH( 0x9596, RHD_RV635 ), /* ATI Radeon HD 3650 AGP */ |
||
193 | RHD_DEVICE_MATCH( 0x9597, RHD_RV635 ), /* ATI Radeon HD 3600 Series */ |
||
194 | RHD_DEVICE_MATCH( 0x9598, RHD_RV635 ), /* ATI Radeon HD 3670 */ |
||
195 | RHD_DEVICE_MATCH( 0x9599, RHD_RV635 ), /* ATI Radeon HD 3600 Series */ |
||
196 | RHD_DEVICE_MATCH( 0x95C0, RHD_RV620 ), /* ATI Radeon HD 3470 */ |
||
197 | RHD_DEVICE_MATCH( 0x95C2, RHD_M82 ), /* ATI Mobility Radeon HD 3430 (M82) */ |
||
198 | RHD_DEVICE_MATCH( 0x95C4, RHD_M82 ), /* ATI Mobility Radeon HD 3400 Series (M82) */ |
||
199 | RHD_DEVICE_MATCH( 0x95C5, RHD_RV620 ), /* ATI Radeon HD 3450 */ |
||
200 | RHD_DEVICE_MATCH( 0x95C7, RHD_RV620 ), /* ATI Radeon HD 3430 */ |
||
201 | RHD_DEVICE_MATCH( 0x95CD, RHD_RV620 ), /* ATI FireMV 2450 */ |
||
202 | RHD_DEVICE_MATCH( 0x95CE, RHD_RV620 ), /* ATI FireMV 2260 */ |
||
203 | RHD_DEVICE_MATCH( 0x95CF, RHD_RV620 ), /* ATI FireMV 2260 */ |
||
204 | LIST_END |
||
205 | }; |
||
206 | |||
207 | |||
208 | xf86TokenToString(SymTabPtr table, int token) |
||
209 | { |
||
210 | int i; |
||
211 | |||
212 | |||
213 | |||
214 | |||
215 | return NULL; |
||
216 | else |
||
217 | return(table[i].name); |
||
218 | } |
||
219 | |||
220 | |||
221 | { |
||
222 | const PciChipset_t *dev; |
||
223 | u32 bus, last_bus; |
||
224 | |||
225 | |||
226 | return 0; |
||
227 | |||
228 | |||
229 | { |
||
230 | u32 devfn; |
||
231 | |||
232 | |||
233 | { |
||
234 | u32 id; |
||
235 | id = PciRead32(bus,devfn, 0); |
||
236 | |||
237 | |||
238 | continue; |
||
239 | |||
240 | |||
241 | { |
||
242 | CARD32 reg2C; |
||
243 | int i; |
||
244 | |||
245 | |||
246 | |||
247 | |||
248 | rhd.devfn = devfn; |
||
249 | rhd.PciTag = pciTag(bus,(devfn>>3)&0x1F,devfn&0x7); |
||
250 | |||
251 | |||
252 | |||
253 | |||
254 | |||
255 | |||
256 | rhd.subdevice_id = reg2C >> 16; |
||
257 | |||
258 | |||
259 | { |
||
260 | CARD32 base; |
||
261 | Bool validSize; |
||
262 | |||
263 | |||
264 | if(base) |
||
265 | { |
||
266 | if (base & PCI_MAP_IO) |
||
267 | { |
||
268 | rhd.ioBase[i] = (CARD32)PCIGETIO(base); |
||
269 | rhd.memtype[i] = base & PCI_MAP_IO_ATTR_MASK; |
||
270 | } |
||
271 | else |
||
272 | { |
||
273 | rhd.memBase[i] = (CARD32)PCIGETMEMORY(base); |
||
274 | rhd.memtype[i] = base & PCI_MAP_MEMORY_ATTR_MASK; |
||
275 | } |
||
276 | } |
||
277 | rhd.memsize[i] = pciGetBaseSize(bus,devfn, i, TRUE, &validSize); |
||
278 | } |
||
279 | rhd.ChipName = (char*)xf86TokenToString(RHDChipsets, rhd.PciDeviceID); |
||
280 | |||
281 | |||
282 | } |
||
283 | }; |
||
284 | }; |
||
285 | return NULL; |
||
286 | } |
||
287 | |||
288 | |||
289 | { |
||
290 | while(list->device) |
||
291 | { |
||
292 | if(dev==list->device) |
||
293 | return list; |
||
294 | list++; |
||
295 | } |
||
296 | return 0; |
||
297 | } |
||
298 | |||
299 | |||
300 | |||
301 | { |
||
302 | int offset; |
||
303 | CARD32 addr1; |
||
304 | CARD32 addr2; |
||
305 | CARD32 mask1; |
||
306 | CARD32 mask2; |
||
307 | int bits = 0; |
||
308 | |||
309 | |||
310 | * silently ignore bogus index values. Valid values are 0-6. 0-5 are |
||
311 | * the 6 base address registers, and 6 is the ROM base address register. |
||
312 | */ |
||
313 | if (index < 0 || index > 6) |
||
314 | return 0; |
||
315 | |||
316 | |||
317 | *min = destructive; |
||
318 | |||
319 | |||
320 | if (index == 6) |
||
321 | offset = PCI_MAP_ROM_REG; |
||
322 | else |
||
323 | offset = PCI_MAP_REG_START + (index << 2); |
||
324 | |||
325 | |||
326 | /* |
||
327 | * Check if this is the second part of a 64 bit address. |
||
328 | * XXX need to check how endianness affects 64 bit addresses. |
||
329 | */ |
||
330 | if (index > 0 && index < 6) { |
||
331 | addr2 = PciRead32(bus, devfn, offset - 4); |
||
332 | if (PCI_MAP_IS_MEM(addr2) && PCI_MAP_IS64BITMEM(addr2)) |
||
333 | return 0; |
||
334 | } |
||
335 | |||
336 | |||
337 | PciWrite32(bus, devfn, offset, 0xffffffff); |
||
338 | mask1 = PciRead32(bus, devfn, offset); |
||
339 | PciWrite32(bus, devfn, offset, addr1); |
||
340 | } else { |
||
341 | mask1 = addr1; |
||
342 | } |
||
343 | |||
344 | |||
345 | if (index < 5 && PCI_MAP_IS_MEM(mask1) && PCI_MAP_IS64BITMEM(mask1)) |
||
346 | { |
||
347 | if (PCIGETMEMORY(mask1) == 0) |
||
348 | { |
||
349 | addr2 = PciRead32(bus, devfn, offset + 4); |
||
350 | if (destructive) |
||
351 | { |
||
352 | PciWrite32(bus, devfn, offset + 4, 0xffffffff); |
||
353 | mask2 = PciRead32(bus, devfn, offset + 4); |
||
354 | PciWrite32(bus, devfn, offset + 4, addr2); |
||
355 | } |
||
356 | else |
||
357 | { |
||
358 | mask2 = addr2; |
||
359 | } |
||
360 | if (mask2 == 0) |
||
361 | return 0; |
||
362 | bits = 32; |
||
363 | while ((mask2 & 1) == 0) |
||
364 | { |
||
365 | bits++; |
||
366 | mask2 >>= 1; |
||
367 | } |
||
368 | if (bits > 32) |
||
369 | return bits; |
||
370 | } |
||
371 | } |
||
372 | if (index < 6) |
||
373 | if (PCI_MAP_IS_MEM(mask1)) |
||
374 | mask1 = PCIGETMEMORY(mask1); |
||
375 | else |
||
376 | mask1 = PCIGETIO(mask1); |
||
377 | else |
||
378 | mask1 = PCIGETROM(mask1); |
||
379 | if (mask1 == 0) |
||
380 | return 0; |
||
381 | bits = 0; |
||
382 | while ((mask1 & 1) == 0) { |
||
383 | bits++; |
||
384 | mask1 >>= 1; |
||
385 | } |
||
386 | /* I/O maps can be no larger than 8 bits */ |
||
387 | |||
388 | |||
389 | bits = 8; |
||
390 | /* ROM maps can be no larger than 24 bits */ |
||
391 | if (index == 6 && bits > 24) |
||
392 | bits = 24; |
||
393 | return bits; |
||
394 | }>>>>><>>><>>256;devfn++) |
||
395 | >=last_bus;bus++) |
||
396 | |||
397 |