Merge remote branch 'airlied/drm-core-next' into HEAD
This commit is contained in:
commit
b970be7c41
|
@ -5,7 +5,7 @@
|
||||||
ccflags-y := -Iinclude/drm
|
ccflags-y := -Iinclude/drm
|
||||||
|
|
||||||
drm-y := drm_auth.o drm_buffer.o drm_bufs.o drm_cache.o \
|
drm-y := drm_auth.o drm_buffer.o drm_bufs.o drm_cache.o \
|
||||||
drm_context.o drm_dma.o drm_drawable.o \
|
drm_context.o drm_dma.o \
|
||||||
drm_drv.o drm_fops.o drm_gem.o drm_ioctl.o drm_irq.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_lock.o drm_memory.o drm_proc.o drm_stub.o drm_vm.o \
|
||||||
drm_agpsupport.o drm_scatter.o ati_pcigart.o drm_pci.o \
|
drm_agpsupport.o drm_scatter.o ati_pcigart.o drm_pci.o \
|
||||||
|
|
|
@ -193,7 +193,7 @@ int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
|
||||||
* \return zero on success or a negative number on failure.
|
* \return zero on success or a negative number on failure.
|
||||||
*
|
*
|
||||||
* Verifies the AGP device is present and has been acquired, allocates the
|
* Verifies the AGP device is present and has been acquired, allocates the
|
||||||
* memory via alloc_agp() and creates a drm_agp_mem entry for it.
|
* memory via agp_allocate_memory() and creates a drm_agp_mem entry for it.
|
||||||
*/
|
*/
|
||||||
int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request)
|
int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request)
|
||||||
{
|
{
|
||||||
|
@ -211,7 +211,7 @@ int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request)
|
||||||
|
|
||||||
pages = (request->size + PAGE_SIZE - 1) / PAGE_SIZE;
|
pages = (request->size + PAGE_SIZE - 1) / PAGE_SIZE;
|
||||||
type = (u32) request->type;
|
type = (u32) request->type;
|
||||||
if (!(memory = drm_alloc_agp(dev, pages, type))) {
|
if (!(memory = agp_allocate_memory(dev->agp->bridge, pages, type))) {
|
||||||
kfree(entry);
|
kfree(entry);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
@ -423,38 +423,6 @@ struct drm_agp_head *drm_agp_init(struct drm_device *dev)
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Calls agp_allocate_memory() */
|
|
||||||
DRM_AGP_MEM *drm_agp_allocate_memory(struct agp_bridge_data * bridge,
|
|
||||||
size_t pages, u32 type)
|
|
||||||
{
|
|
||||||
return agp_allocate_memory(bridge, pages, type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Calls agp_free_memory() */
|
|
||||||
int drm_agp_free_memory(DRM_AGP_MEM * handle)
|
|
||||||
{
|
|
||||||
if (!handle)
|
|
||||||
return 0;
|
|
||||||
agp_free_memory(handle);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Calls agp_bind_memory() */
|
|
||||||
int drm_agp_bind_memory(DRM_AGP_MEM * handle, off_t start)
|
|
||||||
{
|
|
||||||
if (!handle)
|
|
||||||
return -EINVAL;
|
|
||||||
return agp_bind_memory(handle, start);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Calls agp_unbind_memory() */
|
|
||||||
int drm_agp_unbind_memory(DRM_AGP_MEM * handle)
|
|
||||||
{
|
|
||||||
if (!handle)
|
|
||||||
return -EINVAL;
|
|
||||||
return agp_unbind_memory(handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binds a collection of pages into AGP memory at the given offset, returning
|
* Binds a collection of pages into AGP memory at the given offset, returning
|
||||||
* the AGP memory structure containing them.
|
* the AGP memory structure containing them.
|
||||||
|
@ -474,7 +442,7 @@ drm_agp_bind_pages(struct drm_device *dev,
|
||||||
|
|
||||||
DRM_DEBUG("\n");
|
DRM_DEBUG("\n");
|
||||||
|
|
||||||
mem = drm_agp_allocate_memory(dev->agp->bridge, num_pages,
|
mem = agp_allocate_memory(dev->agp->bridge, num_pages,
|
||||||
type);
|
type);
|
||||||
if (mem == NULL) {
|
if (mem == NULL) {
|
||||||
DRM_ERROR("Failed to allocate memory for %ld pages\n",
|
DRM_ERROR("Failed to allocate memory for %ld pages\n",
|
||||||
|
@ -487,7 +455,7 @@ drm_agp_bind_pages(struct drm_device *dev,
|
||||||
mem->page_count = num_pages;
|
mem->page_count = num_pages;
|
||||||
|
|
||||||
mem->is_flushed = true;
|
mem->is_flushed = true;
|
||||||
ret = drm_agp_bind_memory(mem, gtt_offset / PAGE_SIZE);
|
ret = agp_bind_memory(mem, gtt_offset / PAGE_SIZE);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
DRM_ERROR("Failed to bind AGP memory: %d\n", ret);
|
DRM_ERROR("Failed to bind AGP memory: %d\n", ret);
|
||||||
agp_free_memory(mem);
|
agp_free_memory(mem);
|
||||||
|
|
|
@ -333,14 +333,6 @@ int drm_addctx(struct drm_device *dev, void *data,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->handle != DRM_KERNEL_CONTEXT) {
|
|
||||||
if (dev->driver->context_ctor)
|
|
||||||
if (!dev->driver->context_ctor(dev, ctx->handle)) {
|
|
||||||
DRM_DEBUG("Running out of ctxs or memory.\n");
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx_entry = kmalloc(sizeof(*ctx_entry), GFP_KERNEL);
|
ctx_entry = kmalloc(sizeof(*ctx_entry), GFP_KERNEL);
|
||||||
if (!ctx_entry) {
|
if (!ctx_entry) {
|
||||||
DRM_DEBUG("out of memory\n");
|
DRM_DEBUG("out of memory\n");
|
||||||
|
|
|
@ -1,198 +0,0 @@
|
||||||
/**
|
|
||||||
* \file drm_drawable.c
|
|
||||||
* IOCTLs for drawables
|
|
||||||
*
|
|
||||||
* \author Rickard E. (Rik) Faith <faith@valinux.com>
|
|
||||||
* \author Gareth Hughes <gareth@valinux.com>
|
|
||||||
* \author Michel Dänzer <michel@tungstengraphics.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Created: Tue Feb 2 08:37:54 1999 by faith@valinux.com
|
|
||||||
*
|
|
||||||
* Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
|
|
||||||
* Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
|
|
||||||
* Copyright 2006 Tungsten Graphics, Inc., Bismarck, North Dakota.
|
|
||||||
* All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice (including the next
|
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
|
||||||
* Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
||||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
||||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
* OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "drmP.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate drawable ID and memory to store information about it.
|
|
||||||
*/
|
|
||||||
int drm_adddraw(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
|
||||||
{
|
|
||||||
unsigned long irqflags;
|
|
||||||
struct drm_draw *draw = data;
|
|
||||||
int new_id = 0;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
again:
|
|
||||||
if (idr_pre_get(&dev->drw_idr, GFP_KERNEL) == 0) {
|
|
||||||
DRM_ERROR("Out of memory expanding drawable idr\n");
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_lock_irqsave(&dev->drw_lock, irqflags);
|
|
||||||
ret = idr_get_new_above(&dev->drw_idr, NULL, 1, &new_id);
|
|
||||||
if (ret == -EAGAIN) {
|
|
||||||
spin_unlock_irqrestore(&dev->drw_lock, irqflags);
|
|
||||||
goto again;
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&dev->drw_lock, irqflags);
|
|
||||||
|
|
||||||
draw->handle = new_id;
|
|
||||||
|
|
||||||
DRM_DEBUG("%d\n", draw->handle);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free drawable ID and memory to store information about it.
|
|
||||||
*/
|
|
||||||
int drm_rmdraw(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
|
||||||
{
|
|
||||||
struct drm_draw *draw = data;
|
|
||||||
unsigned long irqflags;
|
|
||||||
struct drm_drawable_info *info;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&dev->drw_lock, irqflags);
|
|
||||||
|
|
||||||
info = drm_get_drawable_info(dev, draw->handle);
|
|
||||||
if (info == NULL) {
|
|
||||||
spin_unlock_irqrestore(&dev->drw_lock, irqflags);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
kfree(info->rects);
|
|
||||||
kfree(info);
|
|
||||||
|
|
||||||
idr_remove(&dev->drw_idr, draw->handle);
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&dev->drw_lock, irqflags);
|
|
||||||
DRM_DEBUG("%d\n", draw->handle);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int drm_update_drawable_info(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
|
||||||
{
|
|
||||||
struct drm_update_draw *update = data;
|
|
||||||
unsigned long irqflags;
|
|
||||||
struct drm_clip_rect *rects;
|
|
||||||
struct drm_drawable_info *info;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
info = idr_find(&dev->drw_idr, update->handle);
|
|
||||||
if (!info) {
|
|
||||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
|
||||||
if (!info)
|
|
||||||
return -ENOMEM;
|
|
||||||
if (IS_ERR(idr_replace(&dev->drw_idr, info, update->handle))) {
|
|
||||||
DRM_ERROR("No such drawable %d\n", update->handle);
|
|
||||||
kfree(info);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (update->type) {
|
|
||||||
case DRM_DRAWABLE_CLIPRECTS:
|
|
||||||
if (update->num == 0)
|
|
||||||
rects = NULL;
|
|
||||||
else if (update->num != info->num_rects) {
|
|
||||||
rects = kmalloc(update->num *
|
|
||||||
sizeof(struct drm_clip_rect),
|
|
||||||
GFP_KERNEL);
|
|
||||||
} else
|
|
||||||
rects = info->rects;
|
|
||||||
|
|
||||||
if (update->num && !rects) {
|
|
||||||
DRM_ERROR("Failed to allocate cliprect memory\n");
|
|
||||||
err = -ENOMEM;
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (update->num && DRM_COPY_FROM_USER(rects,
|
|
||||||
(struct drm_clip_rect __user *)
|
|
||||||
(unsigned long)update->data,
|
|
||||||
update->num *
|
|
||||||
sizeof(*rects))) {
|
|
||||||
DRM_ERROR("Failed to copy cliprects from userspace\n");
|
|
||||||
err = -EFAULT;
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_lock_irqsave(&dev->drw_lock, irqflags);
|
|
||||||
|
|
||||||
if (rects != info->rects) {
|
|
||||||
kfree(info->rects);
|
|
||||||
}
|
|
||||||
|
|
||||||
info->rects = rects;
|
|
||||||
info->num_rects = update->num;
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&dev->drw_lock, irqflags);
|
|
||||||
|
|
||||||
DRM_DEBUG("Updated %d cliprects for drawable %d\n",
|
|
||||||
info->num_rects, update->handle);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
DRM_ERROR("Invalid update type %d\n", update->type);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
error:
|
|
||||||
if (rects != info->rects)
|
|
||||||
kfree(rects);
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Caller must hold the drawable spinlock!
|
|
||||||
*/
|
|
||||||
struct drm_drawable_info *drm_get_drawable_info(struct drm_device *dev, drm_drawable_t id)
|
|
||||||
{
|
|
||||||
return idr_find(&dev->drw_idr, id);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(drm_get_drawable_info);
|
|
||||||
|
|
||||||
static int drm_drawable_free(int idr, void *p, void *data)
|
|
||||||
{
|
|
||||||
struct drm_drawable_info *info = p;
|
|
||||||
|
|
||||||
if (info) {
|
|
||||||
kfree(info->rects);
|
|
||||||
kfree(info);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void drm_drawable_free_all(struct drm_device *dev)
|
|
||||||
{
|
|
||||||
idr_for_each(&dev->drw_idr, drm_drawable_free, NULL);
|
|
||||||
idr_remove_all(&dev->drw_idr);
|
|
||||||
}
|
|
|
@ -91,8 +91,8 @@ static struct drm_ioctl_desc drm_ioctls[] = {
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
DRM_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_resctx, DRM_AUTH),
|
DRM_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_resctx, DRM_AUTH),
|
||||||
|
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_ADD_DRAW, drm_adddraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
DRM_IOCTL_DEF(DRM_IOCTL_ADD_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_RM_DRAW, drm_rmdraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
DRM_IOCTL_DEF(DRM_IOCTL_RM_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||||
|
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_LOCK, drm_lock, DRM_AUTH),
|
DRM_IOCTL_DEF(DRM_IOCTL_LOCK, drm_lock, DRM_AUTH),
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_unlock, DRM_AUTH),
|
DRM_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_unlock, DRM_AUTH),
|
||||||
|
@ -127,7 +127,7 @@ static struct drm_ioctl_desc drm_ioctls[] = {
|
||||||
|
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_MODESET_CTL, drm_modeset_ctl, 0),
|
DRM_IOCTL_DEF(DRM_IOCTL_MODESET_CTL, drm_modeset_ctl, 0),
|
||||||
|
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_update_drawable_info, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||||
|
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_UNLOCKED),
|
DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_UNLOCKED),
|
||||||
DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||||
|
@ -180,10 +180,6 @@ int drm_lastclose(struct drm_device * dev)
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
mutex_lock(&dev->struct_mutex);
|
||||||
|
|
||||||
/* Free drawable information memory */
|
|
||||||
drm_drawable_free_all(dev);
|
|
||||||
del_timer(&dev->timer);
|
|
||||||
|
|
||||||
/* Clear AGP information */
|
/* Clear AGP information */
|
||||||
if (drm_core_has_AGP(dev) && dev->agp &&
|
if (drm_core_has_AGP(dev) && dev->agp &&
|
||||||
!drm_core_check_feature(dev, DRIVER_MODESET)) {
|
!drm_core_check_feature(dev, DRIVER_MODESET)) {
|
||||||
|
|
|
@ -474,9 +474,7 @@ drm_gem_object_free_unlocked(struct kref *kref)
|
||||||
struct drm_gem_object *obj = (struct drm_gem_object *) kref;
|
struct drm_gem_object *obj = (struct drm_gem_object *) kref;
|
||||||
struct drm_device *dev = obj->dev;
|
struct drm_device *dev = obj->dev;
|
||||||
|
|
||||||
if (dev->driver->gem_free_object_unlocked != NULL)
|
if (dev->driver->gem_free_object != NULL) {
|
||||||
dev->driver->gem_free_object_unlocked(obj);
|
|
||||||
else if (dev->driver->gem_free_object != NULL) {
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
mutex_lock(&dev->struct_mutex);
|
||||||
dev->driver->gem_free_object(obj);
|
dev->driver->gem_free_object(obj);
|
||||||
mutex_unlock(&dev->struct_mutex);
|
mutex_unlock(&dev->struct_mutex);
|
||||||
|
|
|
@ -37,6 +37,8 @@
|
||||||
|
|
||||||
static int drm_notifier(void *priv);
|
static int drm_notifier(void *priv);
|
||||||
|
|
||||||
|
static int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lock ioctl.
|
* Lock ioctl.
|
||||||
*
|
*
|
||||||
|
@ -124,9 +126,6 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
||||||
block_all_signals(drm_notifier, &dev->sigdata, &dev->sigmask);
|
block_all_signals(drm_notifier, &dev->sigdata, &dev->sigmask);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->driver->dma_ready && (lock->flags & _DRM_LOCK_READY))
|
|
||||||
dev->driver->dma_ready(dev);
|
|
||||||
|
|
||||||
if (dev->driver->dma_quiescent && (lock->flags & _DRM_LOCK_QUIESCENT))
|
if (dev->driver->dma_quiescent && (lock->flags & _DRM_LOCK_QUIESCENT))
|
||||||
{
|
{
|
||||||
if (dev->driver->dma_quiescent(dev)) {
|
if (dev->driver->dma_quiescent(dev)) {
|
||||||
|
@ -136,12 +135,6 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->driver->kernel_context_switch &&
|
|
||||||
dev->last_context != lock->context) {
|
|
||||||
dev->driver->kernel_context_switch(dev, dev->last_context,
|
|
||||||
lock->context);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +152,6 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
||||||
int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
||||||
{
|
{
|
||||||
struct drm_lock *lock = data;
|
struct drm_lock *lock = data;
|
||||||
struct drm_master *master = file_priv->master;
|
|
||||||
|
|
||||||
if (lock->context == DRM_KERNEL_CONTEXT) {
|
if (lock->context == DRM_KERNEL_CONTEXT) {
|
||||||
DRM_ERROR("Process %d using kernel context %d\n",
|
DRM_ERROR("Process %d using kernel context %d\n",
|
||||||
|
@ -169,17 +161,6 @@ int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
||||||
|
|
||||||
atomic_inc(&dev->counts[_DRM_STAT_UNLOCKS]);
|
atomic_inc(&dev->counts[_DRM_STAT_UNLOCKS]);
|
||||||
|
|
||||||
/* kernel_context_switch isn't used by any of the x86 drm
|
|
||||||
* modules but is required by the Sparc driver.
|
|
||||||
*/
|
|
||||||
if (dev->driver->kernel_context_switch_unlock)
|
|
||||||
dev->driver->kernel_context_switch_unlock(dev);
|
|
||||||
else {
|
|
||||||
if (drm_lock_free(&master->lock, lock->context)) {
|
|
||||||
/* FIXME: Should really bail out here. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unblock_all_signals();
|
unblock_all_signals();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -193,6 +174,7 @@ int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
||||||
*
|
*
|
||||||
* Attempt to mark the lock as held by the given context, via the \p cmpxchg instruction.
|
* Attempt to mark the lock as held by the given context, via the \p cmpxchg instruction.
|
||||||
*/
|
*/
|
||||||
|
static
|
||||||
int drm_lock_take(struct drm_lock_data *lock_data,
|
int drm_lock_take(struct drm_lock_data *lock_data,
|
||||||
unsigned int context)
|
unsigned int context)
|
||||||
{
|
{
|
||||||
|
@ -229,7 +211,6 @@ int drm_lock_take(struct drm_lock_data *lock_data,
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_lock_take);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This takes a lock forcibly and hands it to context. Should ONLY be used
|
* This takes a lock forcibly and hands it to context. Should ONLY be used
|
||||||
|
@ -297,7 +278,6 @@ int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context)
|
||||||
wake_up_interruptible(&lock_data->lock_queue);
|
wake_up_interruptible(&lock_data->lock_queue);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_lock_free);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If we get here, it means that the process has called DRM_IOCTL_LOCK
|
* If we get here, it means that the process has called DRM_IOCTL_LOCK
|
||||||
|
@ -360,7 +340,6 @@ void drm_idlelock_take(struct drm_lock_data *lock_data)
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&lock_data->spinlock);
|
spin_unlock_bh(&lock_data->spinlock);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_idlelock_take);
|
|
||||||
|
|
||||||
void drm_idlelock_release(struct drm_lock_data *lock_data)
|
void drm_idlelock_release(struct drm_lock_data *lock_data)
|
||||||
{
|
{
|
||||||
|
@ -380,8 +359,6 @@ void drm_idlelock_release(struct drm_lock_data *lock_data)
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&lock_data->spinlock);
|
spin_unlock_bh(&lock_data->spinlock);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_idlelock_release);
|
|
||||||
|
|
||||||
|
|
||||||
int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv)
|
int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv)
|
||||||
{
|
{
|
||||||
|
@ -390,5 +367,3 @@ int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv)
|
||||||
_DRM_LOCK_IS_HELD(master->lock.hw_lock->lock) &&
|
_DRM_LOCK_IS_HELD(master->lock.hw_lock->lock) &&
|
||||||
master->lock.file_priv == file_priv);
|
master->lock.file_priv == file_priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(drm_i_have_hw_lock);
|
|
||||||
|
|
|
@ -99,29 +99,23 @@ static void *agp_remap(unsigned long offset, unsigned long size,
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Wrapper around agp_allocate_memory() */
|
|
||||||
DRM_AGP_MEM *drm_alloc_agp(struct drm_device * dev, int pages, u32 type)
|
|
||||||
{
|
|
||||||
return drm_agp_allocate_memory(dev->agp->bridge, pages, type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Wrapper around agp_free_memory() */
|
/** Wrapper around agp_free_memory() */
|
||||||
int drm_free_agp(DRM_AGP_MEM * handle, int pages)
|
void drm_free_agp(DRM_AGP_MEM * handle, int pages)
|
||||||
{
|
{
|
||||||
return drm_agp_free_memory(handle) ? 0 : -EINVAL;
|
agp_free_memory(handle);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_free_agp);
|
EXPORT_SYMBOL(drm_free_agp);
|
||||||
|
|
||||||
/** Wrapper around agp_bind_memory() */
|
/** Wrapper around agp_bind_memory() */
|
||||||
int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start)
|
int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start)
|
||||||
{
|
{
|
||||||
return drm_agp_bind_memory(handle, start);
|
return agp_bind_memory(handle, start);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Wrapper around agp_unbind_memory() */
|
/** Wrapper around agp_unbind_memory() */
|
||||||
int drm_unbind_agp(DRM_AGP_MEM * handle)
|
int drm_unbind_agp(DRM_AGP_MEM * handle)
|
||||||
{
|
{
|
||||||
return drm_agp_unbind_memory(handle);
|
return agp_unbind_memory(handle);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_unbind_agp);
|
EXPORT_SYMBOL(drm_unbind_agp);
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,6 @@ fail:
|
||||||
int drm_proc_init(struct drm_minor *minor, int minor_id,
|
int drm_proc_init(struct drm_minor *minor, int minor_id,
|
||||||
struct proc_dir_entry *root)
|
struct proc_dir_entry *root)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = minor->dev;
|
|
||||||
char name[64];
|
char name[64];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -172,14 +171,6 @@ int drm_proc_init(struct drm_minor *minor, int minor_id,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->driver->proc_init) {
|
|
||||||
ret = dev->driver->proc_init(minor);
|
|
||||||
if (ret) {
|
|
||||||
DRM_ERROR("DRM: Driver failed to initialize "
|
|
||||||
"/proc/dri.\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,15 +207,11 @@ int drm_proc_remove_files(struct drm_info_list *files, int count,
|
||||||
*/
|
*/
|
||||||
int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root)
|
int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = minor->dev;
|
|
||||||
char name[64];
|
char name[64];
|
||||||
|
|
||||||
if (!root || !minor->proc_root)
|
if (!root || !minor->proc_root)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (dev->driver->proc_cleanup)
|
|
||||||
dev->driver->proc_cleanup(minor);
|
|
||||||
|
|
||||||
drm_proc_remove_files(drm_proc_list, DRM_PROC_ENTRIES, minor);
|
drm_proc_remove_files(drm_proc_list, DRM_PROC_ENTRIES, minor);
|
||||||
|
|
||||||
sprintf(name, "%d", minor->index);
|
sprintf(name, "%d", minor->index);
|
||||||
|
|
|
@ -184,8 +184,6 @@ int drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather * request)
|
||||||
drm_sg_cleanup(entry);
|
drm_sg_cleanup(entry);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_sg_alloc);
|
|
||||||
|
|
||||||
|
|
||||||
int drm_sg_alloc_ioctl(struct drm_device *dev, void *data,
|
int drm_sg_alloc_ioctl(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv)
|
struct drm_file *file_priv)
|
||||||
|
|
|
@ -240,14 +240,10 @@ int drm_fill_in_dev(struct drm_device *dev,
|
||||||
INIT_LIST_HEAD(&dev->vblank_event_list);
|
INIT_LIST_HEAD(&dev->vblank_event_list);
|
||||||
|
|
||||||
spin_lock_init(&dev->count_lock);
|
spin_lock_init(&dev->count_lock);
|
||||||
spin_lock_init(&dev->drw_lock);
|
|
||||||
spin_lock_init(&dev->event_lock);
|
spin_lock_init(&dev->event_lock);
|
||||||
init_timer(&dev->timer);
|
|
||||||
mutex_init(&dev->struct_mutex);
|
mutex_init(&dev->struct_mutex);
|
||||||
mutex_init(&dev->ctxlist_mutex);
|
mutex_init(&dev->ctxlist_mutex);
|
||||||
|
|
||||||
idr_init(&dev->drw_idr);
|
|
||||||
|
|
||||||
if (drm_ht_create(&dev->map_hash, 12)) {
|
if (drm_ht_create(&dev->map_hash, 12)) {
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
|
@ -515,14 +515,7 @@ static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
resource_size_t drm_core_get_map_ofs(struct drm_local_map * map)
|
static resource_size_t drm_core_get_reg_ofs(struct drm_device *dev)
|
||||||
{
|
|
||||||
return map->offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(drm_core_get_map_ofs);
|
|
||||||
|
|
||||||
resource_size_t drm_core_get_reg_ofs(struct drm_device *dev)
|
|
||||||
{
|
{
|
||||||
#ifdef __alpha__
|
#ifdef __alpha__
|
||||||
return dev->hose->dense_mem_base - dev->hose->mem_space->start;
|
return dev->hose->dense_mem_base - dev->hose->mem_space->start;
|
||||||
|
@ -531,8 +524,6 @@ resource_size_t drm_core_get_reg_ofs(struct drm_device *dev)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(drm_core_get_reg_ofs);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mmap DMA memory.
|
* mmap DMA memory.
|
||||||
*
|
*
|
||||||
|
@ -619,7 +610,7 @@ int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
|
||||||
#endif
|
#endif
|
||||||
case _DRM_FRAME_BUFFER:
|
case _DRM_FRAME_BUFFER:
|
||||||
case _DRM_REGISTERS:
|
case _DRM_REGISTERS:
|
||||||
offset = dev->driver->get_reg_ofs(dev);
|
offset = drm_core_get_reg_ofs(dev);
|
||||||
vma->vm_flags |= VM_IO; /* not in core dump */
|
vma->vm_flags |= VM_IO; /* not in core dump */
|
||||||
vma->vm_page_prot = drm_io_prot(map->type, vma);
|
vma->vm_page_prot = drm_io_prot(map->type, vma);
|
||||||
#if !defined(__arm__)
|
#if !defined(__arm__)
|
||||||
|
|
|
@ -52,8 +52,6 @@ static struct drm_driver driver = {
|
||||||
.device_is_agp = i810_driver_device_is_agp,
|
.device_is_agp = i810_driver_device_is_agp,
|
||||||
.reclaim_buffers_locked = i810_driver_reclaim_buffers_locked,
|
.reclaim_buffers_locked = i810_driver_reclaim_buffers_locked,
|
||||||
.dma_quiescent = i810_driver_dma_quiescent,
|
.dma_quiescent = i810_driver_dma_quiescent,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = i810_ioctls,
|
.ioctls = i810_ioctls,
|
||||||
.fops = {
|
.fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
|
|
@ -57,8 +57,6 @@ static struct drm_driver driver = {
|
||||||
.device_is_agp = i830_driver_device_is_agp,
|
.device_is_agp = i830_driver_device_is_agp,
|
||||||
.reclaim_buffers_locked = i830_driver_reclaim_buffers_locked,
|
.reclaim_buffers_locked = i830_driver_reclaim_buffers_locked,
|
||||||
.dma_quiescent = i830_driver_dma_quiescent,
|
.dma_quiescent = i830_driver_dma_quiescent,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
#if USE_IRQS
|
#if USE_IRQS
|
||||||
.irq_preinstall = i830_driver_irq_preinstall,
|
.irq_preinstall = i830_driver_irq_preinstall,
|
||||||
.irq_postinstall = i830_driver_irq_postinstall,
|
.irq_postinstall = i830_driver_irq_postinstall,
|
||||||
|
|
|
@ -523,8 +523,6 @@ static struct drm_driver driver = {
|
||||||
.irq_uninstall = i915_driver_irq_uninstall,
|
.irq_uninstall = i915_driver_irq_uninstall,
|
||||||
.irq_handler = i915_driver_irq_handler,
|
.irq_handler = i915_driver_irq_handler,
|
||||||
.reclaim_buffers = drm_core_reclaim_buffers,
|
.reclaim_buffers = drm_core_reclaim_buffers,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.master_create = i915_master_create,
|
.master_create = i915_master_create,
|
||||||
.master_destroy = i915_master_destroy,
|
.master_destroy = i915_master_destroy,
|
||||||
#if defined(CONFIG_DEBUG_FS)
|
#if defined(CONFIG_DEBUG_FS)
|
||||||
|
|
|
@ -60,8 +60,6 @@ static struct drm_driver driver = {
|
||||||
.irq_uninstall = mga_driver_irq_uninstall,
|
.irq_uninstall = mga_driver_irq_uninstall,
|
||||||
.irq_handler = mga_driver_irq_handler,
|
.irq_handler = mga_driver_irq_handler,
|
||||||
.reclaim_buffers = drm_core_reclaim_buffers,
|
.reclaim_buffers = drm_core_reclaim_buffers,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = mga_ioctls,
|
.ioctls = mga_ioctls,
|
||||||
.dma_ioctl = mga_dma_buffers,
|
.dma_ioctl = mga_dma_buffers,
|
||||||
.fops = {
|
.fops = {
|
||||||
|
|
|
@ -379,8 +379,6 @@ static struct drm_driver driver = {
|
||||||
.irq_uninstall = nouveau_irq_uninstall,
|
.irq_uninstall = nouveau_irq_uninstall,
|
||||||
.irq_handler = nouveau_irq_handler,
|
.irq_handler = nouveau_irq_handler,
|
||||||
.reclaim_buffers = drm_core_reclaim_buffers,
|
.reclaim_buffers = drm_core_reclaim_buffers,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = nouveau_ioctls,
|
.ioctls = nouveau_ioctls,
|
||||||
.fops = {
|
.fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
|
|
@ -56,8 +56,6 @@ static struct drm_driver driver = {
|
||||||
.irq_uninstall = r128_driver_irq_uninstall,
|
.irq_uninstall = r128_driver_irq_uninstall,
|
||||||
.irq_handler = r128_driver_irq_handler,
|
.irq_handler = r128_driver_irq_handler,
|
||||||
.reclaim_buffers = drm_core_reclaim_buffers,
|
.reclaim_buffers = drm_core_reclaim_buffers,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = r128_ioctls,
|
.ioctls = r128_ioctls,
|
||||||
.dma_ioctl = r128_cce_buffers,
|
.dma_ioctl = r128_cce_buffers,
|
||||||
.fops = {
|
.fops = {
|
||||||
|
|
|
@ -203,8 +203,6 @@ static struct drm_driver driver_old = {
|
||||||
.irq_uninstall = radeon_driver_irq_uninstall,
|
.irq_uninstall = radeon_driver_irq_uninstall,
|
||||||
.irq_handler = radeon_driver_irq_handler,
|
.irq_handler = radeon_driver_irq_handler,
|
||||||
.reclaim_buffers = drm_core_reclaim_buffers,
|
.reclaim_buffers = drm_core_reclaim_buffers,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = radeon_ioctls,
|
.ioctls = radeon_ioctls,
|
||||||
.dma_ioctl = radeon_cp_buffers,
|
.dma_ioctl = radeon_cp_buffers,
|
||||||
.fops = {
|
.fops = {
|
||||||
|
@ -290,8 +288,6 @@ static struct drm_driver kms_driver = {
|
||||||
.irq_uninstall = radeon_driver_irq_uninstall_kms,
|
.irq_uninstall = radeon_driver_irq_uninstall_kms,
|
||||||
.irq_handler = radeon_driver_irq_handler_kms,
|
.irq_handler = radeon_driver_irq_handler_kms,
|
||||||
.reclaim_buffers = drm_core_reclaim_buffers,
|
.reclaim_buffers = drm_core_reclaim_buffers,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = radeon_ioctls_kms,
|
.ioctls = radeon_ioctls_kms,
|
||||||
.gem_init_object = radeon_gem_object_init,
|
.gem_init_object = radeon_gem_object_init,
|
||||||
.gem_free_object = radeon_gem_object_free,
|
.gem_free_object = radeon_gem_object_free,
|
||||||
|
|
|
@ -42,8 +42,6 @@ static struct drm_driver driver = {
|
||||||
.lastclose = savage_driver_lastclose,
|
.lastclose = savage_driver_lastclose,
|
||||||
.unload = savage_driver_unload,
|
.unload = savage_driver_unload,
|
||||||
.reclaim_buffers = savage_reclaim_buffers,
|
.reclaim_buffers = savage_reclaim_buffers,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = savage_ioctls,
|
.ioctls = savage_ioctls,
|
||||||
.dma_ioctl = savage_bci_buffers,
|
.dma_ioctl = savage_bci_buffers,
|
||||||
.fops = {
|
.fops = {
|
||||||
|
|
|
@ -67,13 +67,10 @@ static struct drm_driver driver = {
|
||||||
.driver_features = DRIVER_USE_AGP | DRIVER_USE_MTRR,
|
.driver_features = DRIVER_USE_AGP | DRIVER_USE_MTRR,
|
||||||
.load = sis_driver_load,
|
.load = sis_driver_load,
|
||||||
.unload = sis_driver_unload,
|
.unload = sis_driver_unload,
|
||||||
.context_dtor = NULL,
|
|
||||||
.dma_quiescent = sis_idle,
|
.dma_quiescent = sis_idle,
|
||||||
.reclaim_buffers = NULL,
|
.reclaim_buffers = NULL,
|
||||||
.reclaim_buffers_idlelocked = sis_reclaim_buffers_locked,
|
.reclaim_buffers_idlelocked = sis_reclaim_buffers_locked,
|
||||||
.lastclose = sis_lastclose,
|
.lastclose = sis_lastclose,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = sis_ioctls,
|
.ioctls = sis_ioctls,
|
||||||
.fops = {
|
.fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
|
|
@ -42,8 +42,6 @@ static struct pci_device_id pciidlist[] = {
|
||||||
static struct drm_driver driver = {
|
static struct drm_driver driver = {
|
||||||
.driver_features = DRIVER_USE_MTRR,
|
.driver_features = DRIVER_USE_MTRR,
|
||||||
.reclaim_buffers = drm_core_reclaim_buffers,
|
.reclaim_buffers = drm_core_reclaim_buffers,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.fops = {
|
.fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.open = drm_open,
|
.open = drm_open,
|
||||||
|
|
|
@ -51,8 +51,6 @@ static struct drm_driver driver = {
|
||||||
.reclaim_buffers_locked = NULL,
|
.reclaim_buffers_locked = NULL,
|
||||||
.reclaim_buffers_idlelocked = via_reclaim_buffers_locked,
|
.reclaim_buffers_idlelocked = via_reclaim_buffers_locked,
|
||||||
.lastclose = via_lastclose,
|
.lastclose = via_lastclose,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = via_ioctls,
|
.ioctls = via_ioctls,
|
||||||
.fops = {
|
.fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
|
|
@ -723,8 +723,6 @@ static struct drm_driver driver = {
|
||||||
.irq_uninstall = vmw_irq_uninstall,
|
.irq_uninstall = vmw_irq_uninstall,
|
||||||
.irq_handler = vmw_irq_handler,
|
.irq_handler = vmw_irq_handler,
|
||||||
.reclaim_buffers_locked = NULL,
|
.reclaim_buffers_locked = NULL,
|
||||||
.get_map_ofs = drm_core_get_map_ofs,
|
|
||||||
.get_reg_ofs = drm_core_get_reg_ofs,
|
|
||||||
.ioctls = vmw_ioctls,
|
.ioctls = vmw_ioctls,
|
||||||
.num_ioctls = DRM_ARRAY_SIZE(vmw_ioctls),
|
.num_ioctls = DRM_ARRAY_SIZE(vmw_ioctls),
|
||||||
.dma_quiescent = NULL, /*vmw_dma_quiescent, */
|
.dma_quiescent = NULL, /*vmw_dma_quiescent, */
|
||||||
|
|
|
@ -699,13 +699,8 @@ struct drm_driver {
|
||||||
int (*suspend) (struct drm_device *, pm_message_t state);
|
int (*suspend) (struct drm_device *, pm_message_t state);
|
||||||
int (*resume) (struct drm_device *);
|
int (*resume) (struct drm_device *);
|
||||||
int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
|
int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
|
||||||
void (*dma_ready) (struct drm_device *);
|
|
||||||
int (*dma_quiescent) (struct drm_device *);
|
int (*dma_quiescent) (struct drm_device *);
|
||||||
int (*context_ctor) (struct drm_device *dev, int context);
|
|
||||||
int (*context_dtor) (struct drm_device *dev, int context);
|
int (*context_dtor) (struct drm_device *dev, int context);
|
||||||
int (*kernel_context_switch) (struct drm_device *dev, int old,
|
|
||||||
int new);
|
|
||||||
void (*kernel_context_switch_unlock) (struct drm_device *dev);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get_vblank_counter - get raw hardware vblank counter
|
* get_vblank_counter - get raw hardware vblank counter
|
||||||
|
@ -777,8 +772,6 @@ struct drm_driver {
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
void (*reclaim_buffers_idlelocked) (struct drm_device *dev,
|
void (*reclaim_buffers_idlelocked) (struct drm_device *dev,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
resource_size_t (*get_map_ofs) (struct drm_local_map * map);
|
|
||||||
resource_size_t (*get_reg_ofs) (struct drm_device *dev);
|
|
||||||
void (*set_version) (struct drm_device *dev,
|
void (*set_version) (struct drm_device *dev,
|
||||||
struct drm_set_version *sv);
|
struct drm_set_version *sv);
|
||||||
|
|
||||||
|
@ -795,8 +788,6 @@ struct drm_driver {
|
||||||
void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv,
|
void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv,
|
||||||
bool from_release);
|
bool from_release);
|
||||||
|
|
||||||
int (*proc_init)(struct drm_minor *minor);
|
|
||||||
void (*proc_cleanup)(struct drm_minor *minor);
|
|
||||||
int (*debugfs_init)(struct drm_minor *minor);
|
int (*debugfs_init)(struct drm_minor *minor);
|
||||||
void (*debugfs_cleanup)(struct drm_minor *minor);
|
void (*debugfs_cleanup)(struct drm_minor *minor);
|
||||||
|
|
||||||
|
@ -808,7 +799,6 @@ struct drm_driver {
|
||||||
*/
|
*/
|
||||||
int (*gem_init_object) (struct drm_gem_object *obj);
|
int (*gem_init_object) (struct drm_gem_object *obj);
|
||||||
void (*gem_free_object) (struct drm_gem_object *obj);
|
void (*gem_free_object) (struct drm_gem_object *obj);
|
||||||
void (*gem_free_object_unlocked) (struct drm_gem_object *obj);
|
|
||||||
|
|
||||||
/* vga arb irq handler */
|
/* vga arb irq handler */
|
||||||
void (*vgaarb_irq)(struct drm_device *dev, bool state);
|
void (*vgaarb_irq)(struct drm_device *dev, bool state);
|
||||||
|
@ -973,7 +963,6 @@ struct drm_device {
|
||||||
__volatile__ long context_flag; /**< Context swapping flag */
|
__volatile__ long context_flag; /**< Context swapping flag */
|
||||||
__volatile__ long interrupt_flag; /**< Interruption handler flag */
|
__volatile__ long interrupt_flag; /**< Interruption handler flag */
|
||||||
__volatile__ long dma_flag; /**< DMA dispatch flag */
|
__volatile__ long dma_flag; /**< DMA dispatch flag */
|
||||||
struct timer_list timer; /**< Timer for delaying ctx switch */
|
|
||||||
wait_queue_head_t context_wait; /**< Processes waiting on ctx switch */
|
wait_queue_head_t context_wait; /**< Processes waiting on ctx switch */
|
||||||
int last_checked; /**< Last context checked for DMA */
|
int last_checked; /**< Last context checked for DMA */
|
||||||
int last_context; /**< Last current context */
|
int last_context; /**< Last current context */
|
||||||
|
@ -1046,12 +1035,6 @@ struct drm_device {
|
||||||
struct drm_minor *control; /**< Control node for card */
|
struct drm_minor *control; /**< Control node for card */
|
||||||
struct drm_minor *primary; /**< render type primary screen head */
|
struct drm_minor *primary; /**< render type primary screen head */
|
||||||
|
|
||||||
/** \name Drawable information */
|
|
||||||
/*@{ */
|
|
||||||
spinlock_t drw_lock;
|
|
||||||
struct idr drw_idr;
|
|
||||||
/*@} */
|
|
||||||
|
|
||||||
struct drm_mode_config mode_config; /**< Current mode config */
|
struct drm_mode_config mode_config; /**< Current mode config */
|
||||||
|
|
||||||
/** \name GEM information */
|
/** \name GEM information */
|
||||||
|
@ -1175,8 +1158,6 @@ extern int drm_release(struct inode *inode, struct file *filp);
|
||||||
extern int drm_mmap(struct file *filp, struct vm_area_struct *vma);
|
extern int drm_mmap(struct file *filp, struct vm_area_struct *vma);
|
||||||
extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma);
|
extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma);
|
||||||
extern void drm_vm_open_locked(struct vm_area_struct *vma);
|
extern void drm_vm_open_locked(struct vm_area_struct *vma);
|
||||||
extern resource_size_t drm_core_get_map_ofs(struct drm_local_map * map);
|
|
||||||
extern resource_size_t drm_core_get_reg_ofs(struct drm_device *dev);
|
|
||||||
extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
|
extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
|
||||||
|
|
||||||
/* Memory management support (drm_memory.h) */
|
/* Memory management support (drm_memory.h) */
|
||||||
|
@ -1186,8 +1167,7 @@ extern int drm_mem_info(char *buf, char **start, off_t offset,
|
||||||
int request, int *eof, void *data);
|
int request, int *eof, void *data);
|
||||||
extern void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area);
|
extern void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area);
|
||||||
|
|
||||||
extern DRM_AGP_MEM *drm_alloc_agp(struct drm_device *dev, int pages, u32 type);
|
extern void drm_free_agp(DRM_AGP_MEM * handle, int pages);
|
||||||
extern int drm_free_agp(DRM_AGP_MEM * handle, int pages);
|
|
||||||
extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start);
|
extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start);
|
||||||
extern DRM_AGP_MEM *drm_agp_bind_pages(struct drm_device *dev,
|
extern DRM_AGP_MEM *drm_agp_bind_pages(struct drm_device *dev,
|
||||||
struct page **pages,
|
struct page **pages,
|
||||||
|
@ -1239,17 +1219,6 @@ extern int drm_setsareactx(struct drm_device *dev, void *data,
|
||||||
extern int drm_getsareactx(struct drm_device *dev, void *data,
|
extern int drm_getsareactx(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
|
|
||||||
/* Drawable IOCTL support (drm_drawable.h) */
|
|
||||||
extern int drm_adddraw(struct drm_device *dev, void *data,
|
|
||||||
struct drm_file *file_priv);
|
|
||||||
extern int drm_rmdraw(struct drm_device *dev, void *data,
|
|
||||||
struct drm_file *file_priv);
|
|
||||||
extern int drm_update_drawable_info(struct drm_device *dev, void *data,
|
|
||||||
struct drm_file *file_priv);
|
|
||||||
extern struct drm_drawable_info *drm_get_drawable_info(struct drm_device *dev,
|
|
||||||
drm_drawable_t id);
|
|
||||||
extern void drm_drawable_free_all(struct drm_device *dev);
|
|
||||||
|
|
||||||
/* Authentication IOCTL support (drm_auth.h) */
|
/* Authentication IOCTL support (drm_auth.h) */
|
||||||
extern int drm_getmagic(struct drm_device *dev, void *data,
|
extern int drm_getmagic(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
|
@ -1264,7 +1233,6 @@ extern int drm_lock(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
extern int drm_unlock(struct drm_device *dev, void *data,
|
extern int drm_unlock(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
extern int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context);
|
|
||||||
extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context);
|
extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context);
|
||||||
extern void drm_idlelock_take(struct drm_lock_data *lock_data);
|
extern void drm_idlelock_take(struct drm_lock_data *lock_data);
|
||||||
extern void drm_idlelock_release(struct drm_lock_data *lock_data);
|
extern void drm_idlelock_release(struct drm_lock_data *lock_data);
|
||||||
|
@ -1359,10 +1327,6 @@ extern int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
|
||||||
extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
|
extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
|
||||||
extern int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
|
extern int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
extern DRM_AGP_MEM *drm_agp_allocate_memory(struct agp_bridge_data *bridge, size_t pages, u32 type);
|
|
||||||
extern int drm_agp_free_memory(DRM_AGP_MEM * handle);
|
|
||||||
extern int drm_agp_bind_memory(DRM_AGP_MEM * handle, off_t start);
|
|
||||||
extern int drm_agp_unbind_memory(DRM_AGP_MEM * handle);
|
|
||||||
extern void drm_agp_chipset_flush(struct drm_device *dev);
|
extern void drm_agp_chipset_flush(struct drm_device *dev);
|
||||||
|
|
||||||
/* Stub support (drm_stub.h) */
|
/* Stub support (drm_stub.h) */
|
||||||
|
|
Loading…
Reference in a new issue