Rev 4104 | Rev 5060 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4104 | Rev 4560 | ||
---|---|---|---|
Line 100... | Line 100... | ||
100 | if (dmah->vaddr) { |
100 | if (dmah->vaddr) { |
101 | /* XXX - Is virt_to_page() legal for consistent mem? */ |
101 | /* XXX - Is virt_to_page() legal for consistent mem? */ |
102 | /* Unreserve */ |
102 | /* Unreserve */ |
103 | for (addr = (unsigned long)dmah->vaddr, sz = dmah->size; |
103 | for (addr = (unsigned long)dmah->vaddr, sz = dmah->size; |
104 | sz > 0; addr += PAGE_SIZE, sz -= PAGE_SIZE) { |
104 | sz > 0; addr += PAGE_SIZE, sz -= PAGE_SIZE) { |
105 | ClearPageReserved(virt_to_page(addr)); |
105 | ClearPageReserved(virt_to_page((void *)addr)); |
106 | } |
106 | } |
107 | dma_free_coherent(&dev->pdev->dev, dmah->size, dmah->vaddr, |
107 | dma_free_coherent(&dev->pdev->dev, dmah->size, dmah->vaddr, |
108 | dmah->busaddr); |
108 | dmah->busaddr); |
109 | } |
109 | } |
110 | } |
110 | } |
Line 258... | Line 258... | ||
258 | DRM_DEBUG("%d:%d:%d => IRQ %d\n", p->busnum, p->devnum, p->funcnum, |
258 | DRM_DEBUG("%d:%d:%d => IRQ %d\n", p->busnum, p->devnum, p->funcnum, |
259 | p->irq); |
259 | p->irq); |
260 | return 0; |
260 | return 0; |
261 | } |
261 | } |
Line 262... | Line 262... | ||
262 | 262 | ||
263 | static int drm_pci_agp_init(struct drm_device *dev) |
263 | static void drm_pci_agp_init(struct drm_device *dev) |
264 | { |
264 | { |
265 | if (drm_core_has_AGP(dev)) { |
265 | if (drm_core_check_feature(dev, DRIVER_USE_AGP)) { |
266 | if (drm_pci_device_is_agp(dev)) |
266 | if (drm_pci_device_is_agp(dev)) |
267 | dev->agp = drm_agp_init(dev); |
- | |
268 | if (drm_core_check_feature(dev, DRIVER_REQUIRE_AGP) |
- | |
269 | && (dev->agp == NULL)) { |
- | |
270 | DRM_ERROR("Cannot initialize the agpgart module.\n"); |
- | |
271 | return -EINVAL; |
- | |
272 | } |
267 | dev->agp = drm_agp_init(dev); |
273 | if (dev->agp) { |
268 | if (dev->agp) { |
274 | dev->agp->agp_mtrr = arch_phys_wc_add( |
269 | dev->agp->agp_mtrr = arch_phys_wc_add( |
275 | dev->agp->agp_info.aper_base, |
270 | dev->agp->agp_info.aper_base, |
276 | dev->agp->agp_info.aper_size * |
271 | dev->agp->agp_info.aper_size * |
277 | 1024 * 1024); |
272 | 1024 * 1024); |
278 | } |
273 | } |
279 | } |
- | |
280 | return 0; |
274 | } |
Line 281... | Line 275... | ||
281 | } |
275 | } |
282 | 276 | ||
283 | static void drm_pci_agp_destroy(struct drm_device *dev) |
277 | void drm_pci_agp_destroy(struct drm_device *dev) |
284 | { |
278 | { |
285 | if (drm_core_has_AGP(dev) && dev->agp) { |
279 | if (dev->agp) { |
286 | arch_phys_wc_del(dev->agp->agp_mtrr); |
280 | arch_phys_wc_del(dev->agp->agp_mtrr); |
287 | drm_agp_clear(dev); |
281 | drm_agp_clear(dev); |
288 | drm_agp_destroy(dev->agp); |
282 | kfree(dev->agp); |
289 | dev->agp = NULL; |
283 | dev->agp = NULL; |
Line 290... | Line 284... | ||
290 | } |
284 | } |
Line 295... | Line 289... | ||
295 | .get_irq = drm_pci_get_irq, |
289 | .get_irq = drm_pci_get_irq, |
296 | .get_name = drm_pci_get_name, |
290 | .get_name = drm_pci_get_name, |
297 | .set_busid = drm_pci_set_busid, |
291 | .set_busid = drm_pci_set_busid, |
298 | .set_unique = drm_pci_set_unique, |
292 | .set_unique = drm_pci_set_unique, |
299 | .irq_by_busid = drm_pci_irq_by_busid, |
293 | .irq_by_busid = drm_pci_irq_by_busid, |
300 | .agp_init = drm_pci_agp_init, |
- | |
301 | .agp_destroy = drm_pci_agp_destroy, |
- | |
302 | }; |
294 | }; |
303 | #endif |
295 | #endif |
Line 304... | Line 296... | ||
304 | 296 | ||
305 | /** |
297 | /** |