Subversion Repositories Kolibri OS

Rev

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
}
395
>
396
 
397