diff options
Diffstat (limited to 'drivers/gpu/drm/drm_pci.c')
-rw-r--r-- | drivers/gpu/drm/drm_pci.c | 69 |
1 files changed, 11 insertions, 58 deletions
diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c index 1f96cee6eee8..02679793c9e2 100644 --- a/drivers/gpu/drm/drm_pci.c +++ b/drivers/gpu/drm/drm_pci.c | |||
@@ -80,7 +80,7 @@ drm_dma_handle_t *drm_pci_alloc(struct drm_device * dev, size_t size, size_t ali | |||
80 | /* Reserve */ | 80 | /* Reserve */ |
81 | for (addr = (unsigned long)dmah->vaddr, sz = size; | 81 | for (addr = (unsigned long)dmah->vaddr, sz = size; |
82 | sz > 0; addr += PAGE_SIZE, sz -= PAGE_SIZE) { | 82 | sz > 0; addr += PAGE_SIZE, sz -= PAGE_SIZE) { |
83 | SetPageReserved(virt_to_page(addr)); | 83 | SetPageReserved(virt_to_page((void *)addr)); |
84 | } | 84 | } |
85 | 85 | ||
86 | return dmah; | 86 | return dmah; |
@@ -103,7 +103,7 @@ void __drm_pci_free(struct drm_device * dev, drm_dma_handle_t * dmah) | |||
103 | /* Unreserve */ | 103 | /* Unreserve */ |
104 | for (addr = (unsigned long)dmah->vaddr, sz = dmah->size; | 104 | for (addr = (unsigned long)dmah->vaddr, sz = dmah->size; |
105 | sz > 0; addr += PAGE_SIZE, sz -= PAGE_SIZE) { | 105 | sz > 0; addr += PAGE_SIZE, sz -= PAGE_SIZE) { |
106 | ClearPageReserved(virt_to_page(addr)); | 106 | ClearPageReserved(virt_to_page((void *)addr)); |
107 | } | 107 | } |
108 | dma_free_coherent(&dev->pdev->dev, dmah->size, dmah->vaddr, | 108 | dma_free_coherent(&dev->pdev->dev, dmah->size, dmah->vaddr, |
109 | dmah->busaddr); | 109 | dmah->busaddr); |
@@ -322,83 +322,36 @@ int drm_get_pci_dev(struct pci_dev *pdev, const struct pci_device_id *ent, | |||
322 | 322 | ||
323 | DRM_DEBUG("\n"); | 323 | DRM_DEBUG("\n"); |
324 | 324 | ||
325 | dev = kzalloc(sizeof(*dev), GFP_KERNEL); | 325 | dev = drm_dev_alloc(driver, &pdev->dev); |
326 | if (!dev) | 326 | if (!dev) |
327 | return -ENOMEM; | 327 | return -ENOMEM; |
328 | 328 | ||
329 | ret = pci_enable_device(pdev); | 329 | ret = pci_enable_device(pdev); |
330 | if (ret) | 330 | if (ret) |
331 | goto err_g1; | 331 | goto err_free; |
332 | 332 | ||
333 | dev->pdev = pdev; | 333 | dev->pdev = pdev; |
334 | dev->dev = &pdev->dev; | ||
335 | |||
336 | dev->pci_device = pdev->device; | ||
337 | dev->pci_vendor = pdev->vendor; | ||
338 | |||
339 | #ifdef __alpha__ | 334 | #ifdef __alpha__ |
340 | dev->hose = pdev->sysdata; | 335 | dev->hose = pdev->sysdata; |
341 | #endif | 336 | #endif |
342 | 337 | ||
343 | mutex_lock(&drm_global_mutex); | 338 | if (drm_core_check_feature(dev, DRIVER_MODESET)) |
344 | |||
345 | if ((ret = drm_fill_in_dev(dev, ent, driver))) { | ||
346 | printk(KERN_ERR "DRM: Fill_in_dev failed.\n"); | ||
347 | goto err_g2; | ||
348 | } | ||
349 | |||
350 | if (drm_core_check_feature(dev, DRIVER_MODESET)) { | ||
351 | pci_set_drvdata(pdev, dev); | 339 | pci_set_drvdata(pdev, dev); |
352 | ret = drm_get_minor(dev, &dev->control, DRM_MINOR_CONTROL); | ||
353 | if (ret) | ||
354 | goto err_g2; | ||
355 | } | ||
356 | |||
357 | if (drm_core_check_feature(dev, DRIVER_RENDER) && drm_rnodes) { | ||
358 | ret = drm_get_minor(dev, &dev->render, DRM_MINOR_RENDER); | ||
359 | if (ret) | ||
360 | goto err_g21; | ||
361 | } | ||
362 | |||
363 | if ((ret = drm_get_minor(dev, &dev->primary, DRM_MINOR_LEGACY))) | ||
364 | goto err_g3; | ||
365 | |||
366 | if (dev->driver->load) { | ||
367 | ret = dev->driver->load(dev, ent->driver_data); | ||
368 | if (ret) | ||
369 | goto err_g4; | ||
370 | } | ||
371 | 340 | ||
372 | /* setup the grouping for the legacy output */ | 341 | ret = drm_dev_register(dev, ent->driver_data); |
373 | if (drm_core_check_feature(dev, DRIVER_MODESET)) { | 342 | if (ret) |
374 | ret = drm_mode_group_init_legacy_group(dev, | 343 | goto err_pci; |
375 | &dev->primary->mode_group); | ||
376 | if (ret) | ||
377 | goto err_g4; | ||
378 | } | ||
379 | |||
380 | list_add_tail(&dev->driver_item, &driver->device_list); | ||
381 | 344 | ||
382 | DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n", | 345 | DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n", |
383 | driver->name, driver->major, driver->minor, driver->patchlevel, | 346 | driver->name, driver->major, driver->minor, driver->patchlevel, |
384 | driver->date, pci_name(pdev), dev->primary->index); | 347 | driver->date, pci_name(pdev), dev->primary->index); |
385 | 348 | ||
386 | mutex_unlock(&drm_global_mutex); | ||
387 | return 0; | 349 | return 0; |
388 | 350 | ||
389 | err_g4: | 351 | err_pci: |
390 | drm_put_minor(&dev->primary); | ||
391 | err_g3: | ||
392 | if (dev->render) | ||
393 | drm_put_minor(&dev->render); | ||
394 | err_g21: | ||
395 | if (drm_core_check_feature(dev, DRIVER_MODESET)) | ||
396 | drm_put_minor(&dev->control); | ||
397 | err_g2: | ||
398 | pci_disable_device(pdev); | 352 | pci_disable_device(pdev); |
399 | err_g1: | 353 | err_free: |
400 | kfree(dev); | 354 | drm_dev_free(dev); |
401 | mutex_unlock(&drm_global_mutex); | ||
402 | return ret; | 355 | return ret; |
403 | } | 356 | } |
404 | EXPORT_SYMBOL(drm_get_pci_dev); | 357 | EXPORT_SYMBOL(drm_get_pci_dev); |