mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-01-06 09:40:22 +01:00
more OS dependency separation
This commit is contained in:
parent
eb2501e637
commit
b9cb2e1fdc
8 changed files with 412 additions and 232 deletions
|
|
@ -59,12 +59,12 @@ typedef u_int32_t u32;
|
|||
#define atomic_sub(n, p) atomic_subtract_long(p, n)
|
||||
|
||||
/* Fake this */
|
||||
static __inline unsigned long
|
||||
static __inline unsigned int
|
||||
test_and_set_bit(int b, volatile unsigned long *p)
|
||||
{
|
||||
int s = splhigh();
|
||||
unsigned long m = 1<<b;
|
||||
unsigned long r = *p & m;
|
||||
unsigned int m = 1<<b;
|
||||
unsigned int r = *p & m;
|
||||
*p |= m;
|
||||
splx(s);
|
||||
return r;
|
||||
|
|
@ -179,3 +179,77 @@ find_first_zero_bit(volatile unsigned long *p, int max)
|
|||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
/* Internal functions */
|
||||
|
||||
/* drm_drv.h */
|
||||
extern d_ioctl_t DRM(ioctl);
|
||||
extern d_ioctl_t DRM(lock);
|
||||
extern d_ioctl_t DRM(unlock);
|
||||
|
||||
/* Misc. IOCTL support (drm_ioctl.h) */
|
||||
extern d_ioctl_t DRM(irq_busid);
|
||||
extern d_ioctl_t DRM(getunique);
|
||||
extern d_ioctl_t DRM(setunique);
|
||||
extern d_ioctl_t DRM(getmap);
|
||||
extern d_ioctl_t DRM(getclient);
|
||||
extern d_ioctl_t DRM(getstats);
|
||||
|
||||
/* Context IOCTL support (drm_context.h) */
|
||||
extern d_ioctl_t DRM(resctx);
|
||||
extern d_ioctl_t DRM(addctx);
|
||||
extern d_ioctl_t DRM(modctx);
|
||||
extern d_ioctl_t DRM(getctx);
|
||||
extern d_ioctl_t DRM(switchctx);
|
||||
extern d_ioctl_t DRM(newctx);
|
||||
extern d_ioctl_t DRM(rmctx);
|
||||
extern d_ioctl_t DRM(setsareactx);
|
||||
extern d_ioctl_t DRM(getsareactx);
|
||||
|
||||
/* Drawable IOCTL support (drm_drawable.h) */
|
||||
extern d_ioctl_t DRM(adddraw);
|
||||
extern d_ioctl_t DRM(rmdraw);
|
||||
|
||||
/* Authentication IOCTL support (drm_auth.h) */
|
||||
extern d_ioctl_t DRM(getmagic);
|
||||
extern d_ioctl_t DRM(authmagic);
|
||||
|
||||
/* Locking IOCTL support (drm_lock.h) */
|
||||
extern d_ioctl_t DRM(block);
|
||||
extern d_ioctl_t DRM(unblock);
|
||||
extern d_ioctl_t DRM(finish);
|
||||
|
||||
/* Buffer management support (drm_bufs.h) */
|
||||
extern d_ioctl_t DRM(addmap);
|
||||
extern d_ioctl_t DRM(rmmap);
|
||||
#if __HAVE_DMA
|
||||
extern d_ioctl_t DRM(addbufs);
|
||||
extern d_ioctl_t DRM(infobufs);
|
||||
extern d_ioctl_t DRM(markbufs);
|
||||
extern d_ioctl_t DRM(freebufs);
|
||||
extern d_ioctl_t DRM(mapbufs);
|
||||
#endif
|
||||
|
||||
/* DMA support (drm_dma.h) */
|
||||
#if __HAVE_DMA_IRQ
|
||||
extern d_ioctl_t DRM(control);
|
||||
#endif
|
||||
|
||||
/* AGP/GART support (drm_agpsupport.h) */
|
||||
#if __REALLY_HAVE_AGP
|
||||
extern d_ioctl_t DRM(agp_acquire);
|
||||
extern d_ioctl_t DRM(agp_release);
|
||||
extern d_ioctl_t DRM(agp_enable);
|
||||
extern d_ioctl_t DRM(agp_info);
|
||||
extern d_ioctl_t DRM(agp_alloc);
|
||||
extern d_ioctl_t DRM(agp_free);
|
||||
extern d_ioctl_t DRM(agp_unbind);
|
||||
extern d_ioctl_t DRM(agp_bind);
|
||||
#endif
|
||||
|
||||
/* Scatter Gather Support (drm_scatter.h) */
|
||||
#if __HAVE_SG
|
||||
extern d_ioctl_t DRM(sg_alloc);
|
||||
extern d_ioctl_t DRM(sg_free);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -59,12 +59,12 @@ typedef u_int32_t u32;
|
|||
#define atomic_sub(n, p) atomic_subtract_long(p, n)
|
||||
|
||||
/* Fake this */
|
||||
static __inline unsigned long
|
||||
static __inline unsigned int
|
||||
test_and_set_bit(int b, volatile unsigned long *p)
|
||||
{
|
||||
int s = splhigh();
|
||||
unsigned long m = 1<<b;
|
||||
unsigned long r = *p & m;
|
||||
unsigned int m = 1<<b;
|
||||
unsigned int r = *p & m;
|
||||
*p |= m;
|
||||
splx(s);
|
||||
return r;
|
||||
|
|
@ -179,3 +179,77 @@ find_first_zero_bit(volatile unsigned long *p, int max)
|
|||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
/* Internal functions */
|
||||
|
||||
/* drm_drv.h */
|
||||
extern d_ioctl_t DRM(ioctl);
|
||||
extern d_ioctl_t DRM(lock);
|
||||
extern d_ioctl_t DRM(unlock);
|
||||
|
||||
/* Misc. IOCTL support (drm_ioctl.h) */
|
||||
extern d_ioctl_t DRM(irq_busid);
|
||||
extern d_ioctl_t DRM(getunique);
|
||||
extern d_ioctl_t DRM(setunique);
|
||||
extern d_ioctl_t DRM(getmap);
|
||||
extern d_ioctl_t DRM(getclient);
|
||||
extern d_ioctl_t DRM(getstats);
|
||||
|
||||
/* Context IOCTL support (drm_context.h) */
|
||||
extern d_ioctl_t DRM(resctx);
|
||||
extern d_ioctl_t DRM(addctx);
|
||||
extern d_ioctl_t DRM(modctx);
|
||||
extern d_ioctl_t DRM(getctx);
|
||||
extern d_ioctl_t DRM(switchctx);
|
||||
extern d_ioctl_t DRM(newctx);
|
||||
extern d_ioctl_t DRM(rmctx);
|
||||
extern d_ioctl_t DRM(setsareactx);
|
||||
extern d_ioctl_t DRM(getsareactx);
|
||||
|
||||
/* Drawable IOCTL support (drm_drawable.h) */
|
||||
extern d_ioctl_t DRM(adddraw);
|
||||
extern d_ioctl_t DRM(rmdraw);
|
||||
|
||||
/* Authentication IOCTL support (drm_auth.h) */
|
||||
extern d_ioctl_t DRM(getmagic);
|
||||
extern d_ioctl_t DRM(authmagic);
|
||||
|
||||
/* Locking IOCTL support (drm_lock.h) */
|
||||
extern d_ioctl_t DRM(block);
|
||||
extern d_ioctl_t DRM(unblock);
|
||||
extern d_ioctl_t DRM(finish);
|
||||
|
||||
/* Buffer management support (drm_bufs.h) */
|
||||
extern d_ioctl_t DRM(addmap);
|
||||
extern d_ioctl_t DRM(rmmap);
|
||||
#if __HAVE_DMA
|
||||
extern d_ioctl_t DRM(addbufs);
|
||||
extern d_ioctl_t DRM(infobufs);
|
||||
extern d_ioctl_t DRM(markbufs);
|
||||
extern d_ioctl_t DRM(freebufs);
|
||||
extern d_ioctl_t DRM(mapbufs);
|
||||
#endif
|
||||
|
||||
/* DMA support (drm_dma.h) */
|
||||
#if __HAVE_DMA_IRQ
|
||||
extern d_ioctl_t DRM(control);
|
||||
#endif
|
||||
|
||||
/* AGP/GART support (drm_agpsupport.h) */
|
||||
#if __REALLY_HAVE_AGP
|
||||
extern d_ioctl_t DRM(agp_acquire);
|
||||
extern d_ioctl_t DRM(agp_release);
|
||||
extern d_ioctl_t DRM(agp_enable);
|
||||
extern d_ioctl_t DRM(agp_info);
|
||||
extern d_ioctl_t DRM(agp_alloc);
|
||||
extern d_ioctl_t DRM(agp_free);
|
||||
extern d_ioctl_t DRM(agp_unbind);
|
||||
extern d_ioctl_t DRM(agp_bind);
|
||||
#endif
|
||||
|
||||
/* Scatter Gather Support (drm_scatter.h) */
|
||||
#if __HAVE_SG
|
||||
extern d_ioctl_t DRM(sg_alloc);
|
||||
extern d_ioctl_t DRM(sg_free);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -547,15 +547,20 @@ extern int DRM(flags);
|
|||
extern void DRM(parse_options)( char *s );
|
||||
extern int DRM(cpu_valid)( void );
|
||||
|
||||
/* Authentication (drm_auth.h) */
|
||||
extern int DRM(add_magic)(drm_device_t *dev, drm_file_t *priv,
|
||||
drm_magic_t magic);
|
||||
extern int DRM(remove_magic)(drm_device_t *dev, drm_magic_t magic);
|
||||
|
||||
/* Driver support (drm_drv.h) */
|
||||
extern int DRM(version)( DRM_OS_IOCTL );
|
||||
#ifdef __linux__
|
||||
extern int DRM(open)(struct inode *inode, struct file *filp);
|
||||
extern int DRM(release)(struct inode *inode, struct file *filp);
|
||||
extern int DRM(ioctl)( DRM_OS_IOCTL );
|
||||
extern int DRM(lock)( DRM_OS_IOCTL );
|
||||
extern int DRM(unlock)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* Device support (drm_fops.h) */
|
||||
#ifdef __linux__
|
||||
extern int DRM(open_helper)(struct inode *inode, struct file *filp,
|
||||
drm_device_t *dev);
|
||||
extern int DRM(flush)(struct file *filp);
|
||||
|
|
@ -566,6 +571,10 @@ extern ssize_t DRM(read)(struct file *filp, char *buf, size_t count,
|
|||
extern int DRM(write_string)(drm_device_t *dev, const char *s);
|
||||
extern unsigned int DRM(poll)(struct file *filp,
|
||||
struct poll_table_struct *wait);
|
||||
#endif
|
||||
#ifdef __FreeBSD__
|
||||
extern drm_file_t *DRM(find_file_by_proc)(drm_device_t *dev, struct proc *p);
|
||||
#endif
|
||||
|
||||
/* Mapping support (drm_vm.h) */
|
||||
#if LINUX_VERSION_CODE < 0x020317
|
||||
|
|
@ -634,23 +643,6 @@ extern int DRM(unbind_agp)(void *handle);
|
|||
#endif
|
||||
#endif
|
||||
|
||||
/* Misc. IOCTL support (drm_ioctl.h) */
|
||||
extern DRM_PROT_IOCTL DRM(irq_busid)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(getunique)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(setunique)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(getmap)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(getclient)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(getstats)( DRM_OS_IOCTL );
|
||||
|
||||
/* Context IOCTL support (drm_context.h) */
|
||||
extern int DRM(resctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(addctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(modctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(getctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(switchctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(newctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmctx)( DRM_OS_IOCTL );
|
||||
|
||||
extern int DRM(context_switch)(drm_device_t *dev, int old, int new);
|
||||
extern int DRM(context_switch_complete)(drm_device_t *dev, int new);
|
||||
|
||||
|
|
@ -659,25 +651,7 @@ extern int DRM(ctxbitmap_init)( drm_device_t *dev );
|
|||
extern void DRM(ctxbitmap_cleanup)( drm_device_t *dev );
|
||||
#endif
|
||||
|
||||
extern int DRM(setsareactx)( DRM_OS_IOCTL );
|
||||
extern int DRM(getsareactx)( DRM_OS_IOCTL );
|
||||
|
||||
/* Drawable IOCTL support (drm_drawable.h) */
|
||||
extern int DRM(adddraw)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmdraw)( DRM_OS_IOCTL );
|
||||
|
||||
|
||||
/* Authentication IOCTL support (drm_auth.h) */
|
||||
extern int DRM(add_magic)(drm_device_t *dev, drm_file_t *priv,
|
||||
drm_magic_t magic);
|
||||
extern int DRM(remove_magic)(drm_device_t *dev, drm_magic_t magic);
|
||||
extern int DRM(getmagic)( DRM_OS_IOCTL );
|
||||
extern int DRM(authmagic)( DRM_OS_IOCTL );
|
||||
|
||||
|
||||
/* Locking IOCTL support (drm_lock.h) */
|
||||
extern int DRM(block)( DRM_OS_IOCTL );
|
||||
extern int DRM(unblock)( DRM_OS_IOCTL );
|
||||
extern int DRM(lock_take)(__volatile__ unsigned int *lock,
|
||||
unsigned int context);
|
||||
extern int DRM(lock_transfer)(drm_device_t *dev,
|
||||
|
|
@ -686,7 +660,6 @@ extern int DRM(lock_transfer)(drm_device_t *dev,
|
|||
extern int DRM(lock_free)(drm_device_t *dev,
|
||||
__volatile__ unsigned int *lock,
|
||||
unsigned int context);
|
||||
extern int DRM(finish)( DRM_OS_IOCTL );
|
||||
extern int DRM(flush_unblock)(drm_device_t *dev, int context,
|
||||
drm_lock_flags_t flags);
|
||||
extern int DRM(flush_block_and_flush)(drm_device_t *dev, int context,
|
||||
|
|
@ -695,15 +668,8 @@ extern int DRM(notifier)(void *priv);
|
|||
|
||||
/* Buffer management support (drm_bufs.h) */
|
||||
extern int DRM(order)( unsigned long size );
|
||||
extern int DRM(addmap)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmmap)( DRM_OS_IOCTL );
|
||||
#if __HAVE_DMA
|
||||
extern DRM_PROT_IOCTL DRM(addbufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(infobufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(markbufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(freebufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(mapbufs)( DRM_OS_IOCTL );
|
||||
|
||||
#if __HAVE_DMA
|
||||
/* DMA support (drm_dma.h) */
|
||||
extern int DRM(dma_setup)(drm_device_t *dev);
|
||||
extern void DRM(dma_takedown)(drm_device_t *dev);
|
||||
|
|
@ -719,7 +685,6 @@ extern int DRM(dma_enqueue)(drm_device_t *dev, drm_dma_t *dma);
|
|||
extern int DRM(dma_get_buffers)(drm_device_t *dev, drm_dma_t *dma);
|
||||
#endif
|
||||
#if __HAVE_DMA_IRQ
|
||||
extern int DRM(control)( DRM_OS_IOCTL );
|
||||
extern int DRM(irq_install)( drm_device_t *dev, int irq );
|
||||
extern int DRM(irq_uninstall)( drm_device_t *dev );
|
||||
extern void DRM(dma_service)( int irq, void *device,
|
||||
|
|
@ -753,15 +718,7 @@ extern drm_buf_t *DRM(freelist_get)(drm_freelist_t *bl, int block);
|
|||
/* AGP/GART support (drm_agpsupport.h) */
|
||||
extern drm_agp_head_t *DRM(agp_init)(void);
|
||||
extern void DRM(agp_uninit)(void);
|
||||
extern int DRM(agp_acquire)( DRM_OS_IOCTL );
|
||||
extern void DRM(agp_do_release)(void);
|
||||
extern int DRM(agp_release)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_enable)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_info)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_alloc)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_free)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_unbind)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_bind)( DRM_OS_IOCTL );
|
||||
#ifdef __linux__
|
||||
extern agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type);
|
||||
extern int DRM(agp_free_memory)(agp_memory *handle);
|
||||
|
|
@ -776,12 +733,6 @@ extern int DRM(agp_unbind_memory)(void *handle);
|
|||
#endif
|
||||
#endif
|
||||
|
||||
/* Stub support (drm_stub.h) */
|
||||
int DRM(stub_register)(const char *name,
|
||||
struct file_operations *fops,
|
||||
drm_device_t *dev);
|
||||
int DRM(stub_unregister)(int minor);
|
||||
|
||||
/* Proc support (drm_proc.h) */
|
||||
extern struct proc_dir_entry *DRM(proc_init)(drm_device_t *dev,
|
||||
int minor,
|
||||
|
|
@ -794,8 +745,6 @@ extern int DRM(proc_cleanup)(int minor,
|
|||
#if __HAVE_SG
|
||||
/* Scatter Gather Support (drm_scatter.h) */
|
||||
extern void DRM(sg_cleanup)(drm_sg_mem_t *entry);
|
||||
extern int DRM(sg_alloc)( DRM_OS_IOCTL );
|
||||
extern int DRM(sg_free)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* ATI PCIGART support (ati_pcigart.h) */
|
||||
|
|
|
|||
|
|
@ -32,63 +32,58 @@
|
|||
#define __NO_VERSION__
|
||||
#include "drmP.h"
|
||||
|
||||
int DRM(irq_busid)(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
int DRM(irq_busid)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_irq_busid_t p;
|
||||
struct pci_dev *dev;
|
||||
|
||||
if (copy_from_user(&p, (drm_irq_busid_t *)arg, sizeof(p)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
dev = pci_find_slot(p.busnum, PCI_DEVFN(p.devnum, p.funcnum));
|
||||
if (dev) p.irq = dev->irq;
|
||||
else p.irq = 0;
|
||||
DRM_DEBUG("%d:%d:%d => IRQ %d\n",
|
||||
p.busnum, p.devnum, p.funcnum, p.irq);
|
||||
if (copy_to_user((drm_irq_busid_t *)arg, &p, sizeof(p)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DRM(getunique)(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
int DRM(getunique)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_unique_t u;
|
||||
|
||||
if (copy_from_user(&u, (drm_unique_t *)arg, sizeof(u)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
if (u.unique_len >= dev->unique_len) {
|
||||
if (copy_to_user(u.unique, dev->unique, dev->unique_len))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
}
|
||||
u.unique_len = dev->unique_len;
|
||||
if (copy_to_user((drm_unique_t *)arg, &u, sizeof(u)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DRM(setunique)(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
int DRM(setunique)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_unique_t u;
|
||||
|
||||
if (dev->unique_len || dev->unique)
|
||||
return -EBUSY;
|
||||
DRM_OS_RETURN(EBUSY);
|
||||
|
||||
if (copy_from_user(&u, (drm_unique_t *)arg, sizeof(u)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
|
||||
if (!u.unique_len)
|
||||
return -EINVAL;
|
||||
DRM_OS_RETURN(EINVAL);
|
||||
|
||||
dev->unique_len = u.unique_len;
|
||||
dev->unique = DRM(alloc)(u.unique_len + 1, DRM_MEM_DRIVER);
|
||||
if (copy_from_user(dev->unique, u.unique, dev->unique_len))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
dev->unique[dev->unique_len] = '\0';
|
||||
|
||||
dev->devname = DRM(alloc)(strlen(dev->name) + strlen(dev->unique) + 2,
|
||||
|
|
@ -120,11 +115,9 @@ int DRM(setunique)(struct inode *inode, struct file *filp,
|
|||
}
|
||||
|
||||
|
||||
int DRM(getmap)( struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg )
|
||||
int DRM(getmap)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_map_t map;
|
||||
drm_map_list_t *r_list = NULL;
|
||||
struct list_head *list;
|
||||
|
|
@ -132,13 +125,13 @@ int DRM(getmap)( struct inode *inode, struct file *filp,
|
|||
int i;
|
||||
|
||||
if (copy_from_user(&map, (drm_map_t *)arg, sizeof(map)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
idx = map.offset;
|
||||
|
||||
down(&dev->struct_sem);
|
||||
DRM_OS_LOCK;
|
||||
if (idx < 0 || idx >= dev->map_count) {
|
||||
up(&dev->struct_sem);
|
||||
return -EINVAL;
|
||||
DRM_OS_UNLOCK;
|
||||
DRM_OS_RETURN(EINVAL);
|
||||
}
|
||||
|
||||
i = 0;
|
||||
|
|
@ -150,8 +143,8 @@ int DRM(getmap)( struct inode *inode, struct file *filp,
|
|||
i++;
|
||||
}
|
||||
if(!r_list || !r_list->map) {
|
||||
up(&dev->struct_sem);
|
||||
return -EINVAL;
|
||||
DRM_OS_UNLOCK;
|
||||
DRM_OS_RETURN(EINVAL);
|
||||
}
|
||||
|
||||
map.offset = r_list->map->offset;
|
||||
|
|
@ -160,56 +153,53 @@ int DRM(getmap)( struct inode *inode, struct file *filp,
|
|||
map.flags = r_list->map->flags;
|
||||
map.handle = r_list->map->handle;
|
||||
map.mtrr = r_list->map->mtrr;
|
||||
up(&dev->struct_sem);
|
||||
DRM_OS_UNLOCK;
|
||||
|
||||
if (copy_to_user((drm_map_t *)arg, &map, sizeof(map))) return -EFAULT;
|
||||
if (copy_to_user((drm_map_t *)arg, &map, sizeof(map)))
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DRM(getclient)( struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg )
|
||||
int DRM(getclient)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_client_t client;
|
||||
drm_file_t *pt;
|
||||
int idx;
|
||||
int i;
|
||||
|
||||
if (copy_from_user(&client, (drm_client_t *)arg, sizeof(client)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
idx = client.idx;
|
||||
down(&dev->struct_sem);
|
||||
DRM_OS_LOCK;
|
||||
for (i = 0, pt = dev->file_first; i < idx && pt; i++, pt = pt->next)
|
||||
;
|
||||
|
||||
if (!pt) {
|
||||
up(&dev->struct_sem);
|
||||
return -EINVAL;
|
||||
DRM_OS_UNLOCK;
|
||||
DRM_OS_RETURN(EINVAL);
|
||||
}
|
||||
client.auth = pt->authenticated;
|
||||
client.pid = pt->pid;
|
||||
client.uid = pt->uid;
|
||||
client.magic = pt->magic;
|
||||
client.iocs = pt->ioctl_count;
|
||||
up(&dev->struct_sem);
|
||||
DRM_OS_UNLOCK;
|
||||
|
||||
if (copy_to_user((drm_client_t *)arg, &client, sizeof(client)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DRM(getstats)( struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg )
|
||||
int DRM(getstats)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_stats_t stats;
|
||||
int i;
|
||||
|
||||
memset(&stats, 0, sizeof(stats));
|
||||
|
||||
down(&dev->struct_sem);
|
||||
DRM_OS_LOCK;
|
||||
|
||||
for (i = 0; i < dev->counters; i++) {
|
||||
if (dev->types[i] == _DRM_STAT_LOCK)
|
||||
|
|
@ -223,9 +213,9 @@ int DRM(getstats)( struct inode *inode, struct file *filp,
|
|||
|
||||
stats.count = dev->counters;
|
||||
|
||||
up(&dev->struct_sem);
|
||||
DRM_OS_UNLOCK;
|
||||
|
||||
if (copy_to_user((drm_stats_t *)arg, &stats, sizeof(stats)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -269,4 +269,81 @@ do { \
|
|||
#define DRM_OS_COPYFROM(arg1, arg2, arg3) \
|
||||
copy_from_user( arg1, arg2, arg3)
|
||||
|
||||
#define DRM_PROT_IOCTL int
|
||||
/* Internal functions */
|
||||
|
||||
/* drm_drv.h */
|
||||
extern int DRM(ioctl)( DRM_OS_IOCTL );
|
||||
extern int DRM(lock)( DRM_OS_IOCTL );
|
||||
extern int DRM(unlock)( DRM_OS_IOCTL );
|
||||
|
||||
/* Misc. IOCTL support (drm_ioctl.h) */
|
||||
extern int DRM(irq_busid)( DRM_OS_IOCTL );
|
||||
extern int DRM(getunique)( DRM_OS_IOCTL );
|
||||
extern int DRM(setunique)( DRM_OS_IOCTL );
|
||||
extern int DRM(getmap)( DRM_OS_IOCTL );
|
||||
extern int DRM(getclient)( DRM_OS_IOCTL );
|
||||
extern int DRM(getstats)( DRM_OS_IOCTL );
|
||||
|
||||
/* Context IOCTL support (drm_context.h) */
|
||||
extern int DRM(resctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(addctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(modctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(getctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(switchctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(newctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(setsareactx)( DRM_OS_IOCTL );
|
||||
extern int DRM(getsareactx)( DRM_OS_IOCTL );
|
||||
|
||||
/* Drawable IOCTL support (drm_drawable.h) */
|
||||
extern int DRM(adddraw)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmdraw)( DRM_OS_IOCTL );
|
||||
|
||||
/* Authentication IOCTL support (drm_auth.h) */
|
||||
extern int DRM(getmagic)( DRM_OS_IOCTL );
|
||||
extern int DRM(authmagic)( DRM_OS_IOCTL );
|
||||
|
||||
/* Locking IOCTL support (drm_lock.h) */
|
||||
extern int DRM(block)( DRM_OS_IOCTL );
|
||||
extern int DRM(unblock)( DRM_OS_IOCTL );
|
||||
extern int DRM(finish)( DRM_OS_IOCTL );
|
||||
|
||||
/* Buffer management support (drm_bufs.h) */
|
||||
extern int DRM(addmap)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmmap)( DRM_OS_IOCTL );
|
||||
#if __HAVE_DMA
|
||||
extern int DRM(addbufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(infobufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(markbufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(freebufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(mapbufs)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* DMA support (drm_dma.h) */
|
||||
#if __HAVE_DMA_IRQ
|
||||
extern int DRM(control)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* AGP/GART support (drm_agpsupport.h) */
|
||||
#if __REALLY_HAVE_AGP
|
||||
extern int DRM(agp_acquire)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_release)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_enable)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_info)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_alloc)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_free)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_unbind)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_bind)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* Stub support (drm_stub.h) */
|
||||
extern int DRM(stub_register)(const char *name,
|
||||
struct file_operations *fops,
|
||||
drm_device_t *dev);
|
||||
extern int DRM(stub_unregister)(int minor);
|
||||
|
||||
/* Scatter Gather Support (drm_scatter.h) */
|
||||
#if __HAVE_SG
|
||||
extern int DRM(sg_alloc)( DRM_OS_IOCTL );
|
||||
extern int DRM(sg_free)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
|
|
|||
77
linux/drmP.h
77
linux/drmP.h
|
|
@ -547,15 +547,20 @@ extern int DRM(flags);
|
|||
extern void DRM(parse_options)( char *s );
|
||||
extern int DRM(cpu_valid)( void );
|
||||
|
||||
/* Authentication (drm_auth.h) */
|
||||
extern int DRM(add_magic)(drm_device_t *dev, drm_file_t *priv,
|
||||
drm_magic_t magic);
|
||||
extern int DRM(remove_magic)(drm_device_t *dev, drm_magic_t magic);
|
||||
|
||||
/* Driver support (drm_drv.h) */
|
||||
extern int DRM(version)( DRM_OS_IOCTL );
|
||||
#ifdef __linux__
|
||||
extern int DRM(open)(struct inode *inode, struct file *filp);
|
||||
extern int DRM(release)(struct inode *inode, struct file *filp);
|
||||
extern int DRM(ioctl)( DRM_OS_IOCTL );
|
||||
extern int DRM(lock)( DRM_OS_IOCTL );
|
||||
extern int DRM(unlock)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* Device support (drm_fops.h) */
|
||||
#ifdef __linux__
|
||||
extern int DRM(open_helper)(struct inode *inode, struct file *filp,
|
||||
drm_device_t *dev);
|
||||
extern int DRM(flush)(struct file *filp);
|
||||
|
|
@ -566,6 +571,10 @@ extern ssize_t DRM(read)(struct file *filp, char *buf, size_t count,
|
|||
extern int DRM(write_string)(drm_device_t *dev, const char *s);
|
||||
extern unsigned int DRM(poll)(struct file *filp,
|
||||
struct poll_table_struct *wait);
|
||||
#endif
|
||||
#ifdef __FreeBSD__
|
||||
extern drm_file_t *DRM(find_file_by_proc)(drm_device_t *dev, struct proc *p);
|
||||
#endif
|
||||
|
||||
/* Mapping support (drm_vm.h) */
|
||||
#if LINUX_VERSION_CODE < 0x020317
|
||||
|
|
@ -634,23 +643,6 @@ extern int DRM(unbind_agp)(void *handle);
|
|||
#endif
|
||||
#endif
|
||||
|
||||
/* Misc. IOCTL support (drm_ioctl.h) */
|
||||
extern DRM_PROT_IOCTL DRM(irq_busid)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(getunique)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(setunique)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(getmap)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(getclient)( DRM_OS_IOCTL );
|
||||
extern DRM_PROT_IOCTL DRM(getstats)( DRM_OS_IOCTL );
|
||||
|
||||
/* Context IOCTL support (drm_context.h) */
|
||||
extern int DRM(resctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(addctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(modctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(getctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(switchctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(newctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmctx)( DRM_OS_IOCTL );
|
||||
|
||||
extern int DRM(context_switch)(drm_device_t *dev, int old, int new);
|
||||
extern int DRM(context_switch_complete)(drm_device_t *dev, int new);
|
||||
|
||||
|
|
@ -659,25 +651,7 @@ extern int DRM(ctxbitmap_init)( drm_device_t *dev );
|
|||
extern void DRM(ctxbitmap_cleanup)( drm_device_t *dev );
|
||||
#endif
|
||||
|
||||
extern int DRM(setsareactx)( DRM_OS_IOCTL );
|
||||
extern int DRM(getsareactx)( DRM_OS_IOCTL );
|
||||
|
||||
/* Drawable IOCTL support (drm_drawable.h) */
|
||||
extern int DRM(adddraw)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmdraw)( DRM_OS_IOCTL );
|
||||
|
||||
|
||||
/* Authentication IOCTL support (drm_auth.h) */
|
||||
extern int DRM(add_magic)(drm_device_t *dev, drm_file_t *priv,
|
||||
drm_magic_t magic);
|
||||
extern int DRM(remove_magic)(drm_device_t *dev, drm_magic_t magic);
|
||||
extern int DRM(getmagic)( DRM_OS_IOCTL );
|
||||
extern int DRM(authmagic)( DRM_OS_IOCTL );
|
||||
|
||||
|
||||
/* Locking IOCTL support (drm_lock.h) */
|
||||
extern int DRM(block)( DRM_OS_IOCTL );
|
||||
extern int DRM(unblock)( DRM_OS_IOCTL );
|
||||
extern int DRM(lock_take)(__volatile__ unsigned int *lock,
|
||||
unsigned int context);
|
||||
extern int DRM(lock_transfer)(drm_device_t *dev,
|
||||
|
|
@ -686,7 +660,6 @@ extern int DRM(lock_transfer)(drm_device_t *dev,
|
|||
extern int DRM(lock_free)(drm_device_t *dev,
|
||||
__volatile__ unsigned int *lock,
|
||||
unsigned int context);
|
||||
extern int DRM(finish)( DRM_OS_IOCTL );
|
||||
extern int DRM(flush_unblock)(drm_device_t *dev, int context,
|
||||
drm_lock_flags_t flags);
|
||||
extern int DRM(flush_block_and_flush)(drm_device_t *dev, int context,
|
||||
|
|
@ -695,15 +668,8 @@ extern int DRM(notifier)(void *priv);
|
|||
|
||||
/* Buffer management support (drm_bufs.h) */
|
||||
extern int DRM(order)( unsigned long size );
|
||||
extern int DRM(addmap)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmmap)( DRM_OS_IOCTL );
|
||||
#if __HAVE_DMA
|
||||
extern DRM_PROT_IOCTL DRM(addbufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(infobufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(markbufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(freebufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(mapbufs)( DRM_OS_IOCTL );
|
||||
|
||||
#if __HAVE_DMA
|
||||
/* DMA support (drm_dma.h) */
|
||||
extern int DRM(dma_setup)(drm_device_t *dev);
|
||||
extern void DRM(dma_takedown)(drm_device_t *dev);
|
||||
|
|
@ -719,7 +685,6 @@ extern int DRM(dma_enqueue)(drm_device_t *dev, drm_dma_t *dma);
|
|||
extern int DRM(dma_get_buffers)(drm_device_t *dev, drm_dma_t *dma);
|
||||
#endif
|
||||
#if __HAVE_DMA_IRQ
|
||||
extern int DRM(control)( DRM_OS_IOCTL );
|
||||
extern int DRM(irq_install)( drm_device_t *dev, int irq );
|
||||
extern int DRM(irq_uninstall)( drm_device_t *dev );
|
||||
extern void DRM(dma_service)( int irq, void *device,
|
||||
|
|
@ -753,15 +718,7 @@ extern drm_buf_t *DRM(freelist_get)(drm_freelist_t *bl, int block);
|
|||
/* AGP/GART support (drm_agpsupport.h) */
|
||||
extern drm_agp_head_t *DRM(agp_init)(void);
|
||||
extern void DRM(agp_uninit)(void);
|
||||
extern int DRM(agp_acquire)( DRM_OS_IOCTL );
|
||||
extern void DRM(agp_do_release)(void);
|
||||
extern int DRM(agp_release)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_enable)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_info)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_alloc)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_free)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_unbind)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_bind)( DRM_OS_IOCTL );
|
||||
#ifdef __linux__
|
||||
extern agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type);
|
||||
extern int DRM(agp_free_memory)(agp_memory *handle);
|
||||
|
|
@ -776,12 +733,6 @@ extern int DRM(agp_unbind_memory)(void *handle);
|
|||
#endif
|
||||
#endif
|
||||
|
||||
/* Stub support (drm_stub.h) */
|
||||
int DRM(stub_register)(const char *name,
|
||||
struct file_operations *fops,
|
||||
drm_device_t *dev);
|
||||
int DRM(stub_unregister)(int minor);
|
||||
|
||||
/* Proc support (drm_proc.h) */
|
||||
extern struct proc_dir_entry *DRM(proc_init)(drm_device_t *dev,
|
||||
int minor,
|
||||
|
|
@ -794,8 +745,6 @@ extern int DRM(proc_cleanup)(int minor,
|
|||
#if __HAVE_SG
|
||||
/* Scatter Gather Support (drm_scatter.h) */
|
||||
extern void DRM(sg_cleanup)(drm_sg_mem_t *entry);
|
||||
extern int DRM(sg_alloc)( DRM_OS_IOCTL );
|
||||
extern int DRM(sg_free)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* ATI PCIGART support (ati_pcigart.h) */
|
||||
|
|
|
|||
|
|
@ -32,63 +32,58 @@
|
|||
#define __NO_VERSION__
|
||||
#include "drmP.h"
|
||||
|
||||
int DRM(irq_busid)(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
int DRM(irq_busid)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_irq_busid_t p;
|
||||
struct pci_dev *dev;
|
||||
|
||||
if (copy_from_user(&p, (drm_irq_busid_t *)arg, sizeof(p)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
dev = pci_find_slot(p.busnum, PCI_DEVFN(p.devnum, p.funcnum));
|
||||
if (dev) p.irq = dev->irq;
|
||||
else p.irq = 0;
|
||||
DRM_DEBUG("%d:%d:%d => IRQ %d\n",
|
||||
p.busnum, p.devnum, p.funcnum, p.irq);
|
||||
if (copy_to_user((drm_irq_busid_t *)arg, &p, sizeof(p)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DRM(getunique)(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
int DRM(getunique)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_unique_t u;
|
||||
|
||||
if (copy_from_user(&u, (drm_unique_t *)arg, sizeof(u)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
if (u.unique_len >= dev->unique_len) {
|
||||
if (copy_to_user(u.unique, dev->unique, dev->unique_len))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
}
|
||||
u.unique_len = dev->unique_len;
|
||||
if (copy_to_user((drm_unique_t *)arg, &u, sizeof(u)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DRM(setunique)(struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
int DRM(setunique)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_unique_t u;
|
||||
|
||||
if (dev->unique_len || dev->unique)
|
||||
return -EBUSY;
|
||||
DRM_OS_RETURN(EBUSY);
|
||||
|
||||
if (copy_from_user(&u, (drm_unique_t *)arg, sizeof(u)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
|
||||
if (!u.unique_len)
|
||||
return -EINVAL;
|
||||
DRM_OS_RETURN(EINVAL);
|
||||
|
||||
dev->unique_len = u.unique_len;
|
||||
dev->unique = DRM(alloc)(u.unique_len + 1, DRM_MEM_DRIVER);
|
||||
if (copy_from_user(dev->unique, u.unique, dev->unique_len))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
dev->unique[dev->unique_len] = '\0';
|
||||
|
||||
dev->devname = DRM(alloc)(strlen(dev->name) + strlen(dev->unique) + 2,
|
||||
|
|
@ -120,11 +115,9 @@ int DRM(setunique)(struct inode *inode, struct file *filp,
|
|||
}
|
||||
|
||||
|
||||
int DRM(getmap)( struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg )
|
||||
int DRM(getmap)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_map_t map;
|
||||
drm_map_list_t *r_list = NULL;
|
||||
struct list_head *list;
|
||||
|
|
@ -132,13 +125,13 @@ int DRM(getmap)( struct inode *inode, struct file *filp,
|
|||
int i;
|
||||
|
||||
if (copy_from_user(&map, (drm_map_t *)arg, sizeof(map)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
idx = map.offset;
|
||||
|
||||
down(&dev->struct_sem);
|
||||
DRM_OS_LOCK;
|
||||
if (idx < 0 || idx >= dev->map_count) {
|
||||
up(&dev->struct_sem);
|
||||
return -EINVAL;
|
||||
DRM_OS_UNLOCK;
|
||||
DRM_OS_RETURN(EINVAL);
|
||||
}
|
||||
|
||||
i = 0;
|
||||
|
|
@ -150,8 +143,8 @@ int DRM(getmap)( struct inode *inode, struct file *filp,
|
|||
i++;
|
||||
}
|
||||
if(!r_list || !r_list->map) {
|
||||
up(&dev->struct_sem);
|
||||
return -EINVAL;
|
||||
DRM_OS_UNLOCK;
|
||||
DRM_OS_RETURN(EINVAL);
|
||||
}
|
||||
|
||||
map.offset = r_list->map->offset;
|
||||
|
|
@ -160,56 +153,53 @@ int DRM(getmap)( struct inode *inode, struct file *filp,
|
|||
map.flags = r_list->map->flags;
|
||||
map.handle = r_list->map->handle;
|
||||
map.mtrr = r_list->map->mtrr;
|
||||
up(&dev->struct_sem);
|
||||
DRM_OS_UNLOCK;
|
||||
|
||||
if (copy_to_user((drm_map_t *)arg, &map, sizeof(map))) return -EFAULT;
|
||||
if (copy_to_user((drm_map_t *)arg, &map, sizeof(map)))
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DRM(getclient)( struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg )
|
||||
int DRM(getclient)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_client_t client;
|
||||
drm_file_t *pt;
|
||||
int idx;
|
||||
int i;
|
||||
|
||||
if (copy_from_user(&client, (drm_client_t *)arg, sizeof(client)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
idx = client.idx;
|
||||
down(&dev->struct_sem);
|
||||
DRM_OS_LOCK;
|
||||
for (i = 0, pt = dev->file_first; i < idx && pt; i++, pt = pt->next)
|
||||
;
|
||||
|
||||
if (!pt) {
|
||||
up(&dev->struct_sem);
|
||||
return -EINVAL;
|
||||
DRM_OS_UNLOCK;
|
||||
DRM_OS_RETURN(EINVAL);
|
||||
}
|
||||
client.auth = pt->authenticated;
|
||||
client.pid = pt->pid;
|
||||
client.uid = pt->uid;
|
||||
client.magic = pt->magic;
|
||||
client.iocs = pt->ioctl_count;
|
||||
up(&dev->struct_sem);
|
||||
DRM_OS_UNLOCK;
|
||||
|
||||
if (copy_to_user((drm_client_t *)arg, &client, sizeof(client)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DRM(getstats)( struct inode *inode, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg )
|
||||
int DRM(getstats)( DRM_OS_IOCTL )
|
||||
{
|
||||
drm_file_t *priv = filp->private_data;
|
||||
drm_device_t *dev = priv->dev;
|
||||
DRM_OS_DEVICE;
|
||||
drm_stats_t stats;
|
||||
int i;
|
||||
|
||||
memset(&stats, 0, sizeof(stats));
|
||||
|
||||
down(&dev->struct_sem);
|
||||
DRM_OS_LOCK;
|
||||
|
||||
for (i = 0; i < dev->counters; i++) {
|
||||
if (dev->types[i] == _DRM_STAT_LOCK)
|
||||
|
|
@ -223,9 +213,9 @@ int DRM(getstats)( struct inode *inode, struct file *filp,
|
|||
|
||||
stats.count = dev->counters;
|
||||
|
||||
up(&dev->struct_sem);
|
||||
DRM_OS_UNLOCK;
|
||||
|
||||
if (copy_to_user((drm_stats_t *)arg, &stats, sizeof(stats)))
|
||||
return -EFAULT;
|
||||
DRM_OS_RETURN(EFAULT);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -269,4 +269,81 @@ do { \
|
|||
#define DRM_OS_COPYFROM(arg1, arg2, arg3) \
|
||||
copy_from_user( arg1, arg2, arg3)
|
||||
|
||||
#define DRM_PROT_IOCTL int
|
||||
/* Internal functions */
|
||||
|
||||
/* drm_drv.h */
|
||||
extern int DRM(ioctl)( DRM_OS_IOCTL );
|
||||
extern int DRM(lock)( DRM_OS_IOCTL );
|
||||
extern int DRM(unlock)( DRM_OS_IOCTL );
|
||||
|
||||
/* Misc. IOCTL support (drm_ioctl.h) */
|
||||
extern int DRM(irq_busid)( DRM_OS_IOCTL );
|
||||
extern int DRM(getunique)( DRM_OS_IOCTL );
|
||||
extern int DRM(setunique)( DRM_OS_IOCTL );
|
||||
extern int DRM(getmap)( DRM_OS_IOCTL );
|
||||
extern int DRM(getclient)( DRM_OS_IOCTL );
|
||||
extern int DRM(getstats)( DRM_OS_IOCTL );
|
||||
|
||||
/* Context IOCTL support (drm_context.h) */
|
||||
extern int DRM(resctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(addctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(modctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(getctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(switchctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(newctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmctx)( DRM_OS_IOCTL );
|
||||
extern int DRM(setsareactx)( DRM_OS_IOCTL );
|
||||
extern int DRM(getsareactx)( DRM_OS_IOCTL );
|
||||
|
||||
/* Drawable IOCTL support (drm_drawable.h) */
|
||||
extern int DRM(adddraw)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmdraw)( DRM_OS_IOCTL );
|
||||
|
||||
/* Authentication IOCTL support (drm_auth.h) */
|
||||
extern int DRM(getmagic)( DRM_OS_IOCTL );
|
||||
extern int DRM(authmagic)( DRM_OS_IOCTL );
|
||||
|
||||
/* Locking IOCTL support (drm_lock.h) */
|
||||
extern int DRM(block)( DRM_OS_IOCTL );
|
||||
extern int DRM(unblock)( DRM_OS_IOCTL );
|
||||
extern int DRM(finish)( DRM_OS_IOCTL );
|
||||
|
||||
/* Buffer management support (drm_bufs.h) */
|
||||
extern int DRM(addmap)( DRM_OS_IOCTL );
|
||||
extern int DRM(rmmap)( DRM_OS_IOCTL );
|
||||
#if __HAVE_DMA
|
||||
extern int DRM(addbufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(infobufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(markbufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(freebufs)( DRM_OS_IOCTL );
|
||||
extern int DRM(mapbufs)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* DMA support (drm_dma.h) */
|
||||
#if __HAVE_DMA_IRQ
|
||||
extern int DRM(control)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* AGP/GART support (drm_agpsupport.h) */
|
||||
#if __REALLY_HAVE_AGP
|
||||
extern int DRM(agp_acquire)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_release)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_enable)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_info)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_alloc)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_free)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_unbind)( DRM_OS_IOCTL );
|
||||
extern int DRM(agp_bind)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
||||
/* Stub support (drm_stub.h) */
|
||||
extern int DRM(stub_register)(const char *name,
|
||||
struct file_operations *fops,
|
||||
drm_device_t *dev);
|
||||
extern int DRM(stub_unregister)(int minor);
|
||||
|
||||
/* Scatter Gather Support (drm_scatter.h) */
|
||||
#if __HAVE_SG
|
||||
extern int DRM(sg_alloc)( DRM_OS_IOCTL );
|
||||
extern int DRM(sg_free)( DRM_OS_IOCTL );
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue