diff options
author | Dave Airlie <airlied@gmail.com> | 2012-12-19 17:11:00 +1000 |
---|---|---|
committer | Dave Airlie <airlied@gmail.com> | 2012-12-19 17:11:00 +1000 |
commit | 902fa2101986eeefbc19ea34442a339b979e6b1f (patch) | |
tree | 3bff4e0dd93a40aa25a60e1c9c0d72d600229ee4 | |
parent | f340f4f3878003abc19ad324cf5415c36c781518 (diff) |
WIP try to pull bufs code outdrm-hacked-to-shit
-rw-r--r-- | drivers/gpu/drm/Kconfig | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/Makefile | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_bufs.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_context.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_drv.c | 36 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_hashtab.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_pci.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_stub.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/mga/mga_dma.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/mga/mga_drv.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/mga/mga_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_cp.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/savage/savage_bci.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/savage/savage_drv.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/savage/savage_drv.h | 1 |
15 files changed, 63 insertions, 29 deletions
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index 983201b450f1..909ae620aafe 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -25,6 +25,10 @@ config DRM_USB depends on USB_SUPPORT && USB_ARCH_HAS_HCD select USB +config DRM_BUFS + tristate + depends on DRM + config DRM_KMS_HELPER tristate depends on DRM @@ -96,6 +100,7 @@ config DRM_RADEON select DRM_TTM select POWER_SUPPLY select HWMON + select DRM_BUFS help Choose this option if you have an ATI Radeon graphics card. There are both PCI and AGP versions. You don't need to choose this to @@ -166,6 +171,7 @@ config DRM_I915_KMS config DRM_MGA tristate "Matrox g200/g400" depends on DRM && PCI + select DRM_BUFS select FW_LOADER help Choose this option if you have a Matrox G200, G400 or G450 graphics @@ -191,6 +197,7 @@ config DRM_VIA config DRM_SAVAGE tristate "Savage video cards" depends on DRM && PCI + select DRM_BUFS help Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister chipset. If M is selected the module will be called savage. diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index 20a1eeb9738b..03cf9e8c4ebf 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -4,8 +4,8 @@ ccflags-y := -Iinclude/drm -drm-y := drm_auth.o drm_buffer.o drm_bufs.o drm_cache.o \ - drm_context.o drm_dma.o \ +drm-y := drm_auth.o drm_buffer.o drm_cache.o \ + drm_context.o \ drm_drv.o drm_fops.o drm_gem.o drm_ioctl.o drm_irq.o \ drm_lock.o drm_memory.o drm_proc.o drm_stub.o drm_vm.o \ drm_agpsupport.o drm_scatter.o drm_pci.o \ @@ -18,6 +18,8 @@ drm-$(CONFIG_COMPAT) += drm_ioc32.o drm-$(CONFIG_DRM_GEM_CMA_HELPER) += drm_gem_cma_helper.o drm-$(CONFIG_PCI) += ati_pcigart.o +obj-$(CONFIG_DRM_BUFS) += drm_bufs.o drm_dma.o + drm-usb-y := drm_usb.o drm_kms_helper-y := drm_fb_helper.o drm_crtc_helper.o drm_dp_helper.o diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c index ea4d74139e81..6d7911185127 100644 --- a/drivers/gpu/drm/drm_bufs.c +++ b/drivers/gpu/drm/drm_bufs.c @@ -380,7 +380,6 @@ int drm_addmap(struct drm_device * dev, resource_size_t offset, *map_ptr = list->map; return rc; } - EXPORT_SYMBOL(drm_addmap); /** @@ -1657,7 +1656,8 @@ void drm_bufs_init_ioctls(struct drm_ioctl_desc *ioctls) DRM_IOCTL_DEF(DRM_IOCTL_INFO_BUFS, drm_infobufs, DRM_AUTH); DRM_IOCTL_DEF(DRM_IOCTL_MAP_BUFS, drm_mapbufs, DRM_AUTH); DRM_IOCTL_DEF(DRM_IOCTL_FREE_BUFS, drm_freebufs, DRM_AUTH); -} +} +EXPORT_SYMBOL(drm_bufs_init_ioctls); void drm_bufs_master_destroy(struct drm_master *master) { @@ -1670,6 +1670,7 @@ void drm_bufs_master_destroy(struct drm_master *master) } } } +EXPORT_SYMBOL(drm_bufs_master_destroy); void drm_bufs_put_dev(struct drm_device *dev) { @@ -1678,3 +1679,4 @@ void drm_bufs_put_dev(struct drm_device *dev) list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) drm_rmmap(dev, r_list->map); } +EXPORT_SYMBOL(drm_bufs_put_dev); diff --git a/drivers/gpu/drm/drm_context.c b/drivers/gpu/drm/drm_context.c index e79925b28a3f..e040290aa265 100644 --- a/drivers/gpu/drm/drm_context.c +++ b/drivers/gpu/drm/drm_context.c @@ -101,7 +101,7 @@ again: * * Initialise the drm_device::ctx_idr */ -int drm_ctx_init(struct drm_device * dev) +int drm_ctxbitmap_init(struct drm_device * dev) { INIT_LIST_HEAD(&dev->ctxlist); idr_init(&dev->ctx_idr); diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index d718425a2ae4..f355777cb4b7 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -160,28 +160,32 @@ static struct drm_ioctl_desc drm_ioctls[] = { int drm_lastclose(struct drm_device * dev) { struct drm_vma_entry *vma, *vma_temp; - + boolean modeset = drm_core_check_feature(dev, DRIVER_MODESET); DRM_DEBUG("\n"); if (dev->driver->lastclose) dev->driver->lastclose(dev); DRM_DEBUG("driver lastclose completed\n"); - if (dev->irq_enabled && !drm_core_check_feature(dev, DRIVER_MODESET)) - drm_irq_uninstall(dev); + if (!modeset) { + if (dev->irq_enabled) + drm_irq_uninstall(dev); - mutex_lock(&dev->struct_mutex); + mutex_lock(&dev->struct_mutex); - /* Clear AGP information */ - if (drm_core_has_AGP(dev) && dev->agp && - !drm_core_check_feature(dev, DRIVER_MODESET)) { - drm_agp_lastclose(dev); - } - if (drm_core_check_feature(dev, DRIVER_SG) && dev->sg && - !drm_core_check_feature(dev, DRIVER_MODESET)) { - drm_sg_cleanup(dev->sg); - dev->sg = NULL; - } + /* Clear AGP information */ + if (drm_core_has_AGP(dev) && dev->agp) + drm_agp_lastclose(dev); + + if (drm_core_check_feature(dev, DRIVER_SG) && dev->sg) { + drm_sg_cleanup(dev->sg); + dev->sg = NULL; + } + + if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)) + drm_dma_takedown(dev); + } else + mutex_lock(&dev->struct_mutex); /* Clear vma list (only built for debugging) */ list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) { @@ -189,10 +193,6 @@ int drm_lastclose(struct drm_device * dev) kfree(vma); } - if (drm_core_check_feature(dev, DRIVER_HAVE_DMA) && - !drm_core_check_feature(dev, DRIVER_MODESET)) - drm_dma_takedown(dev); - dev->dev_mapping = NULL; mutex_unlock(&dev->struct_mutex); diff --git a/drivers/gpu/drm/drm_hashtab.c b/drivers/gpu/drm/drm_hashtab.c index 80254547a3f8..3dcb6f321d2e 100644 --- a/drivers/gpu/drm/drm_hashtab.c +++ b/drivers/gpu/drm/drm_hashtab.c @@ -190,6 +190,7 @@ int drm_ht_remove_key(struct drm_open_hash *ht, unsigned long key) } return -EINVAL; } +EXPORT_SYMBOL(drm_ht_remove_key); int drm_ht_remove_item(struct drm_open_hash *ht, struct drm_hash_item *item) { diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c index 754bc96e10c7..403fe46aa51b 100644 --- a/drivers/gpu/drm/drm_pci.c +++ b/drivers/gpu/drm/drm_pci.c @@ -113,7 +113,7 @@ void __drm_pci_free(struct drm_device * dev, drm_dma_handle_t * dmah) dmah->busaddr); } } - +EXPORT_SYMBOL(__drm_pci_free); /** * \brief Free a PCI consistent memory block */ diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 6a38753f3bb8..5e087848eaaf 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c @@ -180,8 +180,6 @@ static void drm_master_destroy(struct kref *kref) if (dev->driver->master_destroy) dev->driver->master_destroy(dev, master); - drm_bufs_master_destroy(master); - if (master->unique) { kfree(master->unique); master->unique = NULL; @@ -291,8 +289,8 @@ int drm_fill_in_dev(struct drm_device *dev, dev->driver = driver; drm_ctx_init_ioctls(dev->driver->ioctls); - drm_bufs_init_ioctls(dev->driver->ioctls); drm_sg_init_ioctls(dev->driver->ioctls); + if (dev->driver->bus->agp_init) { retcode = dev->driver->bus->agp_init(dev); if (retcode) @@ -478,8 +476,6 @@ void drm_put_dev(struct drm_device *dev) drm_vblank_cleanup(dev); - drm_bufs_put_dev(dev); - drm_ht_remove(&dev->map_hash); drm_ctxbitmap_cleanup(dev); diff --git a/drivers/gpu/drm/mga/mga_dma.c b/drivers/gpu/drm/mga/mga_dma.c index 1a62a01b8737..49a6769b8bb8 100644 --- a/drivers/gpu/drm/mga/mga_dma.c +++ b/drivers/gpu/drm/mga/mga_dma.c @@ -393,6 +393,8 @@ int mga_driver_load(struct drm_device *dev, unsigned long flags) drm_mga_private_t *dev_priv; int ret; + drm_bufs_init_ioctls(dev->driver->ioctls); + dev_priv = kzalloc(sizeof(drm_mga_private_t), GFP_KERNEL); if (!dev_priv) return -ENOMEM; @@ -1134,6 +1136,7 @@ int mga_dma_buffers(struct drm_device *dev, void *data, */ int mga_driver_unload(struct drm_device *dev) { + drm_bufs_put_dev(dev); kfree(dev->dev_private); dev->dev_private = NULL; @@ -1153,3 +1156,8 @@ int mga_driver_dma_quiescent(struct drm_device *dev) drm_mga_private_t *dev_priv = dev->dev_private; return mga_do_wait_for_idle(dev_priv); } + +void mga_master_destroy(struct drm_device *dev, struct drm_master *master) +{ + drm_bufs_master_destroy(master); +} diff --git a/drivers/gpu/drm/mga/mga_drv.c b/drivers/gpu/drm/mga/mga_drv.c index 17d0a637e4fb..0e61c0c0645c 100644 --- a/drivers/gpu/drm/mga/mga_drv.c +++ b/drivers/gpu/drm/mga/mga_drv.c @@ -70,6 +70,7 @@ static struct drm_driver driver = { .get_vblank_counter = mga_get_vblank_counter, .enable_vblank = mga_enable_vblank, .disable_vblank = mga_disable_vblank, + .master_destroy = mga_master_destroy, .irq_preinstall = mga_driver_irq_preinstall, .irq_postinstall = mga_driver_irq_postinstall, .irq_uninstall = mga_driver_irq_uninstall, diff --git a/drivers/gpu/drm/mga/mga_drv.h b/drivers/gpu/drm/mga/mga_drv.h index 54558a01969a..d566a6915162 100644 --- a/drivers/gpu/drm/mga/mga_drv.h +++ b/drivers/gpu/drm/mga/mga_drv.h @@ -167,6 +167,7 @@ extern int mga_driver_load(struct drm_device *dev, unsigned long flags); extern int mga_driver_unload(struct drm_device *dev); extern void mga_driver_lastclose(struct drm_device *dev); extern int mga_driver_dma_quiescent(struct drm_device *dev); +extern void mga_master_destroy(struct drm_device *dev, struct drm_master *master); extern int mga_do_wait_for_idle(drm_mga_private_t *dev_priv); diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c index 96b3d82eea5c..e634f91eff16 100644 --- a/drivers/gpu/drm/radeon/radeon_cp.c +++ b/drivers/gpu/drm/radeon/radeon_cp.c @@ -2069,6 +2069,8 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags) drm_radeon_private_t *dev_priv; int ret = 0; + drm_bufs_init_ioctls(dev->driver->ioctls); + dev_priv = kzalloc(sizeof(drm_radeon_private_t), GFP_KERNEL); if (dev_priv == NULL) return -ENOMEM; @@ -2152,6 +2154,8 @@ void radeon_master_destroy(struct drm_device *dev, struct drm_master *master) { struct drm_radeon_master_private *master_priv = master->driver_priv; + drm_bufs_master_destroy(master); + if (!master_priv) return; @@ -2195,6 +2199,8 @@ int radeon_driver_unload(struct drm_device *dev) DRM_DEBUG("\n"); + drm_bufs_put_dev(dev); + drm_rmmap(dev, dev_priv->mmio); kfree(dev_priv); diff --git a/drivers/gpu/drm/savage/savage_bci.c b/drivers/gpu/drm/savage/savage_bci.c index 34669e1fdc88..6221590018f5 100644 --- a/drivers/gpu/drm/savage/savage_bci.c +++ b/drivers/gpu/drm/savage/savage_bci.c @@ -540,6 +540,8 @@ int savage_driver_load(struct drm_device *dev, unsigned long chipset) { drm_savage_private_t *dev_priv; + drm_bufs_init_ioctls(dev->driver->ioctls); + dev_priv = kzalloc(sizeof(drm_savage_private_t), GFP_KERNEL); if (dev_priv == NULL) return -ENOMEM; @@ -672,11 +674,17 @@ int savage_driver_unload(struct drm_device *dev) { drm_savage_private_t *dev_priv = dev->dev_private; + drm_bufs_put_dev(dev); kfree(dev_priv); return 0; } +void savage_master_destroy(struct drm_device *dev, struct drm_master *master) +{ + drm_bufs_master_destroy(master); +} + static int savage_do_init_bci(struct drm_device * dev, drm_savage_init_t * init) { drm_savage_private_t *dev_priv = dev->dev_private; diff --git a/drivers/gpu/drm/savage/savage_drv.c b/drivers/gpu/drm/savage/savage_drv.c index 71b2081e7835..ec79da60bbe2 100644 --- a/drivers/gpu/drm/savage/savage_drv.c +++ b/drivers/gpu/drm/savage/savage_drv.c @@ -58,6 +58,7 @@ static struct drm_driver driver = { .preclose = savage_reclaim_buffers, .lastclose = savage_driver_lastclose, .unload = savage_driver_unload, + .master_destroy = savage_master_destroy, .ioctls = savage_ioctls, .dma_ioctl = savage_bci_buffers, .fops = &savage_driver_fops, diff --git a/drivers/gpu/drm/savage/savage_drv.h b/drivers/gpu/drm/savage/savage_drv.h index df2aac6636f7..518e8ee4bc1c 100644 --- a/drivers/gpu/drm/savage/savage_drv.h +++ b/drivers/gpu/drm/savage/savage_drv.h @@ -211,6 +211,7 @@ extern uint32_t *savage_dma_alloc(drm_savage_private_t * dev_priv, extern int savage_driver_load(struct drm_device *dev, unsigned long chipset); extern int savage_driver_firstopen(struct drm_device *dev); extern void savage_driver_lastclose(struct drm_device *dev); +extern void savage_master_destroy(struct drm_device *dev, struct drm_master *master); extern int savage_driver_unload(struct drm_device *dev); extern void savage_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv); |