diff options
Diffstat (limited to 'linux-core')
| -rw-r--r-- | linux-core/drm_bo.c | 160 | ||||
| -rw-r--r-- | linux-core/drm_compat.c | 3 | ||||
| -rw-r--r-- | linux-core/drm_drv.c | 12 | ||||
| -rw-r--r-- | linux-core/drm_objects.h | 3 | 
4 files changed, 55 insertions, 123 deletions
diff --git a/linux-core/drm_bo.c b/linux-core/drm_bo.c index f78a6f95..1c7013b3 100644 --- a/linux-core/drm_bo.c +++ b/linux-core/drm_bo.c @@ -2158,89 +2158,11 @@ EXPORT_SYMBOL(drm_bo_driver_init);  int drm_mm_init_ioctl(DRM_IOCTL_ARGS)  {  	DRM_DEVICE; -	struct drm_mm_init_arg arg; -	drm_buffer_manager_t *bm = &dev->bm; -	drm_bo_driver_t *driver = dev->driver->bo_driver; -	int ret; - -	if (!driver) { -		DRM_ERROR("Buffer objects are not supported by this driver\n"); -		return -EINVAL; -	} -	DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg)); -	ret = -EINVAL; -	mutex_lock(&dev->bm.init_mutex); -	mutex_lock(&dev->struct_mutex); -	if (!bm->initialized) { -		DRM_ERROR("DRM memory manager was not initialized.\n"); -		goto out; -	} -	if (arg.mem_type == 0) { -		DRM_ERROR("System memory buffers already initialized.\n"); -		goto out; -	} -	ret = drm_bo_init_mm(dev, arg.mem_type, -			     arg.p_offset, arg.p_size); - -out: -	mutex_unlock(&dev->struct_mutex); -	mutex_unlock(&dev->bm.init_mutex); -	if (ret) -		return ret; - -	DRM_COPY_TO_USER_IOCTL((void __user *)data, arg, sizeof(arg)); -	return 0; -} - -int drm_mm_takedown_ioctl(DRM_IOCTL_ARGS) -{ -	DRM_DEVICE; -	struct drm_mm_type_arg arg; +	int ret = 0; +	drm_mm_init_arg_t arg;  	drm_buffer_manager_t *bm = &dev->bm;  	drm_bo_driver_t *driver = dev->driver->bo_driver; -	int ret; - -	if (!driver) { -		DRM_ERROR("Buffer objects are not supported by this driver\n"); -		return -EINVAL; -	} - -	DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg)); - -	LOCK_TEST_WITH_RETURN(dev, filp); -	mutex_lock(&dev->bm.init_mutex); -	mutex_lock(&dev->struct_mutex); -	ret = -EINVAL; -	if (!bm->initialized) { -		DRM_ERROR("DRM memory manager was not initialized\n"); -		goto out; -	} -	if (arg.mem_type == 0) { -		DRM_ERROR("No takedown for System memory buffers.\n"); -		goto out; -	} -	ret = 0; -	if (drm_bo_clean_mm(dev, arg.mem_type)) { -		DRM_ERROR("Memory manager type %d not clean. " -			  "Delaying takedown\n", arg.mem_type); -	} -out: -	mutex_unlock(&dev->struct_mutex); -	mutex_unlock(&dev->bm.init_mutex); -	if (ret) -		return ret; - -	DRM_COPY_TO_USER_IOCTL((void __user *)data, arg, sizeof(arg)); -	return 0; -} - -int drm_mm_lock_ioctl(DRM_IOCTL_ARGS) -{ -	DRM_DEVICE; -	struct drm_mm_type_arg arg; -	drm_bo_driver_t *driver = dev->driver->bo_driver; -	int ret;  	if (!driver) {  		DRM_ERROR("Buffer objects are not supported by this driver\n"); @@ -2249,37 +2171,59 @@ 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); -	mutex_lock(&dev->bm.init_mutex); -	mutex_lock(&dev->struct_mutex); -	ret = drm_bo_lock_mm(dev, arg.mem_type); -	mutex_unlock(&dev->struct_mutex); -	mutex_unlock(&dev->bm.init_mutex); -	if (ret) -		return ret; - -	DRM_COPY_TO_USER_IOCTL((void __user *)data, arg, sizeof(arg)); -	return 0; -} - -int drm_mm_unlock_ioctl(DRM_IOCTL_ARGS) -{ -	DRM_DEVICE; -	struct drm_mm_type_arg arg; -	drm_bo_driver_t *driver = dev->driver->bo_driver; -	int ret; - -	if (!driver) { -		DRM_ERROR("Buffer objects are not supported by this driver\n"); +	switch (arg.req.op) { +	case mm_init: +		ret = -EINVAL; +		mutex_lock(&dev->bm.init_mutex); +		mutex_lock(&dev->struct_mutex); +		if (!bm->initialized) { +			DRM_ERROR("DRM memory manager was not initialized.\n"); +			break; +		} +		if (arg.req.mem_type == 0) { +			DRM_ERROR +			    ("System memory buffers already initialized.\n"); +			break; +		} +		ret = drm_bo_init_mm(dev, arg.req.mem_type, +				     arg.req.p_offset, arg.req.p_size); +		break; +	case mm_takedown: +		LOCK_TEST_WITH_RETURN(dev, filp); +		mutex_lock(&dev->bm.init_mutex); +		mutex_lock(&dev->struct_mutex); +		ret = -EINVAL; +		if (!bm->initialized) { +			DRM_ERROR("DRM memory manager was not initialized\n"); +			break; +		} +		if (arg.req.mem_type == 0) { +			DRM_ERROR("No takedown for System memory buffers.\n"); +			break; +		} +		ret = 0; +		if (drm_bo_clean_mm(dev, arg.req.mem_type)) { +			DRM_ERROR("Memory manager type %d not clean. " +				  "Delaying takedown\n", arg.req.mem_type); +		} +		break; +	case mm_lock: +		LOCK_TEST_WITH_RETURN(dev, filp); +		mutex_lock(&dev->bm.init_mutex); +		mutex_lock(&dev->struct_mutex); +		ret = drm_bo_lock_mm(dev, arg.req.mem_type); +		break; +	case mm_unlock: +		LOCK_TEST_WITH_RETURN(dev, filp); +		mutex_lock(&dev->bm.init_mutex); +		mutex_lock(&dev->struct_mutex); +		ret = 0; +		break; +	default: +		DRM_ERROR("Function not implemented yet\n");  		return -EINVAL;  	} -	DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg)); -	LOCK_TEST_WITH_RETURN(dev, filp); -	mutex_lock(&dev->bm.init_mutex); -	mutex_lock(&dev->struct_mutex); -	ret = 0; -  	mutex_unlock(&dev->struct_mutex);  	mutex_unlock(&dev->bm.init_mutex);  	if (ret) diff --git a/linux-core/drm_compat.c b/linux-core/drm_compat.c index 867cee85..9ac5658c 100644 --- a/linux-core/drm_compat.c +++ b/linux-core/drm_compat.c @@ -184,7 +184,7 @@ static int drm_pte_is_clear(struct vm_area_struct *vma,  	spin_unlock(&mm->page_table_lock);  	return ret;  } -#if 0 +  static int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,  		  unsigned long pfn)  { @@ -195,7 +195,6 @@ static int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,  	ret = io_remap_pfn_range(vma, addr, pfn, PAGE_SIZE, vma->vm_page_prot);  	return ret;  } -#endif  static struct page *drm_bo_vm_fault(struct vm_area_struct *vma,   				    struct fault_data *data) diff --git a/linux-core/drm_drv.c b/linux-core/drm_drv.c index 43a9858d..8754a8e4 100644 --- a/linux-core/drm_drv.c +++ b/linux-core/drm_drv.c @@ -119,18 +119,10 @@ static drm_ioctl_desc_t drm_ioctls[] = {  	[DRM_IOCTL_NR(DRM_IOCTL_WAIT_VBLANK)] = {drm_wait_vblank, 0},  	[DRM_IOCTL_NR(DRM_IOCTL_FENCE)] = {drm_fence_ioctl, DRM_AUTH},  	[DRM_IOCTL_NR(DRM_IOCTL_BUFOBJ)] = {drm_bo_ioctl, DRM_AUTH}, - -	[DRM_IOCTL_NR(DRM_IOCTL_UPDATE_DRAW)] = {drm_update_drawable_info, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}, - -  	[DRM_IOCTL_NR(DRM_IOCTL_MM_INIT)] = {drm_mm_init_ioctl,   					     DRM_AUTH }, -	[DRM_IOCTL_NR(DRM_IOCTL_MM_TAKEDOWN)] = {drm_mm_takedown_ioctl,  -					     DRM_AUTH }, -	[DRM_IOCTL_NR(DRM_IOCTL_MM_LOCK)] = {drm_mm_lock_ioctl,  -					     DRM_AUTH }, -	[DRM_IOCTL_NR(DRM_IOCTL_MM_UNLOCK)] = {drm_mm_unlock_ioctl,  -					     DRM_AUTH }, + +	[DRM_IOCTL_NR(DRM_IOCTL_UPDATE_DRAW)] = {drm_update_drawable_info, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},  };  #define DRM_CORE_IOCTL_COUNT	ARRAY_SIZE( drm_ioctls ) diff --git a/linux-core/drm_objects.h b/linux-core/drm_objects.h index 7f9c8c37..03ea927e 100644 --- a/linux-core/drm_objects.h +++ b/linux-core/drm_objects.h @@ -430,9 +430,6 @@ typedef struct drm_bo_driver {  extern int drm_bo_ioctl(DRM_IOCTL_ARGS);  extern int drm_mm_init_ioctl(DRM_IOCTL_ARGS); -extern int drm_mm_takedown_ioctl(DRM_IOCTL_ARGS); -extern int drm_mm_lock_ioctl(DRM_IOCTL_ARGS); -extern int drm_mm_unlock_ioctl(DRM_IOCTL_ARGS);  extern int drm_bo_driver_finish(struct drm_device *dev);  extern int drm_bo_driver_init(struct drm_device *dev);  extern int drm_bo_pci_offset(struct drm_device *dev,  | 
