STRUCT DRM_I915_GEM_CREATE_EXT_PROTECTED_CONTENT(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… 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 see struct i915_user_extension for 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