DRM_COPY_FROM_USER_IOCTL(init, (drm_via_dma_init_t *) data, 
DRM_COPY_FROM_USER_IOCTL(init, (drm_via_dma_init_t __user *) data, 
int via_dma_init(DRM_IOCTL_ARGS){	DRM_DEVICE;	drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;	drm_via_dma_init_t init;	int retcode = 0;	DRM_COPY_FROM_USER_IOCTL(init, (drm_via_dma_init_t *) data,				 sizeof(init));	switch (init.func) {	case VIA_INIT_DMA:		if (!capable(CAP_SYS_ADMIN))			retcode = DRM_ERR(EPERM);		else			retcode = via_initialize(dev, dev_priv, &init);		break;	case VIA_CLEANUP_DMA:		if (!capable(CAP_SYS_ADMIN))			retcode = DRM_ERR(EPERM);		else			retcode = via_dma_cleanup(dev);		break;        case VIA_DMA_INITIALIZED:		retcode = (dev_priv->ring.virtual_start != NULL) ? 			0: DRM_ERR( EFAULT );	        break;	default:		retcode = DRM_ERR(EINVAL);		break;	}	return retcode;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/bbaf364103cee15c895e2086723d0ad9ef47ae99/via_dma.c/buggy/drivers/char/drm/via_dma.c