STRUCT DRM_I915_GEM_CREATE_EXT_PROTECTED_CONTENT(9)
π struct drm_i915_gem_create_ext_protected_content β NAME
Okay so bestie, welcome to the Kernel API Manual β¨ This page is all about struct drm_i915_gem_create_ext_protected_content (yeah, the header up top literally reads struct drm_i...cted_content(9) because even the manpage was like "girl that name is too long"), and it's the I915_OBJECT_PARAM_PROTECTED_CONTENT extension. That's the whole vibe. π
πΈ SYNOPSIS
struct drm_i915_gem_create_ext_protected_content {
struct i915_user_extension base;
__u32 flags;
};
π¦ Members
baseβ the extension link, bestie. It's the little handshake that chains this extension into the bigger picture. Go seestruct i915_user_extensionfor the deets. πflagsβ reserved for future usage, currently MBZ. As in, don't touch, don't set, leave it alone. π
β¨ Description
Okay so here's the tea β β if this extension is provided, the buffer contents are expected to be protected by PXP encryption, and they require decryption for scan out and processing. Iconic, yes. But π it's only possible on platforms that have PXP enabled. On all other scenarios, using this extension will cause the ioctl to fail and return -ENODEV. Not a vibe, but that's the rules fr fr.
The flags parameter is reserved for future expansion and must currently be set to zero. Zero. Zilch. Nada. π«Ά
Heads up bestie: the buffer contents are considered invalid after a PXP session teardown. Like, gone. Considered invalid. Just so you know. π
And ngl, the encryption is guaranteed to be processed correctly only if the object is submitted with a context created using the I915_CONTEXT_PARAM_PROTECTED_CONTENT flag. Miss that and the guarantee dips. π
This will also enable extra checks at submission time on the validity of the objects involved β so the kernel is doing a whole vibe check on your objects before letting them through. π
π Example: how to create a protected object
Below is an example on how to create a protected object:
struct drm_i915_gem_create_ext_protected_content protected_ext = {
.base = { .name = I915_GEM_CREATE_EXT_PROTECTED_CONTENT },
.flags = 0,
};
struct drm_i915_gem_create_ext create_ext = {
.size = PAGE_SIZE,
.extensions = (uintptr_t)protected_ext,
};
int err = ioctl(fd, DRM_IOCTL_I915_GEM_CREATE_EXT, create_ext);
if (err) ...
See how flags is 0? That's the MBZ thing in action. Slay. β
π SEE ALSO
Grab a snack, this list is long and honestly it ate π:
- Kernel file
./tools/perf/trace/beauty/include/uapi/drm/i915_drm.h - uevents generated by i915 on its device node(9)
- struct
i915_user_extension(9) - enum
drm_i915_gem_engine_class(9) - struct
i915_engine_class_instance(9) - perf_events exposed by i915 through
/sys/bus/event_sources/drivers/i915(9) - struct
drm_i915_getparam(9) drm_i915_getparam_t(9)- struct
drm_i915_gem_mmap_offset(9) - struct
drm_i915_gem_set_domain(9) - struct
drm_i915_gem_exec_fence(9) - struct
drm_i915_gem_execbuffer_ext_timeline_fences(9) - struct
drm_i915_gem_execbuffer2(9) - struct
drm_i915_gem_caching(9) - struct
drm_i915_gem_context_create_ext(9) - struct
drm_i915_gem_context_param(9) - Virtual Engine uAPI(9)
- struct
i915_context_engines_parallel_submit(9) - Context Engine Map uAPI(9)
- struct
drm_i915_gem_context_create_ext_setparam(9) - struct
drm_i915_gem_vm_control(9) - struct
drm_i915_gem_userptr(9) - struct
drm_i915_perf_oa_config(9) - struct
drm_i915_query_item(9) - struct
drm_i915_query(9) - struct
drm_i915_query_topology_info(9) - Engine Discovery uAPI(9)
- struct
drm_i915_engine_info(9) - struct
drm_i915_query_engine_info(9) - struct
drm_i915_query_perf_config(9) - enum
drm_i915_gem_memory_class(9) - struct
drm_i915_gem_memory_class_instance(9) - struct
drm_i915_memory_region_info(9) - struct
drm_i915_query_memory_regions(9) - struct
drm_i915_query_guc_submission_version(9) - GuC HWCONFIG blob uAPI(9)
- struct
drm_i915_gem_create_ext(9) - struct
drm_i915_gem_create_ext_memory_regions(9) - struct
drm_i915_gem_create_ext_set_pat(9)
β¨ That's the whole page bestie, go create some protected objects responsibly β¨
This little cutie came from ./tools/perf/trace/beauty/incl... and it's dated October 2026 β so yeah, mark your calendar, the footer said so, and the title line wrapped it all up as struct drm_i...cted_content(9). Bye bestie, ily, go read the source π«Άπ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms