|
Lines 70-76
Link Here
|
| 70 |
#define CHIP_I810 0 /* i810/i815 */ |
70 |
#define CHIP_I810 0 /* i810/i815 */ |
| 71 |
#define CHIP_I830 1 /* 830M/845G */ |
71 |
#define CHIP_I830 1 /* 830M/845G */ |
| 72 |
#define CHIP_I855 2 /* 852GM/855GM/865G */ |
72 |
#define CHIP_I855 2 /* 852GM/855GM/865G */ |
| 73 |
#define CHIP_I915 3 /* 915G */ |
73 |
#define CHIP_I915 3 /* 915G/915GM */ |
| 74 |
|
74 |
|
| 75 |
struct agp_i810_softc { |
75 |
struct agp_i810_softc { |
| 76 |
struct agp_softc agp; |
76 |
struct agp_softc agp; |
|
Lines 139-144
Link Here
|
| 139 |
|
139 |
|
| 140 |
case 0x25828086: |
140 |
case 0x25828086: |
| 141 |
return ("Intel 82915G (915G GMCH) SVGA controller"); |
141 |
return ("Intel 82915G (915G GMCH) SVGA controller"); |
|
|
142 |
|
| 143 |
case 0x25928086: |
| 144 |
return ("Intel 82915GM (915GM GMCH) SVGA controller"); |
| 142 |
}; |
145 |
}; |
| 143 |
|
146 |
|
| 144 |
return NULL; |
147 |
return NULL; |
|
Lines 171-176
Link Here
|
| 171 |
case 0x35828086: |
174 |
case 0x35828086: |
| 172 |
case 0x25728086: |
175 |
case 0x25728086: |
| 173 |
case 0x25828086: |
176 |
case 0x25828086: |
|
|
177 |
case 0x25928086: |
| 174 |
devid -= 0x20000; |
178 |
devid -= 0x20000; |
| 175 |
break; |
179 |
break; |
| 176 |
}; |
180 |
}; |
|
Lines 233-239
Link Here
|
| 233 |
case 0x35828086: |
237 |
case 0x35828086: |
| 234 |
case 0x25628086: |
238 |
case 0x25628086: |
| 235 |
case 0x25728086: |
239 |
case 0x25728086: |
| 236 |
case 0x25828086: /* XXX: Is this the right way? */ |
|
|
| 237 |
gcc1 = pci_read_config(bdev, AGP_I830_GCC1, 1); |
240 |
gcc1 = pci_read_config(bdev, AGP_I830_GCC1, 1); |
| 238 |
if ((gcc1 & AGP_I830_GCC1_DEV2) == AGP_I830_GCC1_DEV2_DISABLED) { |
241 |
if ((gcc1 & AGP_I830_GCC1_DEV2) == AGP_I830_GCC1_DEV2_DISABLED) { |
| 239 |
if (bootverbose) |
242 |
if (bootverbose) |
|
Lines 242-247
Link Here
|
| 242 |
} |
245 |
} |
| 243 |
break; |
246 |
break; |
| 244 |
|
247 |
|
|
|
248 |
/* i915G */ |
| 249 |
case 0x25828086: |
| 250 |
case 0x25928086: |
| 251 |
gcc1 = pci_read_config(bdev, AGP_I915_DEVEN, 4); |
| 252 |
if ((gcc1 & AGP_I915_DEVEN_D2F0) == AGP_I915_DEVEN_D2F0_DISABLED) { |
| 253 |
if (bootverbose) |
| 254 |
printf("I915: disabled, not probing\n"); |
| 255 |
return ENXIO; |
| 256 |
} |
| 257 |
break; |
| 258 |
|
| 245 |
default: |
259 |
default: |
| 246 |
return ENXIO; |
260 |
return ENXIO; |
| 247 |
} |
261 |
} |
|
Lines 285-290
Link Here
|
| 285 |
sc->chiptype = CHIP_I855; |
299 |
sc->chiptype = CHIP_I855; |
| 286 |
break; |
300 |
break; |
| 287 |
case 0x25828086: |
301 |
case 0x25828086: |
|
|
302 |
case 0x25928086: |
| 288 |
sc->chiptype = CHIP_I915; |
303 |
sc->chiptype = CHIP_I915; |
| 289 |
break; |
304 |
break; |
| 290 |
}; |
305 |
}; |
|
Lines 386-414
Link Here
|
| 386 |
} else if (sc->chiptype == CHIP_I855 || sc->chiptype == CHIP_I915) { /* CHIP_I855 */ |
401 |
} else if (sc->chiptype == CHIP_I855 || sc->chiptype == CHIP_I915) { /* CHIP_I855 */ |
| 387 |
/* The i855 automatically initializes the 128k gatt on boot. */ |
402 |
/* The i855 automatically initializes the 128k gatt on boot. */ |
| 388 |
unsigned int gcc1, pgtblctl; |
403 |
unsigned int gcc1, pgtblctl; |
|
|
404 |
int steal; |
| 405 |
steal = (sc->chiptype == CHIP_I855 ? 132 : 260); |
| 389 |
|
406 |
|
| 390 |
gcc1 = pci_read_config(sc->bdev, AGP_I855_GCC1, 1); |
407 |
gcc1 = pci_read_config(sc->bdev, AGP_I855_GCC1, 1); |
| 391 |
switch (gcc1 & AGP_I855_GCC1_GMS) { |
408 |
switch (gcc1 & AGP_I855_GCC1_GMS) { |
| 392 |
case AGP_I855_GCC1_GMS_STOLEN_1M: |
409 |
case AGP_I855_GCC1_GMS_STOLEN_1M: |
| 393 |
sc->stolen = (1024 - 132) * 1024 / 4096; |
410 |
sc->stolen = (1024 - steal) * 1024 / 4096; |
| 394 |
break; |
411 |
break; |
| 395 |
case AGP_I855_GCC1_GMS_STOLEN_4M: |
412 |
case AGP_I855_GCC1_GMS_STOLEN_4M: |
| 396 |
sc->stolen = (4096 - 132) * 1024 / 4096; |
413 |
sc->stolen = (4096 - steal) * 1024 / 4096; |
| 397 |
break; |
414 |
break; |
| 398 |
case AGP_I855_GCC1_GMS_STOLEN_8M: |
415 |
case AGP_I855_GCC1_GMS_STOLEN_8M: |
| 399 |
sc->stolen = (8192 - 132) * 1024 / 4096; |
416 |
sc->stolen = (8192 - steal) * 1024 / 4096; |
| 400 |
break; |
417 |
break; |
| 401 |
case AGP_I855_GCC1_GMS_STOLEN_16M: |
418 |
case AGP_I855_GCC1_GMS_STOLEN_16M: |
| 402 |
sc->stolen = (16384 - 132) * 1024 / 4096; |
419 |
sc->stolen = (16384 - steal) * 1024 / 4096; |
| 403 |
break; |
420 |
break; |
| 404 |
case AGP_I855_GCC1_GMS_STOLEN_32M: |
421 |
case AGP_I855_GCC1_GMS_STOLEN_32M: |
| 405 |
sc->stolen = (32768 - 132) * 1024 / 4096; |
422 |
sc->stolen = (32768 - steal) * 1024 / 4096; |
| 406 |
break; |
423 |
break; |
| 407 |
case AGP_I915_GCC1_GMS_STOLEN_48M: |
424 |
case AGP_I915_GCC1_GMS_STOLEN_48M: |
| 408 |
sc->stolen = (49152 - 132) * 1024 / 4096; |
425 |
sc->stolen = (49152 - steal) * 1024 / 4096; |
| 409 |
break; |
426 |
break; |
| 410 |
case AGP_I915_GCC1_GMS_STOLEN_64M: |
427 |
case AGP_I915_GCC1_GMS_STOLEN_64M: |
| 411 |
sc->stolen = (65536 - 132) * 1024 / 4096; |
428 |
sc->stolen = (65536 - steal) * 1024 / 4096; |
| 412 |
break; |
429 |
break; |
| 413 |
default: |
430 |
default: |
| 414 |
sc->stolen = 0; |
431 |
sc->stolen = 0; |
|
Lines 504-511
Link Here
|
| 504 |
case CHIP_I855: |
521 |
case CHIP_I855: |
| 505 |
return 128 * 1024 * 1024; |
522 |
return 128 * 1024 * 1024; |
| 506 |
case CHIP_I915: |
523 |
case CHIP_I915: |
| 507 |
temp = pci_read_config(sc->bdev, AGP_I915_GMADR, 4); |
524 |
temp = pci_read_config(dev, AGP_I915_MSAC, 1); |
| 508 |
if (temp & (1 << 27)) { |
525 |
if ((temp & AGP_I915_MSAC_GMASIZE) == AGP_I915_MSAC_GMASIZE_128) { |
| 509 |
return 128 * 1024 * 1024; |
526 |
return 128 * 1024 * 1024; |
| 510 |
} else { |
527 |
} else { |
| 511 |
return 256 * 1024 * 1024; |
528 |
return 256 * 1024 * 1024; |
|
Lines 563-583
Link Here
|
| 563 |
} |
580 |
} |
| 564 |
break; |
581 |
break; |
| 565 |
case CHIP_I915: |
582 |
case CHIP_I915: |
| 566 |
temp = pci_read_config(sc->bdev, AGP_I915_GMADR, 4); |
583 |
temp = pci_read_config(dev, AGP_I915_MSAC, 1); |
|
|
584 |
temp &= ~AGP_I915_MSAC_GMASIZE; |
| 567 |
|
585 |
|
| 568 |
switch (aperture) { |
586 |
switch (aperture) { |
| 569 |
case 128 * 1024 * 1024: |
587 |
case 128 * 1024 * 1024: |
| 570 |
temp |= (1 << 27); |
588 |
temp |= AGP_I915_MSAC_GMASIZE_128; |
| 571 |
break; |
589 |
break; |
| 572 |
case 256 * 1024 * 1024: |
590 |
case 256 * 1024 * 1024: |
| 573 |
temp &= ~(1 << 27); |
591 |
temp |= AGP_I915_MSAC_GMASIZE_256; |
| 574 |
break; |
592 |
break; |
| 575 |
default: |
593 |
default: |
| 576 |
device_printf(dev, "bad aperture size %d\n", aperture); |
594 |
device_printf(dev, "bad aperture size %d\n", aperture); |
| 577 |
return EINVAL; |
595 |
return EINVAL; |
| 578 |
} |
596 |
} |
| 579 |
|
597 |
|
| 580 |
pci_write_config(sc->bdev, AGP_I915_GMADR, temp, 4); |
598 |
pci_write_config(dev, AGP_I915_MSAC, temp, 1); |
| 581 |
break; |
599 |
break; |
| 582 |
} |
600 |
} |
| 583 |
|
601 |
|