summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@gmail.com>2012-12-19 17:11:00 +1000
committerDave Airlie <airlied@gmail.com>2012-12-19 17:11:00 +1000
commit902fa2101986eeefbc19ea34442a339b979e6b1f (patch)
tree3bff4e0dd93a40aa25a60e1c9c0d72d600229ee4
parentf340f4f3878003abc19ad324cf5415c36c781518 (diff)
WIP try to pull bufs code outdrm-hacked-to-shit
-rw-r--r--drivers/gpu/drm/Kconfig7
-rw-r--r--drivers/gpu/drm/Makefile6
-rw-r--r--drivers/gpu/drm/drm_bufs.c6
-rw-r--r--drivers/gpu/drm/drm_context.c2
-rw-r--r--drivers/gpu/drm/drm_drv.c36
-rw-r--r--drivers/gpu/drm/drm_hashtab.c1
-rw-r--r--drivers/gpu/drm/drm_pci.c2
-rw-r--r--drivers/gpu/drm/drm_stub.c6
-rw-r--r--drivers/gpu/drm/mga/mga_dma.c8
-rw-r--r--drivers/gpu/drm/mga/mga_drv.c1
-rw-r--r--drivers/gpu/drm/mga/mga_drv.h1
-rw-r--r--drivers/gpu/drm/radeon/radeon_cp.c6
-rw-r--r--drivers/gpu/drm/savage/savage_bci.c8
-rw-r--r--drivers/gpu/drm/savage/savage_drv.c1
-rw-r--r--drivers/gpu/drm/savage/savage_drv.h1
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);