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); }
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; }
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); }
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); }
/** 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; }