- ret = drmIoctl(bo->drv->fd, DRM_IOCTL_I915_GEM_CREATE, &gem_create);
- if (ret) {
- drv_log("DRM_IOCTL_I915_GEM_CREATE failed (size=%llu)\n", gem_create.size);
- return -errno;
+ struct drm_i915_gem_create_ext_setparam setparam_protected = {
+ .base = { .name = I915_GEM_CREATE_EXT_SETPARAM },
+ .param = protected_param,
+ };
+
+ struct drm_i915_gem_create_ext create_ext = {
+ .size = bo->meta.total_size,
+ .extensions = (uintptr_t)&setparam_protected,
+ };
+
+ ret = drmIoctl(bo->drv->fd, DRM_IOCTL_I915_GEM_CREATE_EXT, &create_ext);
+ if (ret) {
+ drv_log("DRM_IOCTL_I915_GEM_CREATE_EXT failed (size=%llu)\n",
+ create_ext.size);
+ return -errno;
+ }
+
+ gem_handle = create_ext.handle;
+ } else {
+ struct drm_i915_gem_create gem_create = { 0 };
+ gem_create.size = bo->meta.total_size;
+ ret = drmIoctl(bo->drv->fd, DRM_IOCTL_I915_GEM_CREATE, &gem_create);
+ if (ret) {
+ drv_log("DRM_IOCTL_I915_GEM_CREATE failed (size=%llu)\n", gem_create.size);
+ return -errno;
+ }
+
+ gem_handle = gem_create.handle;