Exemplo n.º 1
0
int
drm_gem_flink_ioctl(struct drm_device *dev, void *data,
    struct drm_file *file_priv)
{
	struct drm_gem_flink *args;
	struct drm_gem_object *obj;
	int error;

	if (!drm_core_check_feature(dev, DRIVER_GEM))
		return (ENODEV);
	args = data;

	obj = drm_gem_name_ref(&file_priv->object_names, args->handle,
	    (void (*)(void *))drm_gem_object_reference);
	if (obj == NULL)
		return (ENOENT);
	error = drm_gem_name_create(&dev->object_names, obj, &obj->name);
	if (error != 0) {
		if (error == EALREADY)
			error = 0;
		drm_gem_object_unreference_unlocked(obj);
	}
	if (error == 0)
		args->name = obj->name;
	return (error);
}
Exemplo n.º 2
0
int
drm_gem_open_ioctl(struct drm_device *dev, void *data,
                   struct drm_file *file_priv)
{
    struct drm_gem_open *args = data;
    struct drm_gem_object *obj;
    int ret;
    u32 handle;

    if (!(dev->driver->driver_features & DRIVER_GEM))
        return -ENODEV;

    obj = drm_gem_name_ref(&dev->object_names, args->name,
                           (void (*)(void *))drm_gem_object_reference);
    if (!obj)
        return -ENOENT;

    ret = drm_gem_handle_create(file_priv, obj, &handle);
    drm_gem_object_unreference_unlocked(obj);
    if (ret)
        return ret;

    args->handle = handle;
    args->size = obj->size;

    return 0;
}
Exemplo n.º 3
0
int
drm_gem_open_ioctl(struct drm_device *dev, void *data,
    struct drm_file *file_priv)
{
	struct drm_gem_open *args;
	struct drm_gem_object *obj;
	int ret;
	uint32_t handle;

	if (!drm_core_check_feature(dev, DRIVER_GEM))
		return (ENODEV);
	args = data;

	obj = drm_gem_name_ref(&dev->object_names, args->name,
	    (void (*)(void *))drm_gem_object_reference);
	if (obj == NULL)
		return (ENOENT);
	handle = 0;
	ret = drm_gem_handle_create(file_priv, obj, &handle);
	drm_gem_object_unreference_unlocked(obj);
	if (ret != 0)
		return (ret);
	
	args->handle = handle;
	args->size = obj->size;

	return (0);
}
Exemplo n.º 4
0
struct drm_gem_object *
drm_gem_object_lookup(struct drm_device *dev, struct drm_file *file_priv,
    uint32_t handle)
{
	struct drm_gem_object *obj;

	obj = drm_gem_name_ref(&file_priv->object_names, handle,
	    (void (*)(void *))drm_gem_object_reference);
	return (obj);
}
Exemplo n.º 5
0
/** Returns a reference to the object named by the handle. */
struct drm_gem_object *
drm_gem_object_lookup(struct drm_device *dev, struct drm_file *filp,
                      u32 handle)
{
    struct drm_gem_object *obj;

    obj = drm_gem_name_ref(&filp->object_names, handle,
                           (void (*)(void *))drm_gem_object_reference);

    return obj;
}