Replace filp in ioctl arguments with drm_file *file_priv.
As a fallout, replace filp storage with file_priv storage for "unique identifier of a client" all over the DRM. There is a 1:1 mapping, so this should be a noop. This could be a minor performance improvement, as everything on Linux dereferenced filp to get file_priv anyway, while only the mmap ioctls went the other direction.main
parent
35de486836
commit
c1119b1b09
|
@ -217,10 +217,6 @@ MALLOC_DECLARE(M_DRM);
|
|||
#define spldrm() spltty()
|
||||
#endif /* __NetBSD__ || __OpenBSD__ */
|
||||
|
||||
/* Currently our DRMFILE (filp) is a void * which is actually the pid
|
||||
* of the current process. It should be a per-open unique pointer, but
|
||||
* code for that is not yet written */
|
||||
#define DRMFILE void *
|
||||
#define DRM_IRQ_ARGS void *arg
|
||||
typedef void irqreturn_t;
|
||||
#define IRQ_HANDLED /* nothing */
|
||||
|
@ -237,7 +233,8 @@ enum {
|
|||
#define DRM_DEVICE \
|
||||
drm_device_t *dev = kdev->si_drv1
|
||||
#define DRM_IOCTL_ARGS struct cdev *kdev, u_long cmd, caddr_t data, \
|
||||
int flags, DRM_STRUCTPROC *p, DRMFILE filp
|
||||
int flags, DRM_STRUCTPROC *p, \
|
||||
struct drm_file *file_priv
|
||||
|
||||
#define PAGE_ALIGN(addr) round_page(addr)
|
||||
/* DRM_SUSER returns true if the user is superuser */
|
||||
|
@ -260,8 +257,9 @@ enum {
|
|||
drm_device_t *dev = (device_lookup(&drm_cd, \
|
||||
minor(kdev)))->dv_cfdata->cf_driver->cd_devs[minor(kdev)]
|
||||
#endif /* __OpenBSD__ */
|
||||
#define DRM_IOCTL_ARGS dev_t kdev, u_long cmd, caddr_t data, \
|
||||
int flags, DRM_STRUCTPROC *p, DRMFILE filp
|
||||
#define DRM_IOCTL_ARGS dev_t kdev, u_long cmd, caddr_t data, \
|
||||
int flags, DRM_STRUCTPROC *p, \
|
||||
struct drm_file *file_priv
|
||||
|
||||
#define CDEV_MAJOR 34
|
||||
#define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK)
|
||||
|
@ -385,23 +383,10 @@ typedef vaddr_t vm_offset_t;
|
|||
(_map) = (_dev)->context_sareas[_ctx]; \
|
||||
} while(0)
|
||||
|
||||
#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) \
|
||||
do { \
|
||||
if (_filp != (DRMFILE)(intptr_t)DRM_CURRENTPID) { \
|
||||
DRM_ERROR("filp doesn't match curproc\n"); \
|
||||
return EINVAL; \
|
||||
} \
|
||||
_priv = drm_find_file_by_proc(dev, DRM_CURPROC); \
|
||||
if (_priv == NULL) { \
|
||||
DRM_ERROR("can't find authenticator\n"); \
|
||||
return EINVAL; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LOCK_TEST_WITH_RETURN(dev, filp) \
|
||||
#define LOCK_TEST_WITH_RETURN(dev, file_priv) \
|
||||
do { \
|
||||
if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) || \
|
||||
dev->lock.filp != filp) { \
|
||||
dev->lock.file_priv != file_priv) { \
|
||||
DRM_ERROR("%s called without lock held\n", \
|
||||
__FUNCTION__); \
|
||||
return EINVAL; \
|
||||
|
@ -479,7 +464,7 @@ typedef struct drm_buf {
|
|||
unsigned long bus_address; /* Bus address of buffer */
|
||||
struct drm_buf *next; /* Kernel-only: used for free list */
|
||||
__volatile__ int pending; /* On hardware DMA queue */
|
||||
DRMFILE filp; /* Unique identifier of holding process */
|
||||
struct drm_file *file_priv; /* Unique identifier of holding process */
|
||||
int context; /* Kernel queue for this buffer */
|
||||
enum {
|
||||
DRM_LIST_NONE = 0,
|
||||
|
@ -541,7 +526,7 @@ struct drm_file {
|
|||
|
||||
typedef struct drm_lock_data {
|
||||
drm_hw_lock_t *hw_lock; /* Hardware lock */
|
||||
DRMFILE filp; /* Unique identifier of holding process (NULL is kernel)*/
|
||||
struct drm_file *file_priv; /* Unique identifier of holding process (NULL is kernel)*/
|
||||
int lock_queue; /* Queue of blocked processes */
|
||||
unsigned long lock_time; /* Time of last lock in jiffies */
|
||||
} drm_lock_data_t;
|
||||
|
@ -645,11 +630,12 @@ struct drm_driver_info {
|
|||
int (*load)(struct drm_device *, unsigned long flags);
|
||||
int (*firstopen)(struct drm_device *);
|
||||
int (*open)(struct drm_device *, drm_file_t *);
|
||||
void (*preclose)(struct drm_device *, void *filp);
|
||||
void (*preclose)(struct drm_device *, struct drm_file *file_priv);
|
||||
void (*postclose)(struct drm_device *, drm_file_t *);
|
||||
void (*lastclose)(struct drm_device *);
|
||||
int (*unload)(struct drm_device *);
|
||||
void (*reclaim_buffers_locked)(struct drm_device *, void *filp);
|
||||
void (*reclaim_buffers_locked)(struct drm_device *,
|
||||
struct drm_file *file_priv);
|
||||
int (*dma_ioctl)(DRM_IOCTL_ARGS);
|
||||
void (*dma_ready)(struct drm_device *);
|
||||
int (*dma_quiescent)(struct drm_device *);
|
||||
|
@ -900,7 +886,7 @@ int drm_addbufs_agp(drm_device_t *dev, drm_buf_desc_t *request);
|
|||
int drm_dma_setup(drm_device_t *dev);
|
||||
void drm_dma_takedown(drm_device_t *dev);
|
||||
void drm_free_buffer(drm_device_t *dev, drm_buf_t *buf);
|
||||
void drm_reclaim_buffers(drm_device_t *dev, DRMFILE filp);
|
||||
void drm_reclaim_buffers(drm_device_t *dev, struct drm_file *file_priv);
|
||||
#define drm_core_reclaim_buffers drm_reclaim_buffers
|
||||
|
||||
/* IRQ support (drm_irq.c) */
|
||||
|
|
|
@ -469,7 +469,7 @@ static int drm_do_addbufs_agp(drm_device_t *dev, drm_buf_desc_t *request)
|
|||
buf->address = (void *)(agp_offset + offset);
|
||||
buf->next = NULL;
|
||||
buf->pending = 0;
|
||||
buf->filp = NULL;
|
||||
buf->file_priv = NULL;
|
||||
|
||||
buf->dev_priv_size = dev->driver.buf_priv_size;
|
||||
buf->dev_private = malloc(buf->dev_priv_size, M_DRM,
|
||||
|
@ -610,7 +610,7 @@ static int drm_do_addbufs_pci(drm_device_t *dev, drm_buf_desc_t *request)
|
|||
buf->bus_address = dmah->busaddr + offset;
|
||||
buf->next = NULL;
|
||||
buf->pending = 0;
|
||||
buf->filp = NULL;
|
||||
buf->file_priv = NULL;
|
||||
|
||||
buf->dev_priv_size = dev->driver.buf_priv_size;
|
||||
buf->dev_private = malloc(buf->dev_priv_size, M_DRM,
|
||||
|
@ -724,7 +724,7 @@ static int drm_do_addbufs_sg(drm_device_t *dev, drm_buf_desc_t *request)
|
|||
buf->address = (void *)(agp_offset + offset + dev->sg->handle);
|
||||
buf->next = NULL;
|
||||
buf->pending = 0;
|
||||
buf->filp = NULL;
|
||||
buf->file_priv = NULL;
|
||||
|
||||
buf->dev_priv_size = dev->driver.buf_priv_size;
|
||||
buf->dev_private = malloc(buf->dev_priv_size, M_DRM,
|
||||
|
@ -1008,7 +1008,7 @@ int drm_freebufs(DRM_IOCTL_ARGS)
|
|||
break;
|
||||
}
|
||||
buf = dma->buflist[idx];
|
||||
if ( buf->filp != filp ) {
|
||||
if ( buf->file_priv != file_priv ) {
|
||||
DRM_ERROR("Process %d freeing buffer not owned\n",
|
||||
DRM_CURRENTPID);
|
||||
retcode = EINVAL;
|
||||
|
|
|
@ -89,18 +89,18 @@ void drm_free_buffer(drm_device_t *dev, drm_buf_t *buf)
|
|||
if (!buf) return;
|
||||
|
||||
buf->pending = 0;
|
||||
buf->filp = NULL;
|
||||
buf->file_priv= NULL;
|
||||
buf->used = 0;
|
||||
}
|
||||
|
||||
void drm_reclaim_buffers(drm_device_t *dev, DRMFILE filp)
|
||||
void drm_reclaim_buffers(drm_device_t *dev, struct drm_file *file_priv)
|
||||
{
|
||||
drm_device_dma_t *dma = dev->dma;
|
||||
int i;
|
||||
|
||||
if (!dma) return;
|
||||
for (i = 0; i < dma->buf_count; i++) {
|
||||
if (dma->buflist[i]->filp == filp) {
|
||||
if (dma->buflist[i]->file_priv == file_priv) {
|
||||
switch (dma->buflist[i]->list) {
|
||||
case DRM_LIST_NONE:
|
||||
drm_free_buffer(dev, dma->buflist[i]);
|
||||
|
@ -122,7 +122,8 @@ int drm_dma(DRM_IOCTL_ARGS)
|
|||
DRM_DEVICE;
|
||||
|
||||
if (dev->driver.dma_ioctl) {
|
||||
return -dev->driver.dma_ioctl(kdev, cmd, data, flags, p, filp);
|
||||
return -dev->driver.dma_ioctl(kdev, cmd, data, flags, p,
|
||||
file_priv);
|
||||
} else {
|
||||
DRM_DEBUG("DMA ioctl on driver with no dma handler\n");
|
||||
return EINVAL;
|
||||
|
|
|
@ -499,7 +499,7 @@ static int drm_lastclose(drm_device_t *dev)
|
|||
drm_dma_takedown(dev);
|
||||
if ( dev->lock.hw_lock ) {
|
||||
dev->lock.hw_lock = NULL; /* SHM removed */
|
||||
dev->lock.filp = NULL;
|
||||
dev->lock.file_priv = NULL;
|
||||
DRM_WAKEUP_INT((void *)&dev->lock.lock_queue);
|
||||
}
|
||||
|
||||
|
@ -704,24 +704,23 @@ int drm_open(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
|
|||
|
||||
int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
|
||||
{
|
||||
drm_file_t *priv;
|
||||
drm_file_t *file_priv;
|
||||
DRM_DEVICE;
|
||||
int retcode = 0;
|
||||
DRMFILE filp = (void *)(uintptr_t)(DRM_CURRENTPID);
|
||||
|
||||
|
||||
DRM_DEBUG( "open_count = %d\n", dev->open_count );
|
||||
|
||||
DRM_LOCK();
|
||||
|
||||
priv = drm_find_file_by_proc(dev, p);
|
||||
if (!priv) {
|
||||
file_priv = drm_find_file_by_proc(dev, p);
|
||||
if (!file_priv) {
|
||||
DRM_UNLOCK();
|
||||
DRM_ERROR("can't find authenticator\n");
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
if (dev->driver.preclose != NULL)
|
||||
dev->driver.preclose(dev, filp);
|
||||
dev->driver.preclose(dev, file_priv);
|
||||
|
||||
/* ========================================================
|
||||
* Begin inline drm_release
|
||||
|
@ -736,12 +735,12 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
|
|||
#endif
|
||||
|
||||
if (dev->lock.hw_lock && _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)
|
||||
&& dev->lock.filp == filp) {
|
||||
&& dev->lock.file_priv == file_priv) {
|
||||
DRM_DEBUG("Process %d dead, freeing lock for context %d\n",
|
||||
DRM_CURRENTPID,
|
||||
_DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
|
||||
if (dev->driver.reclaim_buffers_locked != NULL)
|
||||
dev->driver.reclaim_buffers_locked(dev, filp);
|
||||
dev->driver.reclaim_buffers_locked(dev, file_priv);
|
||||
|
||||
drm_lock_free(dev, &dev->lock.hw_lock->lock,
|
||||
_DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
|
||||
|
@ -761,7 +760,7 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
|
|||
}
|
||||
if (drm_lock_take(&dev->lock.hw_lock->lock,
|
||||
DRM_KERNEL_CONTEXT)) {
|
||||
dev->lock.filp = filp;
|
||||
dev->lock.file_priv = file_priv;
|
||||
dev->lock.lock_time = jiffies;
|
||||
atomic_inc( &dev->counts[_DRM_STAT_LOCKS] );
|
||||
break; /* Got lock */
|
||||
|
@ -778,14 +777,14 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
|
|||
break;
|
||||
}
|
||||
if (retcode == 0) {
|
||||
dev->driver.reclaim_buffers_locked(dev, filp);
|
||||
dev->driver.reclaim_buffers_locked(dev, file_priv);
|
||||
drm_lock_free(dev, &dev->lock.hw_lock->lock,
|
||||
DRM_KERNEL_CONTEXT);
|
||||
}
|
||||
}
|
||||
|
||||
if (dev->driver.use_dma && !dev->driver.reclaim_buffers_locked)
|
||||
drm_reclaim_buffers(dev, filp);
|
||||
drm_reclaim_buffers(dev, file_priv);
|
||||
|
||||
#if defined (__FreeBSD__) && (__FreeBSD_version >= 500000)
|
||||
funsetown(&dev->buf_sigio);
|
||||
|
@ -795,11 +794,11 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
|
|||
dev->buf_pgid = 0;
|
||||
#endif /* __NetBSD__ || __OpenBSD__ */
|
||||
|
||||
if (--priv->refs == 0) {
|
||||
if (--file_priv->refs == 0) {
|
||||
if (dev->driver.postclose != NULL)
|
||||
dev->driver.postclose(dev, priv);
|
||||
TAILQ_REMOVE(&dev->files, priv, link);
|
||||
free(priv, M_DRM);
|
||||
dev->driver.postclose(dev, file_priv);
|
||||
TAILQ_REMOVE(&dev->files, file_priv, link);
|
||||
free(file_priv, M_DRM);
|
||||
}
|
||||
|
||||
/* ========================================================
|
||||
|
@ -830,26 +829,27 @@ int drm_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int flags,
|
|||
int (*func)(DRM_IOCTL_ARGS);
|
||||
int nr = DRM_IOCTL_NR(cmd);
|
||||
int is_driver_ioctl = 0;
|
||||
drm_file_t *priv;
|
||||
DRMFILE filp = (DRMFILE)(uintptr_t)DRM_CURRENTPID;
|
||||
drm_file_t *file_priv;
|
||||
|
||||
DRM_LOCK();
|
||||
priv = drm_find_file_by_proc(dev, p);
|
||||
file_priv = drm_find_file_by_proc(dev, p);
|
||||
DRM_UNLOCK();
|
||||
if (priv == NULL) {
|
||||
if (file_priv == NULL) {
|
||||
DRM_ERROR("can't find authenticator\n");
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
atomic_inc( &dev->counts[_DRM_STAT_IOCTLS] );
|
||||
++priv->ioctl_count;
|
||||
++file_priv->ioctl_count;
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
DRM_DEBUG( "pid=%d, cmd=0x%02lx, nr=0x%02x, dev 0x%lx, auth=%d\n",
|
||||
DRM_CURRENTPID, cmd, nr, (long)dev->device, priv->authenticated );
|
||||
DRM_CURRENTPID, cmd, nr, (long)dev->device,
|
||||
file_priv->authenticated );
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
DRM_DEBUG( "pid=%d, cmd=0x%02lx, nr=0x%02x, dev 0x%lx, auth=%d\n",
|
||||
DRM_CURRENTPID, cmd, nr, (long)&dev->device, priv->authenticated );
|
||||
DRM_CURRENTPID, cmd, nr, (long)&dev->device,
|
||||
file_priv->authenticated );
|
||||
#endif
|
||||
|
||||
switch (cmd) {
|
||||
|
@ -904,17 +904,15 @@ int drm_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int flags,
|
|||
DRM_DEBUG( "no function\n" );
|
||||
return EINVAL;
|
||||
}
|
||||
/* ioctl->master check should be against something in the filp set up
|
||||
* for the first opener, but it doesn't matter yet.
|
||||
*/
|
||||
|
||||
if (((ioctl->flags & DRM_ROOT_ONLY) && !DRM_SUSER(p)) ||
|
||||
((ioctl->flags & DRM_AUTH) && !priv->authenticated) ||
|
||||
((ioctl->flags & DRM_MASTER) && !priv->master))
|
||||
((ioctl->flags & DRM_AUTH) && !file_priv->authenticated) ||
|
||||
((ioctl->flags & DRM_MASTER) && !file_priv->master))
|
||||
return EACCES;
|
||||
|
||||
if (is_driver_ioctl)
|
||||
DRM_LOCK();
|
||||
retcode = func(kdev, cmd, data, flags, p, filp);
|
||||
retcode = func(kdev, cmd, data, flags, p, file_priv);
|
||||
if (is_driver_ioctl) {
|
||||
DRM_UNLOCK();
|
||||
/* Driver ioctls in shared code follow the linux convention of
|
||||
|
|
|
@ -306,7 +306,7 @@ static void drm_locked_task(void *context, int pending __unused)
|
|||
if (drm_lock_take(&dev->lock.hw_lock->lock,
|
||||
DRM_KERNEL_CONTEXT))
|
||||
{
|
||||
dev->lock.filp = (void *)(uintptr_t)DRM_CURRENTPID;
|
||||
dev->lock.file_priv = NULL; /* kernel owned */
|
||||
dev->lock.lock_time = jiffies;
|
||||
atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
|
||||
break; /* Got lock */
|
||||
|
|
|
@ -66,7 +66,7 @@ int drm_lock_transfer(drm_device_t *dev,
|
|||
{
|
||||
unsigned int old, new;
|
||||
|
||||
dev->lock.filp = NULL;
|
||||
dev->lock.file_priv = NULL;
|
||||
do {
|
||||
old = *lock;
|
||||
new = context | _DRM_LOCK_HELD;
|
||||
|
@ -80,7 +80,7 @@ int drm_lock_free(drm_device_t *dev,
|
|||
{
|
||||
unsigned int old, new;
|
||||
|
||||
dev->lock.filp = NULL;
|
||||
dev->lock.file_priv = NULL;
|
||||
do {
|
||||
old = *lock;
|
||||
new = 0;
|
||||
|
@ -118,7 +118,7 @@ int drm_lock(DRM_IOCTL_ARGS)
|
|||
DRM_LOCK();
|
||||
for (;;) {
|
||||
if (drm_lock_take(&dev->lock.hw_lock->lock, lock.context)) {
|
||||
dev->lock.filp = (void *)(uintptr_t)DRM_CURRENTPID;
|
||||
dev->lock.file_priv = file_priv;
|
||||
dev->lock.lock_time = jiffies;
|
||||
atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
|
||||
break; /* Got lock */
|
||||
|
|
|
@ -84,6 +84,8 @@
|
|||
#include "drm_os_linux.h"
|
||||
#include "drm_hashtab.h"
|
||||
|
||||
struct drm_file;
|
||||
|
||||
/* If you want the memory alloc debug functionality, change define below */
|
||||
/* #define DEBUG_MEMORY */
|
||||
|
||||
|
@ -248,15 +250,15 @@
|
|||
* Test that the hardware lock is held by the caller, returning otherwise.
|
||||
*
|
||||
* \param dev DRM device.
|
||||
* \param filp file pointer of the caller.
|
||||
* \param file_priv DRM file private pointer of the caller.
|
||||
*/
|
||||
#define LOCK_TEST_WITH_RETURN( dev, filp ) \
|
||||
#define LOCK_TEST_WITH_RETURN( dev, file_priv ) \
|
||||
do { \
|
||||
if ( !_DRM_LOCK_IS_HELD( dev->lock.hw_lock->lock ) || \
|
||||
dev->lock.filp != filp ) { \
|
||||
dev->lock.file_priv != file_priv ) { \
|
||||
DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\
|
||||
__FUNCTION__, _DRM_LOCK_IS_HELD( dev->lock.hw_lock->lock ),\
|
||||
dev->lock.filp, filp ); \
|
||||
dev->lock.file_priv, file_priv ); \
|
||||
return -EINVAL; \
|
||||
} \
|
||||
} while (0)
|
||||
|
@ -277,11 +279,11 @@ do { \
|
|||
* Ioctl function type.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private pointer.
|
||||
* \param cmd command.
|
||||
* \param arg argument.
|
||||
*/
|
||||
typedef int drm_ioctl_t(struct inode *inode, struct file *filp,
|
||||
typedef int drm_ioctl_t(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
|
||||
|
@ -323,7 +325,7 @@ struct drm_buf {
|
|||
__volatile__ int waiting; /**< On kernel DMA queue */
|
||||
__volatile__ int pending; /**< On hardware DMA queue */
|
||||
wait_queue_head_t dma_wait; /**< Processes waiting */
|
||||
struct file *filp; /**< Pointer to holding file descr */
|
||||
struct drm_file *file_priv; /**< Private of holding file descr */
|
||||
int context; /**< Kernel queue for this buffer */
|
||||
int while_locked; /**< Dispatch this buffer while locked */
|
||||
enum {
|
||||
|
@ -419,6 +421,7 @@ struct drm_file {
|
|||
struct list_head user_objects;
|
||||
|
||||
struct drm_open_hash refd_object_hash[_DRM_NO_REF_TYPES];
|
||||
struct file *filp;
|
||||
void *driver_priv;
|
||||
};
|
||||
|
||||
|
@ -446,7 +449,8 @@ struct drm_queue {
|
|||
*/
|
||||
struct drm_lock_data {
|
||||
struct drm_hw_lock *hw_lock; /**< Hardware lock */
|
||||
struct file *filp; /**< File descr of lock holder (0=kernel) */
|
||||
/** Private of lock holder's file (NULL=kernel) */
|
||||
struct drm_file *file_priv;
|
||||
wait_queue_head_t lock_queue; /**< Queue of blocked processes */
|
||||
unsigned long lock_time; /**< Time of last lock in jiffies */
|
||||
spinlock_t spinlock;
|
||||
|
@ -603,7 +607,7 @@ struct drm_driver {
|
|||
int (*load) (struct drm_device *, unsigned long flags);
|
||||
int (*firstopen) (struct drm_device *);
|
||||
int (*open) (struct drm_device *, struct drm_file *);
|
||||
void (*preclose) (struct drm_device *, struct file * filp);
|
||||
void (*preclose) (struct drm_device *, struct drm_file *file_priv);
|
||||
void (*postclose) (struct drm_device *, struct drm_file *);
|
||||
void (*lastclose) (struct drm_device *);
|
||||
int (*unload) (struct drm_device *);
|
||||
|
@ -637,11 +641,12 @@ struct drm_driver {
|
|||
void (*irq_preinstall) (struct drm_device * dev);
|
||||
void (*irq_postinstall) (struct drm_device * dev);
|
||||
void (*irq_uninstall) (struct drm_device * dev);
|
||||
void (*reclaim_buffers) (struct drm_device *dev, struct file * filp);
|
||||
void (*reclaim_buffers) (struct drm_device *dev,
|
||||
struct drm_file *file_priv);
|
||||
void (*reclaim_buffers_locked) (struct drm_device *dev,
|
||||
struct file * filp);
|
||||
struct drm_file *file_priv);
|
||||
void (*reclaim_buffers_idlelocked) (struct drm_device *dev,
|
||||
struct file * filp);
|
||||
struct drm_file *file_priv);
|
||||
unsigned long (*get_map_ofs) (struct drm_map * map);
|
||||
unsigned long (*get_reg_ofs) (struct drm_device * dev);
|
||||
void (*set_version) (struct drm_device * dev, struct drm_set_version * sv);
|
||||
|
@ -939,69 +944,70 @@ extern void drm_init_memctl(size_t low_threshold,
|
|||
size_t unit_size);
|
||||
|
||||
/* Misc. IOCTL support (drm_ioctl.h) */
|
||||
extern int drm_irq_by_busid(struct inode *inode, struct file *filp,
|
||||
extern int drm_irq_by_busid(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_getunique(struct inode *inode, struct file *filp,
|
||||
extern int drm_getunique(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_setunique(struct inode *inode, struct file *filp,
|
||||
extern int drm_setunique(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_getmap(struct inode *inode, struct file *filp,
|
||||
extern int drm_getmap(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_getclient(struct inode *inode, struct file *filp,
|
||||
extern int drm_getclient(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_getstats(struct inode *inode, struct file *filp,
|
||||
extern int drm_getstats(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_setversion(struct inode *inode, struct file *filp,
|
||||
extern int drm_setversion(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_noop(struct inode *inode, struct file *filp,
|
||||
extern int drm_noop(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
/* Context IOCTL support (drm_context.h) */
|
||||
extern int drm_resctx(struct inode *inode, struct file *filp,
|
||||
extern int drm_resctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_addctx(struct inode *inode, struct file *filp,
|
||||
extern int drm_addctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_modctx(struct inode *inode, struct file *filp,
|
||||
extern int drm_modctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_getctx(struct inode *inode, struct file *filp,
|
||||
extern int drm_getctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_switchctx(struct inode *inode, struct file *filp,
|
||||
extern int drm_switchctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_newctx(struct inode *inode, struct file *filp,
|
||||
extern int drm_newctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_rmctx(struct inode *inode, struct file *filp,
|
||||
extern int drm_rmctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
extern int drm_ctxbitmap_init(struct drm_device *dev);
|
||||
extern void drm_ctxbitmap_cleanup(struct drm_device *dev);
|
||||
extern void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle);
|
||||
|
||||
extern int drm_setsareactx(struct inode *inode, struct file *filp,
|
||||
extern int drm_setsareactx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_getsareactx(struct inode *inode, struct file *filp,
|
||||
extern int drm_getsareactx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
/* Drawable IOCTL support (drm_drawable.h) */
|
||||
extern int drm_adddraw(struct inode *inode, struct file *filp,
|
||||
extern int drm_adddraw(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_rmdraw(struct inode *inode, struct file *filp,
|
||||
extern int drm_rmdraw(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_update_drawable_info(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_update_drawable_info(struct inode *inode,
|
||||
struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
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) */
|
||||
extern int drm_getmagic(struct inode *inode, struct file *filp,
|
||||
extern int drm_getmagic(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_authmagic(struct inode *inode, struct file *filp,
|
||||
extern int drm_authmagic(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
/* Locking IOCTL support (drm_lock.h) */
|
||||
extern int drm_lock(struct inode *inode, struct file *filp,
|
||||
extern int drm_lock(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_unlock(struct inode *inode, struct file *filp,
|
||||
extern int drm_unlock(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
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);
|
||||
|
@ -1013,8 +1019,7 @@ extern void drm_idlelock_release(struct drm_lock_data *lock_data);
|
|||
* DMA quiscent + idle. DMA quiescent usually requires the hardware lock.
|
||||
*/
|
||||
|
||||
extern int drm_i_have_hw_lock(struct file *filp);
|
||||
extern int drm_kernel_take_hw_lock(struct file *filp);
|
||||
extern int drm_i_have_hw_lock(struct drm_file *file_priv);
|
||||
|
||||
/* Buffer management support (drm_bufs.h) */
|
||||
extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request);
|
||||
|
@ -1023,21 +1028,21 @@ extern int drm_addbufs_fb (struct drm_device *dev, struct drm_buf_desc * request
|
|||
extern int drm_addmap(struct drm_device *dev, unsigned int offset,
|
||||
unsigned int size, enum drm_map_type type,
|
||||
enum drm_map_flags flags, drm_local_map_t ** map_ptr);
|
||||
extern int drm_addmap_ioctl(struct inode *inode, struct file *filp,
|
||||
extern int drm_addmap_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_rmmap(struct drm_device *dev, drm_local_map_t *map);
|
||||
extern int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map);
|
||||
extern int drm_rmmap_ioctl(struct inode *inode, struct file *filp,
|
||||
extern int drm_rmmap_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_addbufs(struct inode *inode, struct file *filp,
|
||||
extern int drm_addbufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_infobufs(struct inode *inode, struct file *filp,
|
||||
extern int drm_infobufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_markbufs(struct inode *inode, struct file *filp,
|
||||
extern int drm_markbufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_freebufs(struct inode *inode, struct file *filp,
|
||||
extern int drm_freebufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_mapbufs(struct inode *inode, struct file *filp,
|
||||
extern int drm_mapbufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_order(unsigned long size);
|
||||
extern unsigned long drm_get_resource_start(struct drm_device *dev,
|
||||
|
@ -1052,10 +1057,11 @@ extern struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
|
|||
extern int drm_dma_setup(struct drm_device *dev);
|
||||
extern void drm_dma_takedown(struct drm_device *dev);
|
||||
extern void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf);
|
||||
extern void drm_core_reclaim_buffers(struct drm_device *dev, struct file *filp);
|
||||
extern void drm_core_reclaim_buffers(struct drm_device *dev,
|
||||
struct drm_file *filp);
|
||||
|
||||
/* IRQ support (drm_irq.h) */
|
||||
extern int drm_control(struct inode *inode, struct file *filp,
|
||||
extern int drm_control(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern irqreturn_t drm_irq_handler(DRM_IRQ_ARGS);
|
||||
extern int drm_irq_uninstall(struct drm_device *dev);
|
||||
|
@ -1063,7 +1069,7 @@ extern void drm_driver_irq_preinstall(struct drm_device *dev);
|
|||
extern void drm_driver_irq_postinstall(struct drm_device *dev);
|
||||
extern void drm_driver_irq_uninstall(struct drm_device *dev);
|
||||
|
||||
extern int drm_wait_vblank(struct inode *inode, struct file *filp,
|
||||
extern int drm_wait_vblank(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq);
|
||||
extern void drm_vbl_send_signals(struct drm_device *dev);
|
||||
|
@ -1072,28 +1078,31 @@ extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_de
|
|||
/* AGP/GART support (drm_agpsupport.h) */
|
||||
extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
|
||||
extern int drm_agp_acquire(struct drm_device *dev);
|
||||
extern int drm_agp_acquire_ioctl(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_acquire_ioctl(struct inode *inode,
|
||||
struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_release(struct drm_device *dev);
|
||||
extern int drm_agp_release_ioctl(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_release_ioctl(struct inode *inode,
|
||||
struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
|
||||
extern int drm_agp_enable_ioctl(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_enable_ioctl(struct inode *inode,
|
||||
struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
|
||||
extern int drm_agp_info_ioctl(struct inode *inode, struct file *filp,
|
||||
extern int drm_agp_info_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
|
||||
extern int drm_agp_alloc_ioctl(struct inode *inode, struct file *filp,
|
||||
extern int drm_agp_alloc_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
|
||||
extern int drm_agp_free_ioctl(struct inode *inode, struct file *filp,
|
||||
extern int drm_agp_free_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
|
||||
extern int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp,
|
||||
extern int drm_agp_unbind_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
|
||||
extern int drm_agp_bind_ioctl(struct inode *inode, struct file *filp,
|
||||
extern int drm_agp_bind_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,11)
|
||||
extern DRM_AGP_MEM *drm_agp_allocate_memory(size_t pages, u32 type);
|
||||
|
@ -1128,10 +1137,10 @@ extern int drm_proc_cleanup(int minor,
|
|||
|
||||
/* Scatter Gather Support (drm_scatter.h) */
|
||||
extern void drm_sg_cleanup(struct drm_sg_mem * entry);
|
||||
extern int drm_sg_alloc_ioctl(struct inode *inode, struct file *filp,
|
||||
extern int drm_sg_alloc_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern int drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather * request);
|
||||
extern int drm_sg_free(struct inode *inode, struct file *filp,
|
||||
extern int drm_sg_free(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
/* ATI PCIGART support (ati_pcigart.h) */
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
* Get AGP information.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a (output) drm_agp_info structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -70,10 +70,9 @@ int drm_agp_info(struct drm_device * dev, struct drm_agp_info *info)
|
|||
}
|
||||
EXPORT_SYMBOL(drm_agp_info);
|
||||
|
||||
int drm_agp_info_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_agp_info_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_agp_info info;
|
||||
int err;
|
||||
|
@ -123,7 +122,7 @@ EXPORT_SYMBOL(drm_agp_acquire);
|
|||
* Acquire the AGP device (ioctl).
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -131,12 +130,10 @@ EXPORT_SYMBOL(drm_agp_acquire);
|
|||
* Verifies the AGP device hasn't been acquired before and calls
|
||||
* \c agp_backend_acquire.
|
||||
*/
|
||||
int drm_agp_acquire_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_agp_acquire_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
|
||||
return drm_agp_acquire( (struct drm_device *) priv->head->dev );
|
||||
return drm_agp_acquire( (struct drm_device *) file_priv->head->dev );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -162,12 +159,11 @@ int drm_agp_release(struct drm_device *dev)
|
|||
}
|
||||
EXPORT_SYMBOL(drm_agp_release);
|
||||
|
||||
int drm_agp_release_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_agp_release_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
|
||||
return drm_agp_release(dev);
|
||||
}
|
||||
|
||||
|
@ -198,11 +194,10 @@ int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode)
|
|||
}
|
||||
EXPORT_SYMBOL(drm_agp_enable);
|
||||
|
||||
int drm_agp_enable_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_agp_enable_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_agp_mode mode;
|
||||
|
||||
|
||||
|
@ -216,7 +211,7 @@ int drm_agp_enable_ioctl(struct inode *inode, struct file *filp,
|
|||
* Allocate AGP memory.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv file private pointer.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a drm_agp_buffer structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -259,11 +254,10 @@ int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request)
|
|||
EXPORT_SYMBOL(drm_agp_alloc);
|
||||
|
||||
|
||||
int drm_agp_alloc_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_agp_alloc_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_agp_buffer request;
|
||||
struct drm_agp_buffer __user *argp = (void __user *)arg;
|
||||
int err;
|
||||
|
@ -315,7 +309,7 @@ static struct drm_agp_mem *drm_agp_lookup_entry(struct drm_device * dev,
|
|||
* Unbind AGP memory from the GATT (ioctl).
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a drm_agp_binding structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -342,11 +336,10 @@ int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request)
|
|||
EXPORT_SYMBOL(drm_agp_unbind);
|
||||
|
||||
|
||||
int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_agp_unbind_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_agp_binding request;
|
||||
|
||||
if (copy_from_user
|
||||
|
@ -361,7 +354,7 @@ int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp,
|
|||
* Bind AGP memory into the GATT (ioctl)
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a drm_agp_binding structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -393,11 +386,10 @@ int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request)
|
|||
EXPORT_SYMBOL(drm_agp_bind);
|
||||
|
||||
|
||||
int drm_agp_bind_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_agp_bind_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_agp_binding request;
|
||||
|
||||
if (copy_from_user
|
||||
|
@ -412,7 +404,7 @@ int drm_agp_bind_ioctl(struct inode *inode, struct file *filp,
|
|||
* Free AGP memory (ioctl).
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a drm_agp_buffer structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -443,11 +435,10 @@ EXPORT_SYMBOL(drm_agp_free);
|
|||
|
||||
|
||||
|
||||
int drm_agp_free_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_agp_free_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_agp_buffer request;
|
||||
|
||||
if (copy_from_user
|
||||
|
|
|
@ -127,27 +127,26 @@ static int drm_remove_magic(struct drm_device * dev, drm_magic_t magic)
|
|||
* Get a unique magic number (ioctl).
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a resulting drm_auth structure.
|
||||
* \return zero on success, or a negative number on failure.
|
||||
*
|
||||
* If there is a magic number in drm_file::magic then use it, otherwise
|
||||
* searches an unique non-zero magic number and add it associating it with \p
|
||||
* filp.
|
||||
* file_priv.
|
||||
*/
|
||||
int drm_getmagic(struct inode *inode, struct file *filp,
|
||||
int drm_getmagic(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
static drm_magic_t sequence = 0;
|
||||
static DEFINE_SPINLOCK(lock);
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_auth auth;
|
||||
|
||||
/* Find unique magic */
|
||||
if (priv->magic) {
|
||||
auth.magic = priv->magic;
|
||||
if (file_priv->magic) {
|
||||
auth.magic = file_priv->magic;
|
||||
} else {
|
||||
do {
|
||||
spin_lock(&lock);
|
||||
|
@ -156,8 +155,8 @@ int drm_getmagic(struct inode *inode, struct file *filp,
|
|||
auth.magic = sequence++;
|
||||
spin_unlock(&lock);
|
||||
} while (drm_find_file(dev, auth.magic));
|
||||
priv->magic = auth.magic;
|
||||
drm_add_magic(dev, priv, auth.magic);
|
||||
file_priv->magic = auth.magic;
|
||||
drm_add_magic(dev, file_priv, auth.magic);
|
||||
}
|
||||
|
||||
DRM_DEBUG("%u\n", auth.magic);
|
||||
|
@ -170,18 +169,17 @@ int drm_getmagic(struct inode *inode, struct file *filp,
|
|||
* Authenticate with a magic.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a drm_auth structure.
|
||||
* \return zero if authentication successed, or a negative number otherwise.
|
||||
*
|
||||
* Checks if \p filp is associated with the magic number passed in \arg.
|
||||
* Checks if \p file_priv is associated with the magic number passed in \arg.
|
||||
*/
|
||||
int drm_authmagic(struct inode *inode, struct file *filp,
|
||||
int drm_authmagic(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_auth auth;
|
||||
struct drm_file *file;
|
||||
|
||||
|
|
|
@ -505,7 +505,8 @@ void drm_bo_usage_deref_locked(struct drm_buffer_object ** bo)
|
|||
}
|
||||
}
|
||||
|
||||
static void drm_bo_base_deref_locked(struct drm_file * priv, struct drm_user_object * uo)
|
||||
static void drm_bo_base_deref_locked(struct drm_file * file_priv,
|
||||
struct drm_user_object * uo)
|
||||
{
|
||||
struct drm_buffer_object *bo =
|
||||
drm_user_object_entry(uo, struct drm_buffer_object, base);
|
||||
|
@ -535,13 +536,13 @@ static void drm_bo_usage_deref_unlocked(struct drm_buffer_object ** bo)
|
|||
* and deregister fence object usage.
|
||||
*/
|
||||
|
||||
int drm_fence_buffer_objects(struct drm_file * priv,
|
||||
int drm_fence_buffer_objects(struct drm_file * file_priv,
|
||||
struct list_head *list,
|
||||
uint32_t fence_flags,
|
||||
struct drm_fence_object * fence,
|
||||
struct drm_fence_object ** used_fence)
|
||||
{
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_buffer_manager *bm = &dev->bm;
|
||||
|
||||
struct drm_buffer_object *entry;
|
||||
|
@ -921,21 +922,21 @@ static int drm_bo_new_mask(struct drm_buffer_object * bo,
|
|||
* Call dev->struct_mutex locked.
|
||||
*/
|
||||
|
||||
struct drm_buffer_object *drm_lookup_buffer_object(struct drm_file * priv,
|
||||
struct drm_buffer_object *drm_lookup_buffer_object(struct drm_file *file_priv,
|
||||
uint32_t handle, int check_owner)
|
||||
{
|
||||
struct drm_user_object *uo;
|
||||
struct drm_buffer_object *bo;
|
||||
|
||||
uo = drm_lookup_user_object(priv, handle);
|
||||
uo = drm_lookup_user_object(file_priv, handle);
|
||||
|
||||
if (!uo || (uo->type != drm_buffer_type)) {
|
||||
DRM_ERROR("Could not find buffer object 0x%08x\n", handle);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (check_owner && priv != uo->owner) {
|
||||
if (!drm_lookup_ref_object(priv, uo, _DRM_REF_USE))
|
||||
if (check_owner && file_priv != uo->owner) {
|
||||
if (!drm_lookup_ref_object(file_priv, uo, _DRM_REF_USE))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1102,17 +1103,17 @@ static void drm_bo_fill_rep_arg(struct drm_buffer_object * bo,
|
|||
* unregistered.
|
||||
*/
|
||||
|
||||
static int drm_buffer_object_map(struct drm_file * priv, uint32_t handle,
|
||||
static int drm_buffer_object_map(struct drm_file *file_priv, uint32_t handle,
|
||||
uint32_t map_flags, unsigned hint,
|
||||
struct drm_bo_info_rep *rep)
|
||||
{
|
||||
struct drm_buffer_object *bo;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
int ret = 0;
|
||||
int no_wait = hint & DRM_BO_HINT_DONT_BLOCK;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
bo = drm_lookup_buffer_object(priv, handle, 1);
|
||||
bo = drm_lookup_buffer_object(file_priv, handle, 1);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
|
||||
if (!bo)
|
||||
|
@ -1169,7 +1170,7 @@ static int drm_buffer_object_map(struct drm_file * priv, uint32_t handle,
|
|||
}
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
ret = drm_add_ref_object(priv, &bo->base, _DRM_REF_TYPE1);
|
||||
ret = drm_add_ref_object(file_priv, &bo->base, _DRM_REF_TYPE1);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
if (ret) {
|
||||
if (atomic_add_negative(-1, &bo->mapped))
|
||||
|
@ -1183,28 +1184,28 @@ static int drm_buffer_object_map(struct drm_file * priv, uint32_t handle,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int drm_buffer_object_unmap(struct drm_file * priv, uint32_t handle)
|
||||
static int drm_buffer_object_unmap(struct drm_file *file_priv, uint32_t handle)
|
||||
{
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_buffer_object *bo;
|
||||
struct drm_ref_object *ro;
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
|
||||
bo = drm_lookup_buffer_object(priv, handle, 1);
|
||||
bo = drm_lookup_buffer_object(file_priv, handle, 1);
|
||||
if (!bo) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ro = drm_lookup_ref_object(priv, &bo->base, _DRM_REF_TYPE1);
|
||||
ro = drm_lookup_ref_object(file_priv, &bo->base, _DRM_REF_TYPE1);
|
||||
if (!ro) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
drm_remove_ref_object(priv, ro);
|
||||
drm_remove_ref_object(file_priv, ro);
|
||||
drm_bo_usage_deref_locked(&bo);
|
||||
out:
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
|
@ -1215,7 +1216,7 @@ static int drm_buffer_object_unmap(struct drm_file * priv, uint32_t handle)
|
|||
* Call struct-sem locked.
|
||||
*/
|
||||
|
||||
static void drm_buffer_user_object_unmap(struct drm_file * priv,
|
||||
static void drm_buffer_user_object_unmap(struct drm_file *file_priv,
|
||||
struct drm_user_object * uo,
|
||||
enum drm_ref_type action)
|
||||
{
|
||||
|
@ -1489,19 +1490,19 @@ static int drm_buffer_object_validate(struct drm_buffer_object * bo,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int drm_bo_handle_validate(struct drm_file * priv,
|
||||
static int drm_bo_handle_validate(struct drm_file *file_priv,
|
||||
uint32_t handle,
|
||||
uint32_t fence_class,
|
||||
uint64_t flags, uint64_t mask, uint32_t hint,
|
||||
struct drm_bo_info_rep *rep)
|
||||
{
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_buffer_object *bo;
|
||||
int ret;
|
||||
int no_wait = hint & DRM_BO_HINT_DONT_BLOCK;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
bo = drm_lookup_buffer_object(priv, handle, 1);
|
||||
bo = drm_lookup_buffer_object(file_priv, handle, 1);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
if (!bo) {
|
||||
return -EINVAL;
|
||||
|
@ -1532,14 +1533,14 @@ static int drm_bo_handle_validate(struct drm_file * priv,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int drm_bo_handle_info(struct drm_file *priv, uint32_t handle,
|
||||
static int drm_bo_handle_info(struct drm_file *file_priv, uint32_t handle,
|
||||
struct drm_bo_info_rep *rep)
|
||||
{
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_buffer_object *bo;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
bo = drm_lookup_buffer_object(priv, handle, 1);
|
||||
bo = drm_lookup_buffer_object(file_priv, handle, 1);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
|
||||
if (!bo) {
|
||||
|
@ -1554,17 +1555,17 @@ static int drm_bo_handle_info(struct drm_file *priv, uint32_t handle,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int drm_bo_handle_wait(struct drm_file *priv, uint32_t handle,
|
||||
static int drm_bo_handle_wait(struct drm_file *file_priv, uint32_t handle,
|
||||
uint32_t hint,
|
||||
struct drm_bo_info_rep *rep)
|
||||
{
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_buffer_object *bo;
|
||||
int no_wait = hint & DRM_BO_HINT_DONT_BLOCK;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
bo = drm_lookup_buffer_object(priv, handle, 1);
|
||||
bo = drm_lookup_buffer_object(file_priv, handle, 1);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
|
||||
if (!bo) {
|
||||
|
@ -1672,14 +1673,15 @@ int drm_buffer_object_create(struct drm_device *dev,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int drm_bo_add_user_object(struct drm_file * priv, struct drm_buffer_object * bo,
|
||||
static int drm_bo_add_user_object(struct drm_file *file_priv,
|
||||
struct drm_buffer_object *bo,
|
||||
int shareable)
|
||||
{
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
ret = drm_add_user_object(priv, &bo->base, shareable);
|
||||
ret = drm_add_user_object(file_priv, &bo->base, shareable);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
@ -1693,9 +1695,9 @@ static int drm_bo_add_user_object(struct drm_file * priv, struct drm_buffer_obje
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int drm_bo_lock_test(struct drm_device * dev, struct file *filp)
|
||||
static int drm_bo_lock_test(struct drm_device * dev, struct drm_file *file_priv)
|
||||
{
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1724,10 +1726,10 @@ int drm_bo_op_ioctl(DRM_IOCTL_ARGS)
|
|||
ret = 0;
|
||||
switch (req->op) {
|
||||
case drm_bo_validate:
|
||||
ret = drm_bo_lock_test(dev, filp);
|
||||
ret = drm_bo_lock_test(dev, file_priv);
|
||||
if (ret)
|
||||
break;
|
||||
ret = drm_bo_handle_validate(priv, req->bo_req.handle,
|
||||
ret = drm_bo_handle_validate(file_priv, req->bo_req.handle,
|
||||
req->bo_req.fence_class,
|
||||
req->bo_req.flags,
|
||||
req->bo_req.mask,
|
||||
|
@ -1779,18 +1781,18 @@ int drm_bo_create_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
ret = drm_bo_lock_test(dev, filp);
|
||||
ret = drm_bo_lock_test(dev, file_priv);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = drm_buffer_object_create(priv->head->dev,
|
||||
ret = drm_buffer_object_create(file_priv->head->dev,
|
||||
req->size, req->type, req->mask,
|
||||
req->hint, req->page_alignment,
|
||||
req->buffer_start, &entry);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = drm_bo_add_user_object(priv, entry,
|
||||
ret = drm_bo_add_user_object(file_priv, entry,
|
||||
req->mask & DRM_BO_FLAG_SHAREABLE);
|
||||
if (ret) {
|
||||
drm_bo_usage_deref_unlocked(&entry);
|
||||
|
@ -1822,12 +1824,12 @@ int drm_bo_destroy_ioctl(DRM_IOCTL_ARGS)
|
|||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
uo = drm_lookup_user_object(priv, arg.handle);
|
||||
if (!uo || (uo->type != drm_buffer_type) || uo->owner != priv) {
|
||||
uo = drm_lookup_user_object(file_priv, arg.handle);
|
||||
if (!uo || (uo->type != drm_buffer_type) || uo->owner != file_priv) {
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return -EINVAL;
|
||||
}
|
||||
ret = drm_remove_user_object(priv, uo);
|
||||
ret = drm_remove_user_object(file_priv, uo);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
|
||||
return ret;
|
||||
|
@ -1847,7 +1849,7 @@ int drm_bo_map_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
ret = drm_buffer_object_map(priv, req->handle, req->mask,
|
||||
ret = drm_buffer_object_map(file_priv, req->handle, req->mask,
|
||||
req->hint, rep);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -1868,7 +1870,7 @@ int drm_bo_unmap_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
ret = drm_buffer_object_unmap(priv, arg.handle);
|
||||
ret = drm_buffer_object_unmap(file_priv, arg.handle);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1889,12 +1891,12 @@ int drm_bo_reference_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
ret = drm_user_object_ref(priv, req->handle,
|
||||
ret = drm_user_object_ref(file_priv, req->handle,
|
||||
drm_buffer_type, &uo);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = drm_bo_handle_info(priv, req->handle, rep);
|
||||
ret = drm_bo_handle_info(file_priv, req->handle, rep);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -1915,7 +1917,7 @@ int drm_bo_unreference_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
ret = drm_user_object_unref(priv, arg.handle, drm_buffer_type);
|
||||
ret = drm_user_object_unref(file_priv, arg.handle, drm_buffer_type);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1934,7 +1936,7 @@ int drm_bo_info_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
ret = drm_bo_handle_info(priv, req->handle, rep);
|
||||
ret = drm_bo_handle_info(file_priv, req->handle, rep);
|
||||
if (ret)
|
||||
return ret;
|
||||
DRM_COPY_TO_USER_IOCTL((void __user *)data, arg, sizeof(arg));
|
||||
|
@ -1955,7 +1957,7 @@ int drm_bo_wait_idle_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
ret = drm_bo_handle_wait(priv, req->handle,
|
||||
ret = drm_bo_handle_wait(file_priv, req->handle,
|
||||
req->hint, rep);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -2407,7 +2409,7 @@ int drm_mm_takedown_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
mutex_lock(&dev->bm.init_mutex);
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
ret = -EINVAL;
|
||||
|
@ -2448,7 +2450,7 @@ int drm_mm_lock_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
mutex_lock(&dev->bm.init_mutex);
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
ret = drm_bo_lock_mm(dev, arg.mem_type);
|
||||
|
@ -2474,7 +2476,7 @@ int drm_mm_unlock_ioctl(DRM_IOCTL_ARGS)
|
|||
}
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
mutex_lock(&dev->bm.init_mutex);
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
ret = 0;
|
||||
|
|
|
@ -92,7 +92,7 @@ static int drm_map_handle(struct drm_device *dev, struct drm_hash_item *hash,
|
|||
* Ioctl to specify a range of memory that is available for mapping by a non-root process.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a drm_map structure.
|
||||
* \return zero on success or a negative value on error.
|
||||
|
@ -326,19 +326,15 @@ int drm_addmap(struct drm_device *dev, unsigned int offset,
|
|||
|
||||
EXPORT_SYMBOL(drm_addmap);
|
||||
|
||||
int drm_addmap_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_addmap_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_map map;
|
||||
struct drm_map_list *maplist;
|
||||
struct drm_map __user *argp = (void __user *)arg;
|
||||
int err;
|
||||
|
||||
if (!(filp->f_mode & 3))
|
||||
return -EACCES; /* Require read/write */
|
||||
|
||||
if (copy_from_user(&map, argp, sizeof(map))) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
@ -366,7 +362,7 @@ int drm_addmap_ioctl(struct inode *inode, struct file *filp,
|
|||
* isn't in use.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a struct drm_map structure.
|
||||
* \return zero on success or a negative value on error.
|
||||
|
@ -455,11 +451,10 @@ EXPORT_SYMBOL(drm_rmmap);
|
|||
* gets used by drivers that the server doesn't need to care about. This seems
|
||||
* unlikely.
|
||||
*/
|
||||
int drm_rmmap_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_rmmap_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_map request;
|
||||
drm_local_map_t *map = NULL;
|
||||
struct drm_map_list *r_list;
|
||||
|
@ -667,7 +662,7 @@ int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request)
|
|||
buf->waiting = 0;
|
||||
buf->pending = 0;
|
||||
init_waitqueue_head(&buf->dma_wait);
|
||||
buf->filp = NULL;
|
||||
buf->file_priv = NULL;
|
||||
|
||||
buf->dev_priv_size = dev->driver->dev_priv_size;
|
||||
buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS);
|
||||
|
@ -878,7 +873,7 @@ int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request)
|
|||
buf->waiting = 0;
|
||||
buf->pending = 0;
|
||||
init_waitqueue_head(&buf->dma_wait);
|
||||
buf->filp = NULL;
|
||||
buf->file_priv = NULL;
|
||||
|
||||
buf->dev_priv_size = dev->driver->dev_priv_size;
|
||||
buf->dev_private = drm_alloc(buf->dev_priv_size,
|
||||
|
@ -1056,7 +1051,7 @@ static int drm_addbufs_sg(struct drm_device *dev, struct drm_buf_desc * request)
|
|||
buf->waiting = 0;
|
||||
buf->pending = 0;
|
||||
init_waitqueue_head(&buf->dma_wait);
|
||||
buf->filp = NULL;
|
||||
buf->file_priv = NULL;
|
||||
|
||||
buf->dev_priv_size = dev->driver->dev_priv_size;
|
||||
buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS);
|
||||
|
@ -1217,7 +1212,7 @@ int drm_addbufs_fb(struct drm_device *dev, struct drm_buf_desc *request)
|
|||
buf->waiting = 0;
|
||||
buf->pending = 0;
|
||||
init_waitqueue_head(&buf->dma_wait);
|
||||
buf->filp = NULL;
|
||||
buf->file_priv = NULL;
|
||||
|
||||
buf->dev_priv_size = dev->driver->dev_priv_size;
|
||||
buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS);
|
||||
|
@ -1282,7 +1277,7 @@ EXPORT_SYMBOL(drm_addbufs_fb);
|
|||
* Add buffers for DMA transfers (ioctl).
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a struct drm_buf_desc request.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -1292,12 +1287,11 @@ EXPORT_SYMBOL(drm_addbufs_fb);
|
|||
* addbufs_sg() or addbufs_pci() for AGP, scatter-gather or consistent
|
||||
* PCI memory respectively.
|
||||
*/
|
||||
int drm_addbufs(struct inode *inode, struct file *filp,
|
||||
int drm_addbufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_buf_desc request;
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
|
||||
|
@ -1336,7 +1330,7 @@ int drm_addbufs(struct inode *inode, struct file *filp,
|
|||
* large buffers can be used for image transfer).
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a drm_buf_info structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -1345,11 +1339,10 @@ int drm_addbufs(struct inode *inode, struct file *filp,
|
|||
* lock, preventing of allocating more buffers after this call. Information
|
||||
* about each requested buffer is then copied into user space.
|
||||
*/
|
||||
int drm_infobufs(struct inode *inode, struct file *filp,
|
||||
int drm_infobufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
struct drm_buf_info request;
|
||||
struct drm_buf_info __user *argp = (void __user *)arg;
|
||||
|
@ -1423,7 +1416,7 @@ int drm_infobufs(struct inode *inode, struct file *filp,
|
|||
* Specifies a low and high water mark for buffer allocation
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg a pointer to a drm_buf_desc structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -1433,11 +1426,10 @@ int drm_infobufs(struct inode *inode, struct file *filp,
|
|||
*
|
||||
* \note This ioctl is deprecated and mostly never used.
|
||||
*/
|
||||
int drm_markbufs(struct inode *inode, struct file *filp,
|
||||
int drm_markbufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
struct drm_buf_desc request;
|
||||
int order;
|
||||
|
@ -1475,7 +1467,7 @@ int drm_markbufs(struct inode *inode, struct file *filp,
|
|||
* Unreserve the buffers in list, previously reserved using drmDMA.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a drm_buf_free structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -1483,11 +1475,10 @@ int drm_markbufs(struct inode *inode, struct file *filp,
|
|||
* Calls free_buffer() for each used buffer.
|
||||
* This function is primarily used for debugging.
|
||||
*/
|
||||
int drm_freebufs(struct inode *inode, struct file *filp,
|
||||
int drm_freebufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
struct drm_buf_free request;
|
||||
int i;
|
||||
|
@ -1514,7 +1505,7 @@ int drm_freebufs(struct inode *inode, struct file *filp,
|
|||
return -EINVAL;
|
||||
}
|
||||
buf = dma->buflist[idx];
|
||||
if (buf->filp != filp) {
|
||||
if (buf->file_priv != file_priv) {
|
||||
DRM_ERROR("Process %d freeing buffer not owned\n",
|
||||
current->pid);
|
||||
return -EINVAL;
|
||||
|
@ -1529,7 +1520,7 @@ int drm_freebufs(struct inode *inode, struct file *filp,
|
|||
* Maps all of the DMA buffers into client-virtual space (ioctl).
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg pointer to a drm_buf_map structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -1539,11 +1530,10 @@ int drm_freebufs(struct inode *inode, struct file *filp,
|
|||
* offset equal to 0, which drm_mmap() interpretes as PCI buffers and calls
|
||||
* drm_mmap_dma().
|
||||
*/
|
||||
int drm_mapbufs(struct inode *inode, struct file *filp,
|
||||
int drm_mapbufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
struct drm_buf_map __user *argp = (void __user *)arg;
|
||||
int retcode = 0;
|
||||
|
@ -1584,14 +1574,14 @@ int drm_mapbufs(struct inode *inode, struct file *filp,
|
|||
goto done;
|
||||
}
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
virtual = do_mmap(filp, 0, map->size,
|
||||
virtual = do_mmap(file_priv->filp, 0, map->size,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED,
|
||||
token);
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
} else {
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
virtual = do_mmap(filp, 0, dma->byte_count,
|
||||
virtual = do_mmap(file_priv->filp, 0, dma->byte_count,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED, 0);
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
|
|
|
@ -132,7 +132,7 @@ void drm_ctxbitmap_cleanup(struct drm_device *dev)
|
|||
* Get per-context SAREA.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument pointing to a drm_ctx_priv_map structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -140,11 +140,10 @@ void drm_ctxbitmap_cleanup(struct drm_device *dev)
|
|||
* Gets the map from drm_device::ctx_idr with the handle specified and
|
||||
* returns its handle.
|
||||
*/
|
||||
int drm_getsareactx(struct inode *inode, struct file *filp,
|
||||
int drm_getsareactx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_ctx_priv_map __user *argp = (void __user *)arg;
|
||||
struct drm_ctx_priv_map request;
|
||||
struct drm_map *map;
|
||||
|
@ -183,7 +182,7 @@ int drm_getsareactx(struct inode *inode, struct file *filp,
|
|||
* Set per-context SAREA.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument pointing to a drm_ctx_priv_map structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -191,11 +190,10 @@ int drm_getsareactx(struct inode *inode, struct file *filp,
|
|||
* Searches the mapping specified in \p arg and update the entry in
|
||||
* drm_device::ctx_idr with it.
|
||||
*/
|
||||
int drm_setsareactx(struct inode *inode, struct file *filp,
|
||||
int drm_setsareactx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_ctx_priv_map request;
|
||||
struct drm_map *map = NULL;
|
||||
struct drm_map_list *r_list = NULL;
|
||||
|
@ -293,12 +291,12 @@ static int drm_context_switch_complete(struct drm_device *dev, int new)
|
|||
* Reserve contexts.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument pointing to a drm_ctx_res structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*/
|
||||
int drm_resctx(struct inode *inode, struct file *filp,
|
||||
int drm_resctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_ctx_res res;
|
||||
|
@ -328,18 +326,17 @@ int drm_resctx(struct inode *inode, struct file *filp,
|
|||
* Add context.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument pointing to a drm_ctx structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*
|
||||
* Get a new handle for the context and copy to userspace.
|
||||
*/
|
||||
int drm_addctx(struct inode *inode, struct file *filp,
|
||||
int drm_addctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_ctx_list *ctx_entry;
|
||||
struct drm_ctx __user *argp = (void __user *)arg;
|
||||
struct drm_ctx ctx;
|
||||
|
@ -375,7 +372,7 @@ int drm_addctx(struct inode *inode, struct file *filp,
|
|||
|
||||
INIT_LIST_HEAD(&ctx_entry->head);
|
||||
ctx_entry->handle = ctx.handle;
|
||||
ctx_entry->tag = priv;
|
||||
ctx_entry->tag = file_priv;
|
||||
|
||||
mutex_lock(&dev->ctxlist_mutex);
|
||||
list_add(&ctx_entry->head, &dev->ctxlist);
|
||||
|
@ -387,7 +384,7 @@ int drm_addctx(struct inode *inode, struct file *filp,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int drm_modctx(struct inode *inode, struct file *filp,
|
||||
int drm_modctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
/* This does nothing */
|
||||
|
@ -398,12 +395,12 @@ int drm_modctx(struct inode *inode, struct file *filp,
|
|||
* Get context.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument pointing to a drm_ctx structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*/
|
||||
int drm_getctx(struct inode *inode, struct file *filp,
|
||||
int drm_getctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_ctx __user *argp = (void __user *)arg;
|
||||
|
@ -424,18 +421,17 @@ int drm_getctx(struct inode *inode, struct file *filp,
|
|||
* Switch context.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument pointing to a drm_ctx structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*
|
||||
* Calls context_switch().
|
||||
*/
|
||||
int drm_switchctx(struct inode *inode, struct file *filp,
|
||||
int drm_switchctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_ctx ctx;
|
||||
|
||||
if (copy_from_user(&ctx, (struct drm_ctx __user *) arg, sizeof(ctx)))
|
||||
|
@ -449,18 +445,17 @@ int drm_switchctx(struct inode *inode, struct file *filp,
|
|||
* New context.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument pointing to a drm_ctx structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*
|
||||
* Calls context_switch_complete().
|
||||
*/
|
||||
int drm_newctx(struct inode *inode, struct file *filp,
|
||||
int drm_newctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_ctx ctx;
|
||||
|
||||
if (copy_from_user(&ctx, (struct drm_ctx __user *) arg, sizeof(ctx)))
|
||||
|
@ -476,18 +471,17 @@ int drm_newctx(struct inode *inode, struct file *filp,
|
|||
* Remove context.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument pointing to a drm_ctx structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*
|
||||
* If not the special kernel context, calls ctxbitmap_free() to free the specified context.
|
||||
*/
|
||||
int drm_rmctx(struct inode *inode, struct file *filp,
|
||||
int drm_rmctx(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_ctx ctx;
|
||||
|
||||
if (copy_from_user(&ctx, (struct drm_ctx __user *) arg, sizeof(ctx)))
|
||||
|
@ -495,7 +489,7 @@ int drm_rmctx(struct inode *inode, struct file *filp,
|
|||
|
||||
DRM_DEBUG("%d\n", ctx.handle);
|
||||
if (ctx.handle == DRM_KERNEL_CONTEXT + 1) {
|
||||
priv->remove_auth_on_close = 1;
|
||||
file_priv->remove_auth_on_close = 1;
|
||||
}
|
||||
if (ctx.handle != DRM_KERNEL_CONTEXT) {
|
||||
if (dev->driver->context_dtor)
|
||||
|
|
|
@ -136,7 +136,7 @@ void drm_free_buffer(struct drm_device * dev, struct drm_buf * buf)
|
|||
|
||||
buf->waiting = 0;
|
||||
buf->pending = 0;
|
||||
buf->filp = NULL;
|
||||
buf->file_priv = NULL;
|
||||
buf->used = 0;
|
||||
|
||||
if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE)
|
||||
|
@ -148,11 +148,12 @@ void drm_free_buffer(struct drm_device * dev, struct drm_buf * buf)
|
|||
/**
|
||||
* Reclaim the buffers.
|
||||
*
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
*
|
||||
* Frees each buffer associated with \p filp not already on the hardware.
|
||||
* Frees each buffer associated with \p file_priv not already on the hardware.
|
||||
*/
|
||||
void drm_core_reclaim_buffers(struct drm_device *dev, struct file *filp)
|
||||
void drm_core_reclaim_buffers(struct drm_device *dev,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
int i;
|
||||
|
@ -160,7 +161,7 @@ void drm_core_reclaim_buffers(struct drm_device *dev, struct file *filp)
|
|||
if (!dma)
|
||||
return;
|
||||
for (i = 0; i < dma->buf_count; i++) {
|
||||
if (dma->buflist[i]->filp == filp) {
|
||||
if (dma->buflist[i]->file_priv == file_priv) {
|
||||
switch (dma->buflist[i]->list) {
|
||||
case DRM_LIST_NONE:
|
||||
drm_free_buffer(dev, dma->buflist[i]);
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
static void drm_cleanup(struct drm_device * dev);
|
||||
int drm_fb_loaded = 0;
|
||||
|
||||
static int drm_version(struct inode *inode, struct file *filp,
|
||||
static int drm_version(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
/** Ioctl table */
|
||||
|
@ -276,7 +276,7 @@ int drm_lastclose(struct drm_device * dev)
|
|||
|
||||
if (dev->lock.hw_lock) {
|
||||
dev->sigdata.lock = dev->lock.hw_lock = NULL; /* SHM removed */
|
||||
dev->lock.filp = NULL;
|
||||
dev->lock.file_priv = NULL;
|
||||
wake_up_interruptible(&dev->lock.lock_queue);
|
||||
}
|
||||
dev->dev_mapping = NULL;
|
||||
|
@ -538,18 +538,17 @@ module_exit(drm_core_exit);
|
|||
* Get version information
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_version structure.
|
||||
* \return zero on success or negative number on failure.
|
||||
*
|
||||
* Fills in the version information in \p arg.
|
||||
*/
|
||||
static int drm_version(struct inode *inode, struct file *filp,
|
||||
static int drm_version(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_version __user *argp = (void __user *)arg;
|
||||
struct drm_version version;
|
||||
int len;
|
||||
|
@ -573,7 +572,7 @@ static int drm_version(struct inode *inode, struct file *filp,
|
|||
* Called whenever a process performs an ioctl on /dev/drm.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument.
|
||||
* \return zero on success or negative number on failure.
|
||||
|
@ -584,8 +583,8 @@ static int drm_version(struct inode *inode, struct file *filp,
|
|||
int drm_ioctl(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_file *file_priv = filp->private_data;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_ioctl_desc *ioctl;
|
||||
drm_ioctl_t *func;
|
||||
unsigned int nr = DRM_IOCTL_NR(cmd);
|
||||
|
@ -593,11 +592,11 @@ int drm_ioctl(struct inode *inode, struct file *filp,
|
|||
|
||||
atomic_inc(&dev->ioctl_count);
|
||||
atomic_inc(&dev->counts[_DRM_STAT_IOCTLS]);
|
||||
++priv->ioctl_count;
|
||||
++file_priv->ioctl_count;
|
||||
|
||||
DRM_DEBUG("pid=%d, cmd=0x%02x, nr=0x%02x, dev 0x%lx, auth=%d\n",
|
||||
current->pid, cmd, nr, (long)old_encode_dev(priv->head->device),
|
||||
priv->authenticated);
|
||||
current->pid, cmd, nr, (long)old_encode_dev(file_priv->head->device),
|
||||
file_priv->authenticated);
|
||||
|
||||
if ((nr >= DRM_CORE_IOCTL_COUNT) &&
|
||||
((nr < DRM_COMMAND_BASE) || (nr >= DRM_COMMAND_END)))
|
||||
|
@ -619,11 +618,11 @@ int drm_ioctl(struct inode *inode, struct file *filp,
|
|||
DRM_DEBUG("no function\n");
|
||||
retcode = -EINVAL;
|
||||
} else if (((ioctl->flags & DRM_ROOT_ONLY) && !capable(CAP_SYS_ADMIN)) ||
|
||||
((ioctl->flags & DRM_AUTH) && !priv->authenticated) ||
|
||||
((ioctl->flags & DRM_MASTER) && !priv->master)) {
|
||||
((ioctl->flags & DRM_AUTH) && !file_priv->authenticated) ||
|
||||
((ioctl->flags & DRM_MASTER) && !file_priv->master)) {
|
||||
retcode = -EACCES;
|
||||
} else {
|
||||
retcode = func(inode, filp, cmd, arg);
|
||||
retcode = func(inode, file_priv, cmd, arg);
|
||||
}
|
||||
err_i1:
|
||||
atomic_dec(&dev->ioctl_count);
|
||||
|
|
|
@ -582,12 +582,12 @@ int drm_fence_create_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
if (arg.flags & DRM_FENCE_FLAG_EMIT)
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
ret = drm_fence_object_create(dev, arg.class,
|
||||
arg.type, arg.flags, &fence);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = drm_fence_add_user_object(priv, fence,
|
||||
ret = drm_fence_add_user_object(file_priv, fence,
|
||||
arg.flags &
|
||||
DRM_FENCE_FLAG_SHAREABLE);
|
||||
if (ret) {
|
||||
|
@ -630,12 +630,12 @@ int drm_fence_destroy_ioctl(DRM_IOCTL_ARGS)
|
|||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
uo = drm_lookup_user_object(priv, arg.handle);
|
||||
if (!uo || (uo->type != drm_fence_type) || uo->owner != priv) {
|
||||
uo = drm_lookup_user_object(file_priv, arg.handle);
|
||||
if (!uo || (uo->type != drm_fence_type) || uo->owner != file_priv) {
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return -EINVAL;
|
||||
}
|
||||
ret = drm_remove_user_object(priv, uo);
|
||||
ret = drm_remove_user_object(file_priv, uo);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
@ -658,10 +658,10 @@ int drm_fence_reference_ioctl(DRM_IOCTL_ARGS)
|
|||
}
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
ret = drm_user_object_ref(priv, arg.handle, drm_fence_type, &uo);
|
||||
ret = drm_user_object_ref(file_priv, arg.handle, drm_fence_type, &uo);
|
||||
if (ret)
|
||||
return ret;
|
||||
fence = drm_lookup_fence_object(priv, arg.handle);
|
||||
fence = drm_lookup_fence_object(file_priv, arg.handle);
|
||||
|
||||
read_lock_irqsave(&fm->lock, flags);
|
||||
arg.class = fence->class;
|
||||
|
@ -689,7 +689,7 @@ int drm_fence_unreference_ioctl(DRM_IOCTL_ARGS)
|
|||
}
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
return drm_user_object_unref(priv, arg.handle, drm_fence_type);
|
||||
return drm_user_object_unref(file_priv, arg.handle, drm_fence_type);
|
||||
}
|
||||
|
||||
int drm_fence_signaled_ioctl(DRM_IOCTL_ARGS)
|
||||
|
@ -709,7 +709,7 @@ int drm_fence_signaled_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
fence = drm_lookup_fence_object(priv, arg.handle);
|
||||
fence = drm_lookup_fence_object(file_priv, arg.handle);
|
||||
if (!fence)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -741,7 +741,7 @@ int drm_fence_flush_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
fence = drm_lookup_fence_object(priv, arg.handle);
|
||||
fence = drm_lookup_fence_object(file_priv, arg.handle);
|
||||
if (!fence)
|
||||
return -EINVAL;
|
||||
ret = drm_fence_object_flush(fence, arg.type);
|
||||
|
@ -775,7 +775,7 @@ int drm_fence_wait_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
fence = drm_lookup_fence_object(priv, arg.handle);
|
||||
fence = drm_lookup_fence_object(file_priv, arg.handle);
|
||||
if (!fence)
|
||||
return -EINVAL;
|
||||
ret = drm_fence_object_wait(fence,
|
||||
|
@ -811,8 +811,8 @@ int drm_fence_emit_ioctl(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
fence = drm_lookup_fence_object(priv, arg.handle);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
fence = drm_lookup_fence_object(file_priv, arg.handle);
|
||||
if (!fence)
|
||||
return -EINVAL;
|
||||
ret = drm_fence_object_emit(fence, arg.flags, arg.class,
|
||||
|
@ -850,12 +850,12 @@ int drm_fence_buffers_ioctl(DRM_IOCTL_ARGS)
|
|||
DRM_ERROR("Buffer object manager is not initialized\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
ret = drm_fence_buffer_objects(priv, NULL, arg.flags,
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
ret = drm_fence_buffer_objects(file_priv, NULL, arg.flags,
|
||||
NULL, &fence);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = drm_fence_add_user_object(priv, fence,
|
||||
ret = drm_fence_add_user_object(file_priv, fence,
|
||||
arg.flags &
|
||||
DRM_FENCE_FLAG_SHAREABLE);
|
||||
if (ret)
|
||||
|
|
|
@ -252,6 +252,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
|
|||
|
||||
memset(priv, 0, sizeof(*priv));
|
||||
filp->private_data = priv;
|
||||
priv->filp = filp;
|
||||
priv->uid = current->euid;
|
||||
priv->pid = current->pid;
|
||||
priv->minor = minor;
|
||||
|
@ -376,7 +377,7 @@ static void drm_object_release(struct file *filp) {
|
|||
* Release file.
|
||||
*
|
||||
* \param inode device inode
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*
|
||||
* If the hardware lock is held then free it, and take it again for the kernel
|
||||
|
@ -386,29 +387,28 @@ static void drm_object_release(struct file *filp) {
|
|||
*/
|
||||
int drm_release(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev;
|
||||
struct drm_file *file_priv = filp->private_data;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
int retcode = 0;
|
||||
|
||||
lock_kernel();
|
||||
dev = priv->head->dev;
|
||||
|
||||
DRM_DEBUG("open_count = %d\n", dev->open_count);
|
||||
|
||||
if (dev->driver->preclose)
|
||||
dev->driver->preclose(dev, filp);
|
||||
dev->driver->preclose(dev, file_priv);
|
||||
|
||||
/* ========================================================
|
||||
* Begin inline drm_release
|
||||
*/
|
||||
|
||||
DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n",
|
||||
current->pid, (long)old_encode_dev(priv->head->device),
|
||||
current->pid, (long)old_encode_dev(dev),
|
||||
dev->open_count);
|
||||
|
||||
if (dev->driver->reclaim_buffers_locked && dev->lock.hw_lock) {
|
||||
if (drm_i_have_hw_lock(filp)) {
|
||||
dev->driver->reclaim_buffers_locked(dev, filp);
|
||||
if (drm_i_have_hw_lock(file_priv)) {
|
||||
dev->driver->reclaim_buffers_locked(dev, file_priv);
|
||||
} else {
|
||||
unsigned long _end=jiffies + 3*DRM_HZ;
|
||||
int locked = 0;
|
||||
|
@ -434,7 +434,7 @@ int drm_release(struct inode *inode, struct file *filp)
|
|||
"\tI will go on reclaiming the buffers anyway.\n");
|
||||
}
|
||||
|
||||
dev->driver->reclaim_buffers_locked(dev, filp);
|
||||
dev->driver->reclaim_buffers_locked(dev, file_priv);
|
||||
drm_idlelock_release(&dev->lock);
|
||||
}
|
||||
}
|
||||
|
@ -442,12 +442,12 @@ int drm_release(struct inode *inode, struct file *filp)
|
|||
if (dev->driver->reclaim_buffers_idlelocked && dev->lock.hw_lock) {
|
||||
|
||||
drm_idlelock_take(&dev->lock);
|
||||
dev->driver->reclaim_buffers_idlelocked(dev, filp);
|
||||
dev->driver->reclaim_buffers_idlelocked(dev, file_priv);
|
||||
drm_idlelock_release(&dev->lock);
|
||||
|
||||
}
|
||||
|
||||
if (drm_i_have_hw_lock(filp)) {
|
||||
if (drm_i_have_hw_lock(file_priv)) {
|
||||
DRM_DEBUG("File %p released, freeing lock for context %d\n",
|
||||
filp, _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
|
||||
|
||||
|
@ -458,7 +458,7 @@ int drm_release(struct inode *inode, struct file *filp)
|
|||
|
||||
if (drm_core_check_feature(dev, DRIVER_HAVE_DMA) &&
|
||||
!dev->driver->reclaim_buffers_locked) {
|
||||
dev->driver->reclaim_buffers(dev, filp);
|
||||
dev->driver->reclaim_buffers(dev, file_priv);
|
||||
}
|
||||
|
||||
drm_fasync(-1, filp, 0);
|
||||
|
@ -469,7 +469,7 @@ int drm_release(struct inode *inode, struct file *filp)
|
|||
struct drm_ctx_list *pos, *n;
|
||||
|
||||
list_for_each_entry_safe(pos, n, &dev->ctxlist, head) {
|
||||
if (pos->tag == priv &&
|
||||
if (pos->tag == file_priv &&
|
||||
pos->handle != DRM_KERNEL_CONTEXT) {
|
||||
if (dev->driver->context_dtor)
|
||||
dev->driver->context_dtor(dev,
|
||||
|
@ -487,18 +487,18 @@ int drm_release(struct inode *inode, struct file *filp)
|
|||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
drm_object_release(filp);
|
||||
if (priv->remove_auth_on_close == 1) {
|
||||
if (file_priv->remove_auth_on_close == 1) {
|
||||
struct drm_file *temp;
|
||||
|
||||
list_for_each_entry(temp, &dev->filelist, lhead)
|
||||
temp->authenticated = 0;
|
||||
}
|
||||
list_del(&priv->lhead);
|
||||
list_del(&file_priv->lhead);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
|
||||
if (dev->driver->postclose)
|
||||
dev->driver->postclose(dev, priv);
|
||||
drm_free(priv, sizeof(*priv), DRM_MEM_FILES);
|
||||
dev->driver->postclose(dev, file_priv);
|
||||
drm_free(file_priv, sizeof(*file_priv), DRM_MEM_FILES);
|
||||
|
||||
/* ========================================================
|
||||
* End inline drm_release
|
||||
|
|
|
@ -1040,7 +1040,7 @@ drm_ioctl_compat_t *drm_compat_ioctls[] = {
|
|||
* Called whenever a 32-bit process running under a 64-bit kernel
|
||||
* performs an ioctl on /dev/drm.
|
||||
*
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument.
|
||||
* \return zero on success or negative number on failure.
|
||||
|
|
|
@ -42,18 +42,17 @@
|
|||
* Get the bus id.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_unique structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*
|
||||
* Copies the bus id from drm_device::unique into user space.
|
||||
*/
|
||||
int drm_getunique(struct inode *inode, struct file *filp,
|
||||
int drm_getunique(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_unique __user *argp = (void __user *)arg;
|
||||
struct drm_unique u;
|
||||
|
||||
|
@ -73,7 +72,7 @@ int drm_getunique(struct inode *inode, struct file *filp,
|
|||
* Set the bus id.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_unique structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -83,11 +82,10 @@ int drm_getunique(struct inode *inode, struct file *filp,
|
|||
* in interface version 1.1 and will return EBUSY when setversion has requested
|
||||
* version 1.1 or greater.
|
||||
*/
|
||||
int drm_setunique(struct inode *inode, struct file *filp,
|
||||
int drm_setunique(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_unique u;
|
||||
int domain, bus, slot, func, ret;
|
||||
|
||||
|
@ -167,7 +165,7 @@ static int drm_set_busid(struct drm_device * dev)
|
|||
* Get a mapping information.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_map structure.
|
||||
*
|
||||
|
@ -176,11 +174,10 @@ static int drm_set_busid(struct drm_device * dev)
|
|||
* Searches for the mapping with the specified offset and copies its information
|
||||
* into userspace
|
||||
*/
|
||||
int drm_getmap(struct inode *inode, struct file *filp,
|
||||
int drm_getmap(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_map __user *argp = (void __user *)arg;
|
||||
struct drm_map map;
|
||||
struct drm_map_list *r_list = NULL;
|
||||
|
@ -228,7 +225,7 @@ int drm_getmap(struct inode *inode, struct file *filp,
|
|||
* Get client information.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_client structure.
|
||||
*
|
||||
|
@ -237,11 +234,10 @@ int drm_getmap(struct inode *inode, struct file *filp,
|
|||
* Searches for the client with the specified index and copies its information
|
||||
* into userspace
|
||||
*/
|
||||
int drm_getclient(struct inode *inode, struct file *filp,
|
||||
int drm_getclient(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_client __user *argp = (struct drm_client __user *)arg;
|
||||
struct drm_client client;
|
||||
struct drm_file *pt;
|
||||
|
@ -280,17 +276,16 @@ int drm_getclient(struct inode *inode, struct file *filp,
|
|||
* Get statistics information.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_stats structure.
|
||||
*
|
||||
* \return zero on success or a negative number on failure.
|
||||
*/
|
||||
int drm_getstats(struct inode *inode, struct file *filp,
|
||||
int drm_getstats(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_stats stats;
|
||||
int i;
|
||||
|
||||
|
@ -320,7 +315,7 @@ int drm_getstats(struct inode *inode, struct file *filp,
|
|||
* Setversion ioctl.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_lock structure.
|
||||
* \return zero on success or negative number on failure.
|
||||
|
@ -372,7 +367,7 @@ int drm_setversion(DRM_IOCTL_ARGS)
|
|||
}
|
||||
|
||||
/** No-op ioctl. */
|
||||
int drm_noop(struct inode *inode, struct file *filp, unsigned int cmd,
|
||||
int drm_noop(struct inode *inode, struct drm_file *file_priv, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
DRM_DEBUG("\n");
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
* Get interrupt from bus id.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_irq_busid structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -50,11 +50,10 @@
|
|||
* This IOCTL is deprecated, and will now return EINVAL for any busid not equal
|
||||
* to that of the device that this DRM instance attached to.
|
||||
*/
|
||||
int drm_irq_by_busid(struct inode *inode, struct file *filp,
|
||||
int drm_irq_by_busid(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_irq_busid __user *argp = (void __user *)arg;
|
||||
struct drm_irq_busid p;
|
||||
|
||||
|
@ -185,18 +184,17 @@ EXPORT_SYMBOL(drm_irq_uninstall);
|
|||
* IRQ control ioctl.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_control structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*
|
||||
* Calls irq_install() or irq_uninstall() according to \p arg.
|
||||
*/
|
||||
int drm_control(struct inode *inode, struct file *filp,
|
||||
int drm_control(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_control ctl;
|
||||
|
||||
/* if we haven't irq we fallback for compatibility reasons - this used to be a separate function in drm_dma.h */
|
||||
|
@ -225,7 +223,7 @@ int drm_control(struct inode *inode, struct file *filp,
|
|||
* Wait for VBLANK.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param data user argument, pointing to a drm_wait_vblank structure.
|
||||
* \return zero on success or a negative number on failure.
|
||||
|
@ -242,8 +240,7 @@ int drm_control(struct inode *inode, struct file *filp,
|
|||
*/
|
||||
int drm_wait_vblank(DRM_IOCTL_ARGS)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
union drm_wait_vblank __user *argp = (void __user *)data;
|
||||
union drm_wait_vblank vblwait;
|
||||
struct timeval now;
|
||||
|
|
|
@ -41,23 +41,22 @@ static int drm_notifier(void *priv);
|
|||
* Lock ioctl.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_lock structure.
|
||||
* \return zero on success or negative number on failure.
|
||||
*
|
||||
* Add the current task to the lock wait queue, and attempt to take to lock.
|
||||
*/
|
||||
int drm_lock(struct inode *inode, struct file *filp,
|
||||
int drm_lock(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
DECLARE_WAITQUEUE(entry, current);
|
||||
struct drm_lock lock;
|
||||
int ret = 0;
|
||||
|
||||
++priv->lock_count;
|
||||
++file_priv->lock_count;
|
||||
|
||||
if (copy_from_user(&lock, (struct drm_lock __user *) arg, sizeof(lock)))
|
||||
return -EFAULT;
|
||||
|
@ -88,7 +87,7 @@ int drm_lock(struct inode *inode, struct file *filp,
|
|||
break;
|
||||
}
|
||||
if (drm_lock_take(&dev->lock, lock.context)) {
|
||||
dev->lock.filp = filp;
|
||||
dev->lock.file_priv = file_priv;
|
||||
dev->lock.lock_time = jiffies;
|
||||
atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
|
||||
break; /* Got lock */
|
||||
|
@ -142,18 +141,17 @@ int drm_lock(struct inode *inode, struct file *filp,
|
|||
* Unlock ioctl.
|
||||
*
|
||||
* \param inode device inode.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param cmd command.
|
||||
* \param arg user argument, pointing to a drm_lock structure.
|
||||
* \return zero on success or negative number on failure.
|
||||
*
|
||||
* Transfer and free the lock.
|
||||
*/
|
||||
int drm_unlock(struct inode *inode, struct file *filp,
|
||||
int drm_unlock(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_lock lock;
|
||||
unsigned long irqflags;
|
||||
|
||||
|
@ -258,7 +256,7 @@ static int drm_lock_transfer(struct drm_lock_data *lock_data,
|
|||
unsigned int old, new, prev;
|
||||
volatile unsigned int *lock = &lock_data->hw_lock->lock;
|
||||
|
||||
lock_data->filp = NULL;
|
||||
lock_data->file_priv = NULL;
|
||||
do {
|
||||
old = *lock;
|
||||
new = context | _DRM_LOCK_HELD;
|
||||
|
@ -391,13 +389,13 @@ void drm_idlelock_release(struct drm_lock_data *lock_data)
|
|||
EXPORT_SYMBOL(drm_idlelock_release);
|
||||
|
||||
|
||||
int drm_i_have_hw_lock(struct file *filp)
|
||||
int drm_i_have_hw_lock(struct drm_file *file_priv)
|
||||
{
|
||||
DRM_DEVICE;
|
||||
|
||||
return (priv->lock_count && dev->lock.hw_lock &&
|
||||
return (file_priv->lock_count && dev->lock.hw_lock &&
|
||||
_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) &&
|
||||
dev->lock.filp == filp);
|
||||
dev->lock.file_priv == file_priv);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(drm_i_have_hw_lock);
|
||||
|
|
|
@ -6,10 +6,8 @@
|
|||
#include <linux/interrupt.h> /* For task queue support */
|
||||
#include <linux/delay.h>
|
||||
|
||||
/** File pointer type */
|
||||
#define DRMFILE struct file *
|
||||
/** Ioctl arguments */
|
||||
#define DRM_IOCTL_ARGS struct inode *inode, struct file *filp, unsigned int cmd, unsigned long data
|
||||
#define DRM_IOCTL_ARGS struct inode *inode, struct drm_file *file_priv, unsigned int cmd, unsigned long data
|
||||
/** Current process ID */
|
||||
#define DRM_CURRENTPID current->pid
|
||||
#define DRM_SUSER(p) capable(CAP_SYS_ADMIN)
|
||||
|
@ -51,8 +49,7 @@
|
|||
/** Read/write memory barrier */
|
||||
#define DRM_MEMORYBARRIER() mb()
|
||||
/** DRM device local declaration */
|
||||
#define DRM_DEVICE struct drm_file *priv = filp->private_data; \
|
||||
struct drm_device *dev = priv->head->dev
|
||||
#define DRM_DEVICE struct drm_device *dev = file_priv->head->dev
|
||||
|
||||
/** IRQ handler arguments and return type and values */
|
||||
#define DRM_IRQ_ARGS int irq, void *arg
|
||||
|
@ -116,8 +113,6 @@ static __inline__ int mtrr_del(int reg, unsigned long base, unsigned long size)
|
|||
#define DRM_GET_USER_UNCHECKED(val, uaddr) \
|
||||
__get_user(val, uaddr)
|
||||
|
||||
#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) _priv = _filp->private_data
|
||||
|
||||
#define DRM_HZ HZ
|
||||
|
||||
#define DRM_WAIT_ON( ret, queue, timeout, condition ) \
|
||||
|
|
|
@ -187,10 +187,10 @@ int drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather * request)
|
|||
}
|
||||
EXPORT_SYMBOL(drm_sg_alloc);
|
||||
|
||||
int drm_sg_alloc_ioctl(struct inode *inode, struct file *filp,
|
||||
int drm_sg_alloc_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_scatter_gather __user *argp = (void __user *)arg;
|
||||
struct drm_scatter_gather request;
|
||||
int ret;
|
||||
|
@ -198,11 +198,11 @@ int drm_sg_alloc_ioctl(struct inode *inode, struct file *filp,
|
|||
if (copy_from_user(&request, argp, sizeof(request)))
|
||||
return -EFAULT;
|
||||
|
||||
ret = drm_sg_alloc(priv->head->dev, &request);
|
||||
ret = drm_sg_alloc(dev, &request);
|
||||
if ( ret ) return ret;
|
||||
|
||||
if (copy_to_user(argp, &request, sizeof(request))) {
|
||||
drm_sg_cleanup(priv->head->dev->sg);
|
||||
drm_sg_cleanup(dev->sg);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
|
@ -211,11 +211,10 @@ int drm_sg_alloc_ioctl(struct inode *inode, struct file *filp,
|
|||
|
||||
}
|
||||
|
||||
int drm_sg_free(struct inode *inode, struct file *filp,
|
||||
int drm_sg_free(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_scatter_gather request;
|
||||
struct drm_sg_mem *entry;
|
||||
|
||||
|
|
|
@ -477,7 +477,7 @@ static void drm_vm_close(struct vm_area_struct *vma)
|
|||
/**
|
||||
* mmap DMA memory.
|
||||
*
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param vma virtual memory area.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*
|
||||
|
@ -543,7 +543,7 @@ EXPORT_SYMBOL(drm_core_get_reg_ofs);
|
|||
/**
|
||||
* mmap DMA memory.
|
||||
*
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param vma virtual memory area.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*
|
||||
|
@ -865,7 +865,7 @@ static struct vm_operations_struct drm_bo_vm_ops = {
|
|||
* mmap buffer object memory.
|
||||
*
|
||||
* \param vma virtual memory area.
|
||||
* \param filp file pointer.
|
||||
* \param file_priv DRM file private.
|
||||
* \param map The buffer object drm map.
|
||||
* \return zero on success or a negative number on failure.
|
||||
*/
|
||||
|
|
|
@ -139,10 +139,9 @@ static const struct file_operations i810_buffer_fops = {
|
|||
.fasync = drm_fasync,
|
||||
};
|
||||
|
||||
static int i810_map_buffer(struct drm_buf * buf, struct file *filp)
|
||||
static int i810_map_buffer(struct drm_buf * buf, struct drm_file *file_priv)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
drm_i810_buf_priv_t *buf_priv = buf->dev_private;
|
||||
drm_i810_private_t *dev_priv = dev->dev_private;
|
||||
const struct file_operations *old_fops;
|
||||
|
@ -152,14 +151,14 @@ static int i810_map_buffer(struct drm_buf * buf, struct file *filp)
|
|||
return -EINVAL;
|
||||
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
old_fops = filp->f_op;
|
||||
filp->f_op = &i810_buffer_fops;
|
||||
old_fops = file_priv->filp->f_op;
|
||||
file_priv->filp->f_op = &i810_buffer_fops;
|
||||
dev_priv->mmap_buffer = buf;
|
||||
buf_priv->virtual = (void *)do_mmap(filp, 0, buf->total,
|
||||
buf_priv->virtual = (void *)do_mmap(file_priv->filp, 0, buf->total,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED, buf->bus_address);
|
||||
dev_priv->mmap_buffer = NULL;
|
||||
filp->f_op = old_fops;
|
||||
file_priv->filp->f_op = old_fops;
|
||||
if (IS_ERR(buf_priv->virtual)) {
|
||||
/* Real error */
|
||||
DRM_ERROR("mmap error\n");
|
||||
|
@ -192,7 +191,7 @@ static int i810_unmap_buffer(struct drm_buf * buf)
|
|||
}
|
||||
|
||||
static int i810_dma_get_buffer(struct drm_device * dev, drm_i810_dma_t * d,
|
||||
struct file *filp)
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
struct drm_buf *buf;
|
||||
drm_i810_buf_priv_t *buf_priv;
|
||||
|
@ -205,13 +204,13 @@ static int i810_dma_get_buffer(struct drm_device * dev, drm_i810_dma_t * d,
|
|||
return retcode;
|
||||
}
|
||||
|
||||
retcode = i810_map_buffer(buf, filp);
|
||||
retcode = i810_map_buffer(buf, file_priv);
|
||||
if (retcode) {
|
||||
i810_freelist_put(dev, buf);
|
||||
DRM_ERROR("mapbuf failed, retcode %d\n", retcode);
|
||||
return retcode;
|
||||
}
|
||||
buf->filp = filp;
|
||||
buf->file_priv = file_priv;
|
||||
buf_priv = buf->dev_private;
|
||||
d->granted = 1;
|
||||
d->request_idx = buf->idx;
|
||||
|
@ -492,11 +491,10 @@ static int i810_dma_init_compat(drm_i810_init_t * init, unsigned long arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int i810_dma_init(struct inode *inode, struct file *filp,
|
||||
static int i810_dma_init(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
drm_i810_private_t *dev_priv;
|
||||
drm_i810_init_t init;
|
||||
int retcode = 0;
|
||||
|
@ -987,7 +985,8 @@ static int i810_flush_queue(struct drm_device * dev)
|
|||
}
|
||||
|
||||
/* Must be called with the lock held */
|
||||
static void i810_reclaim_buffers(struct drm_device *dev, struct file *filp)
|
||||
static void i810_reclaim_buffers(struct drm_device *dev,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
int i;
|
||||
|
@ -1005,7 +1004,7 @@ static void i810_reclaim_buffers(struct drm_device *dev, struct file *filp)
|
|||
struct drm_buf *buf = dma->buflist[i];
|
||||
drm_i810_buf_priv_t *buf_priv = buf->dev_private;
|
||||
|
||||
if (buf->filp == filp && buf_priv) {
|
||||
if (buf->file_priv == file_priv && buf_priv) {
|
||||
int used = cmpxchg(buf_priv->in_use, I810_BUF_CLIENT,
|
||||
I810_BUF_FREE);
|
||||
|
||||
|
@ -1017,23 +1016,21 @@ static void i810_reclaim_buffers(struct drm_device *dev, struct file *filp)
|
|||
}
|
||||
}
|
||||
|
||||
static int i810_flush_ioctl(struct inode *inode, struct file *filp,
|
||||
static int i810_flush_ioctl(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
i810_flush_queue(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int i810_dma_vertex(struct inode *inode, struct file *filp,
|
||||
static int i810_dma_vertex(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
|
||||
u32 *hw_status = dev_priv->hw_status_page;
|
||||
|
@ -1045,7 +1042,7 @@ static int i810_dma_vertex(struct inode *inode, struct file *filp,
|
|||
(&vertex, (drm_i810_vertex_t __user *) arg, sizeof(vertex)))
|
||||
return -EFAULT;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_DEBUG("i810 dma vertex, idx %d used %d discard %d\n",
|
||||
vertex.idx, vertex.used, vertex.discard);
|
||||
|
@ -1065,18 +1062,17 @@ static int i810_dma_vertex(struct inode *inode, struct file *filp,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int i810_clear_bufs(struct inode *inode, struct file *filp,
|
||||
static int i810_clear_bufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
drm_i810_clear_t clear;
|
||||
|
||||
if (copy_from_user
|
||||
(&clear, (drm_i810_clear_t __user *) arg, sizeof(clear)))
|
||||
return -EFAULT;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
/* GH: Someone's doing nasty things... */
|
||||
if (!dev->dev_private) {
|
||||
|
@ -1088,25 +1084,24 @@ static int i810_clear_bufs(struct inode *inode, struct file *filp,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int i810_swap_bufs(struct inode *inode, struct file *filp,
|
||||
static int i810_swap_bufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
|
||||
DRM_DEBUG("i810_swap_bufs\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
i810_dma_dispatch_swap(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int i810_getage(struct inode *inode, struct file *filp, unsigned int cmd,
|
||||
static int i810_getage(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
|
||||
u32 *hw_status = dev_priv->hw_status_page;
|
||||
drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
|
||||
|
@ -1116,11 +1111,10 @@ static int i810_getage(struct inode *inode, struct file *filp, unsigned int cmd,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
static int i810_getbuf(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
int retcode = 0;
|
||||
drm_i810_dma_t d;
|
||||
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
|
||||
|
@ -1131,11 +1125,11 @@ static int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
|
|||
if (copy_from_user(&d, (drm_i810_dma_t __user *) arg, sizeof(d)))
|
||||
return -EFAULT;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
d.granted = 0;
|
||||
|
||||
retcode = i810_dma_get_buffer(dev, &d, filp);
|
||||
retcode = i810_dma_get_buffer(dev, &d, file_priv);
|
||||
|
||||
DRM_DEBUG("i810_dma: %d returning %d, granted = %d\n",
|
||||
current->pid, retcode, d.granted);
|
||||
|
@ -1147,15 +1141,15 @@ static int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
|
|||
return retcode;
|
||||
}
|
||||
|
||||
static int i810_copybuf(struct inode *inode,
|
||||
struct file *filp, unsigned int cmd, unsigned long arg)
|
||||
static int i810_copybuf(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
/* Never copy - 2.4.x doesn't need it */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int i810_docopy(struct inode *inode, struct file *filp, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
static int i810_docopy(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
/* Never copy - 2.4.x doesn't need it */
|
||||
return 0;
|
||||
|
@ -1221,11 +1215,10 @@ static void i810_dma_dispatch_mc(struct drm_device * dev, struct drm_buf * buf,
|
|||
ADVANCE_LP_RING();
|
||||
}
|
||||
|
||||
static int i810_dma_mc(struct inode *inode, struct file *filp,
|
||||
static int i810_dma_mc(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
|
||||
u32 *hw_status = dev_priv->hw_status_page;
|
||||
|
@ -1236,7 +1229,7 @@ static int i810_dma_mc(struct inode *inode, struct file *filp,
|
|||
if (copy_from_user(&mc, (drm_i810_mc_t __user *) arg, sizeof(mc)))
|
||||
return -EFAULT;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (mc.idx >= dma->buf_count || mc.idx < 0)
|
||||
return -EINVAL;
|
||||
|
@ -1252,21 +1245,19 @@ static int i810_dma_mc(struct inode *inode, struct file *filp,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int i810_rstatus(struct inode *inode, struct file *filp,
|
||||
static int i810_rstatus(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
|
||||
|
||||
return (int)(((u32 *) (dev_priv->hw_status_page))[4]);
|
||||
}
|
||||
|
||||
static int i810_ov0_info(struct inode *inode, struct file *filp,
|
||||
static int i810_ov0_info(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
|
||||
drm_i810_overlay_t data;
|
||||
|
||||
|
@ -1278,25 +1269,23 @@ static int i810_ov0_info(struct inode *inode, struct file *filp,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int i810_fstatus(struct inode *inode, struct file *filp,
|
||||
static int i810_fstatus(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
return I810_READ(0x30008);
|
||||
}
|
||||
|
||||
static int i810_ov0_flip(struct inode *inode, struct file *filp,
|
||||
static int i810_ov0_flip(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
//Tell the overlay to update
|
||||
I810_WRITE(0x30000, dev_priv->overlay_physical | 0x80000000);
|
||||
|
||||
|
@ -1327,16 +1316,15 @@ static int i810_do_cleanup_pageflip(struct drm_device * dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int i810_flip_bufs(struct inode *inode, struct file *filp,
|
||||
static int i810_flip_bufs(struct inode *inode, struct drm_file *file_priv,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct drm_file *priv = filp->private_data;
|
||||
struct drm_device *dev = priv->head->dev;
|
||||
struct drm_device *dev = file_priv->head->dev;
|
||||
drm_i810_private_t *dev_priv = dev->dev_private;
|
||||
|
||||
DRM_DEBUG("%s\n", __FUNCTION__);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv->page_flipping)
|
||||
i810_do_init_pageflip(dev);
|
||||
|
@ -1362,7 +1350,7 @@ void i810_driver_lastclose(struct drm_device * dev)
|
|||
i810_dma_cleanup(dev);
|
||||
}
|
||||
|
||||
void i810_driver_preclose(struct drm_device * dev, DRMFILE filp)
|
||||
void i810_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
|
||||
{
|
||||
if (dev->dev_private) {
|
||||
drm_i810_private_t *dev_priv = dev->dev_private;
|
||||
|
@ -1372,9 +1360,10 @@ void i810_driver_preclose(struct drm_device * dev, DRMFILE filp)
|
|||
}
|
||||
}
|
||||
|
||||
void i810_driver_reclaim_buffers_locked(struct drm_device * dev, struct file *filp)
|
||||
void i810_driver_reclaim_buffers_locked(struct drm_device * dev,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
i810_reclaim_buffers(dev, filp);
|
||||
i810_reclaim_buffers(dev, file_priv);
|
||||
}
|
||||
|
||||
int i810_driver_dma_quiescent(struct drm_device * dev)
|
||||
|
|
|
@ -117,12 +117,13 @@ typedef struct drm_i810_private {
|
|||
/* i810_dma.c */
|
||||
extern int i810_driver_dma_quiescent(struct drm_device * dev);
|
||||
extern void i810_driver_reclaim_buffers_locked(struct drm_device * dev,
|
||||
struct file *filp);
|
||||
struct drm_file *file_priv);
|
||||
extern int i810_driver_load(struct drm_device *, unsigned long flags);
|
||||
extern void i810_driver_lastclose(struct drm_device * dev);
|
||||
extern void i810_driver_preclose(struct drm_device * dev, DRMFILE filp);
|
||||
extern void i810_driver_preclose(struct drm_device * dev,
|
||||
struct drm_file *file_priv);
|
||||
extern void i810_driver_reclaim_buffers_locked(struct drm_device * dev,
|
||||
struct file *filp);
|
||||
struct drm_file *file_priv);
|
||||
extern int i810_driver_device_is_agp(struct drm_device * dev);
|
||||
|
||||
extern struct drm_ioctl_desc i810_ioctls[];
|
||||
|
|
|
@ -122,7 +122,7 @@ static int sis_fb_init(DRM_IOCTL_ARGS)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int sis_drm_alloc(struct drm_device * dev, struct drm_file * priv,
|
||||
static int sis_drm_alloc(struct drm_device * dev, struct drm_file *file_priv,
|
||||
unsigned long data, int pool)
|
||||
{
|
||||
drm_sis_private_t *dev_priv = dev->dev_private;
|
||||
|
@ -144,7 +144,7 @@ static int sis_drm_alloc(struct drm_device * dev, struct drm_file * priv,
|
|||
|
||||
mem.size = (mem.size + SIS_MM_ALIGN_MASK) >> SIS_MM_ALIGN_SHIFT;
|
||||
item = drm_sman_alloc(&dev_priv->sman, pool, mem.size, 0,
|
||||
(unsigned long)priv);
|
||||
(unsigned long)file_priv);
|
||||
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
if (item) {
|
||||
|
@ -190,7 +190,7 @@ static int sis_drm_free(DRM_IOCTL_ARGS)
|
|||
static int sis_fb_alloc(DRM_IOCTL_ARGS)
|
||||
{
|
||||
DRM_DEVICE;
|
||||
return sis_drm_alloc(dev, priv, data, VIDEO_TYPE);
|
||||
return sis_drm_alloc(dev, file_priv, data, VIDEO_TYPE);
|
||||
}
|
||||
|
||||
static int sis_ioctl_agp_init(DRM_IOCTL_ARGS)
|
||||
|
@ -225,7 +225,7 @@ static int sis_ioctl_agp_alloc(DRM_IOCTL_ARGS)
|
|||
{
|
||||
DRM_DEVICE;
|
||||
|
||||
return sis_drm_alloc(dev, priv, data, AGP_TYPE);
|
||||
return sis_drm_alloc(dev, file_priv, data, AGP_TYPE);
|
||||
}
|
||||
|
||||
static drm_local_map_t *sis_reg_init(struct drm_device *dev)
|
||||
|
@ -314,13 +314,13 @@ void sis_lastclose(struct drm_device *dev)
|
|||
mutex_unlock(&dev->struct_mutex);
|
||||
}
|
||||
|
||||
void sis_reclaim_buffers_locked(struct drm_device * dev, struct file *filp)
|
||||
void sis_reclaim_buffers_locked(struct drm_device * dev,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
drm_sis_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_file *priv = filp->private_data;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)priv)) {
|
||||
if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)file_priv)) {
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return;
|
||||
}
|
||||
|
@ -329,7 +329,7 @@ void sis_reclaim_buffers_locked(struct drm_device * dev, struct file *filp)
|
|||
dev->driver->dma_quiescent(dev);
|
||||
}
|
||||
|
||||
drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)priv);
|
||||
drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)file_priv);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -805,7 +805,7 @@ via_dma_blit_sync( DRM_IOCTL_ARGS )
|
|||
|
||||
err = via_dmablit_sync(dev, sync.sync_handle, sync.engine);
|
||||
|
||||
if (-EINTR) == err
|
||||
if (-EINTR == err)
|
||||
err = -EAGAIN;
|
||||
|
||||
return err;
|
||||
|
|
|
@ -151,7 +151,7 @@ int via_mem_alloc(DRM_IOCTL_ARGS)
|
|||
|
||||
tmpSize = (mem.size + VIA_MM_ALIGN_MASK) >> VIA_MM_ALIGN_SHIFT;
|
||||
item = drm_sman_alloc(&dev_priv->sman, mem.type, tmpSize, 0,
|
||||
(unsigned long)priv);
|
||||
(unsigned long)file_priv);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
if (item) {
|
||||
mem.offset = ((mem.type == VIA_MEM_VIDEO) ?
|
||||
|
@ -190,13 +190,13 @@ int via_mem_free(DRM_IOCTL_ARGS)
|
|||
}
|
||||
|
||||
|
||||
void via_reclaim_buffers_locked(struct drm_device * dev, struct file *filp)
|
||||
void via_reclaim_buffers_locked(struct drm_device * dev,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
drm_via_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_file *priv = filp->private_data;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)priv)) {
|
||||
if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)file_priv)) {
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return;
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ void via_reclaim_buffers_locked(struct drm_device * dev, struct file *filp)
|
|||
dev->driver->dma_quiescent(dev);
|
||||
}
|
||||
|
||||
drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)priv);
|
||||
drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)file_priv);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -654,7 +654,7 @@ static int i915_flush_ioctl(DRM_IOCTL_ARGS)
|
|||
{
|
||||
DRM_DEVICE;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
return i915_quiescent(dev);
|
||||
}
|
||||
|
@ -679,7 +679,7 @@ static int i915_batchbuffer(DRM_IOCTL_ARGS)
|
|||
DRM_DEBUG("i915 batchbuffer, start %x used %d cliprects %d\n",
|
||||
batch.start, batch.used, batch.num_cliprects);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (batch.num_cliprects && DRM_VERIFYAREA_READ(batch.cliprects,
|
||||
batch.num_cliprects *
|
||||
|
@ -707,7 +707,7 @@ static int i915_cmdbuffer(DRM_IOCTL_ARGS)
|
|||
DRM_DEBUG("i915 cmdbuffer, buf %p sz %d cliprects %d\n",
|
||||
cmdbuf.buf, cmdbuf.sz, cmdbuf.num_cliprects);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (cmdbuf.num_cliprects &&
|
||||
DRM_VERIFYAREA_READ(cmdbuf.cliprects,
|
||||
|
@ -756,7 +756,7 @@ static int i915_flip_bufs(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("%s\n", __FUNCTION__);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(param, (drm_i915_flip_t __user *) data,
|
||||
sizeof(param));
|
||||
|
@ -965,11 +965,11 @@ void i915_driver_lastclose(struct drm_device * dev)
|
|||
i915_dma_cleanup(dev);
|
||||
}
|
||||
|
||||
void i915_driver_preclose(struct drm_device * dev, DRMFILE filp)
|
||||
void i915_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
|
||||
{
|
||||
if (dev->dev_private) {
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
i915_mem_release(dev, filp, dev_priv->agp_heap);
|
||||
i915_mem_release(dev, file_priv, dev_priv->agp_heap);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ struct mem_block {
|
|||
struct mem_block *prev;
|
||||
int start;
|
||||
int size;
|
||||
DRMFILE filp; /* 0: free, -1: heap, other: real files */
|
||||
struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
|
||||
};
|
||||
|
||||
typedef struct _drm_i915_vbl_swap {
|
||||
|
@ -152,7 +152,8 @@ extern int i915_max_ioctl;
|
|||
extern void i915_kernel_lost_context(struct drm_device * dev);
|
||||
extern int i915_driver_load(struct drm_device *, unsigned long flags);
|
||||
extern void i915_driver_lastclose(struct drm_device * dev);
|
||||
extern void i915_driver_preclose(struct drm_device * dev, DRMFILE filp);
|
||||
extern void i915_driver_preclose(struct drm_device *dev,
|
||||
struct drm_file *file_priv);
|
||||
extern int i915_driver_device_is_agp(struct drm_device * dev);
|
||||
extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
@ -185,7 +186,8 @@ extern int i915_mem_init_heap(DRM_IOCTL_ARGS);
|
|||
extern int i915_mem_destroy_heap(DRM_IOCTL_ARGS);
|
||||
extern void i915_mem_takedown(struct mem_block **heap);
|
||||
extern void i915_mem_release(struct drm_device * dev,
|
||||
DRMFILE filp, struct mem_block *heap);
|
||||
struct drm_file *file_priv,
|
||||
struct mem_block *heap);
|
||||
#ifdef I915_HAVE_FENCE
|
||||
/* i915_fence.c */
|
||||
|
||||
|
|
|
@ -456,7 +456,7 @@ int i915_irq_emit(DRM_IOCTL_ARGS)
|
|||
drm_i915_irq_emit_t emit;
|
||||
int result;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
@ -623,7 +623,7 @@ int i915_vblank_swap(DRM_IOCTL_ARGS)
|
|||
if ((curseq - swap.sequence) <= (1<<23)) {
|
||||
struct drm_drawable_info *drw;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_SPINLOCK_IRQSAVE(&dev->drw_lock, irqflags);
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ static void mark_block(struct drm_device * dev, struct mem_block *p, int in_use)
|
|||
*/
|
||||
|
||||
static struct mem_block *split_block(struct mem_block *p, int start, int size,
|
||||
DRMFILE filp)
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
/* Maybe cut off the start of an existing block */
|
||||
if (start > p->start) {
|
||||
|
@ -99,7 +99,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
|
|||
goto out;
|
||||
newblock->start = start;
|
||||
newblock->size = p->size - (start - p->start);
|
||||
newblock->filp = NULL;
|
||||
newblock->file_priv = NULL;
|
||||
newblock->next = p->next;
|
||||
newblock->prev = p;
|
||||
p->next->prev = newblock;
|
||||
|
@ -116,7 +116,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
|
|||
goto out;
|
||||
newblock->start = start + size;
|
||||
newblock->size = p->size - size;
|
||||
newblock->filp = NULL;
|
||||
newblock->file_priv = NULL;
|
||||
newblock->next = p->next;
|
||||
newblock->prev = p;
|
||||
p->next->prev = newblock;
|
||||
|
@ -126,20 +126,20 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
|
|||
|
||||
out:
|
||||
/* Our block is in the middle */
|
||||
p->filp = filp;
|
||||
p->file_priv = file_priv;
|
||||
return p;
|
||||
}
|
||||
|
||||
static struct mem_block *alloc_block(struct mem_block *heap, int size,
|
||||
int align2, DRMFILE filp)
|
||||
int align2, struct drm_file *file_priv)
|
||||
{
|
||||
struct mem_block *p;
|
||||
int mask = (1 << align2) - 1;
|
||||
|
||||
for (p = heap->next; p != heap; p = p->next) {
|
||||
int start = (p->start + mask) & ~mask;
|
||||
if (p->filp == NULL && start + size <= p->start + p->size)
|
||||
return split_block(p, start, size, filp);
|
||||
if (p->file_priv == NULL && start + size <= p->start + p->size)
|
||||
return split_block(p, start, size, file_priv);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
@ -158,12 +158,12 @@ static struct mem_block *find_block(struct mem_block *heap, int start)
|
|||
|
||||
static void free_block(struct mem_block *p)
|
||||
{
|
||||
p->filp = NULL;
|
||||
p->file_priv = NULL;
|
||||
|
||||
/* Assumes a single contiguous range. Needs a special filp in
|
||||
/* Assumes a single contiguous range. Needs a special file_priv in
|
||||
* 'heap' to stop it being subsumed.
|
||||
*/
|
||||
if (p->next->filp == NULL) {
|
||||
if (p->next->file_priv == NULL) {
|
||||
struct mem_block *q = p->next;
|
||||
p->size += q->size;
|
||||
p->next = q->next;
|
||||
|
@ -171,7 +171,7 @@ static void free_block(struct mem_block *p)
|
|||
drm_free(q, sizeof(*q), DRM_MEM_BUFLISTS);
|
||||
}
|
||||
|
||||
if (p->prev->filp == NULL) {
|
||||
if (p->prev->file_priv == NULL) {
|
||||
struct mem_block *q = p->prev;
|
||||
q->size += p->size;
|
||||
q->next = p->next;
|
||||
|
@ -197,18 +197,19 @@ static int init_heap(struct mem_block **heap, int start, int size)
|
|||
|
||||
blocks->start = start;
|
||||
blocks->size = size;
|
||||
blocks->filp = NULL;
|
||||
blocks->file_priv = NULL;
|
||||
blocks->next = blocks->prev = *heap;
|
||||
|
||||
memset(*heap, 0, sizeof(**heap));
|
||||
(*heap)->filp = (DRMFILE) - 1;
|
||||
(*heap)->file_priv = (struct drm_file *) - 1;
|
||||
(*heap)->next = (*heap)->prev = blocks;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Free all blocks associated with the releasing file.
|
||||
*/
|
||||
void i915_mem_release(struct drm_device * dev, DRMFILE filp, struct mem_block *heap)
|
||||
void i915_mem_release(struct drm_device * dev, struct drm_file *file_priv,
|
||||
struct mem_block *heap)
|
||||
{
|
||||
struct mem_block *p;
|
||||
|
||||
|
@ -216,17 +217,17 @@ void i915_mem_release(struct drm_device * dev, DRMFILE filp, struct mem_block *h
|
|||
return;
|
||||
|
||||
for (p = heap->next; p != heap; p = p->next) {
|
||||
if (p->filp == filp) {
|
||||
p->filp = NULL;
|
||||
if (p->file_priv == file_priv) {
|
||||
p->file_priv = NULL;
|
||||
mark_block(dev, p, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Assumes a single contiguous range. Needs a special filp in
|
||||
/* Assumes a single contiguous range. Needs a special file_priv in
|
||||
* 'heap' to stop it being subsumed.
|
||||
*/
|
||||
for (p = heap->next; p != heap; p = p->next) {
|
||||
while (p->filp == NULL && p->next->filp == NULL) {
|
||||
while (p->file_priv == NULL && p->next->file_priv == NULL) {
|
||||
struct mem_block *q = p->next;
|
||||
p->size += q->size;
|
||||
p->next = q->next;
|
||||
|
@ -292,7 +293,7 @@ int i915_mem_alloc(DRM_IOCTL_ARGS)
|
|||
if (alloc.alignment < 12)
|
||||
alloc.alignment = 12;
|
||||
|
||||
block = alloc_block(*heap, alloc.size, alloc.alignment, filp);
|
||||
block = alloc_block(*heap, alloc.size, alloc.alignment, file_priv);
|
||||
|
||||
if (!block)
|
||||
return -ENOMEM;
|
||||
|
@ -330,7 +331,7 @@ int i915_mem_free(DRM_IOCTL_ARGS)
|
|||
if (!block)
|
||||
return -EFAULT;
|
||||
|
||||
if (block->filp != filp)
|
||||
if (block->file_priv != file_priv)
|
||||
return -EPERM;
|
||||
|
||||
mark_block(dev, block, 0);
|
||||
|
|
|
@ -1165,7 +1165,7 @@ int mach64_dma_init(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("%s\n", __FUNCTION__);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(init, (drm_mach64_init_t *) data,
|
||||
sizeof(init));
|
||||
|
@ -1187,7 +1187,7 @@ int mach64_dma_idle(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("%s\n", __FUNCTION__);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
return mach64_do_dma_idle(dev_priv);
|
||||
}
|
||||
|
@ -1199,7 +1199,7 @@ int mach64_dma_flush(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("%s\n", __FUNCTION__);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
return mach64_do_dma_flush(dev_priv);
|
||||
}
|
||||
|
@ -1211,7 +1211,7 @@ int mach64_engine_reset(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("%s\n", __FUNCTION__);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
return mach64_do_engine_reset(dev_priv);
|
||||
}
|
||||
|
@ -1461,7 +1461,8 @@ int mach64_freelist_put(drm_mach64_private_t * dev_priv, struct drm_buf * copy_b
|
|||
/** \name DMA buffer request and submission IOCTL handler */
|
||||
/*@{*/
|
||||
|
||||
static int mach64_dma_get_buffers(DRMFILE filp, struct drm_device * dev,
|
||||
static int mach64_dma_get_buffers(struct drm_device * dev,
|
||||
struct drm_file *file_priv,
|
||||
struct drm_dma * d)
|
||||
{
|
||||
int i;
|
||||
|
@ -1478,7 +1479,7 @@ static int mach64_dma_get_buffers(DRMFILE filp, struct drm_device * dev,
|
|||
return -EAGAIN;
|
||||
#endif
|
||||
|
||||
buf->filp = filp;
|
||||
buf->file_priv = file_priv;
|
||||
|
||||
if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx,
|
||||
sizeof(buf->idx)))
|
||||
|
@ -1499,7 +1500,7 @@ int mach64_dma_buffers(DRM_IOCTL_ARGS)
|
|||
struct drm_dma d;
|
||||
int ret = 0;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(d, (struct drm_dma *) data, sizeof(d));
|
||||
|
||||
|
@ -1522,7 +1523,7 @@ int mach64_dma_buffers(DRM_IOCTL_ARGS)
|
|||
d.granted_count = 0;
|
||||
|
||||
if (d.request_count) {
|
||||
ret = mach64_dma_get_buffers(filp, dev, &d);
|
||||
ret = mach64_dma_get_buffers(dev, file_priv, &d);
|
||||
}
|
||||
|
||||
DRM_COPY_TO_USER_IOCTL((struct drm_dma *) data, d, sizeof(d));
|
||||
|
|
|
@ -842,7 +842,7 @@ do { \
|
|||
} while(0)
|
||||
|
||||
/* FIXME: use a private set of smaller buffers for state emits, clears, and swaps? */
|
||||
#define DMAGETPTR( filp, dev_priv, n ) \
|
||||
#define DMAGETPTR( file_priv, dev_priv, n ) \
|
||||
do { \
|
||||
if ( MACH64_VERBOSE ) { \
|
||||
DRM_INFO( "DMAGETPTR( %d ) in %s\n", \
|
||||
|
@ -859,7 +859,7 @@ do { \
|
|||
__FUNCTION__ ); \
|
||||
return -EFAULT; \
|
||||
} \
|
||||
_buf->filp = filp; \
|
||||
_buf->file_priv = file_priv; \
|
||||
_outcount = 0; \
|
||||
\
|
||||
_buf_wptr = GETBUFPTR( _buf ); \
|
||||
|
|
|
@ -85,7 +85,8 @@ static void mach64_print_dirty(const char *msg, unsigned int flags)
|
|||
/* This function returns 0 on success, 1 for no intersection, and
|
||||
* negative for an error
|
||||
*/
|
||||
static int mach64_emit_cliprect(DRMFILE filp, drm_mach64_private_t * dev_priv,
|
||||
static int mach64_emit_cliprect(struct drm_file *file_priv,
|
||||
drm_mach64_private_t * dev_priv,
|
||||
struct drm_clip_rect * box)
|
||||
{
|
||||
u32 sc_left_right, sc_top_bottom;
|
||||
|
@ -120,7 +121,7 @@ static int mach64_emit_cliprect(DRMFILE filp, drm_mach64_private_t * dev_priv,
|
|||
if (scissor.y1 >= scissor.y2)
|
||||
return 1;
|
||||
|
||||
DMAGETPTR(filp, dev_priv, 2); /* returns on failure to get buffer */
|
||||
DMAGETPTR(file_priv, dev_priv, 2); /* returns on failure to get buffer */
|
||||
|
||||
sc_left_right = ((scissor.x1 << 0) | (scissor.x2 << 16));
|
||||
sc_top_bottom = ((scissor.y1 << 0) | (scissor.y2 << 16));
|
||||
|
@ -133,7 +134,7 @@ static int mach64_emit_cliprect(DRMFILE filp, drm_mach64_private_t * dev_priv,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static __inline__ int mach64_emit_state(DRMFILE filp,
|
||||
static __inline__ int mach64_emit_state(struct drm_file *file_priv,
|
||||
drm_mach64_private_t * dev_priv)
|
||||
{
|
||||
drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
|
||||
|
@ -148,7 +149,7 @@ static __inline__ int mach64_emit_state(DRMFILE filp,
|
|||
DRM_DEBUG("%s: dirty=0x%08x\n", __FUNCTION__, dirty);
|
||||
}
|
||||
|
||||
DMAGETPTR(filp, dev_priv, 17); /* returns on failure to get buffer */
|
||||
DMAGETPTR(file_priv, dev_priv, 17); /* returns on failure to get buffer */
|
||||
|
||||
if (dirty & MACH64_UPLOAD_MISC) {
|
||||
DMAOUTREG(MACH64_DP_MIX, regs->dp_mix);
|
||||
|
@ -212,7 +213,8 @@ static __inline__ int mach64_emit_state(DRMFILE filp,
|
|||
* DMA command dispatch functions
|
||||
*/
|
||||
|
||||
static int mach64_dma_dispatch_clear(DRMFILE filp, struct drm_device * dev,
|
||||
static int mach64_dma_dispatch_clear(struct drm_device * dev,
|
||||
struct drm_file *file_priv,
|
||||
unsigned int flags,
|
||||
int cx, int cy, int cw, int ch,
|
||||
unsigned int clear_color,
|
||||
|
@ -254,7 +256,7 @@ static int mach64_dma_dispatch_clear(DRMFILE filp, struct drm_device * dev,
|
|||
if (!nbox)
|
||||
return 0;
|
||||
|
||||
DMAGETPTR(filp, dev_priv, nbox * 31); /* returns on failure to get buffer */
|
||||
DMAGETPTR(file_priv, dev_priv, nbox * 31); /* returns on failure to get buffer */
|
||||
|
||||
for (i = 0; i < nbox; i++) {
|
||||
int x = pbox[i].x1;
|
||||
|
@ -355,7 +357,8 @@ static int mach64_dma_dispatch_clear(DRMFILE filp, struct drm_device * dev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mach64_dma_dispatch_swap(DRMFILE filp, struct drm_device * dev)
|
||||
static int mach64_dma_dispatch_swap(struct drm_device * dev,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
drm_mach64_private_t *dev_priv = dev->dev_private;
|
||||
drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
|
||||
|
@ -380,7 +383,7 @@ static int mach64_dma_dispatch_swap(DRMFILE filp, struct drm_device * dev)
|
|||
if (!nbox)
|
||||
return 0;
|
||||
|
||||
DMAGETPTR(filp, dev_priv, 13 + nbox * 4); /* returns on failure to get buffer */
|
||||
DMAGETPTR(file_priv, dev_priv, 13 + nbox * 4); /* returns on failure to get buffer */
|
||||
|
||||
DMAOUTREG(MACH64_Z_CNTL, 0);
|
||||
DMAOUTREG(MACH64_SCALE_3D_CNTL, 0);
|
||||
|
@ -545,7 +548,8 @@ static __inline__ int copy_from_user_vertex(u32 *to,
|
|||
}
|
||||
}
|
||||
|
||||
static int mach64_dma_dispatch_vertex(DRMFILE filp, struct drm_device * dev,
|
||||
static int mach64_dma_dispatch_vertex(struct drm_device * dev,
|
||||
struct drm_file *file_priv,
|
||||
drm_mach64_vertex_t * vertex)
|
||||
{
|
||||
drm_mach64_private_t *dev_priv = dev->dev_private;
|
||||
|
@ -583,7 +587,7 @@ static int mach64_dma_dispatch_vertex(DRMFILE filp, struct drm_device * dev,
|
|||
DMASETPTR(copy_buf);
|
||||
|
||||
if (sarea_priv->dirty & ~MACH64_UPLOAD_CLIPRECTS) {
|
||||
ret = mach64_emit_state(filp, dev_priv);
|
||||
ret = mach64_emit_state(file_priv, dev_priv);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
@ -591,7 +595,7 @@ static int mach64_dma_dispatch_vertex(DRMFILE filp, struct drm_device * dev,
|
|||
do {
|
||||
/* Emit the next cliprect */
|
||||
if (i < sarea_priv->nbox) {
|
||||
ret = mach64_emit_cliprect(filp, dev_priv,
|
||||
ret = mach64_emit_cliprect(file_priv, dev_priv,
|
||||
&sarea_priv->boxes[i]);
|
||||
if (ret < 0) {
|
||||
/* failed to get buffer */
|
||||
|
@ -640,7 +644,8 @@ static __inline__ int copy_from_user_blit(u32 *to,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mach64_dma_dispatch_blit(DRMFILE filp, struct drm_device * dev,
|
||||
static int mach64_dma_dispatch_blit(struct drm_device * dev,
|
||||
struct drm_file *file_priv,
|
||||
drm_mach64_blit_t * blit)
|
||||
{
|
||||
drm_mach64_private_t *dev_priv = dev->dev_private;
|
||||
|
@ -763,7 +768,7 @@ int mach64_dma_clear(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("%s: pid=%d\n", __FUNCTION__, DRM_CURRENTPID);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(clear, (drm_mach64_clear_t *) data,
|
||||
sizeof(clear));
|
||||
|
@ -771,7 +776,7 @@ int mach64_dma_clear(DRM_IOCTL_ARGS)
|
|||
if (sarea_priv->nbox > MACH64_NR_SAREA_CLIPRECTS)
|
||||
sarea_priv->nbox = MACH64_NR_SAREA_CLIPRECTS;
|
||||
|
||||
ret = mach64_dma_dispatch_clear(filp, dev, clear.flags,
|
||||
ret = mach64_dma_dispatch_clear(dev, file_priv, clear.flags,
|
||||
clear.x, clear.y, clear.w, clear.h,
|
||||
clear.clear_color, clear.clear_depth);
|
||||
|
||||
|
@ -790,12 +795,12 @@ int mach64_dma_swap(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("%s: pid=%d\n", __FUNCTION__, DRM_CURRENTPID);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (sarea_priv->nbox > MACH64_NR_SAREA_CLIPRECTS)
|
||||
sarea_priv->nbox = MACH64_NR_SAREA_CLIPRECTS;
|
||||
|
||||
ret = mach64_dma_dispatch_swap(filp, dev);
|
||||
ret = mach64_dma_dispatch_swap(dev, file_priv);
|
||||
|
||||
/* Make sure we restore the 3D state next time.
|
||||
*/
|
||||
|
@ -810,7 +815,7 @@ int mach64_dma_vertex(DRM_IOCTL_ARGS)
|
|||
drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
|
||||
drm_mach64_vertex_t vertex;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
@ -838,7 +843,7 @@ int mach64_dma_vertex(DRM_IOCTL_ARGS)
|
|||
if (sarea_priv->nbox > MACH64_NR_SAREA_CLIPRECTS)
|
||||
sarea_priv->nbox = MACH64_NR_SAREA_CLIPRECTS;
|
||||
|
||||
return mach64_dma_dispatch_vertex(filp, dev, &vertex);
|
||||
return mach64_dma_dispatch_vertex(dev, file_priv, &vertex);
|
||||
}
|
||||
|
||||
int mach64_dma_blit(DRM_IOCTL_ARGS)
|
||||
|
@ -849,12 +854,12 @@ int mach64_dma_blit(DRM_IOCTL_ARGS)
|
|||
drm_mach64_blit_t blit;
|
||||
int ret;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(blit, (drm_mach64_blit_t *) data,
|
||||
sizeof(blit));
|
||||
|
||||
ret = mach64_dma_dispatch_blit(filp, dev, &blit);
|
||||
ret = mach64_dma_dispatch_blit(dev, file_priv, &blit);
|
||||
|
||||
/* Make sure we restore the 3D state next time.
|
||||
*/
|
||||
|
@ -884,7 +889,7 @@ int mach64_get_param(DRM_IOCTL_ARGS)
|
|||
switch (param.param) {
|
||||
case MACH64_PARAM_FRAMES_QUEUED:
|
||||
/* Needs lock since it calls mach64_ring_tick() */
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
value = mach64_do_get_frames_queued(dev_priv);
|
||||
break;
|
||||
case MACH64_PARAM_IRQ_NR:
|
||||
|
|
|
@ -1016,7 +1016,7 @@ int mga_dma_init(DRM_IOCTL_ARGS)
|
|||
drm_mga_init_t init;
|
||||
int err;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(init, (drm_mga_init_t __user *) data,
|
||||
sizeof(init));
|
||||
|
@ -1045,7 +1045,7 @@ int mga_dma_flush(DRM_IOCTL_ARGS)
|
|||
drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
|
||||
struct drm_lock lock;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(lock, (struct drm_lock __user *) data,
|
||||
sizeof(lock));
|
||||
|
@ -1080,7 +1080,7 @@ int mga_dma_reset(DRM_IOCTL_ARGS)
|
|||
DRM_DEVICE;
|
||||
drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
return mga_do_dma_reset(dev_priv);
|
||||
}
|
||||
|
@ -1089,7 +1089,8 @@ int mga_dma_reset(DRM_IOCTL_ARGS)
|
|||
* DMA buffer management
|
||||
*/
|
||||
|
||||
static int mga_dma_get_buffers(DRMFILE filp, struct drm_device * dev, struct drm_dma * d)
|
||||
static int mga_dma_get_buffers(struct drm_device * dev,
|
||||
struct drm_file *file_priv, struct drm_dma * d)
|
||||
{
|
||||
struct drm_buf *buf;
|
||||
int i;
|
||||
|
@ -1099,7 +1100,7 @@ static int mga_dma_get_buffers(DRMFILE filp, struct drm_device * dev, struct drm
|
|||
if (!buf)
|
||||
return -EAGAIN;
|
||||
|
||||
buf->filp = filp;
|
||||
buf->file_priv = file_priv;
|
||||
|
||||
if (DRM_COPY_TO_USER(&d->request_indices[i],
|
||||
&buf->idx, sizeof(buf->idx)))
|
||||
|
@ -1122,7 +1123,7 @@ int mga_dma_buffers(DRM_IOCTL_ARGS)
|
|||
struct drm_dma d;
|
||||
int ret = 0;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));
|
||||
|
||||
|
@ -1147,7 +1148,7 @@ int mga_dma_buffers(DRM_IOCTL_ARGS)
|
|||
d.granted_count = 0;
|
||||
|
||||
if (d.request_count) {
|
||||
ret = mga_dma_get_buffers(filp, dev, &d);
|
||||
ret = mga_dma_get_buffers(dev, file_priv, &d);
|
||||
}
|
||||
|
||||
DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d));
|
||||
|
|
|
@ -872,7 +872,7 @@ static int mga_dma_clear(DRM_IOCTL_ARGS)
|
|||
drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
|
||||
drm_mga_clear_t clear;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(clear, (drm_mga_clear_t __user *) data,
|
||||
sizeof(clear));
|
||||
|
@ -897,7 +897,7 @@ static int mga_dma_swap(DRM_IOCTL_ARGS)
|
|||
drm_mga_private_t *dev_priv = dev->dev_private;
|
||||
drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (sarea_priv->nbox > MGA_NR_SAREA_CLIPRECTS)
|
||||
sarea_priv->nbox = MGA_NR_SAREA_CLIPRECTS;
|
||||
|
@ -922,7 +922,7 @@ static int mga_dma_vertex(DRM_IOCTL_ARGS)
|
|||
drm_mga_buf_priv_t *buf_priv;
|
||||
drm_mga_vertex_t vertex;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(vertex,
|
||||
(drm_mga_vertex_t __user *) data,
|
||||
|
@ -962,7 +962,7 @@ static int mga_dma_indices(DRM_IOCTL_ARGS)
|
|||
drm_mga_buf_priv_t *buf_priv;
|
||||
drm_mga_indices_t indices;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(indices,
|
||||
(drm_mga_indices_t __user *) data,
|
||||
|
@ -1003,7 +1003,7 @@ static int mga_dma_iload(DRM_IOCTL_ARGS)
|
|||
drm_mga_iload_t iload;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(iload, (drm_mga_iload_t __user *) data,
|
||||
sizeof(iload));
|
||||
|
@ -1045,7 +1045,7 @@ static int mga_dma_blit(DRM_IOCTL_ARGS)
|
|||
drm_mga_blit_t blit;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(blit, (drm_mga_blit_t __user *) data,
|
||||
sizeof(blit));
|
||||
|
|
|
@ -47,7 +47,7 @@ struct mem_block {
|
|||
struct mem_block *prev;
|
||||
uint64_t start;
|
||||
uint64_t size;
|
||||
DRMFILE filp; /* 0: free, -1: heap, other: real files */
|
||||
struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
|
||||
int flags;
|
||||
drm_local_map_t *map;
|
||||
drm_handle_t map_handle;
|
||||
|
@ -95,7 +95,7 @@ struct nouveau_gpuobj_ref {
|
|||
struct nouveau_fifo
|
||||
{
|
||||
/* owner of this fifo */
|
||||
DRMFILE filp;
|
||||
struct drm_file *file_priv;
|
||||
/* mapping of the fifo itself */
|
||||
drm_local_map_t *map;
|
||||
/* mapping of the regs controling the fifo */
|
||||
|
@ -263,7 +263,8 @@ struct drm_nouveau_private {
|
|||
};
|
||||
|
||||
/* nouveau_state.c */
|
||||
extern void nouveau_preclose(struct drm_device * dev, DRMFILE filp);
|
||||
extern void nouveau_preclose(struct drm_device * dev,
|
||||
struct drm_file *file_priv);
|
||||
extern int nouveau_load(struct drm_device *dev, unsigned long flags);
|
||||
extern int nouveau_firstopen(struct drm_device *dev);
|
||||
extern void nouveau_lastclose(struct drm_device *dev);
|
||||
|
@ -278,20 +279,25 @@ extern int nouveau_mem_init_heap(struct mem_block **,
|
|||
uint64_t start, uint64_t size);
|
||||
extern struct mem_block *nouveau_mem_alloc_block(struct mem_block *,
|
||||
uint64_t size, int align2,
|
||||
DRMFILE);
|
||||
struct drm_file *file_priv);
|
||||
extern void nouveau_mem_takedown(struct mem_block **heap);
|
||||
extern void nouveau_mem_free_block(struct mem_block *);
|
||||
extern uint64_t nouveau_mem_fb_amount(struct drm_device *dev);
|
||||
extern void nouveau_mem_release(DRMFILE filp, struct mem_block *heap);
|
||||
extern void nouveau_mem_release(struct drm_file *file_priv,
|
||||
struct mem_block *heap);
|
||||
extern int nouveau_ioctl_mem_alloc(DRM_IOCTL_ARGS);
|
||||
extern int nouveau_ioctl_mem_free(DRM_IOCTL_ARGS);
|
||||
extern struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment, uint64_t size, int flags, DRMFILE filp);
|
||||
extern struct mem_block* nouveau_mem_alloc(struct drm_device *dev,
|
||||
int alignment, uint64_t size,
|
||||
int flags,
|
||||
struct drm_file *file_priv);
|
||||
extern void nouveau_mem_free(struct drm_device* dev, struct mem_block*);
|
||||
extern int nouveau_mem_init(struct drm_device *dev);
|
||||
extern void nouveau_mem_close(struct drm_device *dev);
|
||||
|
||||
/* nouveau_notifier.c */
|
||||
extern int nouveau_notifier_init_channel(struct drm_device *, int channel, DRMFILE);
|
||||
extern int nouveau_notifier_init_channel(struct drm_device *, int channel,
|
||||
struct drm_file *file_priv);
|
||||
extern void nouveau_notifier_takedown_channel(struct drm_device *, int channel);
|
||||
extern int nouveau_notifier_alloc(struct drm_device *, int channel,
|
||||
uint32_t handle, int cout, uint32_t *offset);
|
||||
|
@ -301,8 +307,10 @@ extern int nouveau_ioctl_notifier_alloc(DRM_IOCTL_ARGS);
|
|||
extern int nouveau_fifo_init(struct drm_device *dev);
|
||||
extern int nouveau_fifo_number(struct drm_device *dev);
|
||||
extern int nouveau_fifo_ctx_size(struct drm_device *dev);
|
||||
extern void nouveau_fifo_cleanup(struct drm_device *dev, DRMFILE filp);
|
||||
extern int nouveau_fifo_owner(struct drm_device *dev, DRMFILE filp, int channel);
|
||||
extern void nouveau_fifo_cleanup(struct drm_device *dev,
|
||||
struct drm_file *file_priv);
|
||||
extern int nouveau_fifo_owner(struct drm_device *dev,
|
||||
struct drm_file *file_priv, int channel);
|
||||
extern void nouveau_fifo_free(struct drm_device *dev, int channel);
|
||||
|
||||
/* nouveau_object.c */
|
||||
|
@ -473,7 +481,7 @@ extern int nv04_timer_init(struct drm_device *dev);
|
|||
extern uint64_t nv04_timer_read(struct drm_device *dev);
|
||||
extern void nv04_timer_takedown(struct drm_device *dev);
|
||||
|
||||
extern long nouveau_compat_ioctl(struct file *filp, unsigned int cmd,
|
||||
extern long nouveau_compat_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
||||
#if defined(__powerpc__)
|
||||
|
|
|
@ -204,7 +204,7 @@ nouveau_fifo_cmdbuf_alloc(struct drm_device *dev, int channel)
|
|||
|
||||
cb = nouveau_mem_alloc(dev, 0, config->cmdbuf.size,
|
||||
config->cmdbuf.location | NOUVEAU_MEM_MAPPED,
|
||||
(DRMFILE)-2);
|
||||
(struct drm_file *)-2);
|
||||
if (!cb) {
|
||||
DRM_ERROR("Couldn't allocate DMA command buffer.\n");
|
||||
return -ENOMEM;
|
||||
|
@ -264,7 +264,8 @@ nouveau_fifo_cmdbuf_alloc(struct drm_device *dev, int channel)
|
|||
}
|
||||
|
||||
/* allocates and initializes a fifo for user space consumption */
|
||||
int nouveau_fifo_alloc(struct drm_device *dev, int *chan_ret, DRMFILE filp,
|
||||
int nouveau_fifo_alloc(struct drm_device *dev, int *chan_ret,
|
||||
struct drm_file *file_priv,
|
||||
uint32_t vram_handle, uint32_t tt_handle)
|
||||
{
|
||||
int ret;
|
||||
|
@ -298,7 +299,7 @@ int nouveau_fifo_alloc(struct drm_device *dev, int *chan_ret, DRMFILE filp,
|
|||
return -ENOMEM;
|
||||
dev_priv->fifo_alloc_count++;
|
||||
chan = dev_priv->fifos[channel];
|
||||
chan->filp = filp;
|
||||
chan->file_priv = file_priv;
|
||||
|
||||
DRM_INFO("Allocating FIFO number %d\n", channel);
|
||||
|
||||
|
@ -317,7 +318,7 @@ int nouveau_fifo_alloc(struct drm_device *dev, int *chan_ret, DRMFILE filp,
|
|||
}
|
||||
|
||||
/* Allocate space for per-channel fixed notifier memory */
|
||||
ret = nouveau_notifier_init_channel(dev, channel, filp);
|
||||
ret = nouveau_notifier_init_channel(dev, channel, file_priv);
|
||||
if (ret) {
|
||||
nouveau_fifo_free(dev, channel);
|
||||
return ret;
|
||||
|
@ -441,20 +442,22 @@ void nouveau_fifo_free(struct drm_device *dev, int channel)
|
|||
drm_free(chan, sizeof(*chan), DRM_MEM_DRIVER);
|
||||
}
|
||||
|
||||
/* cleanups all the fifos from filp */
|
||||
void nouveau_fifo_cleanup(struct drm_device *dev, DRMFILE filp)
|
||||
/* cleanups all the fifos from file_priv */
|
||||
void nouveau_fifo_cleanup(struct drm_device *dev, struct drm_file *file_priv)
|
||||
{
|
||||
int i;
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
|
||||
DRM_DEBUG("clearing FIFO enables from filp\n");
|
||||
DRM_DEBUG("clearing FIFO enables from file_priv\n");
|
||||
for(i=0;i<nouveau_fifo_number(dev);i++)
|
||||
if (dev_priv->fifos[i] && dev_priv->fifos[i]->filp==filp)
|
||||
if (dev_priv->fifos[i] &&
|
||||
dev_priv->fifos[i]->file_priv==file_priv)
|
||||
nouveau_fifo_free(dev,i);
|
||||
}
|
||||
|
||||
int
|
||||
nouveau_fifo_owner(struct drm_device *dev, DRMFILE filp, int channel)
|
||||
nouveau_fifo_owner(struct drm_device *dev, struct drm_file *file_priv,
|
||||
int channel)
|
||||
{
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
|
||||
|
@ -462,7 +465,7 @@ nouveau_fifo_owner(struct drm_device *dev, DRMFILE filp, int channel)
|
|||
return 0;
|
||||
if (dev_priv->fifos[channel] == NULL)
|
||||
return 0;
|
||||
return (dev_priv->fifos[channel]->filp == filp);
|
||||
return (dev_priv->fifos[channel]->file_priv == file_priv);
|
||||
}
|
||||
|
||||
/***********************************
|
||||
|
@ -485,7 +488,7 @@ static int nouveau_ioctl_fifo_alloc(DRM_IOCTL_ARGS)
|
|||
if (init.fb_ctxdma_handle == ~0 || init.tt_ctxdma_handle == ~0)
|
||||
return -EINVAL;
|
||||
|
||||
res = nouveau_fifo_alloc(dev, &init.channel, filp,
|
||||
res = nouveau_fifo_alloc(dev, &init.channel, file_priv,
|
||||
init.fb_ctxdma_handle,
|
||||
init.tt_ctxdma_handle);
|
||||
if (res)
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#include "nouveau_drv.h"
|
||||
|
||||
static struct mem_block *split_block(struct mem_block *p, uint64_t start, uint64_t size,
|
||||
DRMFILE filp)
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
/* Maybe cut off the start of an existing block */
|
||||
if (start > p->start) {
|
||||
|
@ -46,7 +46,7 @@ static struct mem_block *split_block(struct mem_block *p, uint64_t start, uint64
|
|||
goto out;
|
||||
newblock->start = start;
|
||||
newblock->size = p->size - (start - p->start);
|
||||
newblock->filp = NULL;
|
||||
newblock->file_priv = NULL;
|
||||
newblock->next = p->next;
|
||||
newblock->prev = p;
|
||||
p->next->prev = newblock;
|
||||
|
@ -63,7 +63,7 @@ static struct mem_block *split_block(struct mem_block *p, uint64_t start, uint64
|
|||
goto out;
|
||||
newblock->start = start + size;
|
||||
newblock->size = p->size - size;
|
||||
newblock->filp = NULL;
|
||||
newblock->file_priv = NULL;
|
||||
newblock->next = p->next;
|
||||
newblock->prev = p;
|
||||
p->next->prev = newblock;
|
||||
|
@ -73,12 +73,14 @@ static struct mem_block *split_block(struct mem_block *p, uint64_t start, uint64
|
|||
|
||||
out:
|
||||
/* Our block is in the middle */
|
||||
p->filp = filp;
|
||||
p->file_priv = file_priv;
|
||||
return p;
|
||||
}
|
||||
|
||||
struct mem_block *nouveau_mem_alloc_block(struct mem_block *heap, uint64_t size,
|
||||
int align2, DRMFILE filp)
|
||||
struct mem_block *nouveau_mem_alloc_block(struct mem_block *heap,
|
||||
uint64_t size,
|
||||
int align2,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
struct mem_block *p;
|
||||
uint64_t mask = (1 << align2) - 1;
|
||||
|
@ -88,8 +90,8 @@ struct mem_block *nouveau_mem_alloc_block(struct mem_block *heap, uint64_t size,
|
|||
|
||||
list_for_each(p, heap) {
|
||||
uint64_t start = (p->start + mask) & ~mask;
|
||||
if (p->filp == 0 && start + size <= p->start + p->size)
|
||||
return split_block(p, start, size, filp);
|
||||
if (p->file_priv == 0 && start + size <= p->start + p->size)
|
||||
return split_block(p, start, size, file_priv);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
@ -108,12 +110,12 @@ static struct mem_block *find_block(struct mem_block *heap, uint64_t start)
|
|||
|
||||
void nouveau_mem_free_block(struct mem_block *p)
|
||||
{
|
||||
p->filp = NULL;
|
||||
p->file_priv = NULL;
|
||||
|
||||
/* Assumes a single contiguous range. Needs a special filp in
|
||||
/* Assumes a single contiguous range. Needs a special file_priv in
|
||||
* 'heap' to stop it being subsumed.
|
||||
*/
|
||||
if (p->next->filp == 0) {
|
||||
if (p->next->file_priv == 0) {
|
||||
struct mem_block *q = p->next;
|
||||
p->size += q->size;
|
||||
p->next = q->next;
|
||||
|
@ -121,7 +123,7 @@ void nouveau_mem_free_block(struct mem_block *p)
|
|||
drm_free(q, sizeof(*q), DRM_MEM_BUFS);
|
||||
}
|
||||
|
||||
if (p->prev->filp == 0) {
|
||||
if (p->prev->file_priv == 0) {
|
||||
struct mem_block *q = p->prev;
|
||||
q->size += p->size;
|
||||
q->next = p->next;
|
||||
|
@ -148,19 +150,19 @@ int nouveau_mem_init_heap(struct mem_block **heap, uint64_t start,
|
|||
|
||||
blocks->start = start;
|
||||
blocks->size = size;
|
||||
blocks->filp = NULL;
|
||||
blocks->file_priv = NULL;
|
||||
blocks->next = blocks->prev = *heap;
|
||||
|
||||
memset(*heap, 0, sizeof(**heap));
|
||||
(*heap)->filp = (DRMFILE) - 1;
|
||||
(*heap)->file_priv = (struct drm_file *) - 1;
|
||||
(*heap)->next = (*heap)->prev = blocks;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Free all blocks associated with the releasing filp
|
||||
* Free all blocks associated with the releasing file_priv
|
||||
*/
|
||||
void nouveau_mem_release(DRMFILE filp, struct mem_block *heap)
|
||||
void nouveau_mem_release(struct drm_file *file_priv, struct mem_block *heap)
|
||||
{
|
||||
struct mem_block *p;
|
||||
|
||||
|
@ -168,15 +170,16 @@ void nouveau_mem_release(DRMFILE filp, struct mem_block *heap)
|
|||
return;
|
||||
|
||||
list_for_each(p, heap) {
|
||||
if (p->filp == filp)
|
||||
p->filp = NULL;
|
||||
if (p->file_priv == file_priv)
|
||||
p->file_priv = NULL;
|
||||
}
|
||||
|
||||
/* Assumes a single contiguous range. Needs a special filp in
|
||||
/* Assumes a single contiguous range. Needs a special file_priv in
|
||||
* 'heap' to stop it being subsumed.
|
||||
*/
|
||||
list_for_each(p, heap) {
|
||||
while ((p->filp == 0) && (p->next->filp == 0) && (p->next!=heap)) {
|
||||
while ((p->file_priv == 0) && (p->next->file_priv == 0) &&
|
||||
(p->next!=heap)) {
|
||||
struct mem_block *q = p->next;
|
||||
p->size += q->size;
|
||||
p->next = q->next;
|
||||
|
@ -424,7 +427,9 @@ int nouveau_mem_init(struct drm_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment, uint64_t size, int flags, DRMFILE filp)
|
||||
struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment,
|
||||
uint64_t size, int flags,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
struct mem_block *block;
|
||||
int type;
|
||||
|
@ -453,13 +458,14 @@ struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment, uint6
|
|||
#define NOUVEAU_MEM_ALLOC_AGP {\
|
||||
type=NOUVEAU_MEM_AGP;\
|
||||
block = nouveau_mem_alloc_block(dev_priv->agp_heap, size,\
|
||||
alignment, filp);\
|
||||
alignment, file_priv); \
|
||||
if (block) goto alloc_ok;\
|
||||
}
|
||||
|
||||
#define NOUVEAU_MEM_ALLOC_PCI {\
|
||||
type = NOUVEAU_MEM_PCI;\
|
||||
block = nouveau_mem_alloc_block(dev_priv->pci_heap, size, alignment, filp);\
|
||||
block = nouveau_mem_alloc_block(dev_priv->pci_heap, size, \
|
||||
alignment, file_priv); \
|
||||
if ( block ) goto alloc_ok;\
|
||||
}
|
||||
|
||||
|
@ -467,11 +473,12 @@ struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment, uint6
|
|||
type=NOUVEAU_MEM_FB;\
|
||||
if (!(flags&NOUVEAU_MEM_MAPPED)) {\
|
||||
block = nouveau_mem_alloc_block(dev_priv->fb_nomap_heap,\
|
||||
size, alignment, filp); \
|
||||
size, alignment, \
|
||||
file_priv); \
|
||||
if (block) goto alloc_ok;\
|
||||
}\
|
||||
block = nouveau_mem_alloc_block(dev_priv->fb_heap, size,\
|
||||
alignment, filp);\
|
||||
alignment, file_priv);\
|
||||
if (block) goto alloc_ok;\
|
||||
}
|
||||
|
||||
|
@ -556,7 +563,8 @@ int nouveau_ioctl_mem_alloc(DRM_IOCTL_ARGS)
|
|||
(struct drm_nouveau_mem_alloc_t __user *) data,
|
||||
sizeof(alloc));
|
||||
|
||||
block=nouveau_mem_alloc(dev, alloc.alignment, alloc.size, alloc.flags, filp);
|
||||
block=nouveau_mem_alloc(dev, alloc.alignment, alloc.size, alloc.flags,
|
||||
file_priv);
|
||||
if (!block)
|
||||
return -ENOMEM;
|
||||
alloc.map_handle=block->map_handle;
|
||||
|
@ -589,7 +597,7 @@ int nouveau_ioctl_mem_free(DRM_IOCTL_ARGS)
|
|||
block = find_block(dev_priv->pci_heap, memfree.offset);
|
||||
if (!block)
|
||||
return -EFAULT;
|
||||
if (block->filp != filp)
|
||||
if (block->file_priv != file_priv)
|
||||
return -EPERM;
|
||||
|
||||
nouveau_mem_free(dev, block);
|
||||
|
|
|
@ -30,7 +30,8 @@
|
|||
#include "nouveau_drv.h"
|
||||
|
||||
int
|
||||
nouveau_notifier_init_channel(struct drm_device *dev, int channel, DRMFILE filp)
|
||||
nouveau_notifier_init_channel(struct drm_device *dev, int channel,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
struct nouveau_fifo *chan = dev_priv->fifos[channel];
|
||||
|
@ -44,7 +45,8 @@ nouveau_notifier_init_channel(struct drm_device *dev, int channel, DRMFILE filp)
|
|||
flags = NOUVEAU_MEM_FB;
|
||||
flags |= NOUVEAU_MEM_MAPPED;
|
||||
|
||||
chan->notifier_block = nouveau_mem_alloc(dev, 0, PAGE_SIZE, flags,filp);
|
||||
chan->notifier_block = nouveau_mem_alloc(dev, 0, PAGE_SIZE, flags,
|
||||
file_priv);
|
||||
if (!chan->notifier_block)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -87,7 +89,8 @@ nouveau_notifier_alloc(struct drm_device *dev, int channel, uint32_t handle,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
mem = nouveau_mem_alloc_block(chan->notifier_heap, 32, 0, chan->filp);
|
||||
mem = nouveau_mem_alloc_block(chan->notifier_heap, 32, 0,
|
||||
chan->file_priv);
|
||||
if (!mem) {
|
||||
DRM_ERROR("Channel %d notifier block full\n", channel);
|
||||
return -ENOMEM;
|
||||
|
@ -135,7 +138,7 @@ nouveau_ioctl_notifier_alloc(DRM_IOCTL_ARGS)
|
|||
(struct drm_nouveau_notifier_alloc __user*)data,
|
||||
sizeof(na));
|
||||
|
||||
if (!nouveau_fifo_owner(dev, filp, na.channel)) {
|
||||
if (!nouveau_fifo_owner(dev, file_priv, na.channel)) {
|
||||
DRM_ERROR("pid %d doesn't own channel %d\n",
|
||||
DRM_CURRENTPID, na.channel);
|
||||
return -EPERM;
|
||||
|
|
|
@ -241,7 +241,7 @@ nouveau_gpuobj_new(struct drm_device *dev, int channel, int size, int align,
|
|||
/* Allocate a chunk of the PRAMIN aperture */
|
||||
gpuobj->im_pramin = nouveau_mem_alloc_block(pramin, size,
|
||||
drm_order(align),
|
||||
(DRMFILE)-2);
|
||||
(struct drm_file *)-2);
|
||||
if (!gpuobj->im_pramin) {
|
||||
nouveau_gpuobj_del(dev, &gpuobj);
|
||||
return -ENOMEM;
|
||||
|
@ -1035,7 +1035,7 @@ int nouveau_ioctl_grobj_alloc(DRM_IOCTL_ARGS)
|
|||
(struct drm_nouveau_grobj_alloc_t __user*)data,
|
||||
sizeof(init));
|
||||
|
||||
if (!nouveau_fifo_owner(dev, filp, init.channel)) {
|
||||
if (!nouveau_fifo_owner(dev, file_priv, init.channel)) {
|
||||
DRM_ERROR("pid %d doesn't own channel %d\n",
|
||||
DRM_CURRENTPID, init.channel);
|
||||
return -EINVAL;
|
||||
|
|
|
@ -353,15 +353,16 @@ static void nouveau_card_takedown(struct drm_device *dev)
|
|||
}
|
||||
}
|
||||
|
||||
/* here a client dies, release the stuff that was allocated for its filp */
|
||||
void nouveau_preclose(struct drm_device *dev, DRMFILE filp)
|
||||
/* here a client dies, release the stuff that was allocated for its
|
||||
* file_priv */
|
||||
void nouveau_preclose(struct drm_device *dev, struct drm_file *file_priv)
|
||||
{
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
|
||||
nouveau_fifo_cleanup(dev, filp);
|
||||
nouveau_mem_release(filp,dev_priv->fb_heap);
|
||||
nouveau_mem_release(filp,dev_priv->agp_heap);
|
||||
nouveau_mem_release(filp,dev_priv->pci_heap);
|
||||
nouveau_fifo_cleanup(dev, file_priv);
|
||||
nouveau_mem_release(file_priv,dev_priv->fb_heap);
|
||||
nouveau_mem_release(file_priv,dev_priv->agp_heap);
|
||||
nouveau_mem_release(file_priv,dev_priv->pci_heap);
|
||||
}
|
||||
|
||||
/* first module load, setup the mmio/fb mapping */
|
||||
|
|
|
@ -179,7 +179,7 @@ nv50_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, uin
|
|||
|
||||
gpuobj->im_backing = nouveau_mem_alloc(dev, NV50_INSTMEM_PAGE_SIZE,
|
||||
*sz, NOUVEAU_MEM_FB,
|
||||
(DRMFILE)-2);
|
||||
(struct drm_file *)-2);
|
||||
if (!gpuobj->im_backing) {
|
||||
DRM_ERROR("Couldn't allocate vram to back PRAMIN pages\n");
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -630,7 +630,7 @@ int r128_cce_init(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(init, (drm_r128_init_t __user *) data,
|
||||
sizeof(init));
|
||||
|
@ -651,7 +651,7 @@ int r128_cce_start(DRM_IOCTL_ARGS)
|
|||
drm_r128_private_t *dev_priv = dev->dev_private;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (dev_priv->cce_running || dev_priv->cce_mode == R128_PM4_NONPM4) {
|
||||
DRM_DEBUG("%s while CCE running\n", __FUNCTION__);
|
||||
|
@ -674,7 +674,7 @@ int r128_cce_stop(DRM_IOCTL_ARGS)
|
|||
int ret;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(stop, (drm_r128_cce_stop_t __user *) data,
|
||||
sizeof(stop));
|
||||
|
@ -715,7 +715,7 @@ int r128_cce_reset(DRM_IOCTL_ARGS)
|
|||
drm_r128_private_t *dev_priv = dev->dev_private;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_DEBUG("%s called before init done\n", __FUNCTION__);
|
||||
|
@ -736,7 +736,7 @@ int r128_cce_idle(DRM_IOCTL_ARGS)
|
|||
drm_r128_private_t *dev_priv = dev->dev_private;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (dev_priv->cce_running) {
|
||||
r128_do_cce_flush(dev_priv);
|
||||
|
@ -750,7 +750,7 @@ int r128_engine_reset(DRM_IOCTL_ARGS)
|
|||
DRM_DEVICE;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
return r128_do_engine_reset(dev);
|
||||
}
|
||||
|
@ -826,7 +826,7 @@ static struct drm_buf *r128_freelist_get(struct drm_device * dev)
|
|||
for (i = 0; i < dma->buf_count; i++) {
|
||||
buf = dma->buflist[i];
|
||||
buf_priv = buf->dev_private;
|
||||
if (buf->filp == 0)
|
||||
if (buf->file_priv == 0)
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
@ -884,7 +884,9 @@ int r128_wait_ring(drm_r128_private_t * dev_priv, int n)
|
|||
return -EBUSY;
|
||||
}
|
||||
|
||||
static int r128_cce_get_buffers(DRMFILE filp, struct drm_device * dev, struct drm_dma * d)
|
||||
static int r128_cce_get_buffers(struct drm_device * dev,
|
||||
struct drm_file *file_priv,
|
||||
struct drm_dma * d)
|
||||
{
|
||||
int i;
|
||||
struct drm_buf *buf;
|
||||
|
@ -894,7 +896,7 @@ static int r128_cce_get_buffers(DRMFILE filp, struct drm_device * dev, struct dr
|
|||
if (!buf)
|
||||
return -EAGAIN;
|
||||
|
||||
buf->filp = filp;
|
||||
buf->file_priv = file_priv;
|
||||
|
||||
if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx,
|
||||
sizeof(buf->idx)))
|
||||
|
@ -916,7 +918,7 @@ int r128_cce_buffers(DRM_IOCTL_ARGS)
|
|||
struct drm_dma __user *argp = (void __user *)data;
|
||||
struct drm_dma d;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));
|
||||
|
||||
|
@ -939,7 +941,7 @@ int r128_cce_buffers(DRM_IOCTL_ARGS)
|
|||
d.granted_count = 0;
|
||||
|
||||
if (d.request_count) {
|
||||
ret = r128_cce_get_buffers(filp, dev, &d);
|
||||
ret = r128_cce_get_buffers(dev, file_priv, &d);
|
||||
}
|
||||
|
||||
DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d));
|
||||
|
|
|
@ -156,7 +156,8 @@ extern void r128_driver_irq_preinstall(struct drm_device * dev);
|
|||
extern void r128_driver_irq_postinstall(struct drm_device * dev);
|
||||
extern void r128_driver_irq_uninstall(struct drm_device * dev);
|
||||
extern void r128_driver_lastclose(struct drm_device * dev);
|
||||
extern void r128_driver_preclose(struct drm_device * dev, DRMFILE filp);
|
||||
extern void r128_driver_preclose(struct drm_device * dev,
|
||||
struct drm_file *file_priv);
|
||||
|
||||
extern long r128_compat_ioctl(struct file *filp, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
|
|
@ -776,8 +776,9 @@ static void r128_cce_dispatch_indices(struct drm_device * dev,
|
|||
sarea_priv->nbox = 0;
|
||||
}
|
||||
|
||||
static int r128_cce_dispatch_blit(DRMFILE filp,
|
||||
struct drm_device * dev, drm_r128_blit_t * blit)
|
||||
static int r128_cce_dispatch_blit(struct drm_device * dev,
|
||||
struct drm_file *file_priv,
|
||||
drm_r128_blit_t * blit)
|
||||
{
|
||||
drm_r128_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
|
@ -829,9 +830,9 @@ static int r128_cce_dispatch_blit(DRMFILE filp,
|
|||
buf = dma->buflist[blit->idx];
|
||||
buf_priv = buf->dev_private;
|
||||
|
||||
if (buf->filp != filp) {
|
||||
if (buf->file_priv != file_priv) {
|
||||
DRM_ERROR("process %d using buffer owned by %p\n",
|
||||
DRM_CURRENTPID, buf->filp);
|
||||
DRM_CURRENTPID, buf->file_priv);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (buf->pending) {
|
||||
|
@ -1249,7 +1250,7 @@ static int r128_cce_clear(DRM_IOCTL_ARGS)
|
|||
drm_r128_clear_t clear;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(clear, (drm_r128_clear_t __user *) data,
|
||||
sizeof(clear));
|
||||
|
@ -1315,7 +1316,7 @@ static int r128_cce_flip(DRM_IOCTL_ARGS)
|
|||
drm_r128_private_t *dev_priv = dev->dev_private;
|
||||
DRM_DEBUG("%s\n", __FUNCTION__);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
RING_SPACE_TEST_WITH_RETURN(dev_priv);
|
||||
|
||||
|
@ -1335,7 +1336,7 @@ static int r128_cce_swap(DRM_IOCTL_ARGS)
|
|||
drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
|
||||
DRM_DEBUG("%s\n", __FUNCTION__);
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
RING_SPACE_TEST_WITH_RETURN(dev_priv);
|
||||
|
||||
|
@ -1359,7 +1360,7 @@ static int r128_cce_vertex(DRM_IOCTL_ARGS)
|
|||
drm_r128_buf_priv_t *buf_priv;
|
||||
drm_r128_vertex_t vertex;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
@ -1389,9 +1390,9 @@ static int r128_cce_vertex(DRM_IOCTL_ARGS)
|
|||
buf = dma->buflist[vertex.idx];
|
||||
buf_priv = buf->dev_private;
|
||||
|
||||
if (buf->filp != filp) {
|
||||
if (buf->file_priv != file_priv) {
|
||||
DRM_ERROR("process %d using buffer owned by %p\n",
|
||||
DRM_CURRENTPID, buf->filp);
|
||||
DRM_CURRENTPID, buf->file_priv);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (buf->pending) {
|
||||
|
@ -1419,7 +1420,7 @@ static int r128_cce_indices(DRM_IOCTL_ARGS)
|
|||
drm_r128_indices_t elts;
|
||||
int count;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
@ -1448,9 +1449,9 @@ static int r128_cce_indices(DRM_IOCTL_ARGS)
|
|||
buf = dma->buflist[elts.idx];
|
||||
buf_priv = buf->dev_private;
|
||||
|
||||
if (buf->filp != filp) {
|
||||
if (buf->file_priv != file_priv) {
|
||||
DRM_ERROR("process %d using buffer owned by %p\n",
|
||||
DRM_CURRENTPID, buf->filp);
|
||||
DRM_CURRENTPID, buf->file_priv);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (buf->pending) {
|
||||
|
@ -1488,7 +1489,7 @@ static int r128_cce_blit(DRM_IOCTL_ARGS)
|
|||
drm_r128_blit_t blit;
|
||||
int ret;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(blit, (drm_r128_blit_t __user *) data,
|
||||
sizeof(blit));
|
||||
|
@ -1504,7 +1505,7 @@ static int r128_cce_blit(DRM_IOCTL_ARGS)
|
|||
RING_SPACE_TEST_WITH_RETURN(dev_priv);
|
||||
VB_AGE_TEST_WITH_RETURN(dev_priv);
|
||||
|
||||
ret = r128_cce_dispatch_blit(filp, dev, &blit);
|
||||
ret = r128_cce_dispatch_blit(dev, file_priv, &blit);
|
||||
|
||||
COMMIT_RING();
|
||||
return ret;
|
||||
|
@ -1517,7 +1518,7 @@ static int r128_cce_depth(DRM_IOCTL_ARGS)
|
|||
drm_r128_depth_t depth;
|
||||
int ret;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(depth, (drm_r128_depth_t __user *) data,
|
||||
sizeof(depth));
|
||||
|
@ -1551,7 +1552,7 @@ static int r128_cce_stipple(DRM_IOCTL_ARGS)
|
|||
drm_r128_stipple_t stipple;
|
||||
u32 mask[32];
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(stipple, (drm_r128_stipple_t __user *) data,
|
||||
sizeof(stipple));
|
||||
|
@ -1579,7 +1580,7 @@ static int r128_cce_indirect(DRM_IOCTL_ARGS)
|
|||
RING_LOCALS;
|
||||
#endif
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
@ -1601,9 +1602,9 @@ static int r128_cce_indirect(DRM_IOCTL_ARGS)
|
|||
buf = dma->buflist[indirect.idx];
|
||||
buf_priv = buf->dev_private;
|
||||
|
||||
if (buf->filp != filp) {
|
||||
if (buf->file_priv != file_priv) {
|
||||
DRM_ERROR("process %d using buffer owned by %p\n",
|
||||
DRM_CURRENTPID, buf->filp);
|
||||
DRM_CURRENTPID, buf->file_priv);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (buf->pending) {
|
||||
|
@ -1675,7 +1676,7 @@ static int r128_getparam(DRM_IOCTL_ARGS)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void r128_driver_preclose(struct drm_device * dev, DRMFILE filp)
|
||||
void r128_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
|
||||
{
|
||||
if (dev->dev_private) {
|
||||
drm_r128_private_t *dev_priv = dev->dev_private;
|
||||
|
|
|
@ -779,8 +779,7 @@ static int r300_scratch(drm_radeon_private_t *dev_priv,
|
|||
* Called by the ioctl handler function radeon_cp_cmdbuf.
|
||||
*/
|
||||
int r300_do_cp_cmdbuf(struct drm_device *dev,
|
||||
DRMFILE filp,
|
||||
struct drm_file *filp_priv,
|
||||
struct drm_file *file_priv,
|
||||
drm_radeon_kcmd_buffer_t *cmdbuf)
|
||||
{
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
|
@ -883,9 +882,10 @@ int r300_do_cp_cmdbuf(struct drm_device *dev,
|
|||
}
|
||||
|
||||
buf = dma->buflist[idx];
|
||||
if (buf->filp != filp || buf->pending) {
|
||||
if (buf->file_priv != file_priv || buf->pending) {
|
||||
DRM_ERROR("bad buffer %p %p %d\n",
|
||||
buf->filp, filp, buf->pending);
|
||||
buf->file_priv, file_priv,
|
||||
buf->pending);
|
||||
ret = -EINVAL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
|
@ -1843,7 +1843,7 @@ int radeon_cp_init(DRM_IOCTL_ARGS)
|
|||
DRM_DEVICE;
|
||||
drm_radeon_init_t init;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(init, (drm_radeon_init_t __user *) data,
|
||||
sizeof(init));
|
||||
|
@ -1869,7 +1869,7 @@ int radeon_cp_start(DRM_IOCTL_ARGS)
|
|||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (dev_priv->cp_running) {
|
||||
DRM_DEBUG("%s while CP running\n", __FUNCTION__);
|
||||
|
@ -1897,7 +1897,7 @@ int radeon_cp_stop(DRM_IOCTL_ARGS)
|
|||
int ret;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(stop, (drm_radeon_cp_stop_t __user *) data,
|
||||
sizeof(stop));
|
||||
|
@ -1989,7 +1989,7 @@ int radeon_cp_reset(DRM_IOCTL_ARGS)
|
|||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_DEBUG("%s called before init done\n", __FUNCTION__);
|
||||
|
@ -2010,7 +2010,7 @@ int radeon_cp_idle(DRM_IOCTL_ARGS)
|
|||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
return radeon_do_cp_idle(dev_priv);
|
||||
}
|
||||
|
@ -2029,7 +2029,7 @@ int radeon_engine_reset(DRM_IOCTL_ARGS)
|
|||
DRM_DEVICE;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
return radeon_do_engine_reset(dev);
|
||||
}
|
||||
|
@ -2086,8 +2086,9 @@ struct drm_buf *radeon_freelist_get(struct drm_device * dev)
|
|||
for (i = start; i < dma->buf_count; i++) {
|
||||
buf = dma->buflist[i];
|
||||
buf_priv = buf->dev_private;
|
||||
if (buf->filp == 0 || (buf->pending &&
|
||||
buf_priv->age <= done_age)) {
|
||||
if (buf->file_priv == NULL || (buf->pending &&
|
||||
buf_priv->age <=
|
||||
done_age)) {
|
||||
dev_priv->stats.requested_bufs++;
|
||||
buf->pending = 0;
|
||||
return buf;
|
||||
|
@ -2126,8 +2127,9 @@ struct drm_buf *radeon_freelist_get(struct drm_device * dev)
|
|||
for (i = start; i < dma->buf_count; i++) {
|
||||
buf = dma->buflist[i];
|
||||
buf_priv = buf->dev_private;
|
||||
if (buf->filp == 0 || (buf->pending &&
|
||||
buf_priv->age <= done_age)) {
|
||||
if (buf->file_priv == 0 || (buf->pending &&
|
||||
buf_priv->age <=
|
||||
done_age)) {
|
||||
dev_priv->stats.requested_bufs++;
|
||||
buf->pending = 0;
|
||||
return buf;
|
||||
|
@ -2190,7 +2192,8 @@ int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n)
|
|||
return -EBUSY;
|
||||
}
|
||||
|
||||
static int radeon_cp_get_buffers(DRMFILE filp, struct drm_device * dev,
|
||||
static int radeon_cp_get_buffers(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
struct drm_dma * d)
|
||||
{
|
||||
int i;
|
||||
|
@ -2201,7 +2204,7 @@ static int radeon_cp_get_buffers(DRMFILE filp, struct drm_device * dev,
|
|||
if (!buf)
|
||||
return -EBUSY; /* NOTE: broken client */
|
||||
|
||||
buf->filp = filp;
|
||||
buf->file_priv = file_priv;
|
||||
|
||||
if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx,
|
||||
sizeof(buf->idx)))
|
||||
|
@ -2223,7 +2226,7 @@ int radeon_cp_buffers(DRM_IOCTL_ARGS)
|
|||
struct drm_dma __user *argp = (void __user *)data;
|
||||
struct drm_dma d;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));
|
||||
|
||||
|
@ -2246,7 +2249,7 @@ int radeon_cp_buffers(DRM_IOCTL_ARGS)
|
|||
d.granted_count = 0;
|
||||
|
||||
if (d.request_count) {
|
||||
ret = radeon_cp_get_buffers(filp, dev, &d);
|
||||
ret = radeon_cp_get_buffers(dev, file_priv, &d);
|
||||
}
|
||||
|
||||
DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d));
|
||||
|
|
|
@ -195,7 +195,7 @@ struct mem_block {
|
|||
struct mem_block *prev;
|
||||
int start;
|
||||
int size;
|
||||
DRMFILE filp; /* 0: free, -1: heap, other: real files */
|
||||
struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
|
||||
};
|
||||
|
||||
struct radeon_surface {
|
||||
|
@ -210,7 +210,7 @@ struct radeon_virt_surface {
|
|||
u32 lower;
|
||||
u32 upper;
|
||||
u32 flags;
|
||||
DRMFILE filp;
|
||||
struct drm_file *file_priv;
|
||||
};
|
||||
|
||||
typedef struct drm_radeon_private {
|
||||
|
@ -356,7 +356,8 @@ extern int radeon_mem_alloc(DRM_IOCTL_ARGS);
|
|||
extern int radeon_mem_free(DRM_IOCTL_ARGS);
|
||||
extern int radeon_mem_init_heap(DRM_IOCTL_ARGS);
|
||||
extern void radeon_mem_takedown(struct mem_block **heap);
|
||||
extern void radeon_mem_release(DRMFILE filp, struct mem_block *heap);
|
||||
extern void radeon_mem_release(struct drm_file *file_priv,
|
||||
struct mem_block *heap);
|
||||
|
||||
/* radeon_irq.c */
|
||||
extern int radeon_irq_emit(DRM_IOCTL_ARGS);
|
||||
|
@ -377,18 +378,21 @@ extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value);
|
|||
extern int radeon_driver_load(struct drm_device *dev, unsigned long flags);
|
||||
extern int radeon_driver_unload(struct drm_device *dev);
|
||||
extern int radeon_driver_firstopen(struct drm_device *dev);
|
||||
extern void radeon_driver_preclose(struct drm_device * dev, DRMFILE filp);
|
||||
extern void radeon_driver_postclose(struct drm_device * dev, struct drm_file * filp);
|
||||
extern void radeon_driver_preclose(struct drm_device * dev,
|
||||
struct drm_file *file_priv);
|
||||
extern void radeon_driver_postclose(struct drm_device * dev,
|
||||
struct drm_file *file_priv);
|
||||
extern void radeon_driver_lastclose(struct drm_device * dev);
|
||||
extern int radeon_driver_open(struct drm_device * dev, struct drm_file * filp_priv);
|
||||
extern int radeon_driver_open(struct drm_device * dev,
|
||||
struct drm_file * file_priv);
|
||||
extern long radeon_compat_ioctl(struct file *filp, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
||||
/* r300_cmdbuf.c */
|
||||
extern void r300_init_reg_flags(void);
|
||||
|
||||
extern int r300_do_cp_cmdbuf(struct drm_device *dev, DRMFILE filp,
|
||||
struct drm_file* filp_priv,
|
||||
extern int r300_do_cp_cmdbuf(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
drm_radeon_kcmd_buffer_t* cmdbuf);
|
||||
|
||||
/* Flags for stats.boxes
|
||||
|
|
|
@ -204,7 +204,7 @@ int radeon_irq_emit(DRM_IOCTL_ARGS)
|
|||
drm_radeon_irq_emit_t emit;
|
||||
int result;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
*/
|
||||
|
||||
static struct mem_block *split_block(struct mem_block *p, int start, int size,
|
||||
DRMFILE filp)
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
/* Maybe cut off the start of an existing block */
|
||||
if (start > p->start) {
|
||||
|
@ -49,7 +49,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
|
|||
goto out;
|
||||
newblock->start = start;
|
||||
newblock->size = p->size - (start - p->start);
|
||||
newblock->filp = NULL;
|
||||
newblock->file_priv = NULL;
|
||||
newblock->next = p->next;
|
||||
newblock->prev = p;
|
||||
p->next->prev = newblock;
|
||||
|
@ -66,7 +66,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
|
|||
goto out;
|
||||
newblock->start = start + size;
|
||||
newblock->size = p->size - size;
|
||||
newblock->filp = NULL;
|
||||
newblock->file_priv = NULL;
|
||||
newblock->next = p->next;
|
||||
newblock->prev = p;
|
||||
p->next->prev = newblock;
|
||||
|
@ -76,20 +76,20 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
|
|||
|
||||
out:
|
||||
/* Our block is in the middle */
|
||||
p->filp = filp;
|
||||
p->file_priv = file_priv;
|
||||
return p;
|
||||
}
|
||||
|
||||
static struct mem_block *alloc_block(struct mem_block *heap, int size,
|
||||
int align2, DRMFILE filp)
|
||||
int align2, struct drm_file *file_priv)
|
||||
{
|
||||
struct mem_block *p;
|
||||
int mask = (1 << align2) - 1;
|
||||
|
||||
list_for_each(p, heap) {
|
||||
int start = (p->start + mask) & ~mask;
|
||||
if (p->filp == 0 && start + size <= p->start + p->size)
|
||||
return split_block(p, start, size, filp);
|
||||
if (p->file_priv == 0 && start + size <= p->start + p->size)
|
||||
return split_block(p, start, size, file_priv);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
@ -108,12 +108,12 @@ static struct mem_block *find_block(struct mem_block *heap, int start)
|
|||
|
||||
static void free_block(struct mem_block *p)
|
||||
{
|
||||
p->filp = NULL;
|
||||
p->file_priv = NULL;
|
||||
|
||||
/* Assumes a single contiguous range. Needs a special filp in
|
||||
/* Assumes a single contiguous range. Needs a special file_priv in
|
||||
* 'heap' to stop it being subsumed.
|
||||
*/
|
||||
if (p->next->filp == 0) {
|
||||
if (p->next->file_priv == 0) {
|
||||
struct mem_block *q = p->next;
|
||||
p->size += q->size;
|
||||
p->next = q->next;
|
||||
|
@ -121,7 +121,7 @@ static void free_block(struct mem_block *p)
|
|||
drm_free(q, sizeof(*q), DRM_MEM_BUFS);
|
||||
}
|
||||
|
||||
if (p->prev->filp == 0) {
|
||||
if (p->prev->file_priv == 0) {
|
||||
struct mem_block *q = p->prev;
|
||||
q->size += p->size;
|
||||
q->next = p->next;
|
||||
|
@ -147,18 +147,18 @@ static int init_heap(struct mem_block **heap, int start, int size)
|
|||
|
||||
blocks->start = start;
|
||||
blocks->size = size;
|
||||
blocks->filp = NULL;
|
||||
blocks->file_priv = NULL;
|
||||
blocks->next = blocks->prev = *heap;
|
||||
|
||||
memset(*heap, 0, sizeof(**heap));
|
||||
(*heap)->filp = (DRMFILE) - 1;
|
||||
(*heap)->file_priv = (struct drm_file *) - 1;
|
||||
(*heap)->next = (*heap)->prev = blocks;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Free all blocks associated with the releasing file.
|
||||
*/
|
||||
void radeon_mem_release(DRMFILE filp, struct mem_block *heap)
|
||||
void radeon_mem_release(struct drm_file *file_priv, struct mem_block *heap)
|
||||
{
|
||||
struct mem_block *p;
|
||||
|
||||
|
@ -166,15 +166,15 @@ void radeon_mem_release(DRMFILE filp, struct mem_block *heap)
|
|||
return;
|
||||
|
||||
list_for_each(p, heap) {
|
||||
if (p->filp == filp)
|
||||
p->filp = NULL;
|
||||
if (p->file_priv == file_priv)
|
||||
p->file_priv = NULL;
|
||||
}
|
||||
|
||||
/* Assumes a single contiguous range. Needs a special filp in
|
||||
/* Assumes a single contiguous range. Needs a special file_priv in
|
||||
* 'heap' to stop it being subsumed.
|
||||
*/
|
||||
list_for_each(p, heap) {
|
||||
while (p->filp == 0 && p->next->filp == 0) {
|
||||
while (p->file_priv == 0 && p->next->file_priv == 0) {
|
||||
struct mem_block *q = p->next;
|
||||
p->size += q->size;
|
||||
p->next = q->next;
|
||||
|
@ -242,7 +242,7 @@ int radeon_mem_alloc(DRM_IOCTL_ARGS)
|
|||
if (alloc.alignment < 12)
|
||||
alloc.alignment = 12;
|
||||
|
||||
block = alloc_block(*heap, alloc.size, alloc.alignment, filp);
|
||||
block = alloc_block(*heap, alloc.size, alloc.alignment, file_priv);
|
||||
|
||||
if (!block)
|
||||
return -ENOMEM;
|
||||
|
@ -278,7 +278,7 @@ int radeon_mem_free(DRM_IOCTL_ARGS)
|
|||
if (!block)
|
||||
return -EFAULT;
|
||||
|
||||
if (block->filp != filp)
|
||||
if (block->file_priv != file_priv)
|
||||
return -EPERM;
|
||||
|
||||
free_block(block);
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t *
|
||||
dev_priv,
|
||||
struct drm_file * filp_priv,
|
||||
struct drm_file *file_priv,
|
||||
u32 * offset)
|
||||
{
|
||||
u64 off = *offset;
|
||||
|
@ -71,7 +71,7 @@ static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t *
|
|||
* magic offset we get from SETPARAM or calculated from fb_location
|
||||
*/
|
||||
if (off < (dev_priv->fb_size + dev_priv->gart_size)) {
|
||||
radeon_priv = filp_priv->driver_priv;
|
||||
radeon_priv = file_priv->driver_priv;
|
||||
off += radeon_priv->radeon_fb_delta;
|
||||
}
|
||||
|
||||
|
@ -90,13 +90,13 @@ static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t *
|
|||
|
||||
static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
|
||||
dev_priv,
|
||||
struct drm_file * filp_priv,
|
||||
struct drm_file *file_priv,
|
||||
int id, u32 *data)
|
||||
{
|
||||
switch (id) {
|
||||
|
||||
case RADEON_EMIT_PP_MISC:
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&data[(RADEON_RB3D_DEPTHOFFSET - RADEON_PP_MISC) / 4])) {
|
||||
DRM_ERROR("Invalid depth buffer offset\n");
|
||||
return -EINVAL;
|
||||
|
@ -104,7 +104,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
|
|||
break;
|
||||
|
||||
case RADEON_EMIT_PP_CNTL:
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&data[(RADEON_RB3D_COLOROFFSET - RADEON_PP_CNTL) / 4])) {
|
||||
DRM_ERROR("Invalid colour buffer offset\n");
|
||||
return -EINVAL;
|
||||
|
@ -117,7 +117,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
|
|||
case R200_EMIT_PP_TXOFFSET_3:
|
||||
case R200_EMIT_PP_TXOFFSET_4:
|
||||
case R200_EMIT_PP_TXOFFSET_5:
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&data[0])) {
|
||||
DRM_ERROR("Invalid R200 texture offset\n");
|
||||
return -EINVAL;
|
||||
|
@ -127,7 +127,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
|
|||
case RADEON_EMIT_PP_TXFILTER_0:
|
||||
case RADEON_EMIT_PP_TXFILTER_1:
|
||||
case RADEON_EMIT_PP_TXFILTER_2:
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&data[(RADEON_PP_TXOFFSET_0 - RADEON_PP_TXFILTER_0) / 4])) {
|
||||
DRM_ERROR("Invalid R100 texture offset\n");
|
||||
return -EINVAL;
|
||||
|
@ -143,7 +143,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
|
|||
int i;
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv,
|
||||
filp_priv,
|
||||
file_priv,
|
||||
&data[i])) {
|
||||
DRM_ERROR
|
||||
("Invalid R200 cubic texture offset\n");
|
||||
|
@ -159,7 +159,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
|
|||
int i;
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv,
|
||||
filp_priv,
|
||||
file_priv,
|
||||
&data[i])) {
|
||||
DRM_ERROR
|
||||
("Invalid R100 cubic texture offset\n");
|
||||
|
@ -264,7 +264,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
|
|||
|
||||
static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
|
||||
dev_priv,
|
||||
struct drm_file *filp_priv,
|
||||
struct drm_file *file_priv,
|
||||
drm_radeon_kcmd_buffer_t *
|
||||
cmdbuf,
|
||||
unsigned int *cmdsz)
|
||||
|
@ -326,7 +326,8 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
|
|||
i = 2;
|
||||
while ((k < narrays) && (i < (count + 2))) {
|
||||
i++; /* skip attribute field */
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[i])) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&cmd[i])) {
|
||||
DRM_ERROR
|
||||
("Invalid offset (k=%d i=%d) in 3D_LOAD_VBPNTR packet.\n",
|
||||
k, i);
|
||||
|
@ -337,7 +338,9 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
|
|||
if (k == narrays)
|
||||
break;
|
||||
/* have one more to process, they come in pairs */
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[i])) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv,
|
||||
file_priv, &cmd[i]))
|
||||
{
|
||||
DRM_ERROR
|
||||
("Invalid offset (k=%d i=%d) in 3D_LOAD_VBPNTR packet.\n",
|
||||
k, i);
|
||||
|
@ -360,7 +363,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
|
|||
DRM_ERROR("Invalid 3d packet for r200-class chip\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[1])) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv, &cmd[1])) {
|
||||
DRM_ERROR("Invalid rndr_gen_indx offset\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -375,7 +378,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
|
|||
DRM_ERROR("Invalid indx_buffer reg address %08X\n", cmd[1]);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[2])) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv, &cmd[2])) {
|
||||
DRM_ERROR("Invalid indx_buffer offset is %08X\n", cmd[2]);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -389,7 +392,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
|
|||
| RADEON_GMC_DST_PITCH_OFFSET_CNTL)) {
|
||||
offset = cmd[2] << 10;
|
||||
if (radeon_check_and_fixup_offset
|
||||
(dev_priv, filp_priv, &offset)) {
|
||||
(dev_priv, file_priv, &offset)) {
|
||||
DRM_ERROR("Invalid first packet offset\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -400,7 +403,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
|
|||
(cmd[1] & RADEON_GMC_DST_PITCH_OFFSET_CNTL)) {
|
||||
offset = cmd[3] << 10;
|
||||
if (radeon_check_and_fixup_offset
|
||||
(dev_priv, filp_priv, &offset)) {
|
||||
(dev_priv, file_priv, &offset)) {
|
||||
DRM_ERROR("Invalid second packet offset\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -439,7 +442,7 @@ static __inline__ void radeon_emit_clip_rect(drm_radeon_private_t * dev_priv,
|
|||
/* Emit 1.1 state
|
||||
*/
|
||||
static int radeon_emit_state(drm_radeon_private_t * dev_priv,
|
||||
struct drm_file * filp_priv,
|
||||
struct drm_file *file_priv,
|
||||
drm_radeon_context_regs_t * ctx,
|
||||
drm_radeon_texture_regs_t * tex,
|
||||
unsigned int dirty)
|
||||
|
@ -448,13 +451,13 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
|
|||
DRM_DEBUG("dirty=0x%08x\n", dirty);
|
||||
|
||||
if (dirty & RADEON_UPLOAD_CONTEXT) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&ctx->rb3d_depthoffset)) {
|
||||
DRM_ERROR("Invalid depth buffer offset\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&ctx->rb3d_coloroffset)) {
|
||||
DRM_ERROR("Invalid depth buffer offset\n");
|
||||
return -EINVAL;
|
||||
|
@ -543,7 +546,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
|
|||
}
|
||||
|
||||
if (dirty & RADEON_UPLOAD_TEX0) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&tex[0].pp_txoffset)) {
|
||||
DRM_ERROR("Invalid texture offset for unit 0\n");
|
||||
return -EINVAL;
|
||||
|
@ -563,7 +566,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
|
|||
}
|
||||
|
||||
if (dirty & RADEON_UPLOAD_TEX1) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&tex[1].pp_txoffset)) {
|
||||
DRM_ERROR("Invalid texture offset for unit 1\n");
|
||||
return -EINVAL;
|
||||
|
@ -583,7 +586,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
|
|||
}
|
||||
|
||||
if (dirty & RADEON_UPLOAD_TEX2) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv,
|
||||
&tex[2].pp_txoffset)) {
|
||||
DRM_ERROR("Invalid texture offset for unit 2\n");
|
||||
return -EINVAL;
|
||||
|
@ -608,7 +611,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
|
|||
/* Emit 1.2 state
|
||||
*/
|
||||
static int radeon_emit_state2(drm_radeon_private_t * dev_priv,
|
||||
struct drm_file * filp_priv,
|
||||
struct drm_file *file_priv,
|
||||
drm_radeon_state_t * state)
|
||||
{
|
||||
RING_LOCALS;
|
||||
|
@ -621,7 +624,7 @@ static int radeon_emit_state2(drm_radeon_private_t * dev_priv,
|
|||
ADVANCE_RING();
|
||||
}
|
||||
|
||||
return radeon_emit_state(dev_priv, filp_priv, &state->context,
|
||||
return radeon_emit_state(dev_priv, file_priv, &state->context,
|
||||
state->tex, state->dirty);
|
||||
}
|
||||
|
||||
|
@ -1646,13 +1649,12 @@ static void radeon_cp_dispatch_indices(struct drm_device * dev,
|
|||
|
||||
#define RADEON_MAX_TEXTURE_SIZE RADEON_BUFFER_SIZE
|
||||
|
||||
static int radeon_cp_dispatch_texture(DRMFILE filp,
|
||||
struct drm_device * dev,
|
||||
static int radeon_cp_dispatch_texture(struct drm_device * dev,
|
||||
struct drm_file *file_priv,
|
||||
drm_radeon_texture_t * tex,
|
||||
drm_radeon_tex_image_t * image)
|
||||
{
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_file *filp_priv;
|
||||
struct drm_buf *buf;
|
||||
u32 format;
|
||||
u32 *buffer;
|
||||
|
@ -1664,9 +1666,7 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
|
|||
u32 offset;
|
||||
RING_LOCALS;
|
||||
|
||||
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
|
||||
|
||||
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &tex->offset)) {
|
||||
if (radeon_check_and_fixup_offset(dev_priv, file_priv, &tex->offset)) {
|
||||
DRM_ERROR("Invalid destination offset\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -1841,7 +1841,7 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
|
|||
}
|
||||
|
||||
#undef RADEON_COPY_MT
|
||||
buf->filp = filp;
|
||||
buf->file_priv = file_priv;
|
||||
buf->used = size;
|
||||
offset = dev_priv->gart_buffers_offset + buf->offset;
|
||||
BEGIN_RING(9);
|
||||
|
@ -1929,7 +1929,8 @@ static void radeon_apply_surface_regs(int surf_index,
|
|||
* not always be available.
|
||||
*/
|
||||
static int alloc_surface(drm_radeon_surface_alloc_t *new,
|
||||
drm_radeon_private_t *dev_priv, DRMFILE filp)
|
||||
drm_radeon_private_t *dev_priv,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
struct radeon_virt_surface *s;
|
||||
int i;
|
||||
|
@ -1959,7 +1960,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
|
|||
|
||||
/* find a virtual surface */
|
||||
for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++)
|
||||
if (dev_priv->virt_surfaces[i].filp == 0)
|
||||
if (dev_priv->virt_surfaces[i].file_priv == 0)
|
||||
break;
|
||||
if (i == 2 * RADEON_MAX_SURFACES) {
|
||||
return -1;
|
||||
|
@ -1977,7 +1978,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
|
|||
s->lower = new_lower;
|
||||
s->upper = new_upper;
|
||||
s->flags = new->flags;
|
||||
s->filp = filp;
|
||||
s->file_priv = file_priv;
|
||||
dev_priv->surfaces[i].refcount++;
|
||||
dev_priv->surfaces[i].lower = s->lower;
|
||||
radeon_apply_surface_regs(s->surface_index, dev_priv);
|
||||
|
@ -1993,7 +1994,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
|
|||
s->lower = new_lower;
|
||||
s->upper = new_upper;
|
||||
s->flags = new->flags;
|
||||
s->filp = filp;
|
||||
s->file_priv = file_priv;
|
||||
dev_priv->surfaces[i].refcount++;
|
||||
dev_priv->surfaces[i].upper = s->upper;
|
||||
radeon_apply_surface_regs(s->surface_index, dev_priv);
|
||||
|
@ -2009,7 +2010,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
|
|||
s->lower = new_lower;
|
||||
s->upper = new_upper;
|
||||
s->flags = new->flags;
|
||||
s->filp = filp;
|
||||
s->file_priv = file_priv;
|
||||
dev_priv->surfaces[i].refcount = 1;
|
||||
dev_priv->surfaces[i].lower = s->lower;
|
||||
dev_priv->surfaces[i].upper = s->upper;
|
||||
|
@ -2023,7 +2024,8 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
|
|||
return -1;
|
||||
}
|
||||
|
||||
static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
|
||||
static int free_surface(struct drm_file *file_priv,
|
||||
drm_radeon_private_t * dev_priv,
|
||||
int lower)
|
||||
{
|
||||
struct radeon_virt_surface *s;
|
||||
|
@ -2031,8 +2033,9 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
|
|||
/* find the virtual surface */
|
||||
for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++) {
|
||||
s = &(dev_priv->virt_surfaces[i]);
|
||||
if (s->filp) {
|
||||
if ((lower == s->lower) && (filp == s->filp)) {
|
||||
if (s->file_priv) {
|
||||
if ((lower == s->lower) && (file_priv == s->file_priv))
|
||||
{
|
||||
if (dev_priv->surfaces[s->surface_index].
|
||||
lower == s->lower)
|
||||
dev_priv->surfaces[s->surface_index].
|
||||
|
@ -2048,7 +2051,7 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
|
|||
refcount == 0)
|
||||
dev_priv->surfaces[s->surface_index].
|
||||
flags = 0;
|
||||
s->filp = NULL;
|
||||
s->file_priv = NULL;
|
||||
radeon_apply_surface_regs(s->surface_index,
|
||||
dev_priv);
|
||||
return 0;
|
||||
|
@ -2058,13 +2061,13 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void radeon_surfaces_release(DRMFILE filp,
|
||||
static void radeon_surfaces_release(struct drm_file *file_priv,
|
||||
drm_radeon_private_t * dev_priv)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++) {
|
||||
if (dev_priv->virt_surfaces[i].filp == filp)
|
||||
free_surface(filp, dev_priv,
|
||||
if (dev_priv->virt_surfaces[i].file_priv == file_priv)
|
||||
free_surface(file_priv, dev_priv,
|
||||
dev_priv->virt_surfaces[i].lower);
|
||||
}
|
||||
}
|
||||
|
@ -2087,7 +2090,7 @@ static int radeon_surface_alloc(DRM_IOCTL_ARGS)
|
|||
(drm_radeon_surface_alloc_t __user *) data,
|
||||
sizeof(alloc));
|
||||
|
||||
if (alloc_surface(&alloc, dev_priv, filp) == -1)
|
||||
if (alloc_surface(&alloc, dev_priv, file_priv) == -1)
|
||||
return -EINVAL;
|
||||
else
|
||||
return 0;
|
||||
|
@ -2107,7 +2110,7 @@ static int radeon_surface_free(DRM_IOCTL_ARGS)
|
|||
DRM_COPY_FROM_USER_IOCTL(memfree, (drm_radeon_surface_free_t __user *) data,
|
||||
sizeof(memfree));
|
||||
|
||||
if (free_surface(filp, dev_priv, memfree.address))
|
||||
if (free_surface(file_priv, dev_priv, memfree.address))
|
||||
return -EINVAL;
|
||||
else
|
||||
return 0;
|
||||
|
@ -2122,7 +2125,7 @@ static int radeon_cp_clear(DRM_IOCTL_ARGS)
|
|||
drm_radeon_clear_rect_t depth_boxes[RADEON_NR_SAREA_CLIPRECTS];
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(clear, (drm_radeon_clear_t __user *) data,
|
||||
sizeof(clear));
|
||||
|
@ -2178,7 +2181,7 @@ static int radeon_cp_flip(DRM_IOCTL_ARGS)
|
|||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
RING_SPACE_TEST_WITH_RETURN(dev_priv);
|
||||
|
||||
|
@ -2198,7 +2201,7 @@ static int radeon_cp_swap(DRM_IOCTL_ARGS)
|
|||
drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
RING_SPACE_TEST_WITH_RETURN(dev_priv);
|
||||
|
||||
|
@ -2216,14 +2219,13 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS)
|
|||
{
|
||||
DRM_DEVICE;
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_file *filp_priv;
|
||||
drm_radeon_sarea_t *sarea_priv;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
struct drm_buf *buf;
|
||||
drm_radeon_vertex_t vertex;
|
||||
drm_radeon_tcl_prim_t prim;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
@ -2232,8 +2234,6 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS)
|
|||
|
||||
sarea_priv = dev_priv->sarea_priv;
|
||||
|
||||
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(vertex, (drm_radeon_vertex_t __user *) data,
|
||||
sizeof(vertex));
|
||||
|
||||
|
@ -2255,9 +2255,9 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS)
|
|||
|
||||
buf = dma->buflist[vertex.idx];
|
||||
|
||||
if (buf->filp != filp) {
|
||||
if (buf->file_priv != file_priv) {
|
||||
DRM_ERROR("process %d using buffer owned by %p\n",
|
||||
DRM_CURRENTPID, buf->filp);
|
||||
DRM_CURRENTPID, buf->file_priv);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (buf->pending) {
|
||||
|
@ -2271,7 +2271,7 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS)
|
|||
buf->used = vertex.count; /* not used? */
|
||||
|
||||
if (sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS) {
|
||||
if (radeon_emit_state(dev_priv, filp_priv,
|
||||
if (radeon_emit_state(dev_priv, file_priv,
|
||||
&sarea_priv->context_state,
|
||||
sarea_priv->tex_state,
|
||||
sarea_priv->dirty)) {
|
||||
|
@ -2306,7 +2306,6 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
|
|||
{
|
||||
DRM_DEVICE;
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_file *filp_priv;
|
||||
drm_radeon_sarea_t *sarea_priv;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
struct drm_buf *buf;
|
||||
|
@ -2314,7 +2313,7 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
|
|||
drm_radeon_tcl_prim_t prim;
|
||||
int count;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
@ -2322,8 +2321,6 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
|
|||
}
|
||||
sarea_priv = dev_priv->sarea_priv;
|
||||
|
||||
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(elts, (drm_radeon_indices_t __user *) data,
|
||||
sizeof(elts));
|
||||
|
||||
|
@ -2345,9 +2342,9 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
|
|||
|
||||
buf = dma->buflist[elts.idx];
|
||||
|
||||
if (buf->filp != filp) {
|
||||
if (buf->file_priv != file_priv) {
|
||||
DRM_ERROR("process %d using buffer owned by %p\n",
|
||||
DRM_CURRENTPID, buf->filp);
|
||||
DRM_CURRENTPID, buf->file_priv);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (buf->pending) {
|
||||
|
@ -2370,7 +2367,7 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
|
|||
buf->used = elts.end;
|
||||
|
||||
if (sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS) {
|
||||
if (radeon_emit_state(dev_priv, filp_priv,
|
||||
if (radeon_emit_state(dev_priv, file_priv,
|
||||
&sarea_priv->context_state,
|
||||
sarea_priv->tex_state,
|
||||
sarea_priv->dirty)) {
|
||||
|
@ -2410,7 +2407,7 @@ static int radeon_cp_texture(DRM_IOCTL_ARGS)
|
|||
drm_radeon_tex_image_t image;
|
||||
int ret;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(tex, (drm_radeon_texture_t __user *) data,
|
||||
sizeof(tex));
|
||||
|
@ -2428,7 +2425,7 @@ static int radeon_cp_texture(DRM_IOCTL_ARGS)
|
|||
RING_SPACE_TEST_WITH_RETURN(dev_priv);
|
||||
VB_AGE_TEST_WITH_RETURN(dev_priv);
|
||||
|
||||
ret = radeon_cp_dispatch_texture(filp, dev, &tex, &image);
|
||||
ret = radeon_cp_dispatch_texture(dev, file_priv, &tex, &image);
|
||||
|
||||
COMMIT_RING();
|
||||
return ret;
|
||||
|
@ -2441,7 +2438,7 @@ static int radeon_cp_stipple(DRM_IOCTL_ARGS)
|
|||
drm_radeon_stipple_t stipple;
|
||||
u32 mask[32];
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(stipple, (drm_radeon_stipple_t __user *) data,
|
||||
sizeof(stipple));
|
||||
|
@ -2466,7 +2463,7 @@ static int radeon_cp_indirect(DRM_IOCTL_ARGS)
|
|||
drm_radeon_indirect_t indirect;
|
||||
RING_LOCALS;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
@ -2488,9 +2485,9 @@ static int radeon_cp_indirect(DRM_IOCTL_ARGS)
|
|||
|
||||
buf = dma->buflist[indirect.idx];
|
||||
|
||||
if (buf->filp != filp) {
|
||||
if (buf->file_priv != file_priv) {
|
||||
DRM_ERROR("process %d using buffer owned by %p\n",
|
||||
DRM_CURRENTPID, buf->filp);
|
||||
DRM_CURRENTPID, buf->file_priv);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (buf->pending) {
|
||||
|
@ -2535,7 +2532,6 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
|
|||
{
|
||||
DRM_DEVICE;
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_file *filp_priv;
|
||||
drm_radeon_sarea_t *sarea_priv;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
struct drm_buf *buf;
|
||||
|
@ -2543,7 +2539,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
|
|||
int i;
|
||||
unsigned char laststate;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
|
@ -2552,8 +2548,6 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
|
|||
|
||||
sarea_priv = dev_priv->sarea_priv;
|
||||
|
||||
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(vertex, (drm_radeon_vertex2_t __user *) data,
|
||||
sizeof(vertex));
|
||||
|
||||
|
@ -2571,9 +2565,9 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
|
|||
|
||||
buf = dma->buflist[vertex.idx];
|
||||
|
||||
if (buf->filp != filp) {
|
||||
if (buf->file_priv != file_priv) {
|
||||
DRM_ERROR("process %d using buffer owned by %p\n",
|
||||
DRM_CURRENTPID, buf->filp);
|
||||
DRM_CURRENTPID, buf->file_priv);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -2600,7 +2594,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
|
|||
sizeof(state)))
|
||||
return -EFAULT;
|
||||
|
||||
if (radeon_emit_state2(dev_priv, filp_priv, &state)) {
|
||||
if (radeon_emit_state2(dev_priv, file_priv, &state)) {
|
||||
DRM_ERROR("radeon_emit_state2 failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -2638,7 +2632,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
|
|||
}
|
||||
|
||||
static int radeon_emit_packets(drm_radeon_private_t * dev_priv,
|
||||
struct drm_file * filp_priv,
|
||||
struct drm_file *file_priv,
|
||||
drm_radeon_cmd_header_t header,
|
||||
drm_radeon_kcmd_buffer_t *cmdbuf)
|
||||
{
|
||||
|
@ -2658,7 +2652,7 @@ static int radeon_emit_packets(drm_radeon_private_t * dev_priv,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (radeon_check_and_fixup_packets(dev_priv, filp_priv, id, data)) {
|
||||
if (radeon_check_and_fixup_packets(dev_priv, file_priv, id, data)) {
|
||||
DRM_ERROR("Packet verification failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -2764,7 +2758,7 @@ static __inline__ int radeon_emit_veclinear(drm_radeon_private_t *dev_priv,
|
|||
}
|
||||
|
||||
static int radeon_emit_packet3(struct drm_device * dev,
|
||||
struct drm_file * filp_priv,
|
||||
struct drm_file *file_priv,
|
||||
drm_radeon_kcmd_buffer_t *cmdbuf)
|
||||
{
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
|
@ -2774,7 +2768,7 @@ static int radeon_emit_packet3(struct drm_device * dev,
|
|||
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
if ((ret = radeon_check_and_fixup_packet3(dev_priv, filp_priv,
|
||||
if ((ret = radeon_check_and_fixup_packet3(dev_priv, file_priv,
|
||||
cmdbuf, &cmdsz))) {
|
||||
DRM_ERROR("Packet verification failed\n");
|
||||
return ret;
|
||||
|
@ -2790,7 +2784,7 @@ static int radeon_emit_packet3(struct drm_device * dev,
|
|||
}
|
||||
|
||||
static int radeon_emit_packet3_cliprect(struct drm_device *dev,
|
||||
struct drm_file *filp_priv,
|
||||
struct drm_file *file_priv,
|
||||
drm_radeon_kcmd_buffer_t *cmdbuf,
|
||||
int orig_nbox)
|
||||
{
|
||||
|
@ -2804,7 +2798,7 @@ static int radeon_emit_packet3_cliprect(struct drm_device *dev,
|
|||
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
if ((ret = radeon_check_and_fixup_packet3(dev_priv, filp_priv,
|
||||
if ((ret = radeon_check_and_fixup_packet3(dev_priv, file_priv,
|
||||
cmdbuf, &cmdsz))) {
|
||||
DRM_ERROR("Packet verification failed\n");
|
||||
return ret;
|
||||
|
@ -2884,7 +2878,6 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
|
|||
{
|
||||
DRM_DEVICE;
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_file *filp_priv;
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
struct drm_buf *buf = NULL;
|
||||
int idx;
|
||||
|
@ -2893,15 +2886,13 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
|
|||
int orig_nbox, orig_bufsz;
|
||||
char *kbuf = NULL;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
if (!dev_priv) {
|
||||
DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(cmdbuf,
|
||||
(drm_radeon_kcmd_buffer_t __user *) data,
|
||||
sizeof(cmdbuf));
|
||||
|
@ -2934,7 +2925,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
|
|||
|
||||
if (dev_priv->microcode_version == UCODE_R300) {
|
||||
int temp;
|
||||
temp = r300_do_cp_cmdbuf(dev, filp, filp_priv, &cmdbuf);
|
||||
temp = r300_do_cp_cmdbuf(dev, file_priv, &cmdbuf);
|
||||
|
||||
if (orig_bufsz != 0)
|
||||
drm_free(kbuf, orig_bufsz, DRM_MEM_DRIVER);
|
||||
|
@ -2953,7 +2944,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
|
|||
case RADEON_CMD_PACKET:
|
||||
DRM_DEBUG("RADEON_CMD_PACKET\n");
|
||||
if (radeon_emit_packets
|
||||
(dev_priv, filp_priv, header, &cmdbuf)) {
|
||||
(dev_priv, file_priv, header, &cmdbuf)) {
|
||||
DRM_ERROR("radeon_emit_packets failed\n");
|
||||
goto err;
|
||||
}
|
||||
|
@ -2985,9 +2976,10 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
|
|||
}
|
||||
|
||||
buf = dma->buflist[idx];
|
||||
if (buf->filp != filp || buf->pending) {
|
||||
if (buf->file_priv != file_priv || buf->pending) {
|
||||
DRM_ERROR("bad buffer %p %p %d\n",
|
||||
buf->filp, filp, buf->pending);
|
||||
buf->file_priv, file_priv,
|
||||
buf->pending);
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
@ -2996,7 +2988,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
|
|||
|
||||
case RADEON_CMD_PACKET3:
|
||||
DRM_DEBUG("RADEON_CMD_PACKET3\n");
|
||||
if (radeon_emit_packet3(dev, filp_priv, &cmdbuf)) {
|
||||
if (radeon_emit_packet3(dev, file_priv, &cmdbuf)) {
|
||||
DRM_ERROR("radeon_emit_packet3 failed\n");
|
||||
goto err;
|
||||
}
|
||||
|
@ -3005,7 +2997,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
|
|||
case RADEON_CMD_PACKET3_CLIP:
|
||||
DRM_DEBUG("RADEON_CMD_PACKET3_CLIP\n");
|
||||
if (radeon_emit_packet3_cliprect
|
||||
(dev, filp_priv, &cmdbuf, orig_nbox)) {
|
||||
(dev, file_priv, &cmdbuf, orig_nbox)) {
|
||||
DRM_ERROR("radeon_emit_packet3_clip failed\n");
|
||||
goto err;
|
||||
}
|
||||
|
@ -3151,7 +3143,6 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS)
|
|||
{
|
||||
DRM_DEVICE;
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_file *filp_priv;
|
||||
drm_radeon_setparam_t sp;
|
||||
struct drm_radeon_driver_file_fields *radeon_priv;
|
||||
|
||||
|
@ -3160,14 +3151,12 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(sp, (drm_radeon_setparam_t __user *) data,
|
||||
sizeof(sp));
|
||||
|
||||
switch (sp.param) {
|
||||
case RADEON_SETPARAM_FB_LOCATION:
|
||||
radeon_priv = filp_priv->driver_priv;
|
||||
radeon_priv = file_priv->driver_priv;
|
||||
radeon_priv->radeon_fb_delta = dev_priv->fb_location - sp.value;
|
||||
break;
|
||||
case RADEON_SETPARAM_SWITCH_TILING:
|
||||
|
@ -3213,14 +3202,15 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS)
|
|||
*
|
||||
* DRM infrastructure takes care of reclaiming dma buffers.
|
||||
*/
|
||||
void radeon_driver_preclose(struct drm_device * dev, DRMFILE filp)
|
||||
void radeon_driver_preclose(struct drm_device * dev,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
if (dev->dev_private) {
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
dev_priv->page_flipping = 0;
|
||||
radeon_mem_release(filp, dev_priv->gart_heap);
|
||||
radeon_mem_release(filp, dev_priv->fb_heap);
|
||||
radeon_surfaces_release(filp, dev_priv);
|
||||
radeon_mem_release(file_priv, dev_priv->gart_heap);
|
||||
radeon_mem_release(file_priv, dev_priv->fb_heap);
|
||||
radeon_surfaces_release(file_priv, dev_priv);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3237,7 +3227,7 @@ void radeon_driver_lastclose(struct drm_device * dev)
|
|||
radeon_do_release(dev);
|
||||
}
|
||||
|
||||
int radeon_driver_open(struct drm_device * dev, struct drm_file * filp_priv)
|
||||
int radeon_driver_open(struct drm_device * dev, struct drm_file *file_priv)
|
||||
{
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
struct drm_radeon_driver_file_fields *radeon_priv;
|
||||
|
@ -3250,7 +3240,7 @@ int radeon_driver_open(struct drm_device * dev, struct drm_file * filp_priv)
|
|||
if (!radeon_priv)
|
||||
return -ENOMEM;
|
||||
|
||||
filp_priv->driver_priv = radeon_priv;
|
||||
file_priv->driver_priv = radeon_priv;
|
||||
|
||||
if (dev_priv)
|
||||
radeon_priv->radeon_fb_delta = dev_priv->fb_location;
|
||||
|
@ -3259,10 +3249,10 @@ int radeon_driver_open(struct drm_device * dev, struct drm_file * filp_priv)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void radeon_driver_postclose(struct drm_device * dev, struct drm_file * filp_priv)
|
||||
void radeon_driver_postclose(struct drm_device * dev, struct drm_file *file_priv)
|
||||
{
|
||||
struct drm_radeon_driver_file_fields *radeon_priv =
|
||||
filp_priv->driver_priv;
|
||||
file_priv->driver_priv;
|
||||
|
||||
drm_free(radeon_priv, sizeof(*radeon_priv), DRM_MEM_FILES);
|
||||
}
|
||||
|
|
|
@ -932,7 +932,7 @@ static int savage_bci_init(DRM_IOCTL_ARGS)
|
|||
DRM_DEVICE;
|
||||
drm_savage_init_t init;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(init, (drm_savage_init_t __user *)data,
|
||||
sizeof(init));
|
||||
|
@ -955,7 +955,7 @@ static int savage_bci_event_emit(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(event, (drm_savage_event_emit_t __user *)data,
|
||||
sizeof(event));
|
||||
|
@ -1006,7 +1006,9 @@ static int savage_bci_event_wait(DRM_IOCTL_ARGS)
|
|||
* DMA buffer management
|
||||
*/
|
||||
|
||||
static int savage_bci_get_buffers(DRMFILE filp, struct drm_device *dev, struct drm_dma *d)
|
||||
static int savage_bci_get_buffers(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
struct drm_dma *d)
|
||||
{
|
||||
struct drm_buf *buf;
|
||||
int i;
|
||||
|
@ -1016,7 +1018,7 @@ static int savage_bci_get_buffers(DRMFILE filp, struct drm_device *dev, struct d
|
|||
if (!buf)
|
||||
return -EAGAIN;
|
||||
|
||||
buf->filp = filp;
|
||||
buf->file_priv = file_priv;
|
||||
|
||||
if (DRM_COPY_TO_USER(&d->request_indices[i],
|
||||
&buf->idx, sizeof(buf->idx)))
|
||||
|
@ -1037,7 +1039,7 @@ int savage_bci_buffers(DRM_IOCTL_ARGS)
|
|||
struct drm_dma d;
|
||||
int ret = 0;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(d, (struct drm_dma __user *)data, sizeof(d));
|
||||
|
||||
|
@ -1060,7 +1062,7 @@ int savage_bci_buffers(DRM_IOCTL_ARGS)
|
|||
d.granted_count = 0;
|
||||
|
||||
if (d.request_count) {
|
||||
ret = savage_bci_get_buffers(filp, dev, &d);
|
||||
ret = savage_bci_get_buffers(dev, file_priv, &d);
|
||||
}
|
||||
|
||||
DRM_COPY_TO_USER_IOCTL((struct drm_dma __user *)data, d, sizeof(d));
|
||||
|
@ -1068,7 +1070,7 @@ int savage_bci_buffers(DRM_IOCTL_ARGS)
|
|||
return ret;
|
||||
}
|
||||
|
||||
void savage_reclaim_buffers(struct drm_device *dev, DRMFILE filp)
|
||||
void savage_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv)
|
||||
{
|
||||
struct drm_device_dma *dma = dev->dma;
|
||||
drm_savage_private_t *dev_priv = dev->dev_private;
|
||||
|
@ -1087,7 +1089,7 @@ void savage_reclaim_buffers(struct drm_device *dev, DRMFILE filp)
|
|||
struct drm_buf *buf = dma->buflist[i];
|
||||
drm_savage_buf_priv_t *buf_priv = buf->dev_private;
|
||||
|
||||
if (buf->filp == filp && buf_priv &&
|
||||
if (buf->file_priv == file_priv && buf_priv &&
|
||||
buf_priv->next == NULL && buf_priv->prev == NULL) {
|
||||
uint16_t event;
|
||||
DRM_DEBUG("reclaimed from client\n");
|
||||
|
@ -1097,7 +1099,7 @@ void savage_reclaim_buffers(struct drm_device *dev, DRMFILE filp)
|
|||
}
|
||||
}
|
||||
|
||||
drm_core_reclaim_buffers(dev, filp);
|
||||
drm_core_reclaim_buffers(dev, file_priv);
|
||||
}
|
||||
|
||||
struct drm_ioctl_desc savage_ioctls[] = {
|
||||
|
|
|
@ -212,7 +212,8 @@ 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 int savage_driver_unload(struct drm_device *dev);
|
||||
extern void savage_reclaim_buffers(struct drm_device *dev, DRMFILE filp);
|
||||
extern void savage_reclaim_buffers(struct drm_device *dev,
|
||||
struct drm_file *file_priv);
|
||||
|
||||
/* state functions */
|
||||
extern void savage_emit_clip_rect_s3d(drm_savage_private_t *dev_priv,
|
||||
|
|
|
@ -968,7 +968,7 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
|
|||
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_savage_cmdbuf_t __user *)data,
|
||||
sizeof(cmdbuf));
|
||||
|
|
|
@ -67,7 +67,8 @@ typedef struct drm_sis_private {
|
|||
} drm_sis_private_t;
|
||||
|
||||
extern int sis_idle(struct drm_device *dev);
|
||||
extern void sis_reclaim_buffers_locked(struct drm_device *dev, struct file *filp);
|
||||
extern void sis_reclaim_buffers_locked(struct drm_device *dev,
|
||||
struct drm_file *file_priv);
|
||||
extern void sis_lastclose(struct drm_device *dev);
|
||||
|
||||
#else
|
||||
|
|
|
@ -320,7 +320,7 @@ static int via_flush_ioctl(DRM_IOCTL_ARGS)
|
|||
{
|
||||
DRM_DEVICE;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
return via_driver_dma_quiescent(dev);
|
||||
}
|
||||
|
@ -331,7 +331,7 @@ static int via_cmdbuffer(DRM_IOCTL_ARGS)
|
|||
drm_via_cmdbuffer_t cmdbuf;
|
||||
int ret;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_via_cmdbuffer_t __user *) data,
|
||||
sizeof(cmdbuf));
|
||||
|
@ -376,7 +376,7 @@ static int via_pci_cmdbuffer(DRM_IOCTL_ARGS)
|
|||
drm_via_cmdbuffer_t cmdbuf;
|
||||
int ret;
|
||||
|
||||
LOCK_TEST_WITH_RETURN(dev, filp);
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_via_cmdbuffer_t __user *) data,
|
||||
sizeof(cmdbuf));
|
||||
|
@ -654,7 +654,7 @@ static int via_cmdbuf_size(DRM_IOCTL_ARGS)
|
|||
drm_via_private_t *dev_priv;
|
||||
|
||||
DRM_DEBUG("via cmdbuf_size\n");
|
||||
LOCK_TEST_WITH_RETURN( dev, filp );
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
|
||||
dev_priv = (drm_via_private_t *) dev->dev_private;
|
||||
|
||||
|
|
|
@ -181,7 +181,8 @@ extern void via_cleanup_futex(drm_via_private_t *dev_priv);
|
|||
extern void via_release_futex(drm_via_private_t *dev_priv, int context);
|
||||
|
||||
#ifdef VIA_HAVE_CORE_MM
|
||||
extern void via_reclaim_buffers_locked(struct drm_device *dev, struct file *filp);
|
||||
extern void via_reclaim_buffers_locked(struct drm_device *dev,
|
||||
struct drm_file *file_priv);
|
||||
extern void via_lastclose(struct drm_device *dev);
|
||||
#else
|
||||
extern int via_init_context(struct drm_device * dev, int context);
|
||||
|
|
Loading…
Reference in New Issue