Lines 24-29
#define IS_I965 (agp_bridge->dev->device
Link Here
|
24 |
agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB) |
24 |
agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB) |
25 |
|
25 |
|
26 |
|
26 |
|
|
|
27 |
extern int agp_memory_reserved; |
28 |
|
29 |
|
27 |
/* Intel 815 register */ |
30 |
/* Intel 815 register */ |
28 |
#define INTEL_815_APCONT 0x51 |
31 |
#define INTEL_815_APCONT 0x51 |
29 |
#define INTEL_815_ATTBASE_MASK ~0x1FFFFFFF |
32 |
#define INTEL_815_ATTBASE_MASK ~0x1FFFFFFF |
Lines 68-79
static struct aper_size_info_fixed intel
Link Here
|
68 |
|
71 |
|
69 |
#define AGP_DCACHE_MEMORY 1 |
72 |
#define AGP_DCACHE_MEMORY 1 |
70 |
#define AGP_PHYS_MEMORY 2 |
73 |
#define AGP_PHYS_MEMORY 2 |
|
|
74 |
#define INTEL_AGP_CACHED_MEMORY 3 |
71 |
|
75 |
|
72 |
static struct gatt_mask intel_i810_masks[] = |
76 |
static struct gatt_mask intel_i810_masks[] = |
73 |
{ |
77 |
{ |
74 |
{.mask = I810_PTE_VALID, .type = 0}, |
78 |
{.mask = I810_PTE_VALID, .type = 0}, |
75 |
{.mask = (I810_PTE_VALID | I810_PTE_LOCAL), .type = AGP_DCACHE_MEMORY}, |
79 |
{.mask = (I810_PTE_VALID | I810_PTE_LOCAL), .type = AGP_DCACHE_MEMORY}, |
76 |
{.mask = I810_PTE_VALID, .type = 0} |
80 |
{.mask = I810_PTE_VALID, .type = 0}, |
|
|
81 |
{.mask = I810_PTE_VALID | I830_PTE_SYSTEM_CACHED, |
82 |
.type = INTEL_AGP_CACHED_MEMORY} |
77 |
}; |
83 |
}; |
78 |
|
84 |
|
79 |
static struct _intel_i810_private { |
85 |
static struct _intel_i810_private { |
Lines 82-87
static struct _intel_i810_private {
Link Here
|
82 |
int num_dcache_entries; |
88 |
int num_dcache_entries; |
83 |
} intel_i810_private; |
89 |
} intel_i810_private; |
84 |
|
90 |
|
|
|
91 |
|
85 |
static int intel_i810_fetch_size(void) |
92 |
static int intel_i810_fetch_size(void) |
86 |
{ |
93 |
{ |
87 |
u32 smram_miscc; |
94 |
u32 smram_miscc; |
Lines 201-262
static void i8xx_destroy_pages(void *add
Link Here
|
201 |
atomic_dec(&agp_bridge->current_memory_agp); |
208 |
atomic_dec(&agp_bridge->current_memory_agp); |
202 |
} |
209 |
} |
203 |
|
210 |
|
|
|
211 |
static int intel_i830_type_to_mask_type(struct agp_bridge_data *bridge, |
212 |
int type) |
213 |
{ |
214 |
if (type < AGP_USER_TYPES) |
215 |
return type; |
216 |
else if (type == AGP_USER_CACHED_MEMORY) |
217 |
return INTEL_AGP_CACHED_MEMORY; |
218 |
else |
219 |
return 0; |
220 |
} |
221 |
|
204 |
static int intel_i810_insert_entries(struct agp_memory *mem, off_t pg_start, |
222 |
static int intel_i810_insert_entries(struct agp_memory *mem, off_t pg_start, |
205 |
int type) |
223 |
int type) |
206 |
{ |
224 |
{ |
207 |
int i, j, num_entries; |
225 |
int i, j, num_entries; |
208 |
void *temp; |
226 |
void *temp; |
|
|
227 |
int ret = -EINVAL; |
228 |
int mask_type; |
209 |
|
229 |
|
210 |
if (mem->page_count == 0) |
230 |
if (mem->page_count == 0) |
211 |
return 0; |
231 |
goto out; |
212 |
|
232 |
|
213 |
temp = agp_bridge->current_size; |
233 |
temp = agp_bridge->current_size; |
214 |
num_entries = A_SIZE_FIX(temp)->num_entries; |
234 |
num_entries = A_SIZE_FIX(temp)->num_entries; |
215 |
|
235 |
|
216 |
if ((pg_start + mem->page_count) > num_entries) |
236 |
if ((pg_start + mem->page_count) > num_entries) |
217 |
return -EINVAL; |
237 |
goto out_err; |
218 |
|
238 |
|
219 |
for (j = pg_start; j < (pg_start + mem->page_count); j++) { |
|
|
220 |
if (!PGE_EMPTY(agp_bridge, readl(agp_bridge->gatt_table+j))) |
221 |
return -EBUSY; |
222 |
} |
223 |
|
239 |
|
224 |
if (type != 0 || mem->type != 0) { |
240 |
for (j = pg_start; j < (pg_start + mem->page_count); j++) { |
225 |
if ((type == AGP_DCACHE_MEMORY) && (mem->type == AGP_DCACHE_MEMORY)) { |
241 |
if (!PGE_EMPTY(agp_bridge, readl(agp_bridge->gatt_table+j))) { |
226 |
/* special insert */ |
242 |
ret = -EBUSY; |
227 |
if (!mem->is_flushed) { |
243 |
goto out_err; |
228 |
global_cache_flush(); |
|
|
229 |
mem->is_flushed = TRUE; |
230 |
} |
231 |
|
232 |
for (i = pg_start; i < (pg_start + mem->page_count); i++) { |
233 |
writel((i*4096)|I810_PTE_LOCAL|I810_PTE_VALID, intel_i810_private.registers+I810_PTE_BASE+(i*4)); |
234 |
} |
235 |
readl(intel_i810_private.registers+I810_PTE_BASE+((i-1)*4)); /* PCI Posting. */ |
236 |
|
237 |
agp_bridge->driver->tlb_flush(mem); |
238 |
return 0; |
239 |
} |
244 |
} |
240 |
if ((type == AGP_PHYS_MEMORY) && (mem->type == AGP_PHYS_MEMORY)) |
|
|
241 |
goto insert; |
242 |
return -EINVAL; |
243 |
} |
245 |
} |
244 |
|
246 |
|
245 |
insert: |
247 |
if (type != mem->type) |
246 |
if (!mem->is_flushed) { |
248 |
goto out_err; |
247 |
global_cache_flush(); |
|
|
248 |
mem->is_flushed = TRUE; |
249 |
} |
250 |
|
249 |
|
251 |
for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { |
250 |
mask_type = agp_bridge->driver->agp_type_to_mask_type(agp_bridge, type); |
252 |
writel(agp_bridge->driver->mask_memory(agp_bridge, |
251 |
|
253 |
mem->memory[i], mem->type), |
252 |
switch (mask_type) { |
254 |
intel_i810_private.registers+I810_PTE_BASE+(j*4)); |
253 |
case AGP_DCACHE_MEMORY: |
|
|
254 |
if (!mem->is_flushed) |
255 |
global_cache_flush(); |
256 |
for (i = pg_start; i < (pg_start + mem->page_count); i++) { |
257 |
writel((i*4096)|I810_PTE_LOCAL|I810_PTE_VALID, |
258 |
intel_i810_private.registers+I810_PTE_BASE+(i*4)); |
259 |
} |
260 |
readl(intel_i810_private.registers+I810_PTE_BASE+((i-1)*4)); |
261 |
break; |
262 |
case AGP_PHYS_MEMORY: |
263 |
case AGP_NORMAL_MEMORY: |
264 |
if (!mem->is_flushed) |
265 |
global_cache_flush(); |
266 |
for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { |
267 |
writel(agp_bridge->driver->mask_memory(agp_bridge, |
268 |
mem->memory[i], |
269 |
mask_type), |
270 |
intel_i810_private.registers+I810_PTE_BASE+(j*4)); |
271 |
} |
272 |
readl(intel_i810_private.registers+I810_PTE_BASE+((j-1)*4)); |
273 |
break; |
274 |
default: |
275 |
goto out_err; |
255 |
} |
276 |
} |
256 |
readl(intel_i810_private.registers+I810_PTE_BASE+((j-1)*4)); /* PCI Posting. */ |
|
|
257 |
|
277 |
|
258 |
agp_bridge->driver->tlb_flush(mem); |
278 |
agp_bridge->driver->tlb_flush(mem); |
259 |
return 0; |
279 |
out: |
|
|
280 |
ret = 0; |
281 |
out_err: |
282 |
mem->is_flushed = 1; |
283 |
return ret; |
260 |
} |
284 |
} |
261 |
|
285 |
|
262 |
static int intel_i810_remove_entries(struct agp_memory *mem, off_t pg_start, |
286 |
static int intel_i810_remove_entries(struct agp_memory *mem, off_t pg_start, |
Lines 337-348
static struct agp_memory *intel_i810_all
Link Here
|
337 |
new->type = AGP_DCACHE_MEMORY; |
361 |
new->type = AGP_DCACHE_MEMORY; |
338 |
new->page_count = pg_count; |
362 |
new->page_count = pg_count; |
339 |
new->num_scratch_pages = 0; |
363 |
new->num_scratch_pages = 0; |
340 |
vfree(new->memory); |
364 |
agp_free_page_array(new); |
341 |
return new; |
365 |
return new; |
342 |
} |
366 |
} |
343 |
if (type == AGP_PHYS_MEMORY) |
367 |
if (type == AGP_PHYS_MEMORY) |
344 |
return alloc_agpphysmem_i8xx(pg_count, type); |
368 |
return alloc_agpphysmem_i8xx(pg_count, type); |
345 |
|
|
|
346 |
return NULL; |
369 |
return NULL; |
347 |
} |
370 |
} |
348 |
|
371 |
|
Lines 357-363
static void intel_i810_free_by_type(stru
Link Here
|
357 |
gart_to_virt(curr->memory[0])); |
380 |
gart_to_virt(curr->memory[0])); |
358 |
global_flush_tlb(); |
381 |
global_flush_tlb(); |
359 |
} |
382 |
} |
360 |
vfree(curr->memory); |
383 |
agp_free_page_array(curr); |
361 |
} |
384 |
} |
362 |
kfree(curr); |
385 |
kfree(curr); |
363 |
} |
386 |
} |
Lines 619-627
static int intel_i830_insert_entries(str
Link Here
|
619 |
{ |
642 |
{ |
620 |
int i,j,num_entries; |
643 |
int i,j,num_entries; |
621 |
void *temp; |
644 |
void *temp; |
|
|
645 |
int ret = -EINVAL; |
646 |
int mask_type; |
622 |
|
647 |
|
623 |
if (mem->page_count == 0) |
648 |
if (mem->page_count == 0) |
624 |
return 0; |
649 |
goto out; |
625 |
|
650 |
|
626 |
temp = agp_bridge->current_size; |
651 |
temp = agp_bridge->current_size; |
627 |
num_entries = A_SIZE_FIX(temp)->num_entries; |
652 |
num_entries = A_SIZE_FIX(temp)->num_entries; |
Lines 631-664
static int intel_i830_insert_entries(str
Link Here
|
631 |
pg_start,intel_i830_private.gtt_entries); |
656 |
pg_start,intel_i830_private.gtt_entries); |
632 |
|
657 |
|
633 |
printk (KERN_INFO PFX "Trying to insert into local/stolen memory\n"); |
658 |
printk (KERN_INFO PFX "Trying to insert into local/stolen memory\n"); |
634 |
return -EINVAL; |
659 |
goto out_err; |
635 |
} |
660 |
} |
636 |
|
661 |
|
637 |
if ((pg_start + mem->page_count) > num_entries) |
662 |
if ((pg_start + mem->page_count) > num_entries) |
638 |
return -EINVAL; |
663 |
goto out_err; |
639 |
|
664 |
|
640 |
/* The i830 can't check the GTT for entries since its read only, |
665 |
/* The i830 can't check the GTT for entries since its read only, |
641 |
* depend on the caller to make the correct offset decisions. |
666 |
* depend on the caller to make the correct offset decisions. |
642 |
*/ |
667 |
*/ |
643 |
|
668 |
|
644 |
if ((type != 0 && type != AGP_PHYS_MEMORY) || |
669 |
if (type != mem->type) |
645 |
(mem->type != 0 && mem->type != AGP_PHYS_MEMORY)) |
670 |
goto out_err; |
646 |
return -EINVAL; |
671 |
|
|
|
672 |
mask_type = agp_bridge->driver->agp_type_to_mask_type(agp_bridge, type); |
647 |
|
673 |
|
648 |
if (!mem->is_flushed) { |
674 |
if (mask_type != 0 && mask_type != AGP_PHYS_MEMORY && |
|
|
675 |
mask_type != INTEL_AGP_CACHED_MEMORY) |
676 |
goto out_err; |
677 |
|
678 |
if (!mem->is_flushed) |
649 |
global_cache_flush(); |
679 |
global_cache_flush(); |
650 |
mem->is_flushed = TRUE; |
|
|
651 |
} |
652 |
|
680 |
|
653 |
for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { |
681 |
for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { |
654 |
writel(agp_bridge->driver->mask_memory(agp_bridge, |
682 |
writel(agp_bridge->driver->mask_memory(agp_bridge, |
655 |
mem->memory[i], mem->type), |
683 |
mem->memory[i], mask_type), |
656 |
intel_i830_private.registers+I810_PTE_BASE+(j*4)); |
684 |
intel_i830_private.registers+I810_PTE_BASE+(j*4)); |
657 |
} |
685 |
} |
658 |
readl(intel_i830_private.registers+I810_PTE_BASE+((j-1)*4)); |
686 |
readl(intel_i830_private.registers+I810_PTE_BASE+((j-1)*4)); |
659 |
|
|
|
660 |
agp_bridge->driver->tlb_flush(mem); |
687 |
agp_bridge->driver->tlb_flush(mem); |
661 |
return 0; |
688 |
|
|
|
689 |
out: |
690 |
ret = 0; |
691 |
out_err: |
692 |
mem->is_flushed = 1; |
693 |
return ret; |
662 |
} |
694 |
} |
663 |
|
695 |
|
664 |
static int intel_i830_remove_entries(struct agp_memory *mem,off_t pg_start, |
696 |
static int intel_i830_remove_entries(struct agp_memory *mem,off_t pg_start, |
Lines 687-693
static struct agp_memory *intel_i830_all
Link Here
|
687 |
{ |
719 |
{ |
688 |
if (type == AGP_PHYS_MEMORY) |
720 |
if (type == AGP_PHYS_MEMORY) |
689 |
return alloc_agpphysmem_i8xx(pg_count, type); |
721 |
return alloc_agpphysmem_i8xx(pg_count, type); |
690 |
|
|
|
691 |
/* always return NULL for other allocation types for now */ |
722 |
/* always return NULL for other allocation types for now */ |
692 |
return NULL; |
723 |
return NULL; |
693 |
} |
724 |
} |
Lines 734-742
static int intel_i915_insert_entries(str
Link Here
|
734 |
{ |
765 |
{ |
735 |
int i,j,num_entries; |
766 |
int i,j,num_entries; |
736 |
void *temp; |
767 |
void *temp; |
|
|
768 |
int ret = -EINVAL; |
769 |
int mask_type; |
737 |
|
770 |
|
738 |
if (mem->page_count == 0) |
771 |
if (mem->page_count == 0) |
739 |
return 0; |
772 |
goto out; |
740 |
|
773 |
|
741 |
temp = agp_bridge->current_size; |
774 |
temp = agp_bridge->current_size; |
742 |
num_entries = A_SIZE_FIX(temp)->num_entries; |
775 |
num_entries = A_SIZE_FIX(temp)->num_entries; |
Lines 746-778
static int intel_i915_insert_entries(str
Link Here
|
746 |
pg_start,intel_i830_private.gtt_entries); |
779 |
pg_start,intel_i830_private.gtt_entries); |
747 |
|
780 |
|
748 |
printk (KERN_INFO PFX "Trying to insert into local/stolen memory\n"); |
781 |
printk (KERN_INFO PFX "Trying to insert into local/stolen memory\n"); |
749 |
return -EINVAL; |
782 |
goto out_err; |
750 |
} |
783 |
} |
751 |
|
784 |
|
752 |
if ((pg_start + mem->page_count) > num_entries) |
785 |
if ((pg_start + mem->page_count) > num_entries) |
753 |
return -EINVAL; |
786 |
goto out_err; |
754 |
|
787 |
|
755 |
/* The i830 can't check the GTT for entries since its read only, |
788 |
/* The i915 can't check the GTT for entries since its read only, |
756 |
* depend on the caller to make the correct offset decisions. |
789 |
* depend on the caller to make the correct offset decisions. |
757 |
*/ |
790 |
*/ |
758 |
|
791 |
|
759 |
if ((type != 0 && type != AGP_PHYS_MEMORY) || |
792 |
if (type != mem->type) |
760 |
(mem->type != 0 && mem->type != AGP_PHYS_MEMORY)) |
793 |
goto out_err; |
761 |
return -EINVAL; |
794 |
|
|
|
795 |
mask_type = agp_bridge->driver->agp_type_to_mask_type(agp_bridge, type); |
762 |
|
796 |
|
763 |
if (!mem->is_flushed) { |
797 |
if (mask_type != 0 && mask_type != AGP_PHYS_MEMORY && |
|
|
798 |
mask_type != INTEL_AGP_CACHED_MEMORY) |
799 |
goto out_err; |
800 |
|
801 |
if (!mem->is_flushed) |
764 |
global_cache_flush(); |
802 |
global_cache_flush(); |
765 |
mem->is_flushed = TRUE; |
|
|
766 |
} |
767 |
|
803 |
|
768 |
for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { |
804 |
for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { |
769 |
writel(agp_bridge->driver->mask_memory(agp_bridge, |
805 |
writel(agp_bridge->driver->mask_memory(agp_bridge, |
770 |
mem->memory[i], mem->type), intel_i830_private.gtt+j); |
806 |
mem->memory[i], mask_type), intel_i830_private.gtt+j); |
771 |
} |
807 |
} |
772 |
readl(intel_i830_private.gtt+j-1); |
|
|
773 |
|
808 |
|
|
|
809 |
readl(intel_i830_private.gtt+j-1); |
774 |
agp_bridge->driver->tlb_flush(mem); |
810 |
agp_bridge->driver->tlb_flush(mem); |
775 |
return 0; |
811 |
|
|
|
812 |
out: |
813 |
ret = 0; |
814 |
out_err: |
815 |
mem->is_flushed = 1; |
816 |
return ret; |
776 |
} |
817 |
} |
777 |
|
818 |
|
778 |
static int intel_i915_remove_entries(struct agp_memory *mem,off_t pg_start, |
819 |
static int intel_i915_remove_entries(struct agp_memory *mem,off_t pg_start, |
Lines 1384-1389
static struct agp_bridge_driver intel_ge
Link Here
|
1384 |
.free_by_type = agp_generic_free_by_type, |
1425 |
.free_by_type = agp_generic_free_by_type, |
1385 |
.agp_alloc_page = agp_generic_alloc_page, |
1426 |
.agp_alloc_page = agp_generic_alloc_page, |
1386 |
.agp_destroy_page = agp_generic_destroy_page, |
1427 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1428 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1387 |
}; |
1429 |
}; |
1388 |
|
1430 |
|
1389 |
static struct agp_bridge_driver intel_810_driver = { |
1431 |
static struct agp_bridge_driver intel_810_driver = { |
Lines 1408-1413
static struct agp_bridge_driver intel_81
Link Here
|
1408 |
.free_by_type = intel_i810_free_by_type, |
1450 |
.free_by_type = intel_i810_free_by_type, |
1409 |
.agp_alloc_page = agp_generic_alloc_page, |
1451 |
.agp_alloc_page = agp_generic_alloc_page, |
1410 |
.agp_destroy_page = agp_generic_destroy_page, |
1452 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1453 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1411 |
}; |
1454 |
}; |
1412 |
|
1455 |
|
1413 |
static struct agp_bridge_driver intel_815_driver = { |
1456 |
static struct agp_bridge_driver intel_815_driver = { |
Lines 1431-1436
static struct agp_bridge_driver intel_81
Link Here
|
1431 |
.free_by_type = agp_generic_free_by_type, |
1474 |
.free_by_type = agp_generic_free_by_type, |
1432 |
.agp_alloc_page = agp_generic_alloc_page, |
1475 |
.agp_alloc_page = agp_generic_alloc_page, |
1433 |
.agp_destroy_page = agp_generic_destroy_page, |
1476 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1477 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1434 |
}; |
1478 |
}; |
1435 |
|
1479 |
|
1436 |
static struct agp_bridge_driver intel_830_driver = { |
1480 |
static struct agp_bridge_driver intel_830_driver = { |
Lines 1455-1460
static struct agp_bridge_driver intel_83
Link Here
|
1455 |
.free_by_type = intel_i810_free_by_type, |
1499 |
.free_by_type = intel_i810_free_by_type, |
1456 |
.agp_alloc_page = agp_generic_alloc_page, |
1500 |
.agp_alloc_page = agp_generic_alloc_page, |
1457 |
.agp_destroy_page = agp_generic_destroy_page, |
1501 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1502 |
.agp_type_to_mask_type = intel_i830_type_to_mask_type, |
1458 |
}; |
1503 |
}; |
1459 |
|
1504 |
|
1460 |
static struct agp_bridge_driver intel_820_driver = { |
1505 |
static struct agp_bridge_driver intel_820_driver = { |
Lines 1478-1483
static struct agp_bridge_driver intel_82
Link Here
|
1478 |
.free_by_type = agp_generic_free_by_type, |
1523 |
.free_by_type = agp_generic_free_by_type, |
1479 |
.agp_alloc_page = agp_generic_alloc_page, |
1524 |
.agp_alloc_page = agp_generic_alloc_page, |
1480 |
.agp_destroy_page = agp_generic_destroy_page, |
1525 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1526 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1481 |
}; |
1527 |
}; |
1482 |
|
1528 |
|
1483 |
static struct agp_bridge_driver intel_830mp_driver = { |
1529 |
static struct agp_bridge_driver intel_830mp_driver = { |
Lines 1501-1506
static struct agp_bridge_driver intel_83
Link Here
|
1501 |
.free_by_type = agp_generic_free_by_type, |
1547 |
.free_by_type = agp_generic_free_by_type, |
1502 |
.agp_alloc_page = agp_generic_alloc_page, |
1548 |
.agp_alloc_page = agp_generic_alloc_page, |
1503 |
.agp_destroy_page = agp_generic_destroy_page, |
1549 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1550 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1504 |
}; |
1551 |
}; |
1505 |
|
1552 |
|
1506 |
static struct agp_bridge_driver intel_840_driver = { |
1553 |
static struct agp_bridge_driver intel_840_driver = { |
Lines 1524-1529
static struct agp_bridge_driver intel_84
Link Here
|
1524 |
.free_by_type = agp_generic_free_by_type, |
1571 |
.free_by_type = agp_generic_free_by_type, |
1525 |
.agp_alloc_page = agp_generic_alloc_page, |
1572 |
.agp_alloc_page = agp_generic_alloc_page, |
1526 |
.agp_destroy_page = agp_generic_destroy_page, |
1573 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1574 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1527 |
}; |
1575 |
}; |
1528 |
|
1576 |
|
1529 |
static struct agp_bridge_driver intel_845_driver = { |
1577 |
static struct agp_bridge_driver intel_845_driver = { |
Lines 1547-1552
static struct agp_bridge_driver intel_84
Link Here
|
1547 |
.free_by_type = agp_generic_free_by_type, |
1595 |
.free_by_type = agp_generic_free_by_type, |
1548 |
.agp_alloc_page = agp_generic_alloc_page, |
1596 |
.agp_alloc_page = agp_generic_alloc_page, |
1549 |
.agp_destroy_page = agp_generic_destroy_page, |
1597 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1598 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1550 |
}; |
1599 |
}; |
1551 |
|
1600 |
|
1552 |
static struct agp_bridge_driver intel_850_driver = { |
1601 |
static struct agp_bridge_driver intel_850_driver = { |
Lines 1570-1575
static struct agp_bridge_driver intel_85
Link Here
|
1570 |
.free_by_type = agp_generic_free_by_type, |
1619 |
.free_by_type = agp_generic_free_by_type, |
1571 |
.agp_alloc_page = agp_generic_alloc_page, |
1620 |
.agp_alloc_page = agp_generic_alloc_page, |
1572 |
.agp_destroy_page = agp_generic_destroy_page, |
1621 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1622 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1573 |
}; |
1623 |
}; |
1574 |
|
1624 |
|
1575 |
static struct agp_bridge_driver intel_860_driver = { |
1625 |
static struct agp_bridge_driver intel_860_driver = { |
Lines 1593-1598
static struct agp_bridge_driver intel_86
Link Here
|
1593 |
.free_by_type = agp_generic_free_by_type, |
1643 |
.free_by_type = agp_generic_free_by_type, |
1594 |
.agp_alloc_page = agp_generic_alloc_page, |
1644 |
.agp_alloc_page = agp_generic_alloc_page, |
1595 |
.agp_destroy_page = agp_generic_destroy_page, |
1645 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1646 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1596 |
}; |
1647 |
}; |
1597 |
|
1648 |
|
1598 |
static struct agp_bridge_driver intel_915_driver = { |
1649 |
static struct agp_bridge_driver intel_915_driver = { |
Lines 1617-1622
static struct agp_bridge_driver intel_91
Link Here
|
1617 |
.free_by_type = intel_i810_free_by_type, |
1668 |
.free_by_type = intel_i810_free_by_type, |
1618 |
.agp_alloc_page = agp_generic_alloc_page, |
1669 |
.agp_alloc_page = agp_generic_alloc_page, |
1619 |
.agp_destroy_page = agp_generic_destroy_page, |
1670 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1671 |
.agp_type_to_mask_type = intel_i830_type_to_mask_type, |
1620 |
}; |
1672 |
}; |
1621 |
|
1673 |
|
1622 |
static struct agp_bridge_driver intel_i965_driver = { |
1674 |
static struct agp_bridge_driver intel_i965_driver = { |
Lines 1641-1646
static struct agp_bridge_driver intel_i9
Link Here
|
1641 |
.free_by_type = intel_i810_free_by_type, |
1693 |
.free_by_type = intel_i810_free_by_type, |
1642 |
.agp_alloc_page = agp_generic_alloc_page, |
1694 |
.agp_alloc_page = agp_generic_alloc_page, |
1643 |
.agp_destroy_page = agp_generic_destroy_page, |
1695 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1696 |
.agp_type_to_mask_type = intel_i830_type_to_mask_type, |
1644 |
}; |
1697 |
}; |
1645 |
|
1698 |
|
1646 |
static struct agp_bridge_driver intel_7505_driver = { |
1699 |
static struct agp_bridge_driver intel_7505_driver = { |
Lines 1664-1669
static struct agp_bridge_driver intel_75
Link Here
|
1664 |
.free_by_type = agp_generic_free_by_type, |
1717 |
.free_by_type = agp_generic_free_by_type, |
1665 |
.agp_alloc_page = agp_generic_alloc_page, |
1718 |
.agp_alloc_page = agp_generic_alloc_page, |
1666 |
.agp_destroy_page = agp_generic_destroy_page, |
1719 |
.agp_destroy_page = agp_generic_destroy_page, |
|
|
1720 |
.agp_type_to_mask_type = agp_generic_type_to_mask_type, |
1667 |
}; |
1721 |
}; |
1668 |
|
1722 |
|
1669 |
static int find_i810(u16 device) |
1723 |
static int find_i810(u16 device) |